1226584Sdim//====----- MachineBlockFrequencyInfo.h - MachineBlock Frequency Analysis ----====// 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_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H 15226584Sdim#define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H 16226584Sdim 17226584Sdim#include "llvm/CodeGen/MachineFunctionPass.h" 18226584Sdim#include "llvm/Support/BlockFrequency.h" 19226584Sdim#include <climits> 20226584Sdim 21226584Sdimnamespace llvm { 22226584Sdim 23234353Sdimclass MachineBasicBlock; 24226584Sdimclass MachineBranchProbabilityInfo; 25226584Sdimtemplate<class BlockT, class FunctionT, class BranchProbInfoT> 26226584Sdimclass BlockFrequencyImpl; 27226584Sdim 28226584Sdim/// MachineBlockFrequencyInfo pass uses BlockFrequencyImpl implementation to estimate 29226584Sdim/// machine basic block frequencies. 30226584Sdimclass MachineBlockFrequencyInfo : public MachineFunctionPass { 31226584Sdim 32234353Sdim BlockFrequencyImpl<MachineBasicBlock, MachineFunction, 33234353Sdim MachineBranchProbabilityInfo> *MBFI; 34226584Sdim 35226584Sdimpublic: 36226584Sdim static char ID; 37226584Sdim 38226584Sdim MachineBlockFrequencyInfo(); 39226584Sdim 40226584Sdim ~MachineBlockFrequencyInfo(); 41226584Sdim 42226584Sdim void getAnalysisUsage(AnalysisUsage &AU) const; 43226584Sdim 44226584Sdim bool runOnMachineFunction(MachineFunction &F); 45226584Sdim 46226584Sdim /// getblockFreq - Return block frequency. Return 0 if we don't have the 47226584Sdim /// information. Please note that initial frequency is equal to 1024. It means 48226584Sdim /// that we should not rely on the value itself, but only on the comparison to 49226584Sdim /// the other block frequencies. We do this to avoid using of floating points. 50226584Sdim /// 51234353Sdim BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const; 52226584Sdim}; 53226584Sdim 54226584Sdim} 55226584Sdim 56226584Sdim#endif 57