mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-18 16:03:17 +00:00
Revert changes that caused breakage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36255 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
325171eed8
commit
a65064bb3d
@ -68,7 +68,7 @@ public:
|
|||||||
// can be marked live that wouldn't necessarily be otherwise.
|
// can be marked live that wouldn't necessarily be otherwise.
|
||||||
AU.addRequired<UnifyFunctionExitNodes>();
|
AU.addRequired<UnifyFunctionExitNodes>();
|
||||||
AU.addRequired<AliasAnalysis>();
|
AU.addRequired<AliasAnalysis>();
|
||||||
AU.addRequired<PostETForest>();
|
AU.addRequired<PostDominatorTree>();
|
||||||
AU.addRequired<PostDominanceFrontier>();
|
AU.addRequired<PostDominanceFrontier>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,8 +246,8 @@ bool ADCE::doADCE() {
|
|||||||
// have any post-dominance information, thus we cannot perform our
|
// have any post-dominance information, thus we cannot perform our
|
||||||
// transformations safely.
|
// transformations safely.
|
||||||
//
|
//
|
||||||
PostETForest &ET = getAnalysis<PostETForest>();
|
PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
|
||||||
if (ET.getNodeForBlock(&Func->getEntryBlock()) == 0) {
|
if (DT[&Func->getEntryBlock()] == 0) {
|
||||||
WorkList.clear();
|
WorkList.clear();
|
||||||
return MadeChanges;
|
return MadeChanges;
|
||||||
}
|
}
|
||||||
@ -258,7 +258,7 @@ bool ADCE::doADCE() {
|
|||||||
// function which unwinds, exits or has side-effects, we don't want to delete
|
// function which unwinds, exits or has side-effects, we don't want to delete
|
||||||
// the infinite loop or those blocks leading up to it.
|
// the infinite loop or those blocks leading up to it.
|
||||||
for (Function::iterator I = Func->begin(), E = Func->end(); I != E; ++I)
|
for (Function::iterator I = Func->begin(), E = Func->end(); I != E; ++I)
|
||||||
if (ET.getNodeForBlock(I) == 0 && ReachableBBs.count(I))
|
if (DT[I] == 0 && ReachableBBs.count(I))
|
||||||
for (pred_iterator PI = pred_begin(I), E = pred_end(I); PI != E; ++PI)
|
for (pred_iterator PI = pred_begin(I), E = pred_end(I); PI != E; ++PI)
|
||||||
markInstructionLive((*PI)->getTerminator());
|
markInstructionLive((*PI)->getTerminator());
|
||||||
|
|
||||||
@ -383,16 +383,16 @@ bool ADCE::doADCE() {
|
|||||||
// postdominator that is alive, and the last postdominator that is
|
// postdominator that is alive, and the last postdominator that is
|
||||||
// dead...
|
// dead...
|
||||||
//
|
//
|
||||||
BasicBlock *LastDead = TI->getSuccessor(i);
|
PostDominatorTree::Node *LastNode = DT[TI->getSuccessor(i)];
|
||||||
BasicBlock *NextAlive = 0;
|
PostDominatorTree::Node *NextNode = 0;
|
||||||
|
|
||||||
if (LastDead) {
|
if (LastNode) {
|
||||||
NextAlive = ET.getIDom(LastDead);
|
NextNode = LastNode->getIDom();
|
||||||
while (!AliveBlocks.count(NextAlive)) {
|
while (!AliveBlocks.count(NextNode->getBlock())) {
|
||||||
LastDead = NextAlive;
|
LastNode = NextNode;
|
||||||
NextAlive = ET.getIDom(NextAlive);
|
NextNode = NextNode->getIDom();
|
||||||
if (NextAlive == 0) {
|
if (NextNode == 0) {
|
||||||
LastDead = 0;
|
LastNode = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -406,7 +406,7 @@ bool ADCE::doADCE() {
|
|||||||
// drawback of ADCE, so in the future if we choose to revisit the
|
// drawback of ADCE, so in the future if we choose to revisit the
|
||||||
// decision, this is where it should be.
|
// decision, this is where it should be.
|
||||||
//
|
//
|
||||||
if (LastDead == 0) { // No postdominator!
|
if (LastNode == 0) { // No postdominator!
|
||||||
if (!isa<InvokeInst>(TI)) {
|
if (!isa<InvokeInst>(TI)) {
|
||||||
// Call RemoveSuccessor to transmogrify the terminator instruction
|
// Call RemoveSuccessor to transmogrify the terminator instruction
|
||||||
// to not contain the outgoing branch, or to create a new
|
// to not contain the outgoing branch, or to create a new
|
||||||
@ -427,6 +427,10 @@ bool ADCE::doADCE() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// Get the basic blocks that we need...
|
||||||
|
BasicBlock *LastDead = LastNode->getBlock();
|
||||||
|
BasicBlock *NextAlive = NextNode->getBlock();
|
||||||
|
|
||||||
// Make the conditional branch now go to the next alive block...
|
// Make the conditional branch now go to the next alive block...
|
||||||
TI->getSuccessor(i)->removePredecessor(BB);
|
TI->getSuccessor(i)->removePredecessor(BB);
|
||||||
TI->setSuccessor(i, NextAlive);
|
TI->setSuccessor(i, NextAlive);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user