diff options
author | JF Bastien <jfb@google.com> | 2015-08-24 22:16:48 +0000 |
---|---|---|
committer | JF Bastien <jfb@google.com> | 2015-08-24 22:16:48 +0000 |
commit | af111db8af5e2ec7bfc9afa6b6e0f285129f0624 (patch) | |
tree | 482845bc029a40c8284c9f78981f67889cbbc24d /llvm/test/CodeGen/WebAssembly/call.ll | |
parent | 19c2e6634de882c2f146d278b49adb2952d7d104 (diff) | |
download | bcm5719-llvm-af111db8af5e2ec7bfc9afa6b6e0f285129f0624.tar.gz bcm5719-llvm-af111db8af5e2ec7bfc9afa6b6e0f285129f0624.zip |
WebAssembly: Implement call
Summary: Support function calls.
Reviewers: sunfish, sunfishcode
Subscribers: sunfishcode, jfb, llvm-commits
Differential revision: http://reviews.llvm.org/D12219
llvm-svn: 245887
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly/call.ll')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/call.ll | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/call.ll b/llvm/test/CodeGen/WebAssembly/call.ll index e5d468b3cd1..ae66fae840c 100644 --- a/llvm/test/CodeGen/WebAssembly/call.ll +++ b/llvm/test/CodeGen/WebAssembly/call.ll @@ -5,18 +5,61 @@ target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128" target triple = "wasm32-unknown-unknown" -declare void @nullary() - -; CHECK-LABEL: call_nullary: -; CHECK-NEXT: (call @foo) -; CHECK-NEXT: (return) -define void @call_nullary() { - call void @nullary() - ret void +declare i32 @i32_nullary() +declare i32 @i32_unary(i32) +declare i64 @i64_nullary() +declare float @float_nullary() +declare double @double_nullary() + +; CHECK-LABEL: call_i32_nullary: +; CHECK-NEXT: (setlocal @0 (global $i32_nullary)) +; CHECK-NEXT: (setlocal @1 (call @0)) +; CHECK-NEXT: (return @1) +define i32 @call_i32_nullary() { + %r = call i32 @i32_nullary() + ret i32 %r +} + +; CHECK-LABEL: call_i64_nullary: +; CHECK-NEXT: (setlocal @0 (global $i64_nullary)) +; CHECK-NEXT: (setlocal @1 (call @0)) +; CHECK-NEXT: (return @1) +define i64 @call_i64_nullary() { + %r = call i64 @i64_nullary() + ret i64 %r +} + +; CHECK-LABEL: call_float_nullary: +; CHECK-NEXT: (setlocal @0 (global $float_nullary)) +; CHECK-NEXT: (setlocal @1 (call @0)) +; CHECK-NEXT: (return @1) +define float @call_float_nullary() { + %r = call float @float_nullary() + ret float %r +} + +; CHECK-LABEL: call_double_nullary: +; CHECK-NEXT: (setlocal @0 (global $double_nullary)) +; CHECK-NEXT: (setlocal @1 (call @0)) +; CHECK-NEXT: (return @1) +define double @call_double_nullary() { + %r = call double @double_nullary() + ret double %r } +; CHECK-LABEL: call_i32_unary: +; CHECK-NEXT: (setlocal @0 (argument 0)) +; CHECK-NEXT: (setlocal @1 (global $i32_unary)) +; CHECK-NEXT: (setlocal @2 (call @1 @0)) +; CHECK-NEXT: (return @2) +define i32 @call_i32_unary(i32 %a) { + %r = call i32 @i32_unary(i32 %a) + ret i32 %r +} -; tail call -; multiple args -; interesting returns (int, float, struct, multiple) -; vararg +; FIXME test the following: +; - Functions without return. +; - More argument combinations. +; - Tail call. +; - Interesting returns (struct, multiple). +; - Vararg. |