================ @@ -179,20 +179,31 @@ bool SystemZABIInfo::isVectorArgumentType(QualType Ty) const { getContext().getTypeSize(Ty) <= 128); } -bool SystemZABIInfo::isFPArgumentType(QualType Ty) const { +// The Size argument will in case of af an overaligned single element struct +// reflect the overalignment value. In such a case the argument will be +// passed using the type matching Size. +llvm::Type *SystemZABIInfo::getFPArgumentType(QualType Ty, + uint64_t Size) const { if (IsSoftFloatABI) - return false; + return nullptr; if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) switch (BT->getKind()) { + case BuiltinType::Float16: + if (Size == 16) ---------------- JonPsson1 wrote:
I am not sure how that would work: provided that getTypeSize() returns the size of the struct, which will match any alignment of the element, we need the size value to get the right type for the element, and the SingleElementTy to know that it is actually an fp type. Maybe the switch could be simplified a bit by checking first that the SingleElementTy is one of these three types, and then return the type based on the size only? https://github.com/llvm/llvm-project/pull/109164 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits