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/Analysis/BasicAliasAnalysis.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/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 167d3b0c02c..fdc452b44f9 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -22,8 +22,9 @@ #include "llvm/Instructions.h" #include "llvm/Pass.h" #include "llvm/Target/TargetData.h" -#include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/Compiler.h" +#include "llvm/Support/GetElementPtrTypeIterator.h" +#include "llvm/Support/ManagedStatic.h" #include <algorithm> using namespace llvm; @@ -801,21 +802,23 @@ static const char *OnlyReadsMemoryFns[] = { "feof_unlocked", "ferror_unlocked", "fileno_unlocked" }; +static ManagedStatic<std::vector<const char*> > NoMemoryTable; +static ManagedStatic<std::vector<const char*> > OnlyReadsMemoryTable; + + AliasAnalysis::ModRefBehavior BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS, std::vector<PointerAccessInfo> *Info) { if (!F->isExternal()) return UnknownModRefBehavior; - static std::vector<const char*> NoMemoryTable, OnlyReadsMemoryTable; - static bool Initialized = false; if (!Initialized) { - NoMemoryTable.insert(NoMemoryTable.end(), - DoesntAccessMemoryFns, - DoesntAccessMemoryFns+ + NoMemoryTable->insert(NoMemoryTable->end(), + DoesntAccessMemoryFns, + DoesntAccessMemoryFns+ sizeof(DoesntAccessMemoryFns)/sizeof(DoesntAccessMemoryFns[0])); - OnlyReadsMemoryTable.insert(OnlyReadsMemoryTable.end(), + OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(), OnlyReadsMemoryFns, OnlyReadsMemoryFns+ sizeof(OnlyReadsMemoryFns)/sizeof(OnlyReadsMemoryFns[0])); @@ -824,22 +827,22 @@ BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS, #undef GET_MODREF_BEHAVIOR // Sort the table the first time through. - std::sort(NoMemoryTable.begin(), NoMemoryTable.end(), StringCompare()); - std::sort(OnlyReadsMemoryTable.begin(), OnlyReadsMemoryTable.end(), + std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), StringCompare()); + std::sort(OnlyReadsMemoryTable->begin(), OnlyReadsMemoryTable->end(), StringCompare()); Initialized = true; } std::vector<const char*>::iterator Ptr = - std::lower_bound(NoMemoryTable.begin(), NoMemoryTable.end(), + std::lower_bound(NoMemoryTable->begin(), NoMemoryTable->end(), F->getName().c_str(), StringCompare()); - if (Ptr != NoMemoryTable.end() && *Ptr == F->getName()) + if (Ptr != NoMemoryTable->end() && *Ptr == F->getName()) return DoesNotAccessMemory; - Ptr = std::lower_bound(OnlyReadsMemoryTable.begin(), - OnlyReadsMemoryTable.end(), + Ptr = std::lower_bound(OnlyReadsMemoryTable->begin(), + OnlyReadsMemoryTable->end(), F->getName().c_str(), StringCompare()); - if (Ptr != OnlyReadsMemoryTable.end() && *Ptr == F->getName()) + if (Ptr != OnlyReadsMemoryTable->end() && *Ptr == F->getName()) return OnlyReadsMemory; return UnknownModRefBehavior; |