Home | History | Annotate | Download | only in CodeGen
      1 //===- MachineDominanceFrontier.cpp ---------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "llvm/CodeGen/MachineDominanceFrontier.h"
     11 #include "llvm/Analysis/DominanceFrontierImpl.h"
     12 #include "llvm/CodeGen/MachineDominators.h"
     13 #include "llvm/CodeGen/Passes.h"
     14 
     15 
     16 using namespace llvm;
     17 
     18 namespace llvm {
     19 template class DominanceFrontierBase<MachineBasicBlock>;
     20 template class ForwardDominanceFrontierBase<MachineBasicBlock>;
     21 }
     22 
     23 
     24 char MachineDominanceFrontier::ID = 0;
     25 
     26 INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
     27                 "Machine Dominance Frontier Construction", true, true)
     28 INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
     29 INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
     30                 "Machine Dominance Frontier Construction", true, true)
     31 
     32 MachineDominanceFrontier::MachineDominanceFrontier()
     33   : MachineFunctionPass(ID),
     34     Base() {
     35   initializeMachineDominanceFrontierPass(*PassRegistry::getPassRegistry());
     36 }
     37 
     38 char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
     39 
     40 bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
     41   releaseMemory();
     42   Base.analyze(getAnalysis<MachineDominatorTree>().getBase());
     43   return false;
     44 }
     45 
     46 void MachineDominanceFrontier::releaseMemory() {
     47   Base.releaseMemory();
     48 }
     49 
     50 void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
     51   AU.setPreservesAll();
     52   AU.addRequired<MachineDominatorTree>();
     53   MachineFunctionPass::getAnalysisUsage(AU);
     54 }
     55