mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-19 11:41:53 +00:00
strengthen an assumption: RevectorBlockTo knows that PredBB
ended in an uncond branch because the pass requires BreakCriticalEdges. However, BCE doesn't eliminate critical adges from indbrs. llvm-svn: 85707
This commit is contained in:
parent
baa216cd33
commit
746b4c0b20
@ -196,18 +196,20 @@ void CondProp::SimplifyPredecessors(SwitchInst *SI) {
|
||||
// possible, and to avoid invalidating "i".
|
||||
for (unsigned i = PN->getNumIncomingValues(); i != 0; --i)
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(PN->getIncomingValue(i-1))) {
|
||||
// If we have a constant, forward the edge from its current to its
|
||||
// ultimate destination.
|
||||
unsigned DestCase = SI->findCaseValue(CI);
|
||||
RevectorBlockTo(PN->getIncomingBlock(i-1),
|
||||
SI->getSuccessor(DestCase));
|
||||
++NumSwThread;
|
||||
BasicBlock *PredBB = PN->getIncomingBlock(i-1);
|
||||
if (isa<BranchInst>(PredBB->getTerminator())) {
|
||||
// If we have a constant, forward the edge from its current to its
|
||||
// ultimate destination.
|
||||
unsigned DestCase = SI->findCaseValue(CI);
|
||||
RevectorBlockTo(PredBB, SI->getSuccessor(DestCase));
|
||||
++NumSwThread;
|
||||
|
||||
// If there were two predecessors before this simplification, or if the
|
||||
// PHI node contained all the same value except for the one we just
|
||||
// substituted, the PHI node may be deleted. Don't iterate through it the
|
||||
// last time.
|
||||
if (SI->getCondition() != PN) return;
|
||||
// If there were two predecessors before this simplification, or if the
|
||||
// PHI node contained all the same value except for the one we just
|
||||
// substituted, the PHI node may be deleted. Don't iterate through it the
|
||||
// last time.
|
||||
if (SI->getCondition() != PN) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user