1; RUN: llc < %s -asm-verbose=false -wasm-keep-registers | FileCheck %s --check-prefix=REG 2; RUN: llc < %s -asm-verbose=false | FileCheck %s 3 4target triple = "wasm32-unknown-unknown" 5 6; Test direct and indirect function call between mismatched signatures 7; CHECK-LABEL: foo: 8; CHECK-NEXT: .functype foo (i32, i32, i32, i32) -> () 9define swiftcc void @foo(i32, i32) { 10 ret void 11} 12@data = global ptr @foo 13 14; CHECK-LABEL: bar: 15; CHECK-NEXT: .functype bar (i32, i32) -> () 16define swiftcc void @bar() { 17 %1 = load ptr, ptr @data 18; REG: call foo, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}} 19 call swiftcc void @foo(i32 1, i32 2) 20 21; REG: call_indirect $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}} 22; CHECK: call_indirect __indirect_function_table, (i32, i32, i32, i32) -> () 23 call swiftcc void %1(i32 1, i32 2) 24 25; REG: call_indirect $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}} 26; CHECK: call_indirect __indirect_function_table, (i32, i32, i32, i32) -> () 27 call swiftcc void %1(i32 1, i32 2, i32 swiftself 3) 28 29 %err = alloca swifterror ptr, align 4 30 31; REG: call_indirect $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}} 32; CHECK: call_indirect __indirect_function_table, (i32, i32, i32, i32) -> () 33 call swiftcc void %1(i32 1, i32 2, ptr swifterror %err) 34 35; REG: call_indirect $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}} 36; CHECK: call_indirect __indirect_function_table, (i32, i32, i32, i32) -> () 37 call swiftcc void %1(i32 1, i32 2, i32 swiftself 3, ptr swifterror %err) 38 39 ret void 40} 41