Remove ImmediateDominator analysis. The same information can be obtained from DomTree. A lot of code for

constructing ImmediateDominator is now folded into DomTree construction.

This is part of the ongoing work for PR217.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36063 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson
2007-04-15 08:47:27 +00:00
parent 2aabd0722d
commit 3dc6776b33
8 changed files with 136 additions and 348 deletions

View File

@ -38,7 +38,6 @@ namespace {
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addPreserved<ETForest>();
AU.addPreserved<ImmediateDominators>();
AU.addPreserved<DominatorTree>();
AU.addPreserved<DominanceFrontier>();
AU.addPreserved<LoopInfo>();
@ -196,29 +195,6 @@ bool llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P,
if (NewBBDominatesDestBB)
EF->setImmediateDominator(DestBB, NewBB);
}
// Should we update ImmediateDominator information?
if (ImmediateDominators *ID = P->getAnalysisToUpdate<ImmediateDominators>()) {
// Only do this if TIBB is reachable.
if (ID->get(TIBB) || &TIBB->getParent()->getEntryBlock() == TIBB) {
// TIBB is the new immediate dominator for NewBB.
ID->addNewBlock(NewBB, TIBB);
// If NewBBDominatesDestBB hasn't been computed yet, do so with ID.
if (!OtherPreds.empty()) {
while (!OtherPreds.empty() && NewBBDominatesDestBB) {
NewBBDominatesDestBB = ID->dominates(DestBB, OtherPreds.back());
OtherPreds.pop_back();
}
OtherPreds.clear();
}
// If NewBBDominatesDestBB, then NewBB dominates DestBB, otherwise it
// doesn't dominate anything.
if (NewBBDominatesDestBB)
ID->setImmediateDominator(DestBB, NewBB);
}
}
// Should we update DominatorTree information?
if (DominatorTree *DT = P->getAnalysisToUpdate<DominatorTree>()) {