Avoid making the transformation enabled by my last patch if the new destinations have phi nodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69121 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2009-04-15 00:43:54 +00:00
parent 517576d6f9
commit aa230a41dc

View 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 {
// Insert the new conditional branch.
BranchInst::Create(BI->getSuccessor(0), BI->getSuccessor(1), Cond, FromBr);
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;
FoldSingleEntryPHINodes(BI->getSuccessor(0));
FoldSingleEntryPHINodes(BI->getSuccessor(1));
BasicBlock *Succ1 = BI->getSuccessor(1);
if (isa<PHINode>(Succ1->begin()))
return false;
// Insert the new conditional branch.
BranchInst::Create(Succ0, Succ1, Cond, FromBr);
FoldSingleEntryPHINodes(Succ0);
FoldSingleEntryPHINodes(Succ1);
// Update PHI nodes in OldSucc to know that FromBB no longer branches to it.
OldSucc->removePredecessor(FromBB);