blob: 8469556f64c06dcd08d0448476be7ad3d820eaa8 [file] [log] [blame]
Jakub Staszakf55c1c82011-07-25 19:25:40 +00001//=======-------- BlockFrequencyInfo.cpp - Block Frequency Analysis -------=======//
Jakub Staszakfd9533b2011-06-23 21:56:59 +00002//
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// Loops should be simplified before this analysis.
11//
12//===----------------------------------------------------------------------===//
13
Jakub Staszakf55c1c82011-07-25 19:25:40 +000014#include "llvm/Analysis/BlockFrequencyInfo.h"
Chandler Carruthd04a8d42012-12-03 16:50:05 +000015#include "llvm/Analysis/BlockFrequencyImpl.h"
16#include "llvm/Analysis/BranchProbabilityInfo.h"
Jakub Staszakfd9533b2011-06-23 21:56:59 +000017#include "llvm/Analysis/LoopInfo.h"
18#include "llvm/Analysis/Passes.h"
Chandler Carruthd04a8d42012-12-03 16:50:05 +000019#include "llvm/InitializePasses.h"
Jakub Staszakfd9533b2011-06-23 21:56:59 +000020
21using namespace llvm;
22
Jakub Staszakf55c1c82011-07-25 19:25:40 +000023INITIALIZE_PASS_BEGIN(BlockFrequencyInfo, "block-freq", "Block Frequency Analysis",
Jakub Staszakfd9533b2011-06-23 21:56:59 +000024 true, true)
25INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfo)
Jakub Staszakf55c1c82011-07-25 19:25:40 +000026INITIALIZE_PASS_END(BlockFrequencyInfo, "block-freq", "Block Frequency Analysis",
Jakub Staszakfd9533b2011-06-23 21:56:59 +000027 true, true)
28
Jakub Staszakf55c1c82011-07-25 19:25:40 +000029char BlockFrequencyInfo::ID = 0;
Jakub Staszakfd9533b2011-06-23 21:56:59 +000030
31
Jakub Staszakf55c1c82011-07-25 19:25:40 +000032BlockFrequencyInfo::BlockFrequencyInfo() : FunctionPass(ID) {
33 initializeBlockFrequencyInfoPass(*PassRegistry::getPassRegistry());
Jakub Staszakfd9533b2011-06-23 21:56:59 +000034 BFI = new BlockFrequencyImpl<BasicBlock, Function, BranchProbabilityInfo>();
35}
36
Jakub Staszakf55c1c82011-07-25 19:25:40 +000037BlockFrequencyInfo::~BlockFrequencyInfo() {
Jakub Staszakfd9533b2011-06-23 21:56:59 +000038 delete BFI;
39}
40
Jakub Staszakf55c1c82011-07-25 19:25:40 +000041void BlockFrequencyInfo::getAnalysisUsage(AnalysisUsage &AU) const {
Jakub Staszakfd9533b2011-06-23 21:56:59 +000042 AU.addRequired<BranchProbabilityInfo>();
43 AU.setPreservesAll();
44}
45
Jakub Staszakf55c1c82011-07-25 19:25:40 +000046bool BlockFrequencyInfo::runOnFunction(Function &F) {
Jakub Staszakfd9533b2011-06-23 21:56:59 +000047 BranchProbabilityInfo &BPI = getAnalysis<BranchProbabilityInfo>();
48 BFI->doFunction(&F, &BPI);
49 return false;
50}
51
Chandler Carruth6aa5c262011-10-19 10:12:41 +000052void BlockFrequencyInfo::print(raw_ostream &O, const Module *) const {
53 if (BFI) BFI->print(O);
54}
55
Jakub Staszak25101bb2011-12-20 20:03:10 +000056BlockFrequency BlockFrequencyInfo::getBlockFreq(const BasicBlock *BB) const {
Jakub Staszakfd9533b2011-06-23 21:56:59 +000057 return BFI->getBlockFreq(BB);
58}