1*4181ea36SMatt Arsenault //===- MachineDominanceFrontier.cpp ---------------------------------------===//
2*4181ea36SMatt Arsenault //
3*4181ea36SMatt Arsenault //                     The LLVM Compiler Infrastructure
4*4181ea36SMatt Arsenault //
5*4181ea36SMatt Arsenault // This file is distributed under the University of Illinois Open Source
6*4181ea36SMatt Arsenault // License. See LICENSE.TXT for details.
7*4181ea36SMatt Arsenault //
8*4181ea36SMatt Arsenault //===----------------------------------------------------------------------===//
9*4181ea36SMatt Arsenault 
10*4181ea36SMatt Arsenault #include "llvm/CodeGen/MachineDominanceFrontier.h"
11*4181ea36SMatt Arsenault #include "llvm/CodeGen/MachineDominators.h"
12*4181ea36SMatt Arsenault #include "llvm/Analysis/DominanceFrontierImpl.h"
13*4181ea36SMatt Arsenault #include "llvm/CodeGen/Passes.h"
14*4181ea36SMatt Arsenault 
15*4181ea36SMatt Arsenault 
16*4181ea36SMatt Arsenault using namespace llvm;
17*4181ea36SMatt Arsenault 
18*4181ea36SMatt Arsenault namespace llvm {
19*4181ea36SMatt Arsenault template class DominanceFrontierBase<MachineBasicBlock>;
20*4181ea36SMatt Arsenault template class ForwardDominanceFrontierBase<MachineBasicBlock>;
21*4181ea36SMatt Arsenault }
22*4181ea36SMatt Arsenault 
23*4181ea36SMatt Arsenault 
24*4181ea36SMatt Arsenault char MachineDominanceFrontier::ID = 0;
25*4181ea36SMatt Arsenault 
26*4181ea36SMatt Arsenault INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
27*4181ea36SMatt Arsenault                 "Machine Dominance Frontier Construction", true, true)
28*4181ea36SMatt Arsenault INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
29*4181ea36SMatt Arsenault INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
30*4181ea36SMatt Arsenault                 "Machine Dominance Frontier Construction", true, true)
31*4181ea36SMatt Arsenault 
32*4181ea36SMatt Arsenault MachineDominanceFrontier::MachineDominanceFrontier()
33*4181ea36SMatt Arsenault   : MachineFunctionPass(ID),
34*4181ea36SMatt Arsenault     Base() {
35*4181ea36SMatt Arsenault   initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry());
36*4181ea36SMatt Arsenault }
37*4181ea36SMatt Arsenault 
38*4181ea36SMatt Arsenault char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
39*4181ea36SMatt Arsenault 
40*4181ea36SMatt Arsenault bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
41*4181ea36SMatt Arsenault   releaseMemory();
42*4181ea36SMatt Arsenault   Base.analyze(getAnalysis<MachineDominatorTree>().getBase());
43*4181ea36SMatt Arsenault   return false;
44*4181ea36SMatt Arsenault }
45*4181ea36SMatt Arsenault 
46*4181ea36SMatt Arsenault void MachineDominanceFrontier::releaseMemory() {
47*4181ea36SMatt Arsenault   Base.releaseMemory();
48*4181ea36SMatt Arsenault }
49*4181ea36SMatt Arsenault 
50*4181ea36SMatt Arsenault void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
51*4181ea36SMatt Arsenault   AU.setPreservesAll();
52*4181ea36SMatt Arsenault   AU.addRequired<MachineDominatorTree>();
53*4181ea36SMatt Arsenault   MachineFunctionPass::getAnalysisUsage(AU);
54*4181ea36SMatt Arsenault }
55