1 //========-------- BlockFrequencyInfo.h - 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 #ifndef LLVM_ANALYSIS_BLOCKFREQUENCYINFO_H 15 #define LLVM_ANALYSIS_BLOCKFREQUENCYINFO_H 16 17 #include "llvm/Pass.h" 18 #include "llvm/Support/BlockFrequency.h" 19 #include <climits> 20 21 namespace llvm { 22 23 class BranchProbabilityInfo; 24 template<class BlockT, class FunctionT, class BranchProbInfoT> 25 class BlockFrequencyImpl; 26 27 /// BlockFrequencyInfo pass uses BlockFrequencyImpl implementation to estimate 28 /// IR basic block frequencies. 29 class BlockFrequencyInfo : public FunctionPass { 30 31 BlockFrequencyImpl<BasicBlock, Function, BranchProbabilityInfo> *BFI; 32 33 public: 34 static char ID; 35 36 BlockFrequencyInfo(); 37 38 ~BlockFrequencyInfo(); 39 40 void getAnalysisUsage(AnalysisUsage &AU) const; 41 42 bool runOnFunction(Function &F); 43 void print(raw_ostream &O, const Module *M) const; 44 45 /// getblockFreq - Return block frequency. Return 0 if we don't have the 46 /// information. Please note that initial frequency is equal to 1024. It means 47 /// that we should not rely on the value itself, but only on the comparison to 48 /// the other block frequencies. We do this to avoid using of floating points. 49 /// 50 BlockFrequency getBlockFreq(const BasicBlock *BB) const; 51 }; 52 53 } 54 55 #endif 56