191bc56edSDimitry Andric //===- MachineDominanceFrontier.cpp ---------------------------------------===//
291bc56edSDimitry Andric //
391bc56edSDimitry Andric //                     The LLVM Compiler Infrastructure
491bc56edSDimitry Andric //
591bc56edSDimitry Andric // This file is distributed under the University of Illinois Open Source
691bc56edSDimitry Andric // License. See LICENSE.TXT for details.
791bc56edSDimitry Andric //
891bc56edSDimitry Andric //===----------------------------------------------------------------------===//
991bc56edSDimitry Andric 
1091bc56edSDimitry Andric #include "llvm/CodeGen/MachineDominanceFrontier.h"
1191bc56edSDimitry Andric #include "llvm/Analysis/DominanceFrontierImpl.h"
1239d628a0SDimitry Andric #include "llvm/CodeGen/MachineDominators.h"
1391bc56edSDimitry Andric #include "llvm/CodeGen/Passes.h"
1491bc56edSDimitry Andric 
1591bc56edSDimitry Andric using namespace llvm;
1691bc56edSDimitry Andric 
1791bc56edSDimitry Andric namespace llvm {
18*b40b48b8SDimitry Andric template class DominanceFrontierBase<MachineBasicBlock, false>;
19*b40b48b8SDimitry Andric template class DominanceFrontierBase<MachineBasicBlock, true>;
2091bc56edSDimitry Andric template class ForwardDominanceFrontierBase<MachineBasicBlock>;
2191bc56edSDimitry Andric }
2291bc56edSDimitry Andric 
2391bc56edSDimitry Andric 
2491bc56edSDimitry Andric char MachineDominanceFrontier::ID = 0;
2591bc56edSDimitry Andric 
2691bc56edSDimitry Andric INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
2791bc56edSDimitry Andric                 "Machine Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)2891bc56edSDimitry Andric INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
2991bc56edSDimitry Andric INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
3091bc56edSDimitry Andric                 "Machine Dominance Frontier Construction", true, true)
3191bc56edSDimitry Andric 
3291bc56edSDimitry Andric MachineDominanceFrontier::MachineDominanceFrontier()
3391bc56edSDimitry Andric   : MachineFunctionPass(ID),
3491bc56edSDimitry Andric     Base() {
3591bc56edSDimitry Andric   initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry());
3691bc56edSDimitry Andric }
3791bc56edSDimitry Andric 
3891bc56edSDimitry Andric char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
3991bc56edSDimitry Andric 
runOnMachineFunction(MachineFunction &)4091bc56edSDimitry Andric bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
4191bc56edSDimitry Andric   releaseMemory();
4291bc56edSDimitry Andric   Base.analyze(getAnalysis<MachineDominatorTree>().getBase());
4391bc56edSDimitry Andric   return false;
4491bc56edSDimitry Andric }
4591bc56edSDimitry Andric 
releaseMemory()4691bc56edSDimitry Andric void MachineDominanceFrontier::releaseMemory() {
4791bc56edSDimitry Andric   Base.releaseMemory();
4891bc56edSDimitry Andric }
4991bc56edSDimitry Andric 
getAnalysisUsage(AnalysisUsage & AU) const5091bc56edSDimitry Andric void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
5191bc56edSDimitry Andric   AU.setPreservesAll();
5291bc56edSDimitry Andric   AU.addRequired<MachineDominatorTree>();
5391bc56edSDimitry Andric   MachineFunctionPass::getAnalysisUsage(AU);
5491bc56edSDimitry Andric }
55