blob: 49b69d1197536823fa18119948324c266f1364c6 [file] [log] [blame]
Jakub Staszakfd9533b2011-06-23 21:56:59 +00001//=======-------- BlockFrequency.cpp - Block Frequency Analysis -------=======//
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// Loops should be simplified before this analysis.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/InitializePasses.h"
15#include "llvm/Analysis/BlockFrequencyImpl.h"
16#include "llvm/Analysis/BlockFrequency.h"
17#include "llvm/Analysis/LoopInfo.h"
18#include "llvm/Analysis/Passes.h"
19#include "llvm/Analysis/BranchProbabilityInfo.h"
20
21using namespace llvm;
22
23INITIALIZE_PASS_BEGIN(BlockFrequency, "block-freq", "Block Frequency Analysis",
24 true, true)
25INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfo)
26INITIALIZE_PASS_END(BlockFrequency, "block-freq", "Block Frequency Analysis",
27 true, true)
28
29char BlockFrequency::ID = 0;
30
31
32BlockFrequency::BlockFrequency() : FunctionPass(ID) {
33 initializeBlockFrequencyPass(*PassRegistry::getPassRegistry());
34 BFI = new BlockFrequencyImpl<BasicBlock, Function, BranchProbabilityInfo>();
35}
36
37BlockFrequency::~BlockFrequency() {
38 delete BFI;
39}
40
41void BlockFrequency::getAnalysisUsage(AnalysisUsage &AU) const {
42 AU.addRequired<BranchProbabilityInfo>();
43 AU.setPreservesAll();
44}
45
46bool BlockFrequency::runOnFunction(Function &F) {
47 BranchProbabilityInfo &BPI = getAnalysis<BranchProbabilityInfo>();
48 BFI->doFunction(&F, &BPI);
49 return false;
50}
51
Jakub Staszak23f34f12011-07-22 02:24:57 +000052/// getblockFreq - Return block frequency. Return 0 if we don't have the
53/// information. Please note that initial frequency is equal to 1024. It means
54/// that we should not rely on the value itself, but only on the comparison to
55/// the other block frequencies. We do this to avoid using of floating points.
Jakub Staszakfd9533b2011-06-23 21:56:59 +000056///
57uint32_t BlockFrequency::getBlockFreq(BasicBlock *BB) {
58 return BFI->getBlockFreq(BB);
59}