diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-02-09 21:54:18 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-02-09 21:54:18 +0000 |
commit | ef8ed0c0db130f5d76f7e82c32056c5bd8e12209 (patch) | |
tree | aaf12e8d366535d132d58ee13e51e7c9d69aa808 /llvm/lib/Analysis/MemoryBuiltins.cpp | |
parent | dbcfedb330a2dc358e0e6b7f8e05eb4df4e59aa2 (diff) | |
download | bcm5719-llvm-ef8ed0c0db130f5d76f7e82c32056c5bd8e12209.tar.gz bcm5719-llvm-ef8ed0c0db130f5d76f7e82c32056c5bd8e12209.zip |
[MemoryBuiltins] Fix an issue with hasNoAliasAttr
Summary:
`hasNoAliasAttr` is buggy: it checks to see if the called function has
a `noalias` attribute, which is incorrect since functions are not even
allowed to have the `noalias` attribute. The comment on its only
caller, `llvm::isNoAliasFn`, makes it pretty clear that the intention
to do the `noalias` check on the return value, and not the callee.
Unfortunately I couldn't find a way to test this upstream -- fixing
this does not change the observable behavior of any of the passes that
use this. This is not very surprising, since `noalias` does not tell
anything about the contents of the allocated memory (so, e.g., you
still cannot fold loads). I'll be happy to be proven wrong though.
Reviewers: chandlerc, reames
Subscribers: mcrosier, llvm-commits
Differential Revision: http://reviews.llvm.org/D17037
llvm-svn: 260298
Diffstat (limited to 'llvm/lib/Analysis/MemoryBuiltins.cpp')
-rw-r--r-- | llvm/lib/Analysis/MemoryBuiltins.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index 480ab5cddde..b181292d1aa 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -144,7 +144,7 @@ static const AllocFnsTy *getAllocationData(const Value *V, AllocType AllocTy, static bool hasNoAliasAttr(const Value *V, bool LookThroughBitCast) { ImmutableCallSite CS(LookThroughBitCast ? V->stripPointerCasts() : V); - return CS && CS.hasFnAttr(Attribute::NoAlias); + return CS && CS.paramHasAttr(AttributeSet::ReturnIndex, Attribute::NoAlias); } |