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 32 void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const { 33 AU.setPreservesAll(); 34 MachineFunctionPass::getAnalysisUsage(AU); 35 } 36 37 bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) { 38 DT->recalculate(F); 39 40 return false; 41 } 42 43 MachineDominatorTree::MachineDominatorTree() 44 : MachineFunctionPass(ID) { 45 initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); 46 DT = new DominatorTreeBase<MachineBasicBlock>(false); 47 } 48 49 MachineDominatorTree::~MachineDominatorTree() { 50 delete DT; 51 } 52 53 void MachineDominatorTree::releaseMemory() { 54 DT->releaseMemory(); 55 } 56 57 void MachineDominatorTree::print(raw_ostream &OS, const Module*) const { 58 DT->print(OS); 59 } 60