diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-20 21:30:33 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-21 20:18:23 +0100 |
commit | 82bd64fff63272c92b91a951ffde678fb9af4899 (patch) | |
tree | 6438f68e59a876edece97dd365c58e7870d6c30f /llvm/lib/Analysis/AliasAnalysis.cpp | |
parent | 43def795aacd6794f93b91fc76e59953fd67e138 (diff) | |
download | llvm-82bd64fff63272c92b91a951ffde678fb9af4899.zip llvm-82bd64fff63272c92b91a951ffde678fb9af4899.tar.gz llvm-82bd64fff63272c92b91a951ffde678fb9af4899.tar.bz2 |
[AA] byval argument is identified function local
byval arguments should mostly get the same treatment as noalias
arguments in alias analysis. This was not the case for the
isIdentifiedFunctionLocal() function.
Marking byval arguments as identified function local means that
they cannot alias with other arguments, which I believe is correct.
Differential Revision: https://reviews.llvm.org/D93602
Diffstat (limited to 'llvm/lib/Analysis/AliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/AliasAnalysis.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index 7d4969c..f5b62ef 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -943,9 +943,9 @@ bool llvm::isNoAliasCall(const Value *V) { return false; } -bool llvm::isNoAliasArgument(const Value *V) { +static bool isNoAliasOrByValArgument(const Value *V) { if (const Argument *A = dyn_cast<Argument>(V)) - return A->hasNoAliasAttr(); + return A->hasNoAliasAttr() || A->hasByValAttr(); return false; } @@ -956,13 +956,13 @@ bool llvm::isIdentifiedObject(const Value *V) { return true; if (isNoAliasCall(V)) return true; - if (const Argument *A = dyn_cast<Argument>(V)) - return A->hasNoAliasAttr() || A->hasByValAttr(); + if (isNoAliasOrByValArgument(V)) + return true; return false; } bool llvm::isIdentifiedFunctionLocal(const Value *V) { - return isa<AllocaInst>(V) || isNoAliasCall(V) || isNoAliasArgument(V); + return isa<AllocaInst>(V) || isNoAliasCall(V) || isNoAliasOrByValArgument(V); } void llvm::getAAResultsAnalysisUsage(AnalysisUsage &AU) { |