14181ea36SMatt Arsenault //===- MachineDominanceFrontier.cpp ---------------------------------------===// 24181ea36SMatt Arsenault // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler 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" 13*05da2fe5SReid Kleckner #include "llvm/InitializePasses.h" 144181ea36SMatt Arsenault 154181ea36SMatt Arsenault using namespace llvm; 164181ea36SMatt Arsenault 174181ea36SMatt Arsenault namespace llvm { 18b292c22cSJakub Kuderski template class DominanceFrontierBase<MachineBasicBlock, false>; 19b292c22cSJakub Kuderski template class DominanceFrontierBase<MachineBasicBlock, true>; 204181ea36SMatt Arsenault template class ForwardDominanceFrontierBase<MachineBasicBlock>; 214181ea36SMatt Arsenault } 224181ea36SMatt Arsenault 234181ea36SMatt Arsenault 244181ea36SMatt Arsenault char MachineDominanceFrontier::ID = 0; 254181ea36SMatt Arsenault 264181ea36SMatt Arsenault INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier", 274181ea36SMatt Arsenault "Machine Dominance Frontier Construction", true, true) 284181ea36SMatt Arsenault INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) 294181ea36SMatt Arsenault INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier", 304181ea36SMatt Arsenault "Machine Dominance Frontier Construction", true, true) 314181ea36SMatt Arsenault 324181ea36SMatt Arsenault MachineDominanceFrontier::MachineDominanceFrontier() 334181ea36SMatt Arsenault : MachineFunctionPass(ID), 344181ea36SMatt Arsenault Base() { 354181ea36SMatt Arsenault initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry()); 364181ea36SMatt Arsenault } 374181ea36SMatt Arsenault 384181ea36SMatt Arsenault char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID; 394181ea36SMatt Arsenault 404181ea36SMatt Arsenault bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) { 414181ea36SMatt Arsenault releaseMemory(); 424181ea36SMatt Arsenault Base.analyze(getAnalysis<MachineDominatorTree>().getBase()); 434181ea36SMatt Arsenault return false; 444181ea36SMatt Arsenault } 454181ea36SMatt Arsenault 464181ea36SMatt Arsenault void MachineDominanceFrontier::releaseMemory() { 474181ea36SMatt Arsenault Base.releaseMemory(); 484181ea36SMatt Arsenault } 494181ea36SMatt Arsenault 504181ea36SMatt Arsenault void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const { 514181ea36SMatt Arsenault AU.setPreservesAll(); 524181ea36SMatt Arsenault AU.addRequired<MachineDominatorTree>(); 534181ea36SMatt Arsenault MachineFunctionPass::getAnalysisUsage(AU); 544181ea36SMatt Arsenault } 55