From 96135b617a5c752ea98388d0ed4a289c47c147b3 Mon Sep 17 00:00:00 2001 From: Andreas Neustifter Date: Mon, 24 Aug 2009 21:37:48 +0000 Subject: [PATCH] This patch cleans up the ProfileInfo by *) introducing new data type and export function of edge info for whole function (preparation for next patch). *) renaming variables to make clear distinction between data and containers that contain this data. *) updated comments and whitespaces. *) made ProfileInfo::MissingValue a double (as it should be...). (Discussed at http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090817/084955.html.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79940 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/ProfileInfo.h | 29 +++++++++++++++++------------ lib/Analysis/ProfileInfo.cpp | 6 ++++-- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/include/llvm/Analysis/ProfileInfo.h b/include/llvm/Analysis/ProfileInfo.h index 9b692515f38..6025e9f9feb 100644 --- a/include/llvm/Analysis/ProfileInfo.h +++ b/include/llvm/Analysis/ProfileInfo.h @@ -36,20 +36,21 @@ namespace llvm { public: // Types for handling profiling information. typedef std::pair Edge; - typedef std::map EdgeCounts; + typedef std::pair EdgeWeight; + typedef std::map EdgeWeights; typedef std::map BlockCounts; protected: - // EdgeCounts - Count the number of times a transition between two blocks is - // executed. As a special case, we also hold an edge from the null - // BasicBlock to the entry block to indicate how many times the function was - // entered. - std::map EdgeInformation; + // EdgeInformation - Count the number of times a transition between two + // blocks is executed. As a special case, we also hold an edge from the + // null BasicBlock to the entry block to indicate how many times the + // function was entered. + std::map EdgeInformation; - // BlockCounts - Count the number of times a block is executed. + // BlockInformation - Count the number of times a block is executed. std::map BlockInformation; - // FunctionCounts - Count the number of times a function is executed. + // FunctionInformation - Count the number of times a function is executed. std::map FunctionInformation; public: static char ID; // Class identification, replacement for typeinfo @@ -57,7 +58,7 @@ namespace llvm { // MissingValue - The value that is returned for execution counts in case // no value is available. - static const int MissingValue = -1; + static const double MissingValue; // getFunction() - Returns the Function for an Edge, checking for validity. static const Function* getFunction(Edge e) { @@ -66,7 +67,7 @@ namespace llvm { } // getEdge() - Creates an Edge from two BasicBlocks. - static Edge getEdge(const BasicBlock* Src, const BasicBlock* Dest) { + static Edge getEdge(const BasicBlock *Src, const BasicBlock *Dest) { return std::make_pair(Src, Dest); } @@ -78,16 +79,20 @@ namespace llvm { double getExecutionCount(const BasicBlock *BB); double getEdgeWeight(Edge e) const { - std::map::const_iterator J = + std::map::const_iterator J = EdgeInformation.find(getFunction(e)); if (J == EdgeInformation.end()) return MissingValue; - EdgeCounts::const_iterator I = J->second.find(e); + EdgeWeights::const_iterator I = J->second.find(e); if (I == J->second.end()) return MissingValue; return I->second; } + EdgeWeights &getEdgeWeights (const Function *F) { + return EdgeInformation[F]; + } + //===------------------------------------------------------------------===// /// Analysis Update Methods /// diff --git a/lib/Analysis/ProfileInfo.cpp b/lib/Analysis/ProfileInfo.cpp index 98ea25199b0..a7fc4c49d5e 100644 --- a/lib/Analysis/ProfileInfo.cpp +++ b/lib/Analysis/ProfileInfo.cpp @@ -26,6 +26,8 @@ char ProfileInfo::ID = 0; ProfileInfo::~ProfileInfo() {} +const double ProfileInfo::MissingValue = -1; + double ProfileInfo::getExecutionCount(const BasicBlock *BB) { std::map::iterator J = BlockInformation.find(BB->getParent()); @@ -60,7 +62,7 @@ double ProfileInfo::getExecutionCount(const BasicBlock *BB) { Count += w; } - BlockInformation[BB->getParent()][BB] = Count; + if (Count != MissingValue) BlockInformation[BB->getParent()][BB] = Count; return Count; } @@ -72,7 +74,7 @@ double ProfileInfo::getExecutionCount(const Function *F) { return J->second; double Count = getExecutionCount(&F->getEntryBlock()); - FunctionInformation[F] = Count; + if (Count != MissingValue) FunctionInformation[F] = Count; return Count; } -- 2.34.1