|
5 | 5 | ;; CHECK: (type $maybe-has-effects (func (param i32 i32))) |
6 | 6 | (type $maybe-has-effects (func (param i32 i32))) |
7 | 7 |
|
| 8 | + ;; CHECK: (type $only-has-effects-in-non-exported-function (func (param f32 f32))) |
| 9 | + |
8 | 10 | ;; CHECK: (type $nopType (func (param i32))) |
9 | 11 | (type $nopType (func (param i32))) |
10 | 12 |
|
|
25 | 27 | ;; CHECK: (type $func-with-super-param (sub $func-with-sub-param (func (param (ref $super))))) |
26 | 28 | (type $func-with-super-param (sub $func-with-sub-param (func (param (ref $super))))) |
27 | 29 |
|
| 30 | + (type $only-has-effects-in-non-exported-function (func (param f32 f32))) |
| 31 | + |
28 | 32 | (table 10 funcref) |
29 | 33 |
|
30 | 34 | ;; CHECK: (global $g (mut i32) (i32.const 0)) |
|
51 | 55 | (nop) |
52 | 56 | ) |
53 | 57 |
|
54 | | - ;; CHECK: (func $calls-nop-via-ref (type $6) (param $ref (ref $nopType)) |
| 58 | + ;; CHECK: (func $calls-nop-via-ref (type $7) (param $ref (ref $nopType)) |
55 | 59 | ;; CHECK-NEXT: (call_ref $nopType |
56 | 60 | ;; CHECK-NEXT: (i32.const 1) |
57 | 61 | ;; CHECK-NEXT: (local.get $ref) |
|
65 | 69 | (call_ref $nopType (i32.const 1) (local.get $ref)) |
66 | 70 | ) |
67 | 71 |
|
68 | | - ;; CHECK: (func $f (type $6) (param $ref (ref $nopType)) |
| 72 | + ;; CHECK: (func $f (type $7) (param $ref (ref $nopType)) |
69 | 73 | ;; CHECK-NEXT: (nop) |
70 | 74 | ;; CHECK-NEXT: ) |
71 | 75 | (func $f (param $ref (ref $nopType)) |
|
74 | 78 | (call $calls-nop-via-ref (local.get $ref)) |
75 | 79 | ) |
76 | 80 |
|
77 | | - ;; CHECK: (func $calls-effectful-function-via-ref (type $7) (param $ref (ref $maybe-has-effects)) |
| 81 | + ;; CHECK: (func $calls-effectful-function-via-ref (type $8) (param $ref (ref $maybe-has-effects)) |
78 | 82 | ;; CHECK-NEXT: (call_ref $maybe-has-effects |
79 | 83 | ;; CHECK-NEXT: (i32.const 1) |
80 | 84 | ;; CHECK-NEXT: (i32.const 2) |
|
85 | 89 | (call_ref $maybe-has-effects (i32.const 1) (i32.const 2) (local.get $ref)) |
86 | 90 | ) |
87 | 91 |
|
88 | | - ;; CHECK: (func $g (type $7) (param $ref (ref $maybe-has-effects)) |
| 92 | + ;; CHECK: (func $g (type $8) (param $ref (ref $maybe-has-effects)) |
89 | 93 | ;; CHECK-NEXT: (call $calls-effectful-function-via-ref |
90 | 94 | ;; CHECK-NEXT: (local.get $ref) |
91 | 95 | ;; CHECK-NEXT: ) |
|
96 | 100 | (call $calls-effectful-function-via-ref (local.get $ref)) |
97 | 101 | ) |
98 | 102 |
|
99 | | - ;; CHECK: (func $calls-uninhabited (type $8) (param $ref (ref $uninhabited)) |
| 103 | + ;; CHECK: (func $calls-uninhabited (type $9) (param $ref (ref $uninhabited)) |
100 | 104 | ;; CHECK-NEXT: (call_ref $uninhabited |
101 | 105 | ;; CHECK-NEXT: (f32.const 0) |
102 | 106 | ;; CHECK-NEXT: (local.get $ref) |
|
106 | 110 | (call_ref $uninhabited (f32.const 0) (local.get $ref)) |
107 | 111 | ) |
108 | 112 |
|
109 | | - ;; CHECK: (func $h (type $8) (param $ref (ref $uninhabited)) |
| 113 | + ;; CHECK: (func $h (type $9) (param $ref (ref $uninhabited)) |
110 | 114 | ;; CHECK-NEXT: (nop) |
111 | 115 | ;; CHECK-NEXT: ) |
112 | 116 | (func $h (param $ref (ref $uninhabited)) |
|
129 | 133 | (unreachable) |
130 | 134 | ) |
131 | 135 |
|
132 | | - ;; CHECK: (func $calls-ref-with-subtype (type $9) (param $func (ref $func-with-sub-param)) (param $sub (ref $sub)) |
| 136 | + ;; CHECK: (func $calls-ref-with-subtype (type $10) (param $func (ref $func-with-sub-param)) (param $sub (ref $sub)) |
133 | 137 | ;; CHECK-NEXT: (call_ref $func-with-sub-param |
134 | 138 | ;; CHECK-NEXT: (local.get $sub) |
135 | 139 | ;; CHECK-NEXT: (local.get $func) |
|
139 | 143 | (call_ref $func-with-sub-param (local.get $sub) (local.get $func)) |
140 | 144 | ) |
141 | 145 |
|
142 | | - ;; CHECK: (func $asdf (type $9) (param $func (ref $func-with-sub-param)) (param $sub (ref $sub)) |
| 146 | + ;; CHECK: (func $asdf (type $10) (param $func (ref $func-with-sub-param)) (param $sub (ref $sub)) |
143 | 147 | ;; CHECK-NEXT: (call $calls-ref-with-subtype |
144 | 148 | ;; CHECK-NEXT: (local.get $func) |
145 | 149 | ;; CHECK-NEXT: (local.get $sub) |
|
154 | 158 | ;; include the unreachable effect and we can't optimize out this call. |
155 | 159 | (call $calls-ref-with-subtype (local.get $func) (local.get $sub)) |
156 | 160 | ) |
| 161 | + |
| 162 | + ;; CHECK: (func $no-effects (type $only-has-effects-in-non-exported-function) (param $0 f32) (param $1 f32) |
| 163 | + ;; CHECK-NEXT: (nop) |
| 164 | + ;; CHECK-NEXT: ) |
| 165 | + (func $no-effects (type $only-has-effects-in-non-exported-function) (param f32 f32) |
| 166 | + ) |
| 167 | + |
| 168 | + ;; CHECK: (func $has-effects-but-not-exported (type $only-has-effects-in-non-exported-function) (param $0 f32) (param $1 f32) |
| 169 | + ;; CHECK-NEXT: (unreachable) |
| 170 | + ;; CHECK-NEXT: ) |
| 171 | + (func $has-effects-but-not-exported (type $only-has-effects-in-non-exported-function) (param f32 f32) |
| 172 | + (unreachable) |
| 173 | + ) |
| 174 | + |
| 175 | + ;; CHECK: (func $calls-type-with-effects-but-not-addressable (type $11) (param $ref (ref $only-has-effects-in-non-exported-function)) |
| 176 | + ;; CHECK-NEXT: (call_ref $only-has-effects-in-non-exported-function |
| 177 | + ;; CHECK-NEXT: (f32.const 0) |
| 178 | + ;; CHECK-NEXT: (f32.const 0) |
| 179 | + ;; CHECK-NEXT: (local.get $ref) |
| 180 | + ;; CHECK-NEXT: ) |
| 181 | + ;; CHECK-NEXT: ) |
| 182 | + (func $calls-type-with-effects-but-not-addressable (param $ref (ref $only-has-effects-in-non-exported-function)) |
| 183 | + (call_ref $only-has-effects-in-non-exported-function (f32.const 0) (f32.const 0) (local.get $ref)) |
| 184 | + ) |
| 185 | + |
| 186 | + ;; CHECK: (func $i (type $11) (param $ref (ref $only-has-effects-in-non-exported-function)) |
| 187 | + ;; CHECK-NEXT: (nop) |
| 188 | + ;; CHECK-NEXT: ) |
| 189 | + (func $i (param $ref (ref $only-has-effects-in-non-exported-function)) |
| 190 | + (call $calls-type-with-effects-but-not-addressable (local.get $ref)) |
| 191 | + ) |
157 | 192 | ) |
0 commit comments