//===- MachineDominators.cpp - Machine Dominator Calculation --------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file implements simple dominator construction algorithms for finding // forward dominators on machine functions. // //===----------------------------------------------------------------------===// #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/Passes.h" using namespace llvm; namespace llvm { TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>); TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>); } char MachineDominatorTree::ID = 0; INITIALIZE_PASS(MachineDominatorTree, "machinedomtree", "MachineDominator Tree Construction", true, true) char &llvm::MachineDominatorsID = MachineDominatorTree::ID; void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); MachineFunctionPass::getAnalysisUsage(AU); } bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) { DT->recalculate(F); return false; } MachineDominatorTree::MachineDominatorTree() : MachineFunctionPass(ID) { initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); DT = new DominatorTreeBase<MachineBasicBlock>(false); } MachineDominatorTree::~MachineDominatorTree() { delete DT; } void MachineDominatorTree::releaseMemory() { DT->releaseMemory(); } void MachineDominatorTree::print(raw_ostream &OS, const Module*) const { DT->print(OS); }