1 //===- MachineDominators.cpp - Machine Dominator Calculation --------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements simple dominator construction algorithms for finding 11 // forward dominators on machine functions. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/CodeGen/MachineDominators.h" 16 #include "llvm/CodeGen/Passes.h" 17 18 using namespace llvm; 19 20 namespace llvm { 21 TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>); 22 TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>); 23 } 24 25 char MachineDominatorTree::ID = 0; 26 27 INITIALIZE_PASS(MachineDominatorTree, "machinedomtree", 28 "MachineDominator Tree Construction", true, true) 29 30 char &llvm::MachineDominatorsID = MachineDominatorTree::ID; 31 getAnalysisUsage(AnalysisUsage & AU) const32void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const { 33 AU.setPreservesAll(); 34 MachineFunctionPass::getAnalysisUsage(AU); 35 } 36 runOnMachineFunction(MachineFunction & F)37bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) { 38 CriticalEdgesToSplit.clear(); 39 NewBBs.clear(); 40 DT->recalculate(F); 41 42 return false; 43 } 44 MachineDominatorTree()45MachineDominatorTree::MachineDominatorTree() 46 : MachineFunctionPass(ID) { 47 initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); 48 DT = new DominatorTreeBase<MachineBasicBlock>(false); 49 } 50 ~MachineDominatorTree()51MachineDominatorTree::~MachineDominatorTree() { 52 delete DT; 53 } 54 releaseMemory()55void MachineDominatorTree::releaseMemory() { 56 DT->releaseMemory(); 57 } 58 print(raw_ostream & OS,const Module *) const59void MachineDominatorTree::print(raw_ostream &OS, const Module*) const { 60 DT->print(OS); 61 } 62