summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ProfileInfo.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-07-14 06:58:59 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-07-14 06:58:59 +0000
commit9afad0888db17aebbe5ee9084c186970be71a13f (patch)
treea1fd582e651ab39affda516dfdfbe719fcf13428 /llvm/lib/Analysis/ProfileInfo.cpp
parenta9ad47d94c9a11535b924a55cbfb256c51583d07 (diff)
downloadbcm5719-llvm-9afad0888db17aebbe5ee9084c186970be71a13f.tar.gz
bcm5719-llvm-9afad0888db17aebbe5ee9084c186970be71a13f.zip
ProfileInfo interface tweaks.
- Add getExecutionCount(const Function). - Add helper Edge type. - constify. - No functionality change. llvm-svn: 75623
Diffstat (limited to 'llvm/lib/Analysis/ProfileInfo.cpp')
-rw-r--r--llvm/lib/Analysis/ProfileInfo.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Analysis/ProfileInfo.cpp b/llvm/lib/Analysis/ProfileInfo.cpp
index a0965b66da8..26328d073cf 100644
--- a/llvm/lib/Analysis/ProfileInfo.cpp
+++ b/llvm/lib/Analysis/ProfileInfo.cpp
@@ -26,8 +26,8 @@ char ProfileInfo::ID = 0;
ProfileInfo::~ProfileInfo() {}
-unsigned ProfileInfo::getExecutionCount(BasicBlock *BB) const {
- pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
+unsigned ProfileInfo::getExecutionCount(const BasicBlock *BB) const {
+ pred_const_iterator PI = pred_begin(BB), PE = pred_end(BB);
// Are there zero predecessors of this block?
if (PI == PE) {
@@ -49,23 +49,23 @@ unsigned ProfileInfo::getExecutionCount(BasicBlock *BB) const {
// has a LARGE number of in-edges. Handle the common case of having only a
// few in-edges with special code.
//
- BasicBlock *FirstPred = *PI;
+ const BasicBlock *FirstPred = *PI;
unsigned Count = getEdgeWeight(FirstPred, BB);
++PI;
if (PI == PE) return Count; // Quick exit for single predecessor blocks
- BasicBlock *SecondPred = *PI;
+ const BasicBlock *SecondPred = *PI;
if (SecondPred != FirstPred) Count += getEdgeWeight(SecondPred, BB);
++PI;
if (PI == PE) return Count; // Quick exit for two predecessor blocks
- BasicBlock *ThirdPred = *PI;
+ const BasicBlock *ThirdPred = *PI;
if (ThirdPred != FirstPred && ThirdPred != SecondPred)
Count += getEdgeWeight(ThirdPred, BB);
++PI;
if (PI == PE) return Count; // Quick exit for three predecessor blocks
- std::set<BasicBlock*> ProcessedPreds;
+ std::set<const BasicBlock*> ProcessedPreds;
ProcessedPreds.insert(FirstPred);
ProcessedPreds.insert(SecondPred);
ProcessedPreds.insert(ThirdPred);
@@ -75,6 +75,10 @@ unsigned ProfileInfo::getExecutionCount(BasicBlock *BB) const {
return Count;
}
+unsigned ProfileInfo::getExecutionCount(const Function *F) const {
+ if (F->isDeclaration()) return -1;
+ return getExecutionCount(&F->getEntryBlock());
+}
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud