diff options
author | Duncan Sands <baldrick@free.fr> | 2007-11-22 21:43:27 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-11-22 21:43:27 +0000 |
commit | 38a5e82ef4722fcb1d60000c4890bc96d9932128 (patch) | |
tree | 4a5355da1954df589d3539e24881677d72c87153 /llvm/lib/Analysis/BasicAliasAnalysis.cpp | |
parent | 1c97d752dfa39e2ba7b9bbd9610aa8291f2741d5 (diff) | |
download | bcm5719-llvm-38a5e82ef4722fcb1d60000c4890bc96d9932128.tar.gz bcm5719-llvm-38a5e82ef4722fcb1d60000c4890bc96d9932128.zip |
Teach alias analysis about readnone/readonly functions.
Based on a patch by Török Edwin.
llvm-svn: 44279
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index cbbc530fefb..c6e34da5ac3 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -952,6 +952,12 @@ BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS, if (Ptr != OnlyReadsMemoryTable->end() && strcmp(*Ptr, NamePtr) == 0) return OnlyReadsMemory; + const ParamAttrsList *Attrs = F->getFunctionType()->getParamAttrs(); + if (Attrs && Attrs->paramHasAttr(0, ParamAttr::ReadNone)) + return DoesNotAccessMemory; + if (Attrs && Attrs->paramHasAttr(0, ParamAttr::ReadOnly)) + return OnlyReadsMemory; + return UnknownModRefBehavior; } |