Avoid making the transformation enabled by my last patch if the new destinations...
authorEvan Cheng <evan.cheng@apple.com>
Wed, 15 Apr 2009 00:43:54 +0000 (00:43 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 15 Apr 2009 00:43:54 +0000 (00:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69121 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/CondPropagate.cpp

index 8df2b6c82f6fcbfe114c48a002b89c26444f0111..c85d0317d65f8b588af7fedf55026df06cbcfa5a 100644 (file)
@@ -267,11 +267,21 @@ bool CondProp::RevectorBlockTo(BasicBlock *FromBB, Value *Cond, BranchInst *BI){
     // Change FromBr to branch to the new destination.
     FromBr->setSuccessor(0, ToBB);
   } else {
+    BasicBlock *Succ0 = BI->getSuccessor(0);
+    // Do not perform transform if the new destination has PHI nodes. The
+    // transform will add new preds to the PHI's.
+    if (isa<PHINode>(Succ0->begin()))
+      return false;
+
+    BasicBlock *Succ1 = BI->getSuccessor(1);
+    if (isa<PHINode>(Succ1->begin()))
+      return false;
+
     // Insert the new conditional branch.
-    BranchInst::Create(BI->getSuccessor(0), BI->getSuccessor(1), Cond, FromBr);
+    BranchInst::Create(Succ0, Succ1, Cond, FromBr);
 
-    FoldSingleEntryPHINodes(BI->getSuccessor(0));
-    FoldSingleEntryPHINodes(BI->getSuccessor(1));
+    FoldSingleEntryPHINodes(Succ0);
+    FoldSingleEntryPHINodes(Succ1);
 
     // Update PHI nodes in OldSucc to know that FromBB no longer branches to it.
     OldSucc->removePredecessor(FromBB);