blob: ae66fae840c10b7b80923018c97a5dc0865f2720 [file] [log] [blame]
JF Bastiend8a9d662015-08-24 21:59:51 +00001; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3; Test that basic call operations assemble as expected.
4
5target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128"
6target triple = "wasm32-unknown-unknown"
7
JF Bastienaf111db2015-08-24 22:16:48 +00008declare i32 @i32_nullary()
9declare i32 @i32_unary(i32)
10declare i64 @i64_nullary()
11declare float @float_nullary()
12declare double @double_nullary()
JF Bastiend8a9d662015-08-24 21:59:51 +000013
JF Bastienaf111db2015-08-24 22:16:48 +000014; CHECK-LABEL: call_i32_nullary:
15; CHECK-NEXT: (setlocal @0 (global $i32_nullary))
16; CHECK-NEXT: (setlocal @1 (call @0))
17; CHECK-NEXT: (return @1)
18define i32 @call_i32_nullary() {
19 %r = call i32 @i32_nullary()
20 ret i32 %r
JF Bastiend8a9d662015-08-24 21:59:51 +000021}
22
JF Bastienaf111db2015-08-24 22:16:48 +000023; CHECK-LABEL: call_i64_nullary:
24; CHECK-NEXT: (setlocal @0 (global $i64_nullary))
25; CHECK-NEXT: (setlocal @1 (call @0))
26; CHECK-NEXT: (return @1)
27define i64 @call_i64_nullary() {
28 %r = call i64 @i64_nullary()
29 ret i64 %r
30}
JF Bastiend8a9d662015-08-24 21:59:51 +000031
JF Bastienaf111db2015-08-24 22:16:48 +000032; CHECK-LABEL: call_float_nullary:
33; CHECK-NEXT: (setlocal @0 (global $float_nullary))
34; CHECK-NEXT: (setlocal @1 (call @0))
35; CHECK-NEXT: (return @1)
36define float @call_float_nullary() {
37 %r = call float @float_nullary()
38 ret float %r
39}
40
41; CHECK-LABEL: call_double_nullary:
42; CHECK-NEXT: (setlocal @0 (global $double_nullary))
43; CHECK-NEXT: (setlocal @1 (call @0))
44; CHECK-NEXT: (return @1)
45define double @call_double_nullary() {
46 %r = call double @double_nullary()
47 ret double %r
48}
49
50; CHECK-LABEL: call_i32_unary:
51; CHECK-NEXT: (setlocal @0 (argument 0))
52; CHECK-NEXT: (setlocal @1 (global $i32_unary))
53; CHECK-NEXT: (setlocal @2 (call @1 @0))
54; CHECK-NEXT: (return @2)
55define i32 @call_i32_unary(i32 %a) {
56 %r = call i32 @i32_unary(i32 %a)
57 ret i32 %r
58}
59
60; FIXME test the following:
61; - Functions without return.
62; - More argument combinations.
63; - Tail call.
64; - Interesting returns (struct, multiple).
65; - Vararg.