//===- 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); TEMPLATE_INSTANTIATION(class DominatorTreeBase); } 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) { CriticalEdgesToSplit.clear(); NewBBs.clear(); DT->recalculate(F); return false; } MachineDominatorTree::MachineDominatorTree() : MachineFunctionPass(ID) { initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); DT = new DominatorTreeBase(false); } MachineDominatorTree::~MachineDominatorTree() { delete DT; } void MachineDominatorTree::releaseMemory() { DT->releaseMemory(); } void MachineDominatorTree::print(raw_ostream &OS, const Module*) const { DT->print(OS); }