14181ea36SMatt Arsenault //===- MachineDominanceFrontier.cpp ---------------------------------------===// 24181ea36SMatt Arsenault // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 64181ea36SMatt Arsenault // 74181ea36SMatt Arsenault //===----------------------------------------------------------------------===// 84181ea36SMatt Arsenault 94181ea36SMatt Arsenault #include "llvm/CodeGen/MachineDominanceFrontier.h" 104181ea36SMatt Arsenault #include "llvm/Analysis/DominanceFrontierImpl.h" 11d9903888SChandler Carruth #include "llvm/CodeGen/MachineDominators.h" 124181ea36SMatt Arsenault #include "llvm/CodeGen/Passes.h" 134181ea36SMatt Arsenault 144181ea36SMatt Arsenault using namespace llvm; 154181ea36SMatt Arsenault 164181ea36SMatt Arsenault namespace llvm { 17b292c22cSJakub Kuderski template class DominanceFrontierBase<MachineBasicBlock, false>; 18b292c22cSJakub Kuderski template class DominanceFrontierBase<MachineBasicBlock, true>; 194181ea36SMatt Arsenault template class ForwardDominanceFrontierBase<MachineBasicBlock>; 204181ea36SMatt Arsenault } 214181ea36SMatt Arsenault 224181ea36SMatt Arsenault 234181ea36SMatt Arsenault char MachineDominanceFrontier::ID = 0; 244181ea36SMatt Arsenault 254181ea36SMatt Arsenault INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier", 264181ea36SMatt Arsenault "Machine Dominance Frontier Construction", true, true) 274181ea36SMatt Arsenault INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) 284181ea36SMatt Arsenault INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier", 294181ea36SMatt Arsenault "Machine Dominance Frontier Construction", true, true) 304181ea36SMatt Arsenault 314181ea36SMatt Arsenault MachineDominanceFrontier::MachineDominanceFrontier() 324181ea36SMatt Arsenault : MachineFunctionPass(ID), 334181ea36SMatt Arsenault Base() { 344181ea36SMatt Arsenault initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry()); 354181ea36SMatt Arsenault } 364181ea36SMatt Arsenault 374181ea36SMatt Arsenault char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID; 384181ea36SMatt Arsenault 394181ea36SMatt Arsenault bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) { 404181ea36SMatt Arsenault releaseMemory(); 414181ea36SMatt Arsenault Base.analyze(getAnalysis<MachineDominatorTree>().getBase()); 424181ea36SMatt Arsenault return false; 434181ea36SMatt Arsenault } 444181ea36SMatt Arsenault 454181ea36SMatt Arsenault void MachineDominanceFrontier::releaseMemory() { 464181ea36SMatt Arsenault Base.releaseMemory(); 474181ea36SMatt Arsenault } 484181ea36SMatt Arsenault 494181ea36SMatt Arsenault void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const { 504181ea36SMatt Arsenault AU.setPreservesAll(); 514181ea36SMatt Arsenault AU.addRequired<MachineDominatorTree>(); 524181ea36SMatt Arsenault MachineFunctionPass::getAnalysisUsage(AU); 534181ea36SMatt Arsenault } 54