diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
commit | 71d5a2540a98c81f5bcaeb48805e0e2881f530ef (patch) | |
tree | 5343938942df402b49ec7300a1c25a2d4ccd5821 /test/CodeGen/WebAssembly/function-bitcasts.ll | |
parent | 31bbf64f3a4974a2d6c8b3b27ad2f519caf74057 (diff) |
Diffstat (limited to 'test/CodeGen/WebAssembly/function-bitcasts.ll')
-rw-r--r-- | test/CodeGen/WebAssembly/function-bitcasts.ll | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/test/CodeGen/WebAssembly/function-bitcasts.ll b/test/CodeGen/WebAssembly/function-bitcasts.ll index e4f8f3fb6ca9..3f20aef08115 100644 --- a/test/CodeGen/WebAssembly/function-bitcasts.ll +++ b/test/CodeGen/WebAssembly/function-bitcasts.ll @@ -1,9 +1,9 @@ -; RUN: llc < %s -asm-verbose=false | FileCheck %s +; RUN: llc < %s -asm-verbose=false -disable-wasm-explicit-locals | FileCheck %s ; Test that function pointer casts are replaced with wrappers. target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" -target triple = "wasm32-unknown-unknown" +target triple = "wasm32-unknown-unknown-wasm" ; CHECK-LABEL: test: ; CHECK-NEXT: call .Lbitcast@FUNCTION{{$}} @@ -20,31 +20,39 @@ target triple = "wasm32-unknown-unknown" ; CHECK-NEXT: call foo2@FUNCTION{{$}} ; CHECK-NEXT: call foo1@FUNCTION{{$}} ; CHECK-NEXT: call foo3@FUNCTION{{$}} -; CHECK-NEXT: .endfunc +; CHECK-NEXT: end_function + +; CHECK-LABEL: test_varargs: +; CHECK: set_global +; CHECK: i32.const $push[[L3:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: call vararg@FUNCTION, $pop[[L3]]{{$}} +; CHECK-NEXT: i32.const $push[[L4:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.store 0($[[L5:[0-9]+]]), $pop[[L4]]{{$}} +; CHECK-NEXT: call plain@FUNCTION, $[[L5]]{{$}} ; CHECK-LABEL: .Lbitcast: -; CHECK-NEXT: .local i32 ; CHECK-NEXT: call has_i32_arg@FUNCTION, $0{{$}} -; CHECK-NEXT: .endfunc +; CHECK-NEXT: end_function ; CHECK-LABEL: .Lbitcast.1: ; CHECK-NEXT: call $drop=, has_i32_ret@FUNCTION{{$}} -; CHECK-NEXT: .endfunc +; CHECK-NEXT: end_function ; CHECK-LABEL: .Lbitcast.2: ; CHECK-NEXT: .param i32 ; CHECK-NEXT: call foo0@FUNCTION{{$}} -; CHECK-NEXT: .endfunc +; CHECK-NEXT: end_function ; CHECK-LABEL: .Lbitcast.3: ; CHECK-NEXT: .result i32 -; CHECK-NEXT: .local i32 ; CHECK-NEXT: call foo1@FUNCTION{{$}} ; CHECK-NEXT: copy_local $push0=, $0 -; CHECK-NEXT: .endfunc +; CHECK-NEXT: end_function declare void @has_i32_arg(i32) declare i32 @has_i32_ret() +declare void @vararg(...) +declare void @plain(i32) declare void @foo0() declare void @foo1() @@ -70,3 +78,9 @@ entry: ret void } + +define void @test_varargs() { + call void bitcast (void (...)* @vararg to void (i32)*)(i32 0) + call void (...) bitcast (void (i32)* @plain to void (...)*)(i32 0) + ret void +} |