Deinline some virtual methods, provide better mod/ref answers through the
authorChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 04:07:29 +0000 (04:07 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2004 04:07:29 +0000 (04:07 +0000)
use of the boolean queries

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12410 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/AliasAnalysis.cpp

index 373524b6c151d07ae9c2ab66920a44ab935e0221..a2b852bf494a9a79fcc369611b361eee7a81a2de 100644 (file)
@@ -28,8 +28,7 @@
 #include "llvm/BasicBlock.h"
 #include "llvm/iMemory.h"
 #include "llvm/Target/TargetData.h"
-
-namespace llvm {
+using namespace llvm;
 
 // Register the AliasAnalysis interface, providing a nice name to refer to.
 namespace {
@@ -55,6 +54,25 @@ AliasAnalysis::getModRefInfo(StoreInst *S, Value *P, unsigned Size) {
   return pointsToConstantMemory(P) ? NoModRef : Mod;
 }
 
+AliasAnalysis::ModRefResult
+AliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
+  if (Function *F = CS.getCalledFunction())
+    if (onlyReadsMemory(F)) {
+      if (doesNotAccessMemory(F)) return NoModRef;
+      return Ref;
+    }
+
+  // If P points to a constant memory location, the call definitely could not
+  // modify the memory location.
+  return pointsToConstantMemory(P) ? Ref : ModRef;
+}
+
+AliasAnalysis::ModRefResult
+AliasAnalysis::getModRefInfo(CallSite CS1, CallSite CS2) {
+  // FIXME: could probably do better.
+  return ModRef;
+}
+
 
 // AliasAnalysis destructor: DO NOT move this to the header file for
 // AliasAnalysis or else clients of the AliasAnalysis class may not depend on
@@ -110,7 +128,7 @@ bool AliasAnalysis::canInstructionRangeModify(const Instruction &I1,
 // the risk of AliasAnalysis being used, but the default implementation not
 // being linked into the tool that uses it.
 //
-extern void BasicAAStub();
+extern void llvm::BasicAAStub();
 static IncludeFile INCLUDE_BASICAA_CPP((void*)&BasicAAStub);
 
 
@@ -132,5 +150,3 @@ namespace {
   // Declare that we implement the AliasAnalysis interface
   RegisterAnalysisGroup<AliasAnalysis, NoAA> Y;
 }  // End of anonymous namespace
-
-} // End llvm namespace