[clang] [compiler-rt] [llvm] [SystemZ] Add support for half (fp16) (PR #109164)
Jonas Paulsson via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 17 03:55:43 PST 2025
================
@@ -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
More information about the llvm-commits
mailing list