summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2010-12-13 23:49:28 +0000
committerOwen Anderson <resistor@mac.com>2010-12-13 23:49:28 +0000
commit3e5648896e87caf09026e1ed64aa55b0bfe86b66 (patch)
tree3854d5cad4526232376f013b965c30fcdc0c7f71 /llvm/lib/Transforms/Utils/SimplifyCFG.cpp
parent0e909c5f9cee866b65e5789bc7a937dbbe92f3f5 (diff)
downloadbcm5719-llvm-3e5648896e87caf09026e1ed64aa55b0bfe86b66.tar.gz
bcm5719-llvm-3e5648896e87caf09026e1ed64aa55b0bfe86b66.zip
Fix recent buildbot breakage by pulling SimplifyCFG back to its state as of r121694, the most recent state
where I'm confident there were no crashes or miscompilations. XFAIL the test added since then for now. llvm-svn: 121733
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp20
1 files changed, 6 insertions, 14 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 61ddc7c0d4a..ca690e7f870 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -1515,7 +1515,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
AddPredecessorToBlock(FalseDest, PredBlock, BB);
PBI->setSuccessor(1, FalseDest);
}
- return SimplifyCFG(BB) | true;
+ return SimplifyCFG(PBI->getParent()) | true;
}
return false;
}
@@ -1905,25 +1905,17 @@ static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD) {
BasicBlock *BB = BI->getParent();
- DEBUG(dbgs() << "CONVERTING 'icmp' CHAIN with " << Values.size()
- << " cases into SWITCH. BB is:\n" << *BB);
-
// If there are any extra values that couldn't be folded into the switch
// then we evaluate them with an explicit branch first. Split the block
// right before the condbr to handle it.
if (ExtraCase) {
- DEBUG(dbgs() << " ** 'icmp' chain unhandled condition: " << *ExtraCase
- << '\n');
+ return false;
BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test");
// Remove the uncond branch added to the old block.
TerminatorInst *OldTI = BB->getTerminator();
- if (TrueWhenEqual)
- BranchInst::Create(EdgeBB, NewBB, ExtraCase, OldTI);
- else
- BranchInst::Create(NewBB, EdgeBB, ExtraCase, OldTI);
-
+ BranchInst::Create(EdgeBB, NewBB, ExtraCase, OldTI);
OldTI->eraseFromParent();
// If there are PHI nodes in EdgeBB, then we need to add a new entry to them
@@ -1963,7 +1955,6 @@ static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD) {
// Erase the old branch instruction.
EraseTerminatorInstAndDCECond(BI);
-
return true;
}
@@ -2367,7 +2358,7 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI) {
// branches to us and one of our successors, fold the setcc into the
// predecessor and use logical operations to pick the right destination.
if (FoldBranchToCommonDest(BI))
- return true;
+ return SimplifyCFG(BB) | true;
// Scan predecessor blocks for conditional branches.
for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
@@ -2419,7 +2410,8 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) {
if (BI->isUnconditional()) {
if (SimplifyUncondBranch(BI)) return true;
} else {
- if (SimplifyCondBranch(BI)) return true;
+ if (SimplifyCondBranch(BI))
+ return true;
}
} else if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
if (SimplifyReturn(RI)) return true;
OpenPOWER on IntegriCloud