diff options
Diffstat (limited to 'lib/Analysis/AliasAnalysis.cpp')
-rw-r--r-- | lib/Analysis/AliasAnalysis.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index da54c1b3da..5236435d20 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -114,11 +114,13 @@ AliasAnalysis::getModRefInfo(StoreInst *S, Value *P, unsigned Size) { AliasAnalysis::ModRefResult AliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { ModRefResult Mask = ModRef; - if (Function *F = CS.getCalledFunction()) - if (onlyReadsMemory(F)) { - if (doesNotAccessMemory(F)) return NoModRef; + if (Function *F = CS.getCalledFunction()) { + ModRefBehavior MRB = getModRefBehavior(F, CallSite()); + if (MRB == OnlyReadsMemory) Mask = Ref; - } + else if (MRB == DoesNotAccessMemory) + return NoModRef; + } if (!AA) return Mask; |