From: Duncan Sands Date: Fri, 13 Feb 2009 17:32:26 +0000 (+0000) Subject: If a function only reads memory, then we know that... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ddd8c450ece6a3c637441992852193a6c5b2fed6;p=oota-llvm.git If a function only reads memory, then we know that... 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 --- diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index 369f2f4f90e..67b2faac55d 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -120,9 +120,13 @@ AliasAnalysis::getModRefBehavior(CallSite CS, AliasAnalysis::ModRefBehavior AliasAnalysis::getModRefBehavior(Function *F, std::vector *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; }