• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
5target triple = "wasm32-unknown-unknown"
6
7; Test direct and indirect function call between mismatched signatures
8; CHECK-LABEL: foo:
9; CHECK-NEXT: .functype       foo (i32, i32, i32, i32) -> ()
10define swiftcc void @foo(i32, i32) {
11  ret void
12}
13@data = global i8* bitcast (void (i32, i32)* @foo to i8*)
14
15; CHECK-LABEL: bar:
16; CHECK-NEXT: .functype       bar (i32, i32) -> ()
17define swiftcc void @bar() {
18  %1 = load i8*, i8** @data
19; REG: call    foo, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}
20  call swiftcc void @foo(i32 1, i32 2)
21
22  %2 = bitcast i8* %1 to void (i32, i32)*
23; REG: call_indirect   $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}
24; CHECK: call_indirect   (i32, i32, i32, i32) -> ()
25  call swiftcc void %2(i32 1, i32 2)
26
27  %3 = bitcast i8* %1 to void (i32, i32, i32)*
28; REG: call_indirect   $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}
29; CHECK: call_indirect   (i32, i32, i32, i32) -> ()
30  call swiftcc void %3(i32 1, i32 2, i32 swiftself 3)
31
32  %err = alloca swifterror i32*, align 4
33
34  %4 = bitcast i8* %1 to void (i32, i32, i32**)*
35; REG: call_indirect   $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}
36; CHECK: call_indirect   (i32, i32, i32, i32) -> ()
37  call swiftcc void %4(i32 1, i32 2, i32** swifterror %err)
38
39  %5 = bitcast i8* %1 to void (i32, i32, i32, i32**)*
40; REG: call_indirect   $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}, $pop{{[0-9]+}}
41; CHECK: call_indirect   (i32, i32, i32, i32) -> ()
42  call swiftcc void %5(i32 1, i32 2, i32 swiftself 3, i32** swifterror %err)
43
44  ret void
45}
46
47