1*bbb141c7SAdam Nemet ///===- LazyMachineBlockFrequencyInfo.cpp - Lazy Machine Block Frequency --===// 2*bbb141c7SAdam Nemet /// 3*bbb141c7SAdam Nemet /// The LLVM Compiler Infrastructure 4*bbb141c7SAdam Nemet /// 5*bbb141c7SAdam Nemet /// This file is distributed under the University of Illinois Open Source 6*bbb141c7SAdam Nemet /// License. See LICENSE.TXT for details. 7*bbb141c7SAdam Nemet /// 8*bbb141c7SAdam Nemet ///===---------------------------------------------------------------------===// 9*bbb141c7SAdam Nemet /// \file 10*bbb141c7SAdam Nemet /// This is an alternative analysis pass to MachineBlockFrequencyInfo. The 11*bbb141c7SAdam Nemet /// difference is that with this pass the block frequencies are not computed 12*bbb141c7SAdam Nemet /// when the analysis pass is executed but rather when the BFI result is 13*bbb141c7SAdam Nemet /// explicitly requested by the analysis client. 14*bbb141c7SAdam Nemet /// 15*bbb141c7SAdam Nemet ///===---------------------------------------------------------------------===// 16*bbb141c7SAdam Nemet 17*bbb141c7SAdam Nemet #include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.h" 18*bbb141c7SAdam Nemet 19*bbb141c7SAdam Nemet using namespace llvm; 20*bbb141c7SAdam Nemet 21*bbb141c7SAdam Nemet #define DEBUG_TYPE "lazy-machine-block-freq" 22*bbb141c7SAdam Nemet 23*bbb141c7SAdam Nemet INITIALIZE_PASS_BEGIN(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE, 24*bbb141c7SAdam Nemet "Lazy Machine Block Frequency Analysis", true, true) 25*bbb141c7SAdam Nemet INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo) 26*bbb141c7SAdam Nemet INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo) 27*bbb141c7SAdam Nemet INITIALIZE_PASS_END(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE, 28*bbb141c7SAdam Nemet "Lazy Machine Block Frequency Analysis", true, true) 29*bbb141c7SAdam Nemet 30*bbb141c7SAdam Nemet char LazyMachineBlockFrequencyInfoPass::ID = 0; 31*bbb141c7SAdam Nemet 32*bbb141c7SAdam Nemet LazyMachineBlockFrequencyInfoPass::LazyMachineBlockFrequencyInfoPass() 33*bbb141c7SAdam Nemet : MachineFunctionPass(ID) { 34*bbb141c7SAdam Nemet initializeLazyMachineBlockFrequencyInfoPassPass( 35*bbb141c7SAdam Nemet *PassRegistry::getPassRegistry()); 36*bbb141c7SAdam Nemet } 37*bbb141c7SAdam Nemet 38*bbb141c7SAdam Nemet void LazyMachineBlockFrequencyInfoPass::print(raw_ostream &OS, 39*bbb141c7SAdam Nemet const Module *M) const { 40*bbb141c7SAdam Nemet LMBFI.getCalculated().print(OS, M); 41*bbb141c7SAdam Nemet } 42*bbb141c7SAdam Nemet 43*bbb141c7SAdam Nemet void LazyMachineBlockFrequencyInfoPass::getAnalysisUsage( 44*bbb141c7SAdam Nemet AnalysisUsage &AU) const { 45*bbb141c7SAdam Nemet AU.addRequired<MachineBranchProbabilityInfo>(); 46*bbb141c7SAdam Nemet AU.addRequired<MachineLoopInfo>(); 47*bbb141c7SAdam Nemet AU.setPreservesAll(); 48*bbb141c7SAdam Nemet MachineFunctionPass::getAnalysisUsage(AU); 49*bbb141c7SAdam Nemet } 50*bbb141c7SAdam Nemet 51*bbb141c7SAdam Nemet void LazyMachineBlockFrequencyInfoPass::releaseMemory() { 52*bbb141c7SAdam Nemet LMBFI.releaseMemory(); 53*bbb141c7SAdam Nemet } 54*bbb141c7SAdam Nemet 55*bbb141c7SAdam Nemet bool LazyMachineBlockFrequencyInfoPass::runOnMachineFunction( 56*bbb141c7SAdam Nemet MachineFunction &MF) { 57*bbb141c7SAdam Nemet auto &BPIPass = getAnalysis<MachineBranchProbabilityInfo>(); 58*bbb141c7SAdam Nemet auto &LI = getAnalysis<MachineLoopInfo>(); 59*bbb141c7SAdam Nemet LMBFI.setAnalysis(&MF, &BPIPass, &LI); 60*bbb141c7SAdam Nemet return false; 61*bbb141c7SAdam Nemet } 62*bbb141c7SAdam Nemet 63*bbb141c7SAdam Nemet void LazyMachineBlockFrequencyInfoPass::getLazyMachineBFIAnalysisUsage( 64*bbb141c7SAdam Nemet AnalysisUsage &AU) { 65*bbb141c7SAdam Nemet AU.addRequired<LazyMachineBlockFrequencyInfoPass>(); 66*bbb141c7SAdam Nemet AU.addRequired<MachineBranchProbabilityInfo>(); 67*bbb141c7SAdam Nemet AU.addRequired<MachineLoopInfo>(); 68*bbb141c7SAdam Nemet } 69*bbb141c7SAdam Nemet 70*bbb141c7SAdam Nemet void llvm::initializeLazyMachineBFIPassPass(PassRegistry &Registry) { 71*bbb141c7SAdam Nemet INITIALIZE_PASS_DEPENDENCY(LazyMachineBlockFrequencyInfoPass); 72*bbb141c7SAdam Nemet INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo); 73*bbb141c7SAdam Nemet INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo); 74*bbb141c7SAdam Nemet } 75