|
1 | 1 | ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
2 | | -;; RUN: foreach %s %t wasm-opt -all --closed-world --generate-global-effects --simplify-locals -S -o - | filecheck %s |
| 2 | +;; RUN: foreach %s %t wasm-opt --enable-gc --enable-reference-types --closed-world --generate-global-effects --simplify-locals -S -o - | filecheck %s |
3 | 3 |
|
4 | 4 | ;; Tests for aggregating effects from indirect calls in GlobalEffects when |
5 | 5 | ;; --closed-world is true. Continued from global-effects-closed-world.wast. |
6 | 6 |
|
7 | 7 | (module |
8 | | - ;; CHECK: (type $indirect-type (sub (func (param i32)))) |
9 | | - (type $indirect-type (sub (func (param i32)))) |
10 | | - ;; CHECK: (type $1 (func (param (ref $indirect-type)))) |
| 8 | + ;; CHECK: (type $indirect-type-super (sub (func (param i32)))) |
| 9 | + (type $indirect-type-super (sub (func (param i32)))) |
11 | 10 |
|
12 | | - ;; CHECK: (type $indirect-type-sub (sub $indirect-type (func (param i32)))) |
13 | | - (type $indirect-type-sub (sub $indirect-type (func (param i32)))) |
| 11 | + ;; CHECK: (type $1 (func (param (ref $indirect-type-super)))) |
| 12 | + |
| 13 | + ;; CHECK: (type $indirect-type-sub (sub $indirect-type-super (func (param i32)))) |
| 14 | + (type $indirect-type-sub (sub $indirect-type-super (func (param i32)))) |
14 | 15 |
|
15 | 16 | ;; CHECK: (global $g1 (mut i32) (i32.const 0)) |
16 | 17 | (global $g1 (mut i32) (i32.const 0)) |
|
23 | 24 |
|
24 | 25 | ;; CHECK: (export "impl2" (func $impl2)) |
25 | 26 |
|
26 | | - ;; CHECK: (func $impl1 (type $indirect-type) (param $i32 i32) |
| 27 | + ;; CHECK: (func $impl1 (type $indirect-type-super) (param $i32 i32) |
27 | 28 | ;; CHECK-NEXT: (global.set $g1 |
28 | 29 | ;; CHECK-NEXT: (local.get $i32) |
29 | 30 | ;; CHECK-NEXT: ) |
30 | 31 | ;; CHECK-NEXT: ) |
31 | | - (func $impl1 (export "impl1") (type $indirect-type) (param $i32 i32) |
| 32 | + (func $impl1 (export "impl1") (type $indirect-type-super) (param $i32 i32) |
32 | 33 | (global.set $g1 (local.get $i32)) |
33 | 34 | ) |
34 | 35 |
|
|
41 | 42 | (global.set $g2 (local.get $i32)) |
42 | 43 | ) |
43 | 44 |
|
44 | | - ;; CHECK: (func $caller (type $1) (param $ref (ref $indirect-type)) |
45 | | - ;; CHECK-NEXT: (call_ref $indirect-type |
| 45 | + ;; CHECK: (func $caller (type $1) (param $ref (ref $indirect-type-super)) |
| 46 | + ;; CHECK-NEXT: (call_ref $indirect-type-super |
46 | 47 | ;; CHECK-NEXT: (i32.const 1) |
47 | 48 | ;; CHECK-NEXT: (local.get $ref) |
48 | 49 | ;; CHECK-NEXT: ) |
49 | 50 | ;; CHECK-NEXT: ) |
50 | | - (func $caller (param $ref (ref $indirect-type)) |
51 | | - ;; This inherits effects from $impl1 and $impl2, so may mutate $g1 and $g2. |
52 | | - (call_ref $indirect-type (i32.const 1) (local.get $ref)) |
| 51 | + (func $caller (param $ref (ref $indirect-type-super)) |
| 52 | + (call_ref $indirect-type-super (i32.const 1) (local.get $ref)) |
53 | 53 | ) |
54 | 54 |
|
55 | | - ;; CHECK: (func $merges-multiple-effects (type $1) (param $ref (ref $indirect-type)) |
| 55 | + ;; CHECK: (func $test-merge (type $1) (param $ref (ref $indirect-type-super)) |
56 | 56 | ;; CHECK-NEXT: (local $x i32) |
57 | 57 | ;; CHECK-NEXT: (local $y i32) |
58 | 58 | ;; CHECK-NEXT: (local $z i32) |
|
62 | 62 | ;; CHECK-NEXT: (local.set $y |
63 | 63 | ;; CHECK-NEXT: (global.get $g2) |
64 | 64 | ;; CHECK-NEXT: ) |
65 | | - ;; CHECK-NEXT: (local.set $z |
66 | | - ;; CHECK-NEXT: (global.get $g3) |
67 | | - ;; CHECK-NEXT: ) |
| 65 | + ;; CHECK-NEXT: (nop) |
68 | 66 | ;; CHECK-NEXT: (call $caller |
69 | 67 | ;; CHECK-NEXT: (local.get $ref) |
70 | 68 | ;; CHECK-NEXT: ) |
|
75 | 73 | ;; CHECK-NEXT: (local.get $y) |
76 | 74 | ;; CHECK-NEXT: ) |
77 | 75 | ;; CHECK-NEXT: (drop |
78 | | - ;; CHECK-NEXT: (local.get $z) |
| 76 | + ;; CHECK-NEXT: (global.get $g3) |
79 | 77 | ;; CHECK-NEXT: ) |
80 | 78 | ;; CHECK-NEXT: ) |
81 | | - (func $merges-multiple-effects (param $ref (ref $indirect-type)) |
| 79 | + (func $test-merge (param $ref (ref $indirect-type-super)) |
82 | 80 | (local $x i32) |
83 | 81 | (local $y i32) |
84 | 82 | (local $z i32) |
|
0 commit comments