109467b48Spatrick //===- MachineDominanceFrontier.cpp ---------------------------------------===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick
909467b48Spatrick #include "llvm/CodeGen/MachineDominanceFrontier.h"
1009467b48Spatrick #include "llvm/CodeGen/MachineDominators.h"
1109467b48Spatrick #include "llvm/CodeGen/Passes.h"
1209467b48Spatrick #include "llvm/InitializePasses.h"
13*d415bd75Srobert #include "llvm/Pass.h"
14*d415bd75Srobert #include "llvm/PassRegistry.h"
1509467b48Spatrick
1609467b48Spatrick using namespace llvm;
1709467b48Spatrick
1809467b48Spatrick namespace llvm {
1909467b48Spatrick template class DominanceFrontierBase<MachineBasicBlock, false>;
2009467b48Spatrick template class DominanceFrontierBase<MachineBasicBlock, true>;
2109467b48Spatrick template class ForwardDominanceFrontierBase<MachineBasicBlock>;
2209467b48Spatrick }
2309467b48Spatrick
2409467b48Spatrick
2509467b48Spatrick char MachineDominanceFrontier::ID = 0;
2609467b48Spatrick
2709467b48Spatrick INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
2809467b48Spatrick "Machine Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)2909467b48Spatrick INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
3009467b48Spatrick INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
3109467b48Spatrick "Machine Dominance Frontier Construction", true, true)
3209467b48Spatrick
33*d415bd75Srobert MachineDominanceFrontier::MachineDominanceFrontier() : MachineFunctionPass(ID) {
3409467b48Spatrick initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry());
3509467b48Spatrick }
3609467b48Spatrick
3709467b48Spatrick char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
3809467b48Spatrick
runOnMachineFunction(MachineFunction &)3909467b48Spatrick bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
4009467b48Spatrick releaseMemory();
4109467b48Spatrick Base.analyze(getAnalysis<MachineDominatorTree>().getBase());
4209467b48Spatrick return false;
4309467b48Spatrick }
4409467b48Spatrick
releaseMemory()4509467b48Spatrick void MachineDominanceFrontier::releaseMemory() {
4609467b48Spatrick Base.releaseMemory();
4709467b48Spatrick }
4809467b48Spatrick
getAnalysisUsage(AnalysisUsage & AU) const4909467b48Spatrick void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
5009467b48Spatrick AU.setPreservesAll();
5109467b48Spatrick AU.addRequired<MachineDominatorTree>();
5209467b48Spatrick MachineFunctionPass::getAnalysisUsage(AU);
5309467b48Spatrick }
54