diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index d8ccbdaba9c60..877050c160955 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3388,7 +3388,7 @@ void CXXNameMangler::mangleAArch64FixedSveVectorType(const VectorType *T) { case BuiltinType::ULong: TypeName = "__SVUint64_t"; break; - case BuiltinType::Float16: + case BuiltinType::Half: TypeName = "__SVFloat16_t"; break; case BuiltinType::Float: diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 801f89a8f1874..ff73a7340091e 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -2317,38 +2317,13 @@ QualType Type::getSveEltType(const ASTContext &Ctx) const { assert(isVLSTBuiltinType() && "unsupported type!"); const BuiltinType *BTy = getAs(); - switch (BTy->getKind()) { - default: - llvm_unreachable("Unknown builtin SVE type!"); - case BuiltinType::SveInt8: - return Ctx.SignedCharTy; - case BuiltinType::SveUint8: - case BuiltinType::SveBool: + if (BTy->getKind() == BuiltinType::SveBool) // Represent predicates as i8 rather than i1 to avoid any layout issues. // The type is bitcasted to a scalable predicate type when casting between // scalable and fixed-length vectors. return Ctx.UnsignedCharTy; - case BuiltinType::SveInt16: - return Ctx.ShortTy; - case BuiltinType::SveUint16: - return Ctx.UnsignedShortTy; - case BuiltinType::SveInt32: - return Ctx.IntTy; - case BuiltinType::SveUint32: - return Ctx.UnsignedIntTy; - case BuiltinType::SveInt64: - return Ctx.LongTy; - case BuiltinType::SveUint64: - return Ctx.UnsignedLongTy; - case BuiltinType::SveFloat16: - return Ctx.Float16Ty; - case BuiltinType::SveBFloat16: - return Ctx.BFloat16Ty; - case BuiltinType::SveFloat32: - return Ctx.FloatTy; - case BuiltinType::SveFloat64: - return Ctx.DoubleTy; - } + else + return Ctx.getBuiltinVectorTypeInfo(BTy).ElementType; } bool QualType::isPODType(const ASTContext &Context) const { diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index e1ab61f10585d..5ebf432a4cd36 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -5627,7 +5627,7 @@ ABIArgInfo AArch64ABIInfo::coerceIllegalVector(QualType Ty) const { ResType = llvm::ScalableVectorType::get( llvm::Type::getInt64Ty(getVMContext()), 2); break; - case BuiltinType::Float16: + case BuiltinType::Half: ResType = llvm::ScalableVectorType::get( llvm::Type::getHalfTy(getVMContext()), 8); break; diff --git a/clang/test/CodeGen/attr-arm-sve-vector-bits-types.c b/clang/test/CodeGen/attr-arm-sve-vector-bits-types.c index a1cfc514081ea..27366dea3d34d 100644 --- a/clang/test/CodeGen/attr-arm-sve-vector-bits-types.c +++ b/clang/test/CodeGen/attr-arm-sve-vector-bits-types.c @@ -4,6 +4,7 @@ // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -msve-vector-bits=512 -fallow-half-arguments-and-returns -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-512 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -msve-vector-bits=1024 -fallow-half-arguments-and-returns -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-1024 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -msve-vector-bits=2048 -fallow-half-arguments-and-returns -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-2048 +// RUN: %clang_cc1 -triple aarch64_32-unknown-darwin -target-feature +sve -target-feature +bf16 -msve-vector-bits=512 -fallow-half-arguments-and-returns -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-ILP32 #include @@ -579,3 +580,11 @@ void f() { // CHECK-2048-NEXT: %local_arr_f64 = alloca [3 x <32 x double>], align 16 // CHECK-2048-NEXT: %local_arr_bf16 = alloca [3 x <128 x bfloat>], align 16 // CHECK-2048-NEXT: %local_arr_bool = alloca [3 x <32 x i8>], align 2 + +//===----------------------------------------------------------------------===// +// ILP32 ABI +//===----------------------------------------------------------------------===// +// CHECK-ILP32: @global_i32 = global <16 x i32> zeroinitializer, align 16 +// CHECK-ILP32: @global_i64 = global <8 x i64> zeroinitializer, align 16 +// CHECK-ILP32: @global_u32 = global <16 x i32> zeroinitializer, align 16 +// CHECK-ILP32: @global_u64 = global <8 x i64> zeroinitializer, align 16