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