diff options
author | attilio <attilio@FreeBSD.org> | 2011-10-22 22:56:20 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2011-10-22 22:56:20 +0000 |
commit | 4be1d1f7d25274261562ad10fb8197d48da0d113 (patch) | |
tree | a5939a4eeef7c173fb98194a6a23499c9b5a561d /contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp | |
parent | 62842622e5f4dd7e394cb2530b955c9818aaeec0 (diff) | |
parent | d5b30f0715769670b0cb9e859e79e85cc990f441 (diff) | |
download | FreeBSD-src-4be1d1f7d25274261562ad10fb8197d48da0d113.zip FreeBSD-src-4be1d1f7d25274261562ad10fb8197d48da0d113.tar.gz |
MFC
Diffstat (limited to 'contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp')
-rw-r--r-- | contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp b/contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp new file mode 100644 index 0000000..b92cda9 --- /dev/null +++ b/contrib/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp @@ -0,0 +1,61 @@ +//====----- MachineBlockFrequencyInfo.cpp - Machine Block Frequency Analysis ----====// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Loops should be simplified before this analysis. +// +//===----------------------------------------------------------------------===// + +#include "llvm/InitializePasses.h" +#include "llvm/Analysis/BlockFrequencyImpl.h" +#include "llvm/CodeGen/MachineBlockFrequencyInfo.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/MachineBranchProbabilityInfo.h" + +using namespace llvm; + +INITIALIZE_PASS_BEGIN(MachineBlockFrequencyInfo, "machine-block-freq", + "Machine Block Frequency Analysis", true, true) +INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo) +INITIALIZE_PASS_END(MachineBlockFrequencyInfo, "machine-block-freq", + "Machine Block Frequency Analysis", true, true) + +char MachineBlockFrequencyInfo::ID = 0; + + +MachineBlockFrequencyInfo::MachineBlockFrequencyInfo() : MachineFunctionPass(ID) { + initializeMachineBlockFrequencyInfoPass(*PassRegistry::getPassRegistry()); + MBFI = new BlockFrequencyImpl<MachineBasicBlock, MachineFunction, + MachineBranchProbabilityInfo>(); +} + +MachineBlockFrequencyInfo::~MachineBlockFrequencyInfo() { + delete MBFI; +} + +void MachineBlockFrequencyInfo::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired<MachineBranchProbabilityInfo>(); + AU.setPreservesAll(); + MachineFunctionPass::getAnalysisUsage(AU); +} + +bool MachineBlockFrequencyInfo::runOnMachineFunction(MachineFunction &F) { + MachineBranchProbabilityInfo &MBPI = getAnalysis<MachineBranchProbabilityInfo>(); + MBFI->doFunction(&F, &MBPI); + return false; +} + +/// getblockFreq - Return block frequency. Return 0 if we don't have the +/// information. Please note that initial frequency is equal to 1024. It means +/// that we should not rely on the value itself, but only on the comparison to +/// the other block frequencies. We do this to avoid using of floating points. +/// +BlockFrequency MachineBlockFrequencyInfo:: +getBlockFreq(MachineBasicBlock *MBB) const { + return MBFI->getBlockFreq(MBB); +} |