summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2019-02-27 00:50:53 +0000
committerHeejin Ahn <aheejin@gmail.com>2019-02-27 00:50:53 +0000
commitcf699b4534e6e0285d1a6899b5237c5fd9100ab7 (patch)
tree3b2da62357bb85f10548932a310ae5a1153bda67 /llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll
parent6d6288ae977bfdb08dc2b731f34d9b1ebfc68748 (diff)
downloadbcm5719-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.ll89
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()
OpenPOWER on IntegriCloud