mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
- 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:
@@ -12,7 +12,6 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/PassManager.h"
|
#include "llvm/PassManager.h"
|
||||||
#include "llvm/Support/Timer.h"
|
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
class llvm::PMDataManager;
|
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 *);
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "llvm/PassManagers.h"
|
#include "llvm/PassManagers.h"
|
||||||
#include "llvm/Support/CommandLine.h"
|
#include "llvm/Support/CommandLine.h"
|
||||||
|
#include "llvm/Support/Timer.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/ModuleProvider.h"
|
#include "llvm/ModuleProvider.h"
|
||||||
#include "llvm/Support/Streams.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;
|
static TimingInfo *TheTimeInfo;
|
||||||
|
|
||||||
TimingInfo *getTheTimeInfo() {
|
} // End of anon namespace
|
||||||
return TheTimeInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // End of llvm namespace
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// PMTopLevelManager implementation
|
// PMTopLevelManager implementation
|
||||||
@@ -1084,6 +1132,18 @@ void TimingInfo::createTheTimeInfo() {
|
|||||||
TheTimeInfo = &*TTI;
|
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
|
// PMStack implementation
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user