mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 21:35:07 +00:00
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
This commit is contained in:
parent
d683ef6655
commit
b05ef6a8eb
@ -12,6 +12,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#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;
|
||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
#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"
|
||||||
@ -259,60 +258,13 @@ 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;
|
||||||
|
|
||||||
} // End of anon namespace
|
TimingInfo *getTheTimeInfo() {
|
||||||
|
return TheTimeInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // End of llvm namespace
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// PMTopLevelManager implementation
|
// PMTopLevelManager implementation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user