1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
3 ; Test that basic call operations assemble as expected.
5 target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
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()
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()
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()
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()
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()
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)
60 ; FIXME test the following:
61 ; - Functions without return.
62 ; - More argument combinations.
64 ; - Interesting returns (struct, multiple).