summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/MemoryBuiltins.cpp
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-02-09 21:54:18 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-02-09 21:54:18 +0000
commitef8ed0c0db130f5d76f7e82c32056c5bd8e12209 (patch)
treeaaf12e8d366535d132d58ee13e51e7c9d69aa808 /llvm/lib/Analysis/MemoryBuiltins.cpp
parentdbcfedb330a2dc358e0e6b7f8e05eb4df4e59aa2 (diff)
downloadbcm5719-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.cpp2
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);
}
OpenPOWER on IntegriCloud