mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
When one branch of condition is eliminated then head of the other
branch is not necessary immediate dominators of merge blcok in all cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41144 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -438,6 +438,26 @@ public:
|
||||
/// 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);
|
||||
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);
|
||||
}
|
||||
|
||||
private:
|
||||
const DomSetType &calculate(const DominatorTree &DT,
|
||||
const DomTreeNode *Node);
|
||||
|
Reference in New Issue
Block a user