Home | History | Annotate | Download | only in CodeGen
      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