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