[llvm-commits] [llvm] r40838 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

Chris Lattner sabre at nondot.org
Sun Aug 5 00:50:08 PDT 2007


Author: lattner
Date: Sun Aug  5 02:50:06 2007
New Revision: 40838

URL: http://llvm.org/viewvc/llvm-project?rev=40838&view=rev
Log:
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).

Modified:
    llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=40838&r1=40837&r2=40838&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Aug  5 02:50:06 2007
@@ -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 @@
               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;





More information about the llvm-commits mailing list