diff options
author | Heejin Ahn <aheejin@gmail.com> | 2019-02-27 00:50:53 +0000 |
---|---|---|
committer | Heejin Ahn <aheejin@gmail.com> | 2019-02-27 00:50:53 +0000 |
commit | cf699b4534e6e0285d1a6899b5237c5fd9100ab7 (patch) | |
tree | 3b2da62357bb85f10548932a310ae5a1153bda67 /llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll | |
parent | 6d6288ae977bfdb08dc2b731f34d9b1ebfc68748 (diff) | |
download | bcm5719-llvm-cf699b4534e6e0285d1a6899b5237c5fd9100ab7.tar.gz bcm5719-llvm-cf699b4534e6e0285d1a6899b5237c5fd9100ab7.zip |
[WebAssembly] Remove unnecessary instructions after TRY marker placement
Summary:
This removes unnecessary instructions after TRY marker placement. There
are two cases:
- `end`/`end_block` can be removed if they overlap with `try`/`end_try`
and they have the same return types.
- `br` right before `catch` that branches to after `end_try` can be
deleted.
Reviewers: dschuff
Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58591
llvm-svn: 354939
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll | 89 |
1 files changed, 40 insertions, 49 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll b/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll index 663fff325d4..8e9933471b7 100644 --- a/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll +++ b/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll @@ -18,26 +18,23 @@ target triple = "wasm32-unknown-unknown" ; } ; CHECK-LABEL: test0 -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 # 0: down to label1 -; CHECK: catch -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label3 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: br 1 # 1: down to label1 -; CHECK: end_block # label3: -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label4 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: br 1 # 1: down to label1 -; CHECK: end_block # label4: -; CHECK: call __cxa_rethrow -; CHECK: end_try # label1: -; CHECK: end_block +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: block +; CHECK: br_if 0, {{.*}} # 0: down to label2 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: br 1 # 1: down to label0 +; CHECK: end_block # label2: +; CHECK: block +; CHECK: br_if 0, {{.*}} # 0: down to label3 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: br 1 # 1: down to label0 +; CHECK: end_block # label3: +; CHECK: call __cxa_rethrow +; CHECK: end_try # label0: define void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() @@ -177,39 +174,33 @@ unreachable: ; preds = %rethrow5 ; } ; CHECK-LABEL: test2 -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 # 0: down to label17 -; CHECK: catch -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: loop # label19: +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: loop # label15: +; CHECK: block ; CHECK: block -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label21 +; CHECK: br_if 0, {{.*}} # 0: down to label17 +; CHECK: try +; CHECK: call foo +; CHECK: br 2 # 2: down to label16 +; CHECK: catch ; CHECK: try -; CHECK: call foo -; CHECK: br 2 # 2: down to label20 +; CHECK: call __cxa_end_catch ; CHECK: catch -; CHECK: block -; CHECK: try -; CHECK: call __cxa_end_catch -; CHECK: br 0 # 0: down to label24 -; CHECK: catch -; CHECK: call __clang_call_terminate -; CHECK: unreachable -; CHECK: end_try # label24: -; CHECK: end_block -; CHECK: rethrow # to caller +; CHECK: call __clang_call_terminate +; CHECK: unreachable ; CHECK: end_try -; CHECK: end_block # label21: -; CHECK: call __cxa_end_catch -; CHECK: br 2 # 2: down to label17 -; CHECK: end_block # label20: -; CHECK: br 0 # 0: up to label19 -; CHECK: end_loop -; CHECK: end_try # label17: -; CHECK: end_block +; CHECK: rethrow # to caller +; CHECK: end_try +; CHECK: end_block # label17: +; CHECK: call __cxa_end_catch +; CHECK: br 2 # 2: down to label13 +; CHECK: end_block # label16: +; CHECK: br 0 # 0: up to label15 +; CHECK: end_loop +; CHECK: end_try # label13: define void @test2() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() |