mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 22:04:55 +00:00
Remove some now-unused DominanceFrontier methods.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123726 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
301278719b
commit
72d1695f12
@ -182,33 +182,6 @@ public:
|
||||
AU.addRequired<DominatorTree>();
|
||||
}
|
||||
|
||||
/// splitBlock - BB is split and now it has one successor. Update dominance
|
||||
/// frontier to reflect this change.
|
||||
void splitBlock(BasicBlock *BB);
|
||||
|
||||
/// BasicBlock BB's new dominator is NewBB. Update BB's dominance frontier
|
||||
/// to reflect this change.
|
||||
void changeImmediateDominator(BasicBlock *BB, BasicBlock *NewBB,
|
||||
DominatorTree *DT) {
|
||||
// NewBB is now dominating BB. Which means BB's dominance
|
||||
// frontier is now part of NewBB's dominance frontier. However, BB
|
||||
// itself is not member of NewBB's dominance frontier.
|
||||
DominanceFrontier::iterator NewDFI = find(NewBB);
|
||||
DominanceFrontier::iterator DFI = find(BB);
|
||||
// If BB was an entry block then its frontier is empty.
|
||||
if (DFI == end())
|
||||
return;
|
||||
DominanceFrontier::DomSetType BBSet = DFI->second;
|
||||
for (DominanceFrontier::DomSetType::iterator BBSetI = BBSet.begin(),
|
||||
BBSetE = BBSet.end(); BBSetI != BBSetE; ++BBSetI) {
|
||||
BasicBlock *DFMember = *BBSetI;
|
||||
// Insert only if NewBB dominates DFMember.
|
||||
if (!DT->dominates(NewBB, DFMember))
|
||||
NewDFI->second.insert(DFMember);
|
||||
}
|
||||
NewDFI->second.erase(BB);
|
||||
}
|
||||
|
||||
const DomSetType &calculate(const DominatorTree &DT,
|
||||
const DomTreeNode *Node);
|
||||
};
|
||||
|
@ -131,130 +131,6 @@ void DominanceFrontier::verifyAnalysis() const {
|
||||
assert(!compare(OtherDF) && "Invalid DominanceFrontier info!");
|
||||
}
|
||||
|
||||
// NewBB is split and now it has one successor. Update dominance frontier to
|
||||
// reflect this change.
|
||||
void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
|
||||
assert(NewBB->getTerminator()->getNumSuccessors() == 1 &&
|
||||
"NewBB should have a single successor!");
|
||||
BasicBlock *NewBBSucc = NewBB->getTerminator()->getSuccessor(0);
|
||||
|
||||
// NewBBSucc inherits original NewBB frontier.
|
||||
DominanceFrontier::iterator NewBBI = find(NewBB);
|
||||
if (NewBBI != end())
|
||||
addBasicBlock(NewBBSucc, NewBBI->second);
|
||||
|
||||
// If NewBB dominates NewBBSucc, then DF(NewBB) is now going to be the
|
||||
// DF(NewBBSucc) without the stuff that the new block does not dominate
|
||||
// a predecessor of.
|
||||
DominatorTree &DT = getAnalysis<DominatorTree>();
|
||||
DomTreeNode *NewBBNode = DT.getNode(NewBB);
|
||||
DomTreeNode *NewBBSuccNode = DT.getNode(NewBBSucc);
|
||||
if (DT.dominates(NewBBNode, NewBBSuccNode)) {
|
||||
DominanceFrontier::iterator DFI = find(NewBBSucc);
|
||||
if (DFI != end()) {
|
||||
DominanceFrontier::DomSetType Set = DFI->second;
|
||||
// Filter out stuff in Set that we do not dominate a predecessor of.
|
||||
for (DominanceFrontier::DomSetType::iterator SetI = Set.begin(),
|
||||
E = Set.end(); SetI != E;) {
|
||||
bool DominatesPred = false;
|
||||
for (pred_iterator PI = pred_begin(*SetI), E = pred_end(*SetI);
|
||||
PI != E; ++PI)
|
||||
if (DT.dominates(NewBBNode, DT.getNode(*PI))) {
|
||||
DominatesPred = true;
|
||||
break;
|
||||
}
|
||||
if (!DominatesPred)
|
||||
Set.erase(SetI++);
|
||||
else
|
||||
++SetI;
|
||||
}
|
||||
|
||||
if (NewBBI != end()) {
|
||||
for (DominanceFrontier::DomSetType::iterator SetI = Set.begin(),
|
||||
E = Set.end(); SetI != E; ++SetI) {
|
||||
BasicBlock *SB = *SetI;
|
||||
addToFrontier(NewBBI, SB);
|
||||
}
|
||||
} else
|
||||
addBasicBlock(NewBB, Set);
|
||||
}
|
||||
|
||||
} else {
|
||||
// DF(NewBB) is {NewBBSucc} because NewBB does not strictly dominate
|
||||
// NewBBSucc, but it does dominate itself (and there is an edge (NewBB ->
|
||||
// NewBBSucc)). NewBBSucc is the single successor of NewBB.
|
||||
DominanceFrontier::DomSetType NewDFSet;
|
||||
NewDFSet.insert(NewBBSucc);
|
||||
addBasicBlock(NewBB, NewDFSet);
|
||||
}
|
||||
|
||||
// Now update dominance frontiers which either used to contain NewBBSucc
|
||||
// or which now need to include NewBB.
|
||||
|
||||
// Collect the set of blocks which dominate a predecessor of NewBB or
|
||||
// NewSuccBB and which don't dominate both. This is an initial
|
||||
// approximation of the blocks whose dominance frontiers will need updates.
|
||||
SmallVector<DomTreeNode *, 16> AllPredDoms;
|
||||
|
||||
// Compute the block which dominates both NewBBSucc and NewBB. This is
|
||||
// the immediate dominator of NewBBSucc unless NewBB dominates NewBBSucc.
|
||||
// The code below which climbs dominator trees will stop at this point,
|
||||
// because from this point up, dominance frontiers are unaffected.
|
||||
DomTreeNode *DominatesBoth = 0;
|
||||
if (NewBBSuccNode) {
|
||||
DominatesBoth = NewBBSuccNode->getIDom();
|
||||
if (DominatesBoth == NewBBNode)
|
||||
DominatesBoth = NewBBNode->getIDom();
|
||||
}
|
||||
|
||||
// Collect the set of all blocks which dominate a predecessor of NewBB.
|
||||
SmallPtrSet<DomTreeNode *, 8> NewBBPredDoms;
|
||||
for (pred_iterator PI = pred_begin(NewBB), E = pred_end(NewBB); PI != E; ++PI)
|
||||
for (DomTreeNode *DTN = DT.getNode(*PI); DTN; DTN = DTN->getIDom()) {
|
||||
if (DTN == DominatesBoth)
|
||||
break;
|
||||
if (!NewBBPredDoms.insert(DTN))
|
||||
break;
|
||||
AllPredDoms.push_back(DTN);
|
||||
}
|
||||
|
||||
// Collect the set of all blocks which dominate a predecessor of NewSuccBB.
|
||||
SmallPtrSet<DomTreeNode *, 8> NewBBSuccPredDoms;
|
||||
for (pred_iterator PI = pred_begin(NewBBSucc),
|
||||
E = pred_end(NewBBSucc); PI != E; ++PI)
|
||||
for (DomTreeNode *DTN = DT.getNode(*PI); DTN; DTN = DTN->getIDom()) {
|
||||
if (DTN == DominatesBoth)
|
||||
break;
|
||||
if (!NewBBSuccPredDoms.insert(DTN))
|
||||
break;
|
||||
if (!NewBBPredDoms.count(DTN))
|
||||
AllPredDoms.push_back(DTN);
|
||||
}
|
||||
|
||||
// Visit all relevant dominance frontiers and make any needed updates.
|
||||
for (SmallVectorImpl<DomTreeNode *>::const_iterator I = AllPredDoms.begin(),
|
||||
E = AllPredDoms.end(); I != E; ++I) {
|
||||
DomTreeNode *DTN = *I;
|
||||
iterator DFI = find((*I)->getBlock());
|
||||
|
||||
// Only consider nodes that have NewBBSucc in their dominator frontier.
|
||||
if (DFI == end() || !DFI->second.count(NewBBSucc)) continue;
|
||||
|
||||
// If the block dominates a predecessor of NewBB but does not properly
|
||||
// dominate NewBB itself, add NewBB to its dominance frontier.
|
||||
if (NewBBPredDoms.count(DTN) &&
|
||||
!DT.properlyDominates(DTN, NewBBNode))
|
||||
addToFrontier(DFI, NewBB);
|
||||
|
||||
// If the block does not dominate a predecessor of NewBBSucc or
|
||||
// properly dominates NewBBSucc itself, remove NewBBSucc from its
|
||||
// dominance frontier.
|
||||
if (!NewBBSuccPredDoms.count(DTN) ||
|
||||
DT.properlyDominates(DTN, NewBBSuccNode))
|
||||
removeFromFrontier(DFI, NewBBSucc);
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
class DFCalculateWorkObject {
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user