diff options
author | Chen Li <meloli87@gmail.com> | 2016-01-10 05:48:01 +0000 |
---|---|---|
committer | Chen Li <meloli87@gmail.com> | 2016-01-10 05:48:01 +0000 |
commit | 1689c2f54b133cca7dde3d336f12df758227ffbc (patch) | |
tree | 49b792d23277777612aeec8e444b49e2ecea3b57 /llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll | |
parent | 2adaa98927a16a3612ea2f1dce8ee5faf509d998 (diff) | |
download | bcm5719-llvm-1689c2f54b133cca7dde3d336f12df758227ffbc.tar.gz bcm5719-llvm-1689c2f54b133cca7dde3d336f12df758227ffbc.zip |
[SimplifyCFG] Extend SimplifyResume to handle phi of trivial landing pad.
Summary:
This is a fix of D13718. D13718 was committed but then reverted because of the following bug:
https://llvm.org/bugs/show_bug.cgi?id=25299
This patch fixes the issue shown in the bug.
Reviewers: majnemer, reames
Subscribers: jevinskie, llvm-commits
Differential Revision: http://reviews.llvm.org/D14308
llvm-svn: 257277
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll b/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll index 100bfd4e9e3..b11b7c15fa3 100644 --- a/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll +++ b/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll @@ -30,4 +30,46 @@ Rethrow: resume { i8*, i32 } %exn } +declare i64 @dummy1() +declare i64 @dummy2() + +; This testcase checks to see if simplifycfg pass can convert two invoke +; instructions to call instructions if they share a common trivial unwind +; block. +define i64 @test3(i1 %cond) personality i32 (...)* @__gxx_personality_v0 { +entry: +; CHECK-LABEL: @test3( +; CHECK: %call1 = call i64 @dummy1() +; CHECK: %call2 = call i64 @dummy2() +; CHECK-NOT: resume { i8*, i32 } %lp + br i1 %cond, label %br1, label %br2 + +br1: + %call1 = invoke i64 @dummy1() + to label %invoke.cont unwind label %lpad1 + +br2: + %call2 = invoke i64 @dummy2() + to label %invoke.cont unwind label %lpad2 + +invoke.cont: + %c = phi i64 [%call1, %br1], [%call2, %br2] + ret i64 %c + + +lpad1: + %0 = landingpad { i8*, i32 } + cleanup + br label %rethrow + +rethrow: + %lp = phi { i8*, i32 } [%0, %lpad1], [%1, %lpad2] + resume { i8*, i32 } %lp + +lpad2: + %1 = landingpad { i8*, i32 } + cleanup + br label %rethrow +} + declare i32 @__gxx_personality_v0(...) |