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