| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc < %s -verify-machineinstrs | FileCheck %s | |
| target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20" | |
| target triple = "wasm32-unknown-unknown" | |
| ; Function Attrs: nounwind | |
| define void @pass_s0() { | |
| ; CHECK-LABEL: pass_s0: | |
| ; CHECK: .functype pass_s0 () -> () | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: i32.const 0 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink() | |
| ret void | |
| } | |
| declare void @sink(...) | |
| ; Function Attrs: nounwind | |
| define void @pass_s1(i8 %x.coerce) { | |
| ; CHECK-LABEL: pass_s1: | |
| ; CHECK: .functype pass_s1 (i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 1 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i8 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_s2(i16 %x.coerce) { | |
| ; CHECK-LABEL: pass_s2: | |
| ; CHECK: .functype pass_s2 (i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 1 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i16 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_s3(i32 %x.coerce) { | |
| ; CHECK-LABEL: pass_s3: | |
| ; CHECK: .functype pass_s3 (i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 1 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_s4(i64 %x.coerce) { | |
| ; CHECK-LABEL: pass_s4: | |
| ; CHECK: .functype pass_s4 (i64) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 1 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i64.store 0 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i64 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_s5(<4 x i32> noundef %x) { | |
| ; CHECK-LABEL: pass_s5: | |
| ; CHECK: .functype pass_s5 (i32, i32, i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 4 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: local.get 3 | |
| ; CHECK-NEXT: i32.store 12 | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.store 8 | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(<4 x i32> noundef %x) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s0(i32 noundef %i) { | |
| ; CHECK-LABEL: pass_int_s0: | |
| ; CHECK: .functype pass_int_s0 (i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 1 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s1(i32 noundef %i, i8 %x.coerce) { | |
| ; CHECK-LABEL: pass_int_s1: | |
| ; CHECK: .functype pass_int_s1 (i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 2 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, i8 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s2(i32 noundef %i, i16 %x.coerce) { | |
| ; CHECK-LABEL: pass_int_s2: | |
| ; CHECK: .functype pass_int_s2 (i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 2 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, i16 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s3(i32 noundef %i, i32 %x.coerce) { | |
| ; CHECK-LABEL: pass_int_s3: | |
| ; CHECK: .functype pass_int_s3 (i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 2 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, i32 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s4(i32 noundef %i, i64 %x.coerce) { | |
| ; CHECK-LABEL: pass_int_s4: | |
| ; CHECK: .functype pass_int_s4 (i32, i64) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 2 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i64.store 8 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, i64 %x.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_int_s5(i32 noundef %i, <4 x i32> noundef %x) { | |
| ; CHECK-LABEL: pass_int_s5: | |
| ; CHECK: .functype pass_int_s5 (i32, i32, i32, i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 32 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 5 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.const 28 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.const 24 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 3 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.const 20 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.const 32 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, <4 x i32> noundef %x) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_asc(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) { | |
| ; CHECK-LABEL: pass_asc: | |
| ; CHECK: .functype pass_asc (i32, i32, i32, i64, i32, i32, i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 8 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 44 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 7 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 40 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 6 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 36 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 32 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 3 | |
| ; CHECK-NEXT: i64.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.store 8 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_dsc(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce) { | |
| ; CHECK-LABEL: pass_dsc: | |
| ; CHECK: .functype pass_dsc (i32, i32, i32, i32, i64, i32, i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 8 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 32 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 7 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 28 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 6 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 24 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: i64.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 3 | |
| ; CHECK-NEXT: i32.store 12 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.store 8 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce) | |
| ret void | |
| } | |
| ; Function Attrs: nounwind | |
| define void @pass_multiple(i32 noundef %i, i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) { | |
| ; CHECK-LABEL: pass_multiple: | |
| ; CHECK: .functype pass_multiple (i32, i32, i32, i32, i64, i32, i32, i32, i32) -> () | |
| ; CHECK-NEXT: .local i32 | |
| ; CHECK-NEXT: # %bb.0: # %entry | |
| ; CHECK-NEXT: global.get __stack_pointer | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.sub | |
| ; CHECK-NEXT: local.tee 9 | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 4 | |
| ; CHECK-NEXT: i64.store 40 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 2 | |
| ; CHECK-NEXT: i32.store 36 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 32 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 32 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 28 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 8 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 24 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 7 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 20 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 6 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 16 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: local.get 5 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 3 | |
| ; CHECK-NEXT: i32.store 8 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 1 | |
| ; CHECK-NEXT: i32.store 4 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: local.get 0 | |
| ; CHECK-NEXT: i32.store 0 | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: call sink | |
| ; CHECK-NEXT: local.get 9 | |
| ; CHECK-NEXT: i32.const 48 | |
| ; CHECK-NEXT: i32.add | |
| ; CHECK-NEXT: global.set __stack_pointer | |
| ; CHECK-NEXT: # fallthrough-return | |
| entry: | |
| tail call void (...) @sink(i32 noundef %i, i16 %x2.coerce, i64 %x4.coerce) | |
| tail call void (...) @sink(i32 noundef %i, i8 %x1.coerce, i32 %x3.coerce, <4 x i32> noundef %x5) | |
| ret void | |
| } | |