blob: 34611f8064d76b7fd62b77767db06400e8764d9d [file] [log] [blame]
Adam Nemetbbb141c2017-02-14 17:21:09 +00001///===- LazyMachineBlockFrequencyInfo.cpp - Lazy Machine Block Frequency --===//
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/// \file
10/// This is an alternative analysis pass to MachineBlockFrequencyInfo. The
11/// difference is that with this pass the block frequencies are not computed
12/// when the analysis pass is executed but rather when the BFI result is
13/// explicitly requested by the analysis client.
14///
15///===---------------------------------------------------------------------===//
16
17#include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.h"
18
19using namespace llvm;
20
21#define DEBUG_TYPE "lazy-machine-block-freq"
22
23INITIALIZE_PASS_BEGIN(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE,
24 "Lazy Machine Block Frequency Analysis", true, true)
25INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
26INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
27INITIALIZE_PASS_END(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE,
28 "Lazy Machine Block Frequency Analysis", true, true)
29
30char LazyMachineBlockFrequencyInfoPass::ID = 0;
31
32LazyMachineBlockFrequencyInfoPass::LazyMachineBlockFrequencyInfoPass()
33 : MachineFunctionPass(ID) {
34 initializeLazyMachineBlockFrequencyInfoPassPass(
35 *PassRegistry::getPassRegistry());
36}
37
38void LazyMachineBlockFrequencyInfoPass::print(raw_ostream &OS,
39 const Module *M) const {
40 LMBFI.getCalculated().print(OS, M);
41}
42
43void LazyMachineBlockFrequencyInfoPass::getAnalysisUsage(
44 AnalysisUsage &AU) const {
45 AU.addRequired<MachineBranchProbabilityInfo>();
46 AU.addRequired<MachineLoopInfo>();
47 AU.setPreservesAll();
48 MachineFunctionPass::getAnalysisUsage(AU);
49}
50
51void LazyMachineBlockFrequencyInfoPass::releaseMemory() {
52 LMBFI.releaseMemory();
53}
54
55bool LazyMachineBlockFrequencyInfoPass::runOnMachineFunction(
56 MachineFunction &MF) {
57 auto &BPIPass = getAnalysis<MachineBranchProbabilityInfo>();
58 auto &LI = getAnalysis<MachineLoopInfo>();
59 LMBFI.setAnalysis(&MF, &BPIPass, &LI);
60 return false;
61}
62
63void LazyMachineBlockFrequencyInfoPass::getLazyMachineBFIAnalysisUsage(
64 AnalysisUsage &AU) {
65 AU.addRequired<LazyMachineBlockFrequencyInfoPass>();
66 AU.addRequired<MachineBranchProbabilityInfo>();
67 AU.addRequired<MachineLoopInfo>();
68}
69
70void llvm::initializeLazyMachineBFIPassPass(PassRegistry &Registry) {
71 INITIALIZE_PASS_DEPENDENCY(LazyMachineBlockFrequencyInfoPass);
72 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo);
73 INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo);
74}