ae66fae840c10b7b80923018c97a5dc0865f2720
[oota-llvm.git] / test / CodeGen / WebAssembly / call.ll
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3 ; Test that basic call operations assemble as expected.
4
5 target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
7
8 declare i32 @i32_nullary()
9 declare i32 @i32_unary(i32)
10 declare i64 @i64_nullary()
11 declare float @float_nullary()
12 declare double @double_nullary()
13
14 ; 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)
18 define i32 @call_i32_nullary() {
19   %r = call i32 @i32_nullary()
20   ret i32 %r
21 }
22
23 ; 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)
27 define i64 @call_i64_nullary() {
28   %r = call i64 @i64_nullary()
29   ret i64 %r
30 }
31
32 ; 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)
36 define 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)
45 define 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)
55 define 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.