1 //===- MachinePostDominators.cpp -Machine Post 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 // post dominators on machine functions. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/CodeGen/MachinePostDominators.h" 16 17 using namespace llvm; 18 19 namespace llvm { 20 template class DominatorTreeBase<MachineBasicBlock, true>; // PostDomTreeBase 21 } 22 23 char MachinePostDominatorTree::ID = 0; 24 25 //declare initializeMachinePostDominatorTreePass 26 INITIALIZE_PASS(MachinePostDominatorTree, "machinepostdomtree", 27 "MachinePostDominator Tree Construction", true, true) 28 MachinePostDominatorTree()29MachinePostDominatorTree::MachinePostDominatorTree() : MachineFunctionPass(ID) { 30 initializeMachinePostDominatorTreePass(*PassRegistry::getPassRegistry()); 31 DT = new PostDomTreeBase<MachineBasicBlock>(); 32 } 33 34 FunctionPass * createMachinePostDominatorTreePass()35MachinePostDominatorTree::createMachinePostDominatorTreePass() { 36 return new MachinePostDominatorTree(); 37 } 38 39 bool runOnMachineFunction(MachineFunction & F)40MachinePostDominatorTree::runOnMachineFunction(MachineFunction &F) { 41 DT->recalculate(F); 42 return false; 43 } 44 ~MachinePostDominatorTree()45MachinePostDominatorTree::~MachinePostDominatorTree() { 46 delete DT; 47 } 48 49 void getAnalysisUsage(AnalysisUsage & AU) const50MachinePostDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const { 51 AU.setPreservesAll(); 52 MachineFunctionPass::getAnalysisUsage(AU); 53 } 54 55 void print(llvm::raw_ostream & OS,const Module * M) const56MachinePostDominatorTree::print(llvm::raw_ostream &OS, const Module *M) const { 57 DT->print(OS); 58 } 59