[llvm] b6eb6a8 - [FunctionAttrs] Use doesNotCapture()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 14 06:38:35 PST 2025
Author: Nikita Popov
Date: 2025-01-14T15:36:01+01:00
New Revision: b6eb6a87cf04d8e8e8e323e4d77a38e92a6afc3e
URL: https://github.com/llvm/llvm-project/commit/b6eb6a87cf04d8e8e8e323e4d77a38e92a6afc3e
DIFF: https://github.com/llvm/llvm-project/commit/b6eb6a87cf04d8e8e8e323e4d77a38e92a6afc3e.diff
LOG: [FunctionAttrs] Use doesNotCapture()
To be conservative, explicitly exclude byval arguments, which
doesNotCapture() would otherwise allow. Even if byval has an
initializes attribute, it would only apply to the implicit
copy.
Added:
Modified:
llvm/lib/Transforms/IPO/FunctionAttrs.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
index 06b5d791abe95e..03cb14c1270c27 100644
--- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -683,17 +683,17 @@ ArgumentAccessInfo getArgmentAccessInfo(const Instruction *I,
}
}
} else if (auto *CB = dyn_cast<CallBase>(I)) {
- if (CB->isArgOperand(ArgUse.U)) {
+ if (CB->isArgOperand(ArgUse.U) &&
+ !CB->isByValArgument(CB->getArgOperandNo(ArgUse.U))) {
unsigned ArgNo = CB->getArgOperandNo(ArgUse.U);
bool IsInitialize = CB->paramHasAttr(ArgNo, Attribute::Initializes);
- // Argument is a Write when parameter is writeonly/readnone
- // and nocapture. Otherwise, it's a WriteWithSideEffect.
- auto Access = CB->onlyWritesMemory(ArgNo) &&
- CB->paramHasAttr(ArgNo, Attribute::NoCapture)
- ? ArgumentAccessInfo::AccessType::Write
- : ArgumentAccessInfo::AccessType::WriteWithSideEffect;
- ConstantRangeList AccessRanges;
if (IsInitialize && ArgUse.Offset) {
+ // Argument is a Write when parameter is writeonly/readnone
+ // and nocapture. Otherwise, it's a WriteWithSideEffect.
+ auto Access = CB->onlyWritesMemory(ArgNo) && CB->doesNotCapture(ArgNo)
+ ? ArgumentAccessInfo::AccessType::Write
+ : ArgumentAccessInfo::AccessType::WriteWithSideEffect;
+ ConstantRangeList AccessRanges;
Attribute Attr = CB->getParamAttr(ArgNo, Attribute::Initializes);
ConstantRangeList CBCRL = Attr.getValueAsConstantRangeList();
for (ConstantRange &CR : CBCRL)
More information about the llvm-commits
mailing list