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