diff options
author | Dan Gohman <dan433584@gmail.com> | 2018-05-22 04:58:36 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2018-05-22 04:58:36 +0000 |
commit | b81848272dc60d6ada098e6efe004140533ea277 (patch) | |
tree | ef19b0db70aea3f14c57bd34fdb8546b80c71c77 /llvm/test/CodeGen/WebAssembly | |
parent | 19da66759944f2a3d2b7142e76a409c68d4c87fd (diff) | |
download | bcm5719-llvm-b81848272dc60d6ada098e6efe004140533ea277.tar.gz bcm5719-llvm-b81848272dc60d6ada098e6efe004140533ea277.zip |
[WebAssembly] Fix fast-isel lowering illegal argument and return types.
For both argument and return types, promote illegal types like i24 to i32,
and if a type can't be easily promoted, clear out the signature before
bailing out, so avoid leaving it in a partially complete state.
Fixes PR37546.
llvm-svn: 332947
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/fast-isel-i24.ll | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/fast-isel-i256.ll | 33 |
2 files changed, 45 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/fast-isel-i24.ll b/llvm/test/CodeGen/WebAssembly/fast-isel-i24.ll index 48618e7d021..10f1490045e 100644 --- a/llvm/test/CodeGen/WebAssembly/fast-isel-i24.ll +++ b/llvm/test/CodeGen/WebAssembly/fast-isel-i24.ll @@ -1,16 +1,28 @@ ; RUN: llc < %s -O0 ; PR36564 +; PR37546 ; Test that fast-isel properly copes with i24 arguments and return types. target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" +; CHECK-LABEL: add: +; CHECK-NEXT: .param i32, i32{{$}} +; CHECK-NEXT: .result i32{{$}} +; CHECK-NEXT: get_local $push2=, 0{{$}} +; CHECK-NEXT: get_local $push1=, 1{{$}} +; CHECK-NEXT: i32.add $push0=, $pop2, $pop1{{$}} +; CHECK-NEXT: end_function define i24 @add(i24 %x, i24 %y) { %z = add i24 %x, %y ret i24 %z } +; CHECK-LABEL: return_zero: +; CHECK-NEXT: .result i32{{$}} +; CHECK-NEXT: i32.const $push0=, 0{{$}} +; CHECK-NEXT: end_function define i24 @return_zero() { ret i24 0 } diff --git a/llvm/test/CodeGen/WebAssembly/fast-isel-i256.ll b/llvm/test/CodeGen/WebAssembly/fast-isel-i256.ll new file mode 100644 index 00000000000..a30ea353701 --- /dev/null +++ b/llvm/test/CodeGen/WebAssembly/fast-isel-i256.ll @@ -0,0 +1,33 @@ +; RUN: llc < %s -O0 +; PR36564 +; PR37546 + +; Test that fast-isel properly copes with i256 arguments and return types. + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +; CHECK-LABEL: add: +; CHECK-NEXT: .param i32, i64, i64, i64, i64, i64, i64, i64, i64{{$}} +; CHECK-NOT: .result +; CHECK: end_function +define i256 @add(i256 %x, i256 %y) { + %z = add i256 %x, %y + ret i256 %z +} + +; CHECK-LABEL: return_zero: +; CHECK-NEXT: .param i32{{$}} +; CHECK-NOT: .result +; CHECK: end_function +define i256 @return_zero() { + ret i256 0 +} + +; CHECK-LABEL: return_zero_with_params: +; CHECK-NEXT: .param i32, f32{{$}} +; CHECK-NOT: .result +; CHECK: end_function +define i256 @return_zero_with_params(float %x) { + ret i256 0 +} |