diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-10-04 21:52:35 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-10-04 21:52:35 +0000 |
| commit | 8111c592790771e946d913d8c7aa4269a4551e13 (patch) | |
| tree | efdee7d991dd8fa32f42e8e9d567573a3d0701ca /llvm/lib/Support/Timer.cpp | |
| parent | 538c6eb05c65de5ee3b65338d003d8ef0b550e5f (diff) | |
| download | bcm5719-llvm-8111c592790771e946d913d8c7aa4269a4551e13.tar.gz bcm5719-llvm-8111c592790771e946d913d8c7aa4269a4551e13.zip | |
Fix more static dtor issues
llvm-svn: 30725
Diffstat (limited to 'llvm/lib/Support/Timer.cpp')
| -rw-r--r-- | llvm/lib/Support/Timer.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/llvm/lib/Support/Timer.cpp b/llvm/lib/Support/Timer.cpp index b0012ceb518..0c4f18f6307 100644 --- a/llvm/lib/Support/Timer.cpp +++ b/llvm/lib/Support/Timer.cpp @@ -13,6 +13,7 @@ #include "llvm/Support/Timer.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/ManagedStatic.h" #include "llvm/System/Process.h" #include <algorithm> #include <fstream> @@ -32,8 +33,8 @@ namespace llvm { extern std::ostream *GetLibSupportInfoOutputFile(); } // would get destroyed before the Statistic, causing havoc to ensue. We "fix" // this by creating the string the first time it is needed and never destroying // it. +static ManagedStatic<std::string> LibSupportInfoOutputFilename; static std::string &getLibSupportInfoOutputFilename() { - static std::string *LibSupportInfoOutputFilename = new std::string(); return *LibSupportInfoOutputFilename; } @@ -127,7 +128,7 @@ static TimeRecord getTimeRecord(bool Start) { return Result; } -static std::vector<Timer*> ActiveTimers; +static ManagedStatic<std::vector<Timer*> > ActiveTimers; void Timer::startTimer() { Started = true; @@ -137,7 +138,7 @@ void Timer::startTimer() { SystemTime -= TR.SystemTime; MemUsed -= TR.MemUsed; PeakMemBase = TR.MemUsed; - ActiveTimers.push_back(this); + ActiveTimers->push_back(this); } void Timer::stopTimer() { @@ -147,13 +148,13 @@ void Timer::stopTimer() { SystemTime += TR.SystemTime; MemUsed += TR.MemUsed; - if (ActiveTimers.back() == this) { - ActiveTimers.pop_back(); + if (ActiveTimers->back() == this) { + ActiveTimers->pop_back(); } else { std::vector<Timer*>::iterator I = - std::find(ActiveTimers.begin(), ActiveTimers.end(), this); - assert(I != ActiveTimers.end() && "stop but no startTimer?"); - ActiveTimers.erase(I); + std::find(ActiveTimers->begin(), ActiveTimers->end(), this); + assert(I != ActiveTimers->end() && "stop but no startTimer?"); + ActiveTimers->erase(I); } } @@ -172,8 +173,8 @@ void Timer::sum(const Timer &T) { void Timer::addPeakMemoryMeasurement() { size_t MemUsed = getMemUsage(); - for (std::vector<Timer*>::iterator I = ActiveTimers.begin(), - E = ActiveTimers.end(); I != E; ++I) + for (std::vector<Timer*>::iterator I = ActiveTimers->begin(), + E = ActiveTimers->end(); I != E; ++I) (*I)->PeakMem = std::max((*I)->PeakMem, MemUsed-(*I)->PeakMemBase); } @@ -181,14 +182,14 @@ void Timer::addPeakMemoryMeasurement() { // NamedRegionTimer Implementation //===----------------------------------------------------------------------===// -static Timer &getNamedRegionTimer(const std::string &Name) { - static std::map<std::string, Timer> NamedTimers; +static ManagedStatic<std::map<std::string, Timer> > NamedTimers; - std::map<std::string, Timer>::iterator I = NamedTimers.lower_bound(Name); - if (I != NamedTimers.end() && I->first == Name) +static Timer &getNamedRegionTimer(const std::string &Name) { + std::map<std::string, Timer>::iterator I = NamedTimers->lower_bound(Name); + if (I != NamedTimers->end() && I->first == Name) return I->second; - return NamedTimers.insert(I, std::make_pair(Name, Timer(Name)))->second; + return NamedTimers->insert(I, std::make_pair(Name, Timer(Name)))->second; } NamedRegionTimer::NamedRegionTimer(const std::string &Name) |

