[PATCH] D101806: [TargetLowering] Only inspect attributes in the arguments for ArgListEntry
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 3 18:13:34 PDT 2021
aeubanks created this revision.
aeubanks added reviewers: rnk, dblaikie.
Herald added subscribers: kerbowa, hiraditya, nhaehnle, jvesely.
aeubanks requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Parameter attributes are considered part of the function [1], and like
mismatched calling conventions [2], we can't have the verifier check for
mismatched parameter attributes.
[1] https://llvm.org/docs/LangRef.html#parameter-attributes
[2] https://llvm.org/docs/FAQ.html#why-does-instcombine-simplifycfg-turn-a-call-to-a-function-with-a-mismatched-calling-convention-into-unreachable-why-not-make-the-verifier-reject-it
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D101806
Files:
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll
llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll
Index: llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll
===================================================================
--- llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll
+++ llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll
@@ -649,7 +649,7 @@
i32 210, i32 220, i32 230, i32 240,
i32 250, i32 260, i32 270, i32 280,
i32 290, i32 300, i32 310, i32 320,
- i32 addrspace(5)* %alloca)
+ i32 addrspace(5)* byval(i32) %alloca)
ret void
}
@@ -686,7 +686,7 @@
i32 210, i32 220, i32 230, i32 240,
i32 250, i32 260, i32 270, i32 280,
i32 290, i32 300, i32 310, i32 320,
- i32 addrspace(5)* %alloca)
+ i32 addrspace(5)* byval(i32) %alloca)
ret void
}
Index: llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll
===================================================================
--- llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll
+++ llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll
@@ -517,7 +517,7 @@
i32 210, i32 220, i32 230, i32 240,
i32 250, i32 260, i32 270, i32 280,
i32 290, i32 300, i32 310, i32 320,
- i32 addrspace(5)* %alloca)
+ i32 addrspace(5)* byval(i32) %alloca)
ret void
}
@@ -541,7 +541,7 @@
i32 210, i32 220, i32 230, i32 240,
i32 250, i32 260, i32 270, i32 280,
i32 290, i32 300, i32 310, i32 320,
- i32 addrspace(5)* %alloca)
+ i32 addrspace(5)* byval(i32) %alloca)
ret void
}
Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -106,24 +106,29 @@
/// and called function attributes.
void TargetLoweringBase::ArgListEntry::setAttributes(const CallBase *Call,
unsigned ArgIdx) {
- IsSExt = Call->paramHasAttr(ArgIdx, Attribute::SExt);
- IsZExt = Call->paramHasAttr(ArgIdx, Attribute::ZExt);
- IsInReg = Call->paramHasAttr(ArgIdx, Attribute::InReg);
- IsSRet = Call->paramHasAttr(ArgIdx, Attribute::StructRet);
- IsNest = Call->paramHasAttr(ArgIdx, Attribute::Nest);
- IsByVal = Call->paramHasAttr(ArgIdx, Attribute::ByVal);
- IsPreallocated = Call->paramHasAttr(ArgIdx, Attribute::Preallocated);
- IsInAlloca = Call->paramHasAttr(ArgIdx, Attribute::InAlloca);
- IsReturned = Call->paramHasAttr(ArgIdx, Attribute::Returned);
- IsSwiftSelf = Call->paramHasAttr(ArgIdx, Attribute::SwiftSelf);
- IsSwiftError = Call->paramHasAttr(ArgIdx, Attribute::SwiftError);
- Alignment = Call->getParamStackAlign(ArgIdx);
+ auto Attrs = Call->getAttributes();
+ IsSExt = Attrs.hasParamAttribute(ArgIdx, Attribute::SExt);
+ IsZExt = Attrs.hasParamAttribute(ArgIdx, Attribute::ZExt);
+ IsInReg = Attrs.hasParamAttribute(ArgIdx, Attribute::InReg);
+ IsSRet = Attrs.hasParamAttribute(ArgIdx, Attribute::StructRet);
+ IsNest = Attrs.hasParamAttribute(ArgIdx, Attribute::Nest);
+ IsReturned = Attrs.hasParamAttribute(ArgIdx, Attribute::Returned);
+ IsSwiftSelf = Attrs.hasParamAttribute(ArgIdx, Attribute::SwiftSelf);
+ IsSwiftError = Attrs.hasParamAttribute(ArgIdx, Attribute::SwiftError);
+ Alignment = Attrs.getParamStackAlignment(ArgIdx);
+
+ // Don't look at the callee parameter attributes for the following attributes.
+ // We can't verify that the following attributes are consistent between the
+ // callee parameters and the caller's arguments.
+ IsByVal = Attrs.hasParamAttribute(ArgIdx, Attribute::ByVal);
ByValType = nullptr;
if (IsByVal) {
ByValType = Call->getParamByValType(ArgIdx);
if (!Alignment)
Alignment = Call->getParamAlign(ArgIdx);
}
+ IsInAlloca = Attrs.hasParamAttribute(ArgIdx, Attribute::InAlloca);
+ IsPreallocated = Attrs.hasParamAttribute(ArgIdx, Attribute::Preallocated);
PreallocatedType = nullptr;
if (IsPreallocated)
PreallocatedType = Call->getParamPreallocatedType(ArgIdx);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101806.342615.patch
Type: text/x-patch
Size: 3970 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210504/745f9ddf/attachment.bin>
More information about the llvm-commits
mailing list