diff options
author | Bill Wendling <isanbard@gmail.com> | 2011-08-26 20:40:15 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2011-08-26 20:40:15 +0000 |
commit | 2b18881185b123e5f163eb7b32b3452fc3f339d8 (patch) | |
tree | 2a2138982a8173abbc0779cf995ca8a6aeb87ef5 | |
parent | 6ca06cd8a84b8df751c90264c2d595fd325fdfdb (diff) |
Don't sink landingpad instructions during ind-var simplification.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138651 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/IndVarSimplify.cpp | 4 | ||||
-rw-r--r-- | test/Transforms/IndVarSimplify/crash.ll | 32 |
2 files changed, 36 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 4433657bf9..b12a76acf8 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -1724,6 +1724,10 @@ void IndVarSimplify::SinkUnusedInvariants(Loop *L) { if (isa<DbgInfoIntrinsic>(I)) continue; + // Skip landingpad instructions. + if (isa<LandingPadInst>(I)) + continue; + // Don't sink static AllocaInsts out of the entry block, which would // turn them into dynamic allocas! if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) diff --git a/test/Transforms/IndVarSimplify/crash.ll b/test/Transforms/IndVarSimplify/crash.ll index 516fd8084d..949997884a 100644 --- a/test/Transforms/IndVarSimplify/crash.ll +++ b/test/Transforms/IndVarSimplify/crash.ll @@ -53,3 +53,35 @@ bb30: ; preds = %bb29 %2 = add nsw i32 %r.0, 1 ; <i32> [#uses=1] br label %bb24 } + +; PR10770 + +declare void @__go_panic() noreturn + +declare void @__go_undefer() + +declare i32 @__gccgo_personality_v0(i32, i64, i8*, i8*) + +define void @main.main() uwtable { +entry: + invoke void @__go_panic() noreturn + to label %0 unwind label %"5.i" + +; <label>:0 ; preds = %entry + unreachable + +"3.i": ; preds = %"7.i", %"5.i" + invoke void @__go_undefer() + to label %main.f.exit unwind label %"7.i" + +"5.i": ; preds = %entry + %1 = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__gccgo_personality_v0 + catch i8* null + br label %"3.i" + +"7.i": ; preds = %"3.i" + br label %"3.i" + +main.f.exit: ; preds = %"3.i" + unreachable +} |