diff options
author | Dan Gohman <gohman@apple.com> | 2008-07-11 21:54:34 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-07-11 21:54:34 +0000 |
commit | 36a69373dc919e0a5e05aab3687d9d08ec8c5ba5 (patch) | |
tree | e91093ff9904bcb46c6c5e645fb8d8fd526793a2 /llvm/lib/Support/Timer.cpp | |
parent | f8d7f7295682c9315d59d04c0980baf78c8acf0d (diff) | |
download | bcm5719-llvm-36a69373dc919e0a5e05aab3687d9d08ec8c5ba5.tar.gz bcm5719-llvm-36a69373dc919e0a5e05aab3687d9d08ec8c5ba5.zip |
Add support for putting NamedRegionTimers in TimerGroups, and
use a timer group for the timers in SelectionDAGISel. Also,
Split scheduling out from emitting, to give each their own
timer.
llvm-svn: 53476
Diffstat (limited to 'llvm/lib/Support/Timer.cpp')
-rw-r--r-- | llvm/lib/Support/Timer.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/llvm/lib/Support/Timer.cpp b/llvm/lib/Support/Timer.cpp index 29fd00c0a33..3c8879bd06e 100644 --- a/llvm/lib/Support/Timer.cpp +++ b/llvm/lib/Support/Timer.cpp @@ -182,19 +182,51 @@ void Timer::addPeakMemoryMeasurement() { // NamedRegionTimer Implementation //===----------------------------------------------------------------------===// -static ManagedStatic<std::map<std::string, Timer> > NamedTimers; +namespace { + +typedef std::map<std::string, Timer> Name2Timer; +typedef std::map<std::string, std::pair<TimerGroup, Name2Timer> > Name2Pair; + +} + +static ManagedStatic<Name2Timer> NamedTimers; + +static ManagedStatic<Name2Pair> NamedGroupedTimers; static Timer &getNamedRegionTimer(const std::string &Name) { - std::map<std::string, Timer>::iterator I = NamedTimers->find(Name); + Name2Timer::iterator I = NamedTimers->find(Name); if (I != NamedTimers->end()) return I->second; return NamedTimers->insert(I, std::make_pair(Name, Timer(Name)))->second; } +static Timer &getNamedRegionTimer(const std::string &Name, + const std::string &GroupName) { + + Name2Pair::iterator I = NamedGroupedTimers->find(GroupName); + if (I == NamedGroupedTimers->end()) { + TimerGroup TG(GroupName); + std::pair<TimerGroup, Name2Timer> Pair(TG, Name2Timer()); + I = NamedGroupedTimers->insert(I, std::make_pair(GroupName, Pair)); + } + + Name2Timer::iterator J = I->second.second.find(Name); + if (J == I->second.second.end()) + J = I->second.second.insert(J, + std::make_pair(Name, + Timer(Name, + I->second.first))); + + return J->second; +} + NamedRegionTimer::NamedRegionTimer(const std::string &Name) : TimeRegion(getNamedRegionTimer(Name)) {} +NamedRegionTimer::NamedRegionTimer(const std::string &Name, + const std::string &GroupName) + : TimeRegion(getNamedRegionTimer(Name, GroupName)) {} //===----------------------------------------------------------------------===// // TimerGroup Implementation |