diff options
author | Chris Lattner <sabre@nondot.org> | 2007-08-05 07:50:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-08-05 07:50:06 +0000 |
commit | 327f51904044248983e46b48f8109868b012a06f (patch) | |
tree | e8e079c0bb32d10f136cc3af5ac72e1cd213617e /lib/Analysis/BasicAliasAnalysis.cpp | |
parent | f093941458bb8560e6c38afc41ed5de5b73858e7 (diff) | |
download | external_llvm-327f51904044248983e46b48f8109868b012a06f.zip external_llvm-327f51904044248983e46b48f8109868b012a06f.tar.gz external_llvm-327f51904044248983e46b48f8109868b012a06f.tar.bz2 |
Upgrade BasicAliasAnalysis::getModRefBehavior to not call Value::getName,
which dynamically allocates the string result. This speeds up dse on the
testcase from PR1432 from 0.3781s to 0.1804s (2.1x).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index eba2131..a1bf69e 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -24,6 +24,7 @@ #include "llvm/Pass.h" #include "llvm/Target/TargetData.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringMap.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/ManagedStatic.h" @@ -900,17 +901,26 @@ BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS, StringCompare()); Initialized = true; } + + ValueName *Name = F->getValueName(); + unsigned NameLen = Name->getKeyLength(); + const char *NamePtr = Name->getKeyData(); + + // If there is an embedded nul character in the function name, we can never + // match it. + if (strlen(NamePtr) != NameLen) + return UnknownModRefBehavior; std::vector<const char*>::iterator Ptr = std::lower_bound(NoMemoryTable->begin(), NoMemoryTable->end(), - F->getName().c_str(), StringCompare()); - if (Ptr != NoMemoryTable->end() && *Ptr == F->getName()) + NamePtr, StringCompare()); + if (Ptr != NoMemoryTable->end() && strcmp(*Ptr, NamePtr) == 0) return DoesNotAccessMemory; Ptr = std::lower_bound(OnlyReadsMemoryTable->begin(), OnlyReadsMemoryTable->end(), - F->getName().c_str(), StringCompare()); - if (Ptr != OnlyReadsMemoryTable->end() && *Ptr == F->getName()) + NamePtr, StringCompare()); + if (Ptr != OnlyReadsMemoryTable->end() && strcmp(*Ptr, NamePtr) == 0) return OnlyReadsMemory; return UnknownModRefBehavior; |