From 7d84dda56044b9731aea613a26ff98c8ceb3b5f9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 8 Mar 2004 22:03:45 +0000 Subject: [PATCH] Switch over to using edge profile information as the basic profiling representation, from basic block counts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12241 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/ProfileInfo.h | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/include/llvm/Analysis/ProfileInfo.h b/include/llvm/Analysis/ProfileInfo.h index 3bb056bf83d..a31bedf6c61 100644 --- a/include/llvm/Analysis/ProfileInfo.h +++ b/include/llvm/Analysis/ProfileInfo.h @@ -28,31 +28,39 @@ namespace llvm { class BasicBlock; class Pass; - /// createProfileLoaderPass - This function returns a Pass that loads the - /// profiling information for the module from the specified filename, making - /// it available to the optimizers. - Pass *createProfileLoaderPass(const std::string &Filename); - + /// ProfileInfo Class - This class holds and maintains edge profiling + /// information for some unit of code. class ProfileInfo { protected: - std::map ExecutionCounts; + // 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, unsigned> EdgeCounts; public: virtual ~ProfileInfo(); // We want to be subclassed //===------------------------------------------------------------------===// /// Profile Information Queries /// - unsigned getExecutionCount(BasicBlock *BB) { - std::map::iterator I = ExecutionCounts.find(BB); - return I != ExecutionCounts.end() ? I->second : 0; + unsigned getExecutionCount(BasicBlock *BB) const; + + unsigned getEdgeWeight(BasicBlock *Src, BasicBlock *Dest) const { + std::map, unsigned>::const_iterator I= + EdgeCounts.find(std::make_pair(Src, Dest)); + return I != EdgeCounts.end() ? I->second : 0; } - + //===------------------------------------------------------------------===// /// Analysis Update Methods /// }; + /// createProfileLoaderPass - This function returns a Pass that loads the + /// profiling information for the module from the specified filename, making + /// it available to the optimizers. + Pass *createProfileLoaderPass(const std::string &Filename); } // End llvm namespace #endif -- 2.34.1