119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//====----- MachineBlockFrequencyInfo.h - MachineBlock Frequency Analysis ----====// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// Loops should be simplified before this analysis. 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#ifndef LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/CodeGen/MachineFunctionPass.h" 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Support/BlockFrequency.h" 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include <climits> 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumannamespace llvm { 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass MachineBranchProbabilityInfo; 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumantemplate<class BlockT, class FunctionT, class BranchProbInfoT> 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass BlockFrequencyImpl; 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman/// MachineBlockFrequencyInfo pass uses BlockFrequencyImpl implementation to estimate 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman/// machine basic block frequencies. 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass MachineBlockFrequencyInfo : public MachineFunctionPass { 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman BlockFrequencyImpl<MachineBasicBlock, MachineFunction, MachineBranchProbabilityInfo> *MBFI; 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanpublic: 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman static char ID; 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MachineBlockFrequencyInfo(); 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ~MachineBlockFrequencyInfo(); 3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman void getAnalysisUsage(AnalysisUsage &AU) const; 4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman bool runOnMachineFunction(MachineFunction &F); 4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// getblockFreq - Return block frequency. Return 0 if we don't have the 4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// information. Please note that initial frequency is equal to 1024. It means 4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// that we should not rely on the value itself, but only on the comparison to 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// the other block frequencies. We do this to avoid using of floating points. 4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman BlockFrequency getBlockFreq(MachineBasicBlock *MBB) const; 5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman}; 5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#endif 55