diff options
author | Chris Lattner <sabre@nondot.org> | 2004-03-08 22:03:45 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-03-08 22:03:45 +0000 |
commit | 7d84dda56044b9731aea613a26ff98c8ceb3b5f9 (patch) | |
tree | 5bd70aad9e1bf879be0c56d90997def9e916ceaf /include/llvm/Analysis/ProfileInfo.h | |
parent | 62e84f376b621eb848807e0652ad4bfc465ad1f5 (diff) | |
download | external_llvm-7d84dda56044b9731aea613a26ff98c8ceb3b5f9.zip external_llvm-7d84dda56044b9731aea613a26ff98c8ceb3b5f9.tar.gz external_llvm-7d84dda56044b9731aea613a26ff98c8ceb3b5f9.tar.bz2 |
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
Diffstat (limited to 'include/llvm/Analysis/ProfileInfo.h')
-rw-r--r-- | include/llvm/Analysis/ProfileInfo.h | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/include/llvm/Analysis/ProfileInfo.h b/include/llvm/Analysis/ProfileInfo.h index 3bb056b..a31bedf 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<BasicBlock*, unsigned> 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<std::pair<BasicBlock*, BasicBlock*>, unsigned> EdgeCounts; public: virtual ~ProfileInfo(); // We want to be subclassed //===------------------------------------------------------------------===// /// Profile Information Queries /// - unsigned getExecutionCount(BasicBlock *BB) { - std::map<BasicBlock*, unsigned>::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<std::pair<BasicBlock*, BasicBlock*>, 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 |