[clang] [llvm] [Inliner] Propagate more attributes to params when inlining (PR #91101)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Sat May 11 19:27:56 PDT 2024
================
@@ -1352,20 +1352,43 @@ static void AddParamAndFnBasicAttributes(const CallBase &CB,
auto &Context = CalledFunction->getContext();
// Collect valid attributes for all params.
- SmallVector<AttrBuilder> ValidParamAttrs;
+ SmallVector<AttrBuilder> ValidObjParamAttrs, ValidExactParamAttrs;
bool HasAttrToPropagate = false;
for (unsigned I = 0, E = CB.arg_size(); I < E; ++I) {
- ValidParamAttrs.emplace_back(AttrBuilder{CB.getContext()});
+ ValidObjParamAttrs.emplace_back(AttrBuilder{CB.getContext()});
+ ValidExactParamAttrs.emplace_back(AttrBuilder{CB.getContext()});
// Access attributes can be propagated to any param with the same underlying
// object as the argument.
if (CB.paramHasAttr(I, Attribute::ReadNone))
- ValidParamAttrs.back().addAttribute(Attribute::ReadNone);
+ ValidObjParamAttrs.back().addAttribute(Attribute::ReadNone);
if (CB.paramHasAttr(I, Attribute::ReadOnly))
- ValidParamAttrs.back().addAttribute(Attribute::ReadOnly);
+ ValidObjParamAttrs.back().addAttribute(Attribute::ReadOnly);
if (CB.paramHasAttr(I, Attribute::WriteOnly))
- ValidParamAttrs.back().addAttribute(Attribute::WriteOnly);
- HasAttrToPropagate |= ValidParamAttrs.back().hasAttributes();
+ ValidObjParamAttrs.back().addAttribute(Attribute::WriteOnly);
+
+ // Attributes we can only propagate if the exact parameter is forwarded.
+
+ // We can propagate both poison generating an UB generating attributes
----------------
dtcxzyw wrote:
```suggestion
// We can propagate both poison generating and UB generating attributes
```
https://github.com/llvm/llvm-project/pull/91101
More information about the llvm-commits
mailing list