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