diff options
author | Heejin Ahn <aheejin@gmail.com> | 2018-11-16 00:47:18 +0000 |
---|---|---|
committer | Heejin Ahn <aheejin@gmail.com> | 2018-11-16 00:47:18 +0000 |
commit | 095796a391e5e8343ce462ce97fdc493d20478cd (patch) | |
tree | 53daa4333ce0a05d5da5f3b9b8998d4ed88ef4c9 /llvm/test/CodeGen/WebAssembly/exception.ll | |
parent | 2f5683e6b0d3c7348929e05a2a781690e598c533 (diff) | |
download | bcm5719-llvm-095796a391e5e8343ce462ce97fdc493d20478cd.tar.gz bcm5719-llvm-095796a391e5e8343ce462ce97fdc493d20478cd.zip |
[WebAssembly] Split BBs after throw instructions
Summary:
`throw` instruction is a terminator in wasm, but BBs were not splitted
after `throw` instructions, causing machine instruction verifier to
fail.
This patch
- Splits BBs after `throw` instructions in WasmEHPrepare and adding an
unreachable instruction after `throw`, which will be deleted in
LateEHPrepare pass
- Refactors WasmEHPrepare into two member functions
- Changes the semantics of `eraseBBsAndChildren` in LateEHPrepare pass
to match that of WasmEHPrepare pass, which is newly added. Now
`eraseBBsAndChildren` does not delete BBs with remaining predecessors.
- Fixes style nits, making static function names conform to clang-tidy
- Re-enables the test temporarily disabled by rL346840 && rL346845
Reviewers: dschuff
Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits
Differential Revision: https://reviews.llvm.org/D54571
llvm-svn: 347003
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly/exception.ll')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/exception.ll | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/exception.ll b/llvm/test/CodeGen/WebAssembly/exception.ll index 0577cd43b97..b53cd0cb544 100644 --- a/llvm/test/CodeGen/WebAssembly/exception.ll +++ b/llvm/test/CodeGen/WebAssembly/exception.ll @@ -1,5 +1,5 @@ ; RUN: not llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers -exception-model=wasm -; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers -exception-model=wasm -mattr=+exception-handling | FileCheck -allow-deprecated-dag-overlap %s +; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers -exception-model=wasm -mattr=+exception-handling -verify-machineinstrs | FileCheck -allow-deprecated-dag-overlap %s ; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-keep-registers -exception-model=wasm -mattr=+exception-handling target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" @@ -12,10 +12,11 @@ target triple = "wasm32-unknown-unknown" declare void @llvm.wasm.throw(i32, i8*) ; CHECK-LABEL: test_throw: -; CHECK-NEXT: i32.const $push0=, 0 +; CHECK: get_local $push0=, 0 ; CHECK-NEXT: throw __cpp_exception@EVENT, $pop0 -define void @test_throw() { - call void @llvm.wasm.throw(i32 0, i8* null) +; CHECK-NOT: unreachable +define void @test_throw(i8* %p) { + call void @llvm.wasm.throw(i32 0, i8* %p) ret void } |