If a function only reads memory, then we know that...
authorDuncan Sands <baldrick@free.fr>
Fri, 13 Feb 2009 17:32:26 +0000 (17:32 +0000)
committerDuncan Sands <baldrick@free.fr>
Fri, 13 Feb 2009 17:32:26 +0000 (17:32 +0000)
it only reads memory!  The other change has no
functional effect, it just seems more logical to
go in order of decreasing knowledge.

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

lib/Analysis/AliasAnalysis.cpp

index 369f2f4f90e1e3f30f8d9c22ce11a60ced048068..67b2faac55dc49121c19fc63917a817fc1036fe3 100644 (file)
@@ -120,9 +120,13 @@ AliasAnalysis::getModRefBehavior(CallSite CS,
 AliasAnalysis::ModRefBehavior
 AliasAnalysis::getModRefBehavior(Function *F,
                                  std::vector<PointerAccessInfo> *Info) {
-  if (F && F->doesNotAccessMemory())
-    // Can't do better than this.
-    return DoesNotAccessMemory;
+  if (F) {
+    if (F->doesNotAccessMemory())
+      // Can't do better than this.
+      return DoesNotAccessMemory;
+    else if (F->onlyReadsMemory())
+      return OnlyReadsMemory;
+  }
   return UnknownModRefBehavior;
 }
 
@@ -130,10 +134,10 @@ AliasAnalysis::ModRefResult
 AliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
   ModRefResult Mask = ModRef;
   ModRefBehavior MRB = getModRefBehavior(CS);
-  if (MRB == OnlyReadsMemory)
-    Mask = Ref;
-  else if (MRB == DoesNotAccessMemory)
+  if (MRB == DoesNotAccessMemory)
     return NoModRef;
+  else if (MRB == OnlyReadsMemory)
+    Mask = Ref;
   else if (MRB == AliasAnalysis::AccessesArguments) {
     bool doesAlias = false;
     for (CallSite::arg_iterator AI = CS.arg_begin(), AE = CS.arg_end();
@@ -142,7 +146,7 @@ AliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
         doesAlias = true;
         break;
       }
-    
+
     if (!doesAlias)
       return NoModRef;
   }