summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-04-15 00:43:54 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-04-15 00:43:54 +0000
commitffb83a155e4866979b60cb33ecb8a33b66db3549 (patch)
treea3d1bfffeb9ae5ba7b00256dc787fe176eb4df4c /llvm
parent67fdb085b974726d682ef58b1b61b724520b406d (diff)
downloadbcm5719-llvm-ffb83a155e4866979b60cb33ecb8a33b66db3549.tar.gz
bcm5719-llvm-ffb83a155e4866979b60cb33ecb8a33b66db3549.zip
Avoid making the transformation enabled by my last patch if the new destinations have phi nodes.
llvm-svn: 69121
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/CondPropagate.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/CondPropagate.cpp b/llvm/lib/Transforms/Scalar/CondPropagate.cpp
index 8df2b6c82f6..c85d0317d65 100644
--- a/llvm/lib/Transforms/Scalar/CondPropagate.cpp
+++ b/llvm/lib/Transforms/Scalar/CondPropagate.cpp
@@ -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);
OpenPOWER on IntegriCloud