Skip to content

Commit f47f404

Browse files
committed
work
1 parent be8a01b commit f47f404

1 file changed

Lines changed: 228 additions & 72 deletions

File tree

test/lit/passes/flatten-gc.wast

Lines changed: 228 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,75 @@
99
;; CHECK: (type $B (sub $A (struct)))
1010
(type $B (sub $A (struct)))
1111

12+
;; CHECK: (func $br_on_null (type $2) (param $x (ref null $A)) (result (ref $A))
13+
;; CHECK-NEXT: (local $1 (ref null $A))
14+
;; CHECK-NEXT: (local $2 (ref null $A))
15+
;; CHECK-NEXT: (local $3 (ref null $A))
16+
;; CHECK-NEXT: (local $4 i32)
17+
;; CHECK-NEXT: (local $5 (ref null $A))
18+
;; CHECK-NEXT: (local $6 (ref $A))
19+
;; CHECK-NEXT: (local $7 (ref $A))
20+
;; CHECK-NEXT: (local $8 (ref $A))
21+
;; CHECK-NEXT: (local $9 (ref null $A))
22+
;; CHECK-NEXT: (local $10 (ref $A))
23+
;; CHECK-NEXT: (block $non-null
24+
;; CHECK-NEXT: (block $block
25+
;; CHECK-NEXT: (block
26+
;; CHECK-NEXT: (block
27+
;; CHECK-NEXT: (local.set $2
28+
;; CHECK-NEXT: (local.get $x)
29+
;; CHECK-NEXT: )
30+
;; CHECK-NEXT: (local.set $1
31+
;; CHECK-NEXT: (local.get $2)
32+
;; CHECK-NEXT: )
33+
;; CHECK-NEXT: (local.set $3
34+
;; CHECK-NEXT: (local.get $1)
35+
;; CHECK-NEXT: )
36+
;; CHECK-NEXT: (local.set $4
37+
;; CHECK-NEXT: (ref.is_null
38+
;; CHECK-NEXT: (local.get $3)
39+
;; CHECK-NEXT: )
40+
;; CHECK-NEXT: )
41+
;; CHECK-NEXT: (if
42+
;; CHECK-NEXT: (local.get $4)
43+
;; CHECK-NEXT: (then
44+
;; CHECK-NEXT: (br $block)
45+
;; CHECK-NEXT: (unreachable)
46+
;; CHECK-NEXT: )
47+
;; CHECK-NEXT: )
48+
;; CHECK-NEXT: )
49+
;; CHECK-NEXT: (local.set $5
50+
;; CHECK-NEXT: (local.get $1)
51+
;; CHECK-NEXT: )
52+
;; CHECK-NEXT: (local.set $6
53+
;; CHECK-NEXT: (ref.as_non_null
54+
;; CHECK-NEXT: (local.get $5)
55+
;; CHECK-NEXT: )
56+
;; CHECK-NEXT: )
57+
;; CHECK-NEXT: (local.set $7
58+
;; CHECK-NEXT: (local.get $6)
59+
;; CHECK-NEXT: )
60+
;; CHECK-NEXT: )
61+
;; CHECK-NEXT: (local.set $8
62+
;; CHECK-NEXT: (local.get $7)
63+
;; CHECK-NEXT: )
64+
;; CHECK-NEXT: (return
65+
;; CHECK-NEXT: (local.get $8)
66+
;; CHECK-NEXT: )
67+
;; CHECK-NEXT: (unreachable)
68+
;; CHECK-NEXT: )
69+
;; CHECK-NEXT: (unreachable)
70+
;; CHECK-NEXT: (unreachable)
71+
;; CHECK-NEXT: )
72+
;; CHECK-NEXT: (local.set $10
73+
;; CHECK-NEXT: (ref.as_non_null
74+
;; CHECK-NEXT: (local.get $9)
75+
;; CHECK-NEXT: )
76+
;; CHECK-NEXT: )
77+
;; CHECK-NEXT: (return
78+
;; CHECK-NEXT: (local.get $10)
79+
;; CHECK-NEXT: )
80+
;; CHECK-NEXT: )
1281
(func $br_on_null (param $x (ref null $A)) (result (ref $A))
1382
(block $non-null (result (ref $A))
1483
(block $block
@@ -27,40 +96,61 @@
2796
;; CHECK-NEXT: (local $2 (ref null $A))
2897
;; CHECK-NEXT: (local $3 (ref null $A))
2998
;; CHECK-NEXT: (local $4 i32)
30-
;; CHECK-NEXT: (local $5 (ref $A))
99+
;; CHECK-NEXT: (local $5 i32)
100+
;; CHECK-NEXT: (local $6 (ref null $A))
101+
;; CHECK-NEXT: (local $7 (ref $A))
102+
;; CHECK-NEXT: (local $8 (ref null $A))
103+
;; CHECK-NEXT: (local $9 (ref $A))
31104
;; CHECK-NEXT: (block $block
32-
;; CHECK-NEXT: (local.set $1
33-
;; CHECK-NEXT: (local.get $x)
34-
;; CHECK-NEXT: )
35-
;; CHECK-NEXT: (local.set $2
36-
;; CHECK-NEXT: (local.get $1)
37-
;; CHECK-NEXT: )
38-
;; CHECK-NEXT: (local.set $4
39-
;; CHECK-NEXT: (ref.is_null
105+
;; CHECK-NEXT: (block
106+
;; CHECK-NEXT: (local.set $2
107+
;; CHECK-NEXT: (local.get $x)
108+
;; CHECK-NEXT: )
109+
;; CHECK-NEXT: (local.set $1
40110
;; CHECK-NEXT: (local.get $2)
41111
;; CHECK-NEXT: )
42-
;; CHECK-NEXT: )
43-
;; CHECK-NEXT: (if
44-
;; CHECK-NEXT: (i32.eqz
45-
;; CHECK-NEXT: (local.get $4)
112+
;; CHECK-NEXT: (local.set $3
113+
;; CHECK-NEXT: (local.get $1)
46114
;; CHECK-NEXT: )
47-
;; CHECK-NEXT: (then
48-
;; CHECK-NEXT: (local.set $3
49-
;; CHECK-NEXT: (local.get $2)
115+
;; CHECK-NEXT: (local.set $4
116+
;; CHECK-NEXT: (ref.is_null
117+
;; CHECK-NEXT: (local.get $3)
118+
;; CHECK-NEXT: )
119+
;; CHECK-NEXT: )
120+
;; CHECK-NEXT: (local.set $5
121+
;; CHECK-NEXT: (i32.eqz
122+
;; CHECK-NEXT: (local.get $4)
123+
;; CHECK-NEXT: )
124+
;; CHECK-NEXT: )
125+
;; CHECK-NEXT: (if
126+
;; CHECK-NEXT: (local.get $5)
127+
;; CHECK-NEXT: (then
128+
;; CHECK-NEXT: (local.set $6
129+
;; CHECK-NEXT: (local.get $1)
130+
;; CHECK-NEXT: )
131+
;; CHECK-NEXT: (local.set $7
132+
;; CHECK-NEXT: (ref.as_non_null
133+
;; CHECK-NEXT: (local.get $6)
134+
;; CHECK-NEXT: )
135+
;; CHECK-NEXT: )
136+
;; CHECK-NEXT: (local.set $8
137+
;; CHECK-NEXT: (local.get $7)
138+
;; CHECK-NEXT: )
139+
;; CHECK-NEXT: (br $block)
140+
;; CHECK-NEXT: (unreachable)
50141
;; CHECK-NEXT: )
51-
;; CHECK-NEXT: (br $block)
52142
;; CHECK-NEXT: )
53143
;; CHECK-NEXT: )
54144
;; CHECK-NEXT: (unreachable)
55145
;; CHECK-NEXT: (unreachable)
56146
;; CHECK-NEXT: )
57-
;; CHECK-NEXT: (local.set $5
147+
;; CHECK-NEXT: (local.set $9
58148
;; CHECK-NEXT: (ref.as_non_null
59-
;; CHECK-NEXT: (local.get $3)
149+
;; CHECK-NEXT: (local.get $8)
60150
;; CHECK-NEXT: )
61151
;; CHECK-NEXT: )
62152
;; CHECK-NEXT: (return
63-
;; CHECK-NEXT: (local.get $5)
153+
;; CHECK-NEXT: (local.get $9)
64154
;; CHECK-NEXT: )
65155
;; CHECK-NEXT: )
66156
(func $br_on_non_null (param $x (ref null $A)) (result (ref $A))
@@ -75,45 +165,74 @@
75165
;; CHECK: (func $br_on_cast (type $3) (param $x (ref $A)) (result (ref $B))
76166
;; CHECK-NEXT: (local $1 (ref $A))
77167
;; CHECK-NEXT: (local $2 (ref $A))
78-
;; CHECK-NEXT: (local $3 (ref null $B))
79-
;; CHECK-NEXT: (local $4 (ref $A))
80-
;; CHECK-NEXT: (local $5 (ref $B))
168+
;; CHECK-NEXT: (local $3 (ref $A))
169+
;; CHECK-NEXT: (local $4 i32)
170+
;; CHECK-NEXT: (local $5 (ref $A))
171+
;; CHECK-NEXT: (local $6 (ref $B))
172+
;; CHECK-NEXT: (local $7 (ref null $B))
173+
;; CHECK-NEXT: (local $8 (ref $A))
174+
;; CHECK-NEXT: (local $9 (ref $A))
175+
;; CHECK-NEXT: (local $10 (ref $A))
176+
;; CHECK-NEXT: (local $11 (ref $B))
81177
;; CHECK-NEXT: (block $block
82-
;; CHECK-NEXT: (local.set $1
83-
;; CHECK-NEXT: (local.get $x)
84-
;; CHECK-NEXT: )
85-
;; CHECK-NEXT: (local.set $2
86-
;; CHECK-NEXT: (local.get $1)
87-
;; CHECK-NEXT: )
88-
;; CHECK-NEXT: (if
89-
;; CHECK-NEXT: (ref.test (ref $B)
90-
;; CHECK-NEXT: (local.get $2)
91-
;; CHECK-NEXT: )
92-
;; CHECK-NEXT: (then
178+
;; CHECK-NEXT: (block
179+
;; CHECK-NEXT: (block
180+
;; CHECK-NEXT: (local.set $2
181+
;; CHECK-NEXT: (local.get $x)
182+
;; CHECK-NEXT: )
183+
;; CHECK-NEXT: (local.set $1
184+
;; CHECK-NEXT: (local.get $2)
185+
;; CHECK-NEXT: )
93186
;; CHECK-NEXT: (local.set $3
94-
;; CHECK-NEXT: (ref.cast (ref $B)
95-
;; CHECK-NEXT: (local.get $2)
187+
;; CHECK-NEXT: (local.get $1)
188+
;; CHECK-NEXT: )
189+
;; CHECK-NEXT: (local.set $4
190+
;; CHECK-NEXT: (ref.test (ref $B)
191+
;; CHECK-NEXT: (local.get $3)
192+
;; CHECK-NEXT: )
193+
;; CHECK-NEXT: )
194+
;; CHECK-NEXT: (if
195+
;; CHECK-NEXT: (local.get $4)
196+
;; CHECK-NEXT: (then
197+
;; CHECK-NEXT: (local.set $5
198+
;; CHECK-NEXT: (local.get $1)
199+
;; CHECK-NEXT: )
200+
;; CHECK-NEXT: (local.set $6
201+
;; CHECK-NEXT: (ref.cast (ref $B)
202+
;; CHECK-NEXT: (local.get $5)
203+
;; CHECK-NEXT: )
204+
;; CHECK-NEXT: )
205+
;; CHECK-NEXT: (local.set $7
206+
;; CHECK-NEXT: (local.get $6)
207+
;; CHECK-NEXT: )
208+
;; CHECK-NEXT: (br $block)
209+
;; CHECK-NEXT: (unreachable)
96210
;; CHECK-NEXT: )
97211
;; CHECK-NEXT: )
98-
;; CHECK-NEXT: (br $block)
212+
;; CHECK-NEXT: )
213+
;; CHECK-NEXT: (local.set $8
214+
;; CHECK-NEXT: (local.get $1)
215+
;; CHECK-NEXT: )
216+
;; CHECK-NEXT: (local.set $9
217+
;; CHECK-NEXT: (local.get $8)
99218
;; CHECK-NEXT: )
100219
;; CHECK-NEXT: )
101-
;; CHECK-NEXT: (local.set $4
102-
;; CHECK-NEXT: (local.get $2)
220+
;; CHECK-NEXT: (local.set $10
221+
;; CHECK-NEXT: (local.get $9)
103222
;; CHECK-NEXT: )
104223
;; CHECK-NEXT: (drop
105-
;; CHECK-NEXT: (local.get $4)
224+
;; CHECK-NEXT: (local.get $10)
106225
;; CHECK-NEXT: )
107226
;; CHECK-NEXT: (unreachable)
108227
;; CHECK-NEXT: (unreachable)
109228
;; CHECK-NEXT: )
110-
;; CHECK-NEXT: (local.set $5
229+
;; CHECK-NEXT: (local.set $11
111230
;; CHECK-NEXT: (ref.as_non_null
112-
;; CHECK-NEXT: (local.get $3)
231+
;; CHECK-NEXT: (local.get $7)
113232
;; CHECK-NEXT: )
114233
;; CHECK-NEXT: )
115234
;; CHECK-NEXT: (return
116-
;; CHECK-NEXT: (local.get $5)
235+
;; CHECK-NEXT: (local.get $11)
117236
;; CHECK-NEXT: )
118237
;; CHECK-NEXT: )
119238
(func $br_on_cast (param $x (ref $A)) (result (ref $B))
@@ -128,58 +247,95 @@
128247
;; CHECK: (func $br_on_cast_fail (type $4) (param $x (ref $A)) (result (ref null $B))
129248
;; CHECK-NEXT: (local $1 (ref $A))
130249
;; CHECK-NEXT: (local $2 (ref $A))
131-
;; CHECK-NEXT: (local $3 anyref)
132-
;; CHECK-NEXT: (local $4 (ref $B))
133-
;; CHECK-NEXT: (local $5 anyref)
134-
;; CHECK-NEXT: (local $6 (ref null $B))
135-
;; CHECK-NEXT: (local $7 (ref null $B))
250+
;; CHECK-NEXT: (local $3 (ref $A))
251+
;; CHECK-NEXT: (local $4 i32)
252+
;; CHECK-NEXT: (local $5 i32)
253+
;; CHECK-NEXT: (local $6 (ref $A))
254+
;; CHECK-NEXT: (local $7 anyref)
255+
;; CHECK-NEXT: (local $8 (ref $A))
256+
;; CHECK-NEXT: (local $9 (ref $A))
257+
;; CHECK-NEXT: (local $10 (ref $B))
258+
;; CHECK-NEXT: (local $11 (ref $B))
259+
;; CHECK-NEXT: (local $12 (ref $B))
260+
;; CHECK-NEXT: (local $13 anyref)
261+
;; CHECK-NEXT: (local $14 (ref null $B))
262+
;; CHECK-NEXT: (local $15 (ref null $B))
136263
;; CHECK-NEXT: (block
137264
;; CHECK-NEXT: (block $block
138-
;; CHECK-NEXT: (local.set $1
139-
;; CHECK-NEXT: (local.get $x)
140-
;; CHECK-NEXT: )
141-
;; CHECK-NEXT: (local.set $2
142-
;; CHECK-NEXT: (local.get $1)
143-
;; CHECK-NEXT: )
144-
;; CHECK-NEXT: (if
145-
;; CHECK-NEXT: (i32.eqz
146-
;; CHECK-NEXT: (ref.test (ref $B)
265+
;; CHECK-NEXT: (block
266+
;; CHECK-NEXT: (block
267+
;; CHECK-NEXT: (local.set $2
268+
;; CHECK-NEXT: (local.get $x)
269+
;; CHECK-NEXT: )
270+
;; CHECK-NEXT: (local.set $1
147271
;; CHECK-NEXT: (local.get $2)
148272
;; CHECK-NEXT: )
149-
;; CHECK-NEXT: )
150-
;; CHECK-NEXT: (then
151273
;; CHECK-NEXT: (local.set $3
152-
;; CHECK-NEXT: (local.get $2)
274+
;; CHECK-NEXT: (local.get $1)
275+
;; CHECK-NEXT: )
276+
;; CHECK-NEXT: (local.set $4
277+
;; CHECK-NEXT: (ref.test (ref $B)
278+
;; CHECK-NEXT: (local.get $3)
279+
;; CHECK-NEXT: )
280+
;; CHECK-NEXT: )
281+
;; CHECK-NEXT: (local.set $5
282+
;; CHECK-NEXT: (i32.eqz
283+
;; CHECK-NEXT: (local.get $4)
284+
;; CHECK-NEXT: )
285+
;; CHECK-NEXT: )
286+
;; CHECK-NEXT: (if
287+
;; CHECK-NEXT: (local.get $5)
288+
;; CHECK-NEXT: (then
289+
;; CHECK-NEXT: (local.set $6
290+
;; CHECK-NEXT: (local.get $1)
291+
;; CHECK-NEXT: )
292+
;; CHECK-NEXT: (local.set $7
293+
;; CHECK-NEXT: (local.get $6)
294+
;; CHECK-NEXT: )
295+
;; CHECK-NEXT: (local.set $8
296+
;; CHECK-NEXT: (local.get $6)
297+
;; CHECK-NEXT: )
298+
;; CHECK-NEXT: (br $block)
299+
;; CHECK-NEXT: (unreachable)
300+
;; CHECK-NEXT: )
153301
;; CHECK-NEXT: )
154-
;; CHECK-NEXT: (br $block)
155302
;; CHECK-NEXT: )
156-
;; CHECK-NEXT: )
157-
;; CHECK-NEXT: (local.set $4
158-
;; CHECK-NEXT: (ref.cast (ref $B)
159-
;; CHECK-NEXT: (local.get $2)
303+
;; CHECK-NEXT: (local.set $9
304+
;; CHECK-NEXT: (local.get $1)
305+
;; CHECK-NEXT: )
306+
;; CHECK-NEXT: (local.set $10
307+
;; CHECK-NEXT: (ref.cast (ref $B)
308+
;; CHECK-NEXT: (local.get $9)
309+
;; CHECK-NEXT: )
310+
;; CHECK-NEXT: )
311+
;; CHECK-NEXT: (local.set $11
312+
;; CHECK-NEXT: (local.get $10)
160313
;; CHECK-NEXT: )
161314
;; CHECK-NEXT: )
315+
;; CHECK-NEXT: (local.set $12
316+
;; CHECK-NEXT: (local.get $11)
317+
;; CHECK-NEXT: )
162318
;; CHECK-NEXT: (return
163-
;; CHECK-NEXT: (local.get $4)
319+
;; CHECK-NEXT: (local.get $12)
164320
;; CHECK-NEXT: )
165321
;; CHECK-NEXT: (unreachable)
166322
;; CHECK-NEXT: (unreachable)
167323
;; CHECK-NEXT: (unreachable)
168324
;; CHECK-NEXT: )
169-
;; CHECK-NEXT: (local.set $5
170-
;; CHECK-NEXT: (local.get $3)
325+
;; CHECK-NEXT: (local.set $13
326+
;; CHECK-NEXT: (local.get $7)
171327
;; CHECK-NEXT: )
172328
;; CHECK-NEXT: (drop
173-
;; CHECK-NEXT: (local.get $5)
329+
;; CHECK-NEXT: (local.get $13)
174330
;; CHECK-NEXT: )
175331
;; CHECK-NEXT: (unreachable)
176332
;; CHECK-NEXT: (unreachable)
177333
;; CHECK-NEXT: )
178-
;; CHECK-NEXT: (local.set $7
179-
;; CHECK-NEXT: (local.get $6)
334+
;; CHECK-NEXT: (local.set $15
335+
;; CHECK-NEXT: (local.get $14)
180336
;; CHECK-NEXT: )
181337
;; CHECK-NEXT: (return
182-
;; CHECK-NEXT: (local.get $7)
338+
;; CHECK-NEXT: (local.get $15)
183339
;; CHECK-NEXT: )
184340
;; CHECK-NEXT: )
185341
(func $br_on_cast_fail (param $x (ref $A)) (result (ref null $B))

0 commit comments

Comments
 (0)