diff options
author | Devang Patel <dpatel@apple.com> | 2007-01-29 20:06:26 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2007-01-29 20:06:26 +0000 |
commit | b05ef6a8eb4e06a4c3addb74d7d30eb2150049ea (patch) | |
tree | 03c8c4863ef5965c598e0893d42cb2c459513d6b /include | |
parent | d683ef6655f255170ac460f20963320a19f6d2cd (diff) | |
download | llvm-b05ef6a8eb4e06a4c3addb74d7d30eb2150049ea.tar.gz llvm-b05ef6a8eb4e06a4c3addb74d7d30eb2150049ea.tar.bz2 llvm-b05ef6a8eb4e06a4c3addb74d7d30eb2150049ea.tar.xz |
Move TimingInfo into PassManagers.h so that other libs can use it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33626 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/PassManagers.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/llvm/PassManagers.h b/include/llvm/PassManagers.h index c4b3eed7f8..e4ae30a15c 100644 --- a/include/llvm/PassManagers.h +++ b/include/llvm/PassManagers.h @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/PassManager.h" +#include "llvm/Support/Timer.h" using namespace llvm; class llvm::PMDataManager; @@ -323,5 +324,53 @@ public: } }; +//===----------------------------------------------------------------------===// +// TimingInfo Class - This class is used to calculate information about the +// amount of time each pass takes to execute. This only happens when +// -time-passes is enabled on the command line. +// + +class TimingInfo { + std::map<Pass*, Timer> TimingData; + TimerGroup TG; + +public: + // Use 'create' member to get this. + TimingInfo() : TG("... Pass execution timing report ...") {} + + // TimingDtor - Print out information about timing information + ~TimingInfo() { + // Delete all of the timers... + TimingData.clear(); + // TimerGroup is deleted next, printing the report. + } + + // createTheTimeInfo - This method either initializes the TheTimeInfo pointer + // to a non null value (if the -time-passes option is enabled) or it leaves it + // null. It may be called multiple times. + static void createTheTimeInfo(); + + void passStarted(Pass *P) { + + if (dynamic_cast<PMDataManager *>(P)) + return; + + std::map<Pass*, Timer>::iterator I = TimingData.find(P); + if (I == TimingData.end()) + I=TimingData.insert(std::make_pair(P, Timer(P->getPassName(), TG))).first; + I->second.startTimer(); + } + void passEnded(Pass *P) { + + if (dynamic_cast<PMDataManager *>(P)) + return; + + std::map<Pass*, Timer>::iterator I = TimingData.find(P); + assert (I != TimingData.end() && "passStarted/passEnded not nested right!"); + I->second.stopTimer(); + } +}; + +extern TimingInfo *getTheTimeInfo(); } |