xref: /llvm-project/llvm/test/CodeGen/WebAssembly/vararg-frame.ll (revision 8516f54e6a984a79d1a988ec66a414b5cfbd7ec7)
1*8516f54eSJon Chesterfield; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*8516f54eSJon Chesterfield; RUN: llc < %s -verify-machineinstrs  | FileCheck %s
3*8516f54eSJon Chesterfield; REQUIRES: webassembly-registered-target
4*8516f54eSJon Chesterfieldtarget datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
5*8516f54eSJon Chesterfieldtarget triple = "wasm32-unknown-unknown"
6*8516f54eSJon Chesterfield
7*8516f54eSJon Chesterfield; Function Attrs: nounwind
8*8516f54eSJon Chesterfielddefine void @pass_s0() {
9*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s0:
10*8516f54eSJon Chesterfield; CHECK:         .functype pass_s0 () -> ()
11*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
12*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 0
13*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
14*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
15*8516f54eSJon Chesterfieldentry:
16*8516f54eSJon Chesterfield  tail call void (...) @sink()
17*8516f54eSJon Chesterfield  ret void
18*8516f54eSJon Chesterfield}
19*8516f54eSJon Chesterfield
20*8516f54eSJon Chesterfielddeclare void @sink(...)
21*8516f54eSJon Chesterfield
22*8516f54eSJon Chesterfield; Function Attrs: nounwind
23*8516f54eSJon Chesterfielddefine void @pass_s1(i8 %x.coerce) {
24*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s1:
25*8516f54eSJon Chesterfield; CHECK:         .functype pass_s1 (i32) -> ()
26*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
27*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
28*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
29*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
30*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
31*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 1
32*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
33*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
34*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
35*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
36*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
37*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
38*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
39*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
40*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
41*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
42*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
43*8516f54eSJon Chesterfieldentry:
44*8516f54eSJon Chesterfield  tail call void (...) @sink(i8 %x.coerce)
45*8516f54eSJon Chesterfield  ret void
46*8516f54eSJon Chesterfield}
47*8516f54eSJon Chesterfield
48*8516f54eSJon Chesterfield; Function Attrs: nounwind
49*8516f54eSJon Chesterfielddefine void @pass_s2(i16 %x.coerce) {
50*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s2:
51*8516f54eSJon Chesterfield; CHECK:         .functype pass_s2 (i32) -> ()
52*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
53*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
54*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
55*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
56*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
57*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 1
58*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
59*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
60*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
61*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
62*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
63*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
64*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
65*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
66*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
67*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
68*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
69*8516f54eSJon Chesterfieldentry:
70*8516f54eSJon Chesterfield  tail call void (...) @sink(i16 %x.coerce)
71*8516f54eSJon Chesterfield  ret void
72*8516f54eSJon Chesterfield}
73*8516f54eSJon Chesterfield
74*8516f54eSJon Chesterfield; Function Attrs: nounwind
75*8516f54eSJon Chesterfielddefine void @pass_s3(i32 %x.coerce) {
76*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s3:
77*8516f54eSJon Chesterfield; CHECK:         .functype pass_s3 (i32) -> ()
78*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
79*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
80*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
81*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
82*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
83*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 1
84*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
85*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
86*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
87*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
88*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
89*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
90*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
91*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
92*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
93*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
94*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
95*8516f54eSJon Chesterfieldentry:
96*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 %x.coerce)
97*8516f54eSJon Chesterfield  ret void
98*8516f54eSJon Chesterfield}
99*8516f54eSJon Chesterfield
100*8516f54eSJon Chesterfield; Function Attrs: nounwind
101*8516f54eSJon Chesterfielddefine void @pass_s4(i64 %x.coerce) {
102*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s4:
103*8516f54eSJon Chesterfield; CHECK:         .functype pass_s4 (i64) -> ()
104*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
105*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
106*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
107*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
108*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
109*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 1
110*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
111*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
112*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
113*8516f54eSJon Chesterfield; CHECK-NEXT:    i64.store 0
114*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
115*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
116*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
117*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
118*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
119*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
120*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
121*8516f54eSJon Chesterfieldentry:
122*8516f54eSJon Chesterfield  tail call void (...) @sink(i64 %x.coerce)
123*8516f54eSJon Chesterfield  ret void
124*8516f54eSJon Chesterfield}
125*8516f54eSJon Chesterfield
126*8516f54eSJon Chesterfield; Function Attrs: nounwind
127*8516f54eSJon Chesterfielddefine void @pass_s5(<4 x i32> noundef %x) {
128*8516f54eSJon Chesterfield; CHECK-LABEL: pass_s5:
129*8516f54eSJon Chesterfield; CHECK:         .functype pass_s5 (i32, i32, i32, i32) -> ()
130*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
131*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
132*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
133*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
134*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
135*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 4
136*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
137*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
138*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 3
139*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 12
140*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
141*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
142*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 8
143*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
144*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
145*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
146*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
147*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
148*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
149*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
150*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
151*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
152*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
153*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
154*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
155*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
156*8516f54eSJon Chesterfieldentry:
157*8516f54eSJon Chesterfield  tail call void (...) @sink(<4 x i32> noundef %x)
158*8516f54eSJon Chesterfield  ret void
159*8516f54eSJon Chesterfield}
160*8516f54eSJon Chesterfield
161*8516f54eSJon Chesterfield; Function Attrs: nounwind
162*8516f54eSJon Chesterfielddefine void @pass_int_s0(i32 noundef %i) {
163*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s0:
164*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s0 (i32) -> ()
165*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
166*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
167*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
168*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
169*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
170*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 1
171*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
172*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
173*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
174*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
175*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
176*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
177*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
178*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
179*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
180*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
181*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
182*8516f54eSJon Chesterfieldentry:
183*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i)
184*8516f54eSJon Chesterfield  ret void
185*8516f54eSJon Chesterfield}
186*8516f54eSJon Chesterfield
187*8516f54eSJon Chesterfield; Function Attrs: nounwind
188*8516f54eSJon Chesterfielddefine void @pass_int_s1(i32 noundef %i, i8 %x.coerce) {
189*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s1:
190*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s1 (i32, i32) -> ()
191*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
192*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
193*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
194*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
195*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
196*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 2
197*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
198*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
199*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
200*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
201*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
202*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
203*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
204*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
205*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
206*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
207*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
208*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
209*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
210*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
211*8516f54eSJon Chesterfieldentry:
212*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i8 %x.coerce)
213*8516f54eSJon Chesterfield  ret void
214*8516f54eSJon Chesterfield}
215*8516f54eSJon Chesterfield
216*8516f54eSJon Chesterfield; Function Attrs: nounwind
217*8516f54eSJon Chesterfielddefine void @pass_int_s2(i32 noundef %i, i16 %x.coerce) {
218*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s2:
219*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s2 (i32, i32) -> ()
220*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
221*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
222*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
223*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
224*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
225*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 2
226*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
227*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
228*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
229*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
230*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
231*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
232*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
233*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
234*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
235*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
236*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
237*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
238*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
239*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
240*8516f54eSJon Chesterfieldentry:
241*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i16 %x.coerce)
242*8516f54eSJon Chesterfield  ret void
243*8516f54eSJon Chesterfield}
244*8516f54eSJon Chesterfield
245*8516f54eSJon Chesterfield; Function Attrs: nounwind
246*8516f54eSJon Chesterfielddefine void @pass_int_s3(i32 noundef %i, i32 %x.coerce) {
247*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s3:
248*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s3 (i32, i32) -> ()
249*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
250*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
251*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
252*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
253*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
254*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 2
255*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
256*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
257*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
258*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
259*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
260*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
261*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
262*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
263*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
264*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
265*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
266*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
267*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
268*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
269*8516f54eSJon Chesterfieldentry:
270*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i32 %x.coerce)
271*8516f54eSJon Chesterfield  ret void
272*8516f54eSJon Chesterfield}
273*8516f54eSJon Chesterfield
274*8516f54eSJon Chesterfield; Function Attrs: nounwind
275*8516f54eSJon Chesterfielddefine void @pass_int_s4(i32 noundef %i, i64 %x.coerce) {
276*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s4:
277*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s4 (i32, i64) -> ()
278*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
279*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
280*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
281*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
282*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
283*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 2
284*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
285*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
286*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
287*8516f54eSJon Chesterfield; CHECK-NEXT:    i64.store 8
288*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
289*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
290*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
291*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
292*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
293*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
294*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
295*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
296*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
297*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
298*8516f54eSJon Chesterfieldentry:
299*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i64 %x.coerce)
300*8516f54eSJon Chesterfield  ret void
301*8516f54eSJon Chesterfield}
302*8516f54eSJon Chesterfield
303*8516f54eSJon Chesterfield; Function Attrs: nounwind
304*8516f54eSJon Chesterfielddefine void @pass_int_s5(i32 noundef %i, <4 x i32> noundef %x) {
305*8516f54eSJon Chesterfield; CHECK-LABEL: pass_int_s5:
306*8516f54eSJon Chesterfield; CHECK:         .functype pass_int_s5 (i32, i32, i32, i32, i32) -> ()
307*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
308*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
309*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
310*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 32
311*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
312*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 5
313*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
314*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
315*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 28
316*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
317*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
318*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
319*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
320*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 24
321*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
322*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 3
323*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
324*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
325*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 20
326*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
327*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
328*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
329*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
330*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
331*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
332*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
333*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
334*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
335*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
336*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
337*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
338*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
339*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
340*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 32
341*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
342*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
343*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
344*8516f54eSJon Chesterfieldentry:
345*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, <4 x i32> noundef %x)
346*8516f54eSJon Chesterfield  ret void
347*8516f54eSJon Chesterfield}
348*8516f54eSJon Chesterfield
349*8516f54eSJon Chesterfield; Function Attrs: nounwind
350*8516f54eSJon Chesterfielddefine void @pass_asc(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) {
351*8516f54eSJon Chesterfield; CHECK-LABEL: pass_asc:
352*8516f54eSJon Chesterfield; CHECK:         .functype pass_asc (i32, i32, i32, i64, i32, i32, i32, i32) -> ()
353*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
354*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
355*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
356*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
357*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
358*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 8
359*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
360*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
361*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 44
362*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
363*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 7
364*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
365*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
366*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 40
367*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
368*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 6
369*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
370*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
371*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 36
372*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
373*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
374*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
375*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
376*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 32
377*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
378*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
379*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
380*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
381*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
382*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
383*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 3
384*8516f54eSJon Chesterfield; CHECK-NEXT:    i64.store 0
385*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
386*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
387*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 8
388*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
389*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
390*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
391*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
392*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
393*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
394*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
395*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
396*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
397*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
398*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
399*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
400*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
401*8516f54eSJon Chesterfieldentry:
402*8516f54eSJon Chesterfield  tail call void (...) @sink(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5)
403*8516f54eSJon Chesterfield  ret void
404*8516f54eSJon Chesterfield}
405*8516f54eSJon Chesterfield
406*8516f54eSJon Chesterfield; Function Attrs: nounwind
407*8516f54eSJon Chesterfielddefine void @pass_dsc(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce) {
408*8516f54eSJon Chesterfield; CHECK-LABEL: pass_dsc:
409*8516f54eSJon Chesterfield; CHECK:         .functype pass_dsc (i32, i32, i32, i32, i64, i32, i32, i32) -> ()
410*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
411*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
412*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
413*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
414*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
415*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 8
416*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
417*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
418*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 32
419*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
420*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 7
421*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
422*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
423*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 28
424*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
425*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 6
426*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
427*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
428*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 24
429*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
430*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
431*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
432*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
433*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
434*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
435*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
436*8516f54eSJon Chesterfield; CHECK-NEXT:    i64.store 0
437*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
438*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 3
439*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 12
440*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
441*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
442*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 8
443*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
444*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
445*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
446*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
447*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
448*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
449*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
450*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
451*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
452*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
453*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
454*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
455*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
456*8516f54eSJon Chesterfieldentry:
457*8516f54eSJon Chesterfield  tail call void (...) @sink(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce)
458*8516f54eSJon Chesterfield  ret void
459*8516f54eSJon Chesterfield}
460*8516f54eSJon Chesterfield
461*8516f54eSJon Chesterfield; Function Attrs: nounwind
462*8516f54eSJon Chesterfielddefine void @pass_multiple(i32 noundef %i, i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) {
463*8516f54eSJon Chesterfield; CHECK-LABEL: pass_multiple:
464*8516f54eSJon Chesterfield; CHECK:         .functype pass_multiple (i32, i32, i32, i32, i64, i32, i32, i32, i32) -> ()
465*8516f54eSJon Chesterfield; CHECK-NEXT:    .local i32
466*8516f54eSJon Chesterfield; CHECK-NEXT:  # %bb.0: # %entry
467*8516f54eSJon Chesterfield; CHECK-NEXT:    global.get __stack_pointer
468*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
469*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.sub
470*8516f54eSJon Chesterfield; CHECK-NEXT:    local.tee 9
471*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
472*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
473*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 4
474*8516f54eSJon Chesterfield; CHECK-NEXT:    i64.store 40
475*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
476*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 2
477*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 36
478*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
479*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
480*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 32
481*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
482*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 32
483*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
484*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
485*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
486*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 28
487*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
488*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 8
489*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
490*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
491*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 24
492*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
493*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 7
494*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
495*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
496*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 20
497*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
498*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 6
499*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
500*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
501*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 16
502*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
503*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 5
504*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
505*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
506*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 3
507*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 8
508*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
509*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 1
510*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 4
511*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
512*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 0
513*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.store 0
514*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
515*8516f54eSJon Chesterfield; CHECK-NEXT:    call sink
516*8516f54eSJon Chesterfield; CHECK-NEXT:    local.get 9
517*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.const 48
518*8516f54eSJon Chesterfield; CHECK-NEXT:    i32.add
519*8516f54eSJon Chesterfield; CHECK-NEXT:    global.set __stack_pointer
520*8516f54eSJon Chesterfield; CHECK-NEXT:    # fallthrough-return
521*8516f54eSJon Chesterfieldentry:
522*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i16 %x2.coerce, i64 %x4.coerce)
523*8516f54eSJon Chesterfield  tail call void (...) @sink(i32 noundef %i, i8 %x1.coerce, i32 %x3.coerce, <4 x i32> noundef %x5)
524*8516f54eSJon Chesterfield  ret void
525*8516f54eSJon Chesterfield}
526*8516f54eSJon Chesterfield
527