1263508Sdim//===------- BlockFrequencyInfo.h - Block Frequency Analysis --*- C++ -*---===// 2226584Sdim// 3226584Sdim// The LLVM Compiler Infrastructure 4226584Sdim// 5226584Sdim// This file is distributed under the University of Illinois Open Source 6226584Sdim// License. See LICENSE.TXT for details. 7226584Sdim// 8226584Sdim//===----------------------------------------------------------------------===// 9226584Sdim// 10226584Sdim// Loops should be simplified before this analysis. 11226584Sdim// 12226584Sdim//===----------------------------------------------------------------------===// 13226584Sdim 14226584Sdim#ifndef LLVM_ANALYSIS_BLOCKFREQUENCYINFO_H 15226584Sdim#define LLVM_ANALYSIS_BLOCKFREQUENCYINFO_H 16226584Sdim 17226584Sdim#include "llvm/Pass.h" 18226584Sdim#include "llvm/Support/BlockFrequency.h" 19226584Sdim#include <climits> 20226584Sdim 21226584Sdimnamespace llvm { 22226584Sdim 23226584Sdimclass BranchProbabilityInfo; 24226584Sdimtemplate<class BlockT, class FunctionT, class BranchProbInfoT> 25226584Sdimclass BlockFrequencyImpl; 26226584Sdim 27226584Sdim/// BlockFrequencyInfo pass uses BlockFrequencyImpl implementation to estimate 28226584Sdim/// IR basic block frequencies. 29226584Sdimclass BlockFrequencyInfo : public FunctionPass { 30226584Sdim 31226584Sdim BlockFrequencyImpl<BasicBlock, Function, BranchProbabilityInfo> *BFI; 32226584Sdim 33226584Sdimpublic: 34226584Sdim static char ID; 35226584Sdim 36226584Sdim BlockFrequencyInfo(); 37226584Sdim 38226584Sdim ~BlockFrequencyInfo(); 39226584Sdim 40226584Sdim void getAnalysisUsage(AnalysisUsage &AU) const; 41226584Sdim 42226584Sdim bool runOnFunction(Function &F); 43226584Sdim void print(raw_ostream &O, const Module *M) const; 44263508Sdim const Function *getFunction() const; 45263508Sdim void view() const; 46226584Sdim 47226584Sdim /// getblockFreq - Return block frequency. Return 0 if we don't have the 48263508Sdim /// information. Please note that initial frequency is equal to ENTRY_FREQ. It 49263508Sdim /// means that we should not rely on the value itself, but only on the 50263508Sdim /// comparison to the other block frequencies. We do this to avoid using of 51263508Sdim /// floating points. 52234353Sdim BlockFrequency getBlockFreq(const BasicBlock *BB) const; 53226584Sdim}; 54226584Sdim 55226584Sdim} 56226584Sdim 57226584Sdim#endif 58