MachineDominators.cpp revision 198090
117721Speter//===- MachineDominators.cpp - Machine Dominator Calculation --------------===//
217721Speter//
317721Speter//                     The LLVM Compiler Infrastructure
417721Speter//
517721Speter// This file is distributed under the University of Illinois Open Source
617721Speter// License. See LICENSE.TXT for details.
717721Speter//
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
18using namespace llvm;
19
20TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>);
21TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>);
22
23char MachineDominatorTree::ID = 0;
24
25static RegisterPass<MachineDominatorTree>
26E("machinedomtree", "MachineDominator Tree Construction", true);
27
28const PassInfo *const llvm::MachineDominatorsID = &E;
29
30void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const {
31  AU.setPreservesAll();
32  MachineFunctionPass::getAnalysisUsage(AU);
33}
34
35bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) {
36  DT->recalculate(F);
37
38  return false;
39}
40
41MachineDominatorTree::MachineDominatorTree()
42    : MachineFunctionPass(&ID) {
43  DT = new DominatorTreeBase<MachineBasicBlock>(false);
44}
45
46MachineDominatorTree::~MachineDominatorTree() {
47  DT->releaseMemory();
48  delete DT;
49}
50
51void MachineDominatorTree::releaseMemory() {
52  DT->releaseMemory();
53}
54
55void MachineDominatorTree::print(raw_ostream &OS, const Module*) const {
56  DT->print(OS);
57}
58