summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-01-29 20:06:26 +0000
committerDevang Patel <dpatel@apple.com>2007-01-29 20:06:26 +0000
commitb05ef6a8eb4e06a4c3addb74d7d30eb2150049ea (patch)
tree03c8c4863ef5965c598e0893d42cb2c459513d6b /include
parentd683ef6655f255170ac460f20963320a19f6d2cd (diff)
downloadllvm-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.h49
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();
}