diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineDominators.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineDominators.cpp | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/llvm/lib/CodeGen/MachineDominators.cpp b/llvm/lib/CodeGen/MachineDominators.cpp index a2cc8fdfa7c9..67a91c87bb1b 100644 --- a/llvm/lib/CodeGen/MachineDominators.cpp +++ b/llvm/lib/CodeGen/MachineDominators.cpp @@ -95,12 +95,6 @@ MachineDominatorTreeWrapperPass::MachineDominatorTreeWrapperPass() *PassRegistry::getPassRegistry()); } -void MachineDominatorTree::calculate(MachineFunction &F) { - CriticalEdgesToSplit.clear(); - NewBBs.clear(); - recalculate(F); -} - char &llvm::MachineDominatorsID = MachineDominatorTreeWrapperPass::ID; bool MachineDominatorTreeWrapperPass::runOnMachineFunction(MachineFunction &F) { @@ -121,71 +115,3 @@ void MachineDominatorTreeWrapperPass::print(raw_ostream &OS, if (DT) DT->print(OS); } - -void MachineDominatorTree::applySplitCriticalEdges() const { - // Bail out early if there is nothing to do. - if (CriticalEdgesToSplit.empty()) - return; - - // For each element in CriticalEdgesToSplit, remember whether or not element - // is the new immediate domminator of its successor. The mapping is done by - // index, i.e., the information for the ith element of CriticalEdgesToSplit is - // the ith element of IsNewIDom. - SmallBitVector IsNewIDom(CriticalEdgesToSplit.size(), true); - size_t Idx = 0; - - // Collect all the dominance properties info, before invalidating - // the underlying DT. - for (CriticalEdge &Edge : CriticalEdgesToSplit) { - // Update dominator information. - MachineBasicBlock *Succ = Edge.ToBB; - MachineDomTreeNode *SuccDTNode = Base::getNode(Succ); - - for (MachineBasicBlock *PredBB : Succ->predecessors()) { - if (PredBB == Edge.NewBB) - continue; - // If we are in this situation: - // FromBB1 FromBB2 - // + + - // + + + + - // + + + + - // ... Split1 Split2 ... - // + + - // + + - // + - // Succ - // Instead of checking the domiance property with Split2, we check it with - // FromBB2 since Split2 is still unknown of the underlying DT structure. - if (NewBBs.count(PredBB)) { - assert(PredBB->pred_size() == 1 && "A basic block resulting from a " - "critical edge split has more " - "than one predecessor!"); - PredBB = *PredBB->pred_begin(); - } - if (!Base::dominates(SuccDTNode, Base::getNode(PredBB))) { - IsNewIDom[Idx] = false; - break; - } - } - ++Idx; - } - - // Now, update DT with the collected dominance properties info. - Idx = 0; - for (CriticalEdge &Edge : CriticalEdgesToSplit) { - // We know FromBB dominates NewBB. - MachineDomTreeNode *NewDTNode = - const_cast<MachineDominatorTree *>(this)->Base::addNewBlock( - Edge.NewBB, Edge.FromBB); - - // If all the other predecessors of "Succ" are dominated by "Succ" itself - // then the new block is the new immediate dominator of "Succ". Otherwise, - // the new block doesn't dominate anything. - if (IsNewIDom[Idx]) - const_cast<MachineDominatorTree *>(this)->Base::changeImmediateDominator( - Base::getNode(Edge.ToBB), NewDTNode); - ++Idx; - } - NewBBs.clear(); - CriticalEdgesToSplit.clear(); -} |
