xref: /llvm-project/llvm/lib/CodeGen/MachineDominators.cpp (revision 906152a20f68a942f64a27bf31e5c5232b444e8f)
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 TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>);
21 TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>);
22 
23 char MachineDominatorTree::ID = 0;
24 
25 static RegisterPass<MachineDominatorTree>
26 E("machinedomtree", "MachineDominator Tree Construction", true);
27 
28 const PassInfo *const llvm::MachineDominatorsID = &E;
29 
30 void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const {
31   AU.setPreservesAll();
32   MachineFunctionPass::getAnalysisUsage(AU);
33 }
34 
35 bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) {
36   DT->recalculate(F);
37 
38   return false;
39 }
40 
41 MachineDominatorTree::MachineDominatorTree()
42     : MachineFunctionPass(intptr_t(&ID)) {
43   DT = new DominatorTreeBase<MachineBasicBlock>(false);
44 }
45 
46 MachineDominatorTree::~MachineDominatorTree() {
47   DT->releaseMemory();
48   delete DT;
49 }
50 
51 void MachineDominatorTree::releaseMemory() {
52   DT->releaseMemory();
53 }
54