diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -111,19 +111,25 @@ 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); + + // Don't look at the callee parameter attributes for the following ABI + // attributes. We can't verify that the following attributes are consistent + // between the callee parameters and the caller's arguments. + auto Attrs = Call->getAttributes(); + + 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); diff --git a/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll b/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll --- a/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs-packed.ll +++ b/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 } diff --git a/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll b/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll --- a/llvm/test/CodeGen/AMDGPU/callee-special-input-vgprs.ll +++ b/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 }