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