summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorJakub Staszak <jstaszak@apple.com>2011-08-01 15:22:10 +0000
committerJakub Staszak <jstaszak@apple.com>2011-08-01 15:22:10 +0000
commit6b31963d6cff579f9662542686cded40bc5cdbc0 (patch)
treed87cfd0e5df3124cce9f7720e7a2a7f59fc00ba6 /llvm
parent92c1913e223b8705c6c89abfc9eca4a25fafbcac (diff)
downloadbcm5719-llvm-6b31963d6cff579f9662542686cded40bc5cdbc0.tar.gz
bcm5719-llvm-6b31963d6cff579f9662542686cded40bc5cdbc0.zip
Add BlockFrequency::getEntryFrequency()
llvm-svn: 136618
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Analysis/BlockFrequencyImpl.h16
-rw-r--r--llvm/include/llvm/Support/BlockFrequency.h2
2 files changed, 11 insertions, 7 deletions
diff --git a/llvm/include/llvm/Analysis/BlockFrequencyImpl.h b/llvm/include/llvm/Analysis/BlockFrequencyImpl.h
index c0bc1015999..0fb2bd7db50 100644
--- a/llvm/include/llvm/Analysis/BlockFrequencyImpl.h
+++ b/llvm/include/llvm/Analysis/BlockFrequencyImpl.h
@@ -49,7 +49,7 @@ class BlockFrequencyImpl {
typedef GraphTraits< Inverse<BlockT *> > GT;
- static const uint32_t START_FREQ = 1024;
+ const uint32_t EntryFreq;
std::string getBlockName(BasicBlock *BB) const {
return BB->getNameStr();
@@ -176,7 +176,7 @@ class BlockFrequencyImpl {
setBlockFreq(BB, 0);
if (BB == LoopHead) {
- setBlockFreq(BB, START_FREQ);
+ setBlockFreq(BB, EntryFreq);
return;
}
@@ -211,10 +211,10 @@ class BlockFrequencyImpl {
if (!isLoopHead)
return;
- assert(START_FREQ >= CycleProb[BB]);
+ assert(EntryFreq >= CycleProb[BB]);
uint32_t CProb = CycleProb[BB];
- uint32_t Numerator = START_FREQ - CProb ? START_FREQ - CProb : 1;
- divBlockFreq(BB, BranchProbability(Numerator, START_FREQ));
+ uint32_t Numerator = EntryFreq - CProb ? EntryFreq - CProb : 1;
+ divBlockFreq(BB, BranchProbability(Numerator, EntryFreq));
}
/// doLoop - Propagate block frequency down throught the loop.
@@ -243,8 +243,8 @@ class BlockFrequencyImpl {
if (isReachable(Pred) && isBackedge(Pred, Head)) {
uint64_t N = getEdgeFreq(Pred, Head).getFrequency();
uint64_t D = getBlockFreq(Head).getFrequency();
- assert(N <= 1024 && "Backedge frequency must be <= 1024!");
- uint64_t Res = (N * START_FREQ) / D;
+ assert(N <= EntryFreq && "Backedge frequency must be <= EntryFreq!");
+ uint64_t Res = (N * EntryFreq) / D;
assert(Res <= UINT32_MAX);
CycleProb[Head] += (uint32_t) Res;
@@ -257,6 +257,8 @@ class BlockFrequencyImpl {
friend class BlockFrequencyInfo;
friend class MachineBlockFrequencyInfo;
+ BlockFrequencyImpl() : EntryFreq(BlockFrequency::getEntryFrequency()) { }
+
void doFunction(FunctionT *fn, BlockProbInfoT *bpi) {
Fn = fn;
BPI = bpi;
diff --git a/llvm/include/llvm/Support/BlockFrequency.h b/llvm/include/llvm/Support/BlockFrequency.h
index 36aca807f78..554b7845696 100644
--- a/llvm/include/llvm/Support/BlockFrequency.h
+++ b/llvm/include/llvm/Support/BlockFrequency.h
@@ -23,10 +23,12 @@ class BranchProbability;
class BlockFrequency {
uint64_t Frequency;
+ static const int64_t ENTRY_FREQ = 1024;
public:
BlockFrequency(uint64_t Freq = 0) : Frequency(Freq) { }
+ static uint64_t getEntryFrequency() { return ENTRY_FREQ; }
uint64_t getFrequency() const { return Frequency; }
BlockFrequency &operator*=(const BranchProbability &Prob);
OpenPOWER on IntegriCloud