Update dom tree. Fix PR 2372.
authorDevang Patel <dpatel@apple.com>
Mon, 2 Jun 2008 22:52:56 +0000 (22:52 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 2 Jun 2008 22:52:56 +0000 (22:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51887 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopUnswitch.cpp
test/Transforms/LoopUnswitch/2008-06-02-DomInfo.ll [new file with mode: 0644]

index 767ea1d30eea832ea50827e7d18e3d9e674a0f62..e0fb4c614d9618566c84753be373bcd657e7aa79 100644 (file)
@@ -569,7 +569,6 @@ void LoopUnswitch::EmitPreheaderBranchOnCondition(Value *LIC, Constant *Val,
 
   // Insert the new branch.
   BranchInst::Create(TrueDest, FalseDest, BranchVal, InsertPt);
-
 }
 
 
@@ -607,6 +606,10 @@ void LoopUnswitch::UnswitchTrivialCondition(Loop *L, Value *Cond,
   // insert the new conditional branch.
   EmitPreheaderBranchOnCondition(Cond, Val, NewExit, NewPH, 
                                  OrigPH->getTerminator());
+  if (DT) {
+    DT->changeImmediateDominator(NewExit, OrigPH);
+    DT->changeImmediateDominator(NewPH, OrigPH);
+  }
   LPM->deleteSimpleAnalysisValue(OrigPH->getTerminator(), L);
   OrigPH->getTerminator()->eraseFromParent();
 
diff --git a/test/Transforms/LoopUnswitch/2008-06-02-DomInfo.ll b/test/Transforms/LoopUnswitch/2008-06-02-DomInfo.ll
new file mode 100644 (file)
index 0000000..dcf41c3
--- /dev/null
@@ -0,0 +1,26 @@
+; RUN: llvm-as < %s | opt -loop-unswitch -instcombine -gvn -disable-output
+; PR2372
+target triple = "i386-pc-linux-gnu"
+
+define i32 @func_3(i16 signext  %p_5, i16 signext  %p_6) nounwind  {
+entry:
+       %tmp3 = icmp eq i16 %p_5, 0             ; <i1> [#uses=1]
+       %tmp1314 = sext i16 %p_6 to i32         ; <i32> [#uses=1]
+       %tmp28 = icmp ugt i32 %tmp1314, 3               ; <i1> [#uses=1]
+       %bothcond = or i1 %tmp28, false         ; <i1> [#uses=1]
+       br label %bb
+bb:            ; preds = %bb54, %entry
+       br i1 %tmp3, label %bb54, label %bb5
+bb5:           ; preds = %bb
+       br i1 %bothcond, label %bb54, label %bb31
+bb31:          ; preds = %bb5
+       br label %bb54
+bb54:          ; preds = %bb31, %bb5, %bb
+       br i1 false, label %bb64, label %bb
+bb64:          ; preds = %bb54
+       %tmp6566 = sext i16 %p_6 to i32         ; <i32> [#uses=1]
+       %tmp68 = tail call i32 (...)* @func_18( i32 1, i32 %tmp6566, i32 1 ) nounwind           ; <i32> [#uses=0]
+       ret i32 undef
+}
+
+declare i32 @func_18(...)