[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