- Undo previous check-in (i.e. Do not export TimingInfo class through

PassManagers.h).

- Add StopPassTimer() and StartPassTimer() to expose TimingInfo to
CallGraphPassManager

- Use these two APIs in CalLgraphPassManager to measure timings.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33638 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2007-01-29 23:10:37 +00:00
parent bcc5f36765
commit c874eb54ec
2 changed files with 67 additions and 54 deletions

View File

@ -12,7 +12,6 @@
//===----------------------------------------------------------------------===//
#include "llvm/PassManager.h"
#include "llvm/Support/Timer.h"
using namespace llvm;
class llvm::PMDataManager;
@ -324,53 +323,7 @@ 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();
}
extern void StartPassTimer(Pass *);
extern void StopPassTimer(Pass *);

View File

@ -14,6 +14,7 @@
#include "llvm/PassManagers.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Timer.h"
#include "llvm/Module.h"
#include "llvm/ModuleProvider.h"
#include "llvm/Support/Streams.h"
@ -258,13 +259,60 @@ public:
};
} // End of llvm namespace
namespace {
//===----------------------------------------------------------------------===//
// 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 VISIBILITY_HIDDEN 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();
}
};
static TimingInfo *TheTimeInfo;
TimingInfo *getTheTimeInfo() {
return TheTimeInfo;
}
} // End of llvm namespace
} // End of anon namespace
//===----------------------------------------------------------------------===//
// PMTopLevelManager implementation
@ -1084,6 +1132,18 @@ void TimingInfo::createTheTimeInfo() {
TheTimeInfo = &*TTI;
}
/// If TimingInfo is enabled then start pass timer.
void StartPassTimer(Pass *P) {
if (TheTimeInfo)
TheTimeInfo->passStarted(P);
}
/// If TimingInfo is enabled then stop pass timer.
void StopPassTimer(Pass *P) {
if (TheTimeInfo)
TheTimeInfo->passEnded(P);
}
//===----------------------------------------------------------------------===//
// PMStack implementation
//