15ca98fd9SDimitry Andric //===- MachineDominanceFrontier.cpp ---------------------------------------===//
25ca98fd9SDimitry Andric //
3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ca98fd9SDimitry Andric //
75ca98fd9SDimitry Andric //===----------------------------------------------------------------------===//
85ca98fd9SDimitry Andric
95ca98fd9SDimitry Andric #include "llvm/CodeGen/MachineDominanceFrontier.h"
1067c32a98SDimitry Andric #include "llvm/CodeGen/MachineDominators.h"
115ca98fd9SDimitry Andric #include "llvm/CodeGen/Passes.h"
12706b4fc4SDimitry Andric #include "llvm/InitializePasses.h"
13145449b1SDimitry Andric #include "llvm/Pass.h"
14145449b1SDimitry Andric #include "llvm/PassRegistry.h"
155ca98fd9SDimitry Andric
165ca98fd9SDimitry Andric using namespace llvm;
175ca98fd9SDimitry Andric
185ca98fd9SDimitry Andric namespace llvm {
1993c91e39SDimitry Andric template class DominanceFrontierBase<MachineBasicBlock, false>;
2093c91e39SDimitry Andric template class DominanceFrontierBase<MachineBasicBlock, true>;
215ca98fd9SDimitry Andric template class ForwardDominanceFrontierBase<MachineBasicBlock>;
225ca98fd9SDimitry Andric }
235ca98fd9SDimitry Andric
245ca98fd9SDimitry Andric
255ca98fd9SDimitry Andric char MachineDominanceFrontier::ID = 0;
265ca98fd9SDimitry Andric
275ca98fd9SDimitry Andric INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
285ca98fd9SDimitry Andric "Machine Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)29ac9a064cSDimitry Andric INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
305ca98fd9SDimitry Andric INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
315ca98fd9SDimitry Andric "Machine Dominance Frontier Construction", true, true)
325ca98fd9SDimitry Andric
336f8fc217SDimitry Andric MachineDominanceFrontier::MachineDominanceFrontier() : MachineFunctionPass(ID) {
345ca98fd9SDimitry Andric initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry());
355ca98fd9SDimitry Andric }
365ca98fd9SDimitry Andric
375ca98fd9SDimitry Andric char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
385ca98fd9SDimitry Andric
runOnMachineFunction(MachineFunction &)395ca98fd9SDimitry Andric bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
405ca98fd9SDimitry Andric releaseMemory();
41ac9a064cSDimitry Andric Base.analyze(
42ac9a064cSDimitry Andric getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree().getBase());
435ca98fd9SDimitry Andric return false;
445ca98fd9SDimitry Andric }
455ca98fd9SDimitry Andric
releaseMemory()465ca98fd9SDimitry Andric void MachineDominanceFrontier::releaseMemory() {
475ca98fd9SDimitry Andric Base.releaseMemory();
485ca98fd9SDimitry Andric }
495ca98fd9SDimitry Andric
getAnalysisUsage(AnalysisUsage & AU) const505ca98fd9SDimitry Andric void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
515ca98fd9SDimitry Andric AU.setPreservesAll();
52ac9a064cSDimitry Andric AU.addRequired<MachineDominatorTreeWrapperPass>();
535ca98fd9SDimitry Andric MachineFunctionPass::getAnalysisUsage(AU);
545ca98fd9SDimitry Andric }
55