forked from OSchip/llvm-project
[clang][aarch64] Fix mangling of bfloat16 neon vectors
The AAPCS64 specifies the internal type is used for c++ mangling. For bfloat16 it was defined as `BFloat16` when it should be `Bfloat16`, i.e. lowercase 'f'. For more information, see: https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#appendix-support-for-advanced-simd-extensions Reviewed By: stuij Differential Revision: https://reviews.llvm.org/D87463
This commit is contained in:
parent
257b29715b
commit
cabd60c26b
|
@ -3275,7 +3275,7 @@ static StringRef mangleAArch64VectorBase(const BuiltinType *EltType) {
|
|||
case BuiltinType::Double:
|
||||
return "Float64";
|
||||
case BuiltinType::BFloat16:
|
||||
return "BFloat16";
|
||||
return "Bfloat16";
|
||||
default:
|
||||
llvm_unreachable("Unexpected vector element base type");
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// RUN: %clang_cc1 -triple armv7-apple-ios -target-feature +neon %s -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm64-apple-ios -target-feature +neon %s -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-AARCH64
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -target-feature +bf16 %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-AARCH64-BF16
|
||||
|
||||
typedef float float32_t;
|
||||
typedef double float64_t;
|
||||
|
@ -14,6 +15,10 @@ typedef short poly16_t;
|
|||
#endif
|
||||
typedef unsigned __INT64_TYPE__ uint64_t;
|
||||
|
||||
#if defined(__ARM_FEATURE_BF16)
|
||||
typedef __bf16 bfloat16_t;
|
||||
#endif
|
||||
|
||||
typedef __attribute__((neon_vector_type(2))) int int32x2_t;
|
||||
typedef __attribute__((neon_vector_type(4))) int int32x4_t;
|
||||
typedef __attribute__((neon_vector_type(1))) uint64_t uint64x1_t;
|
||||
|
@ -28,6 +33,10 @@ typedef __attribute__((neon_vector_type(2))) float64_t float64x2_t;
|
|||
typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
|
||||
typedef __attribute__((neon_polyvector_type(8))) poly16_t poly16x8_t;
|
||||
|
||||
#if defined(__ARM_FEATURE_BF16)
|
||||
typedef __attribute__((neon_vector_type(4))) __bf16 bfloat16x4_t;
|
||||
#endif
|
||||
|
||||
// CHECK: 16__simd64_int32_t
|
||||
// CHECK-AARCH64: 11__Int32x2_t
|
||||
void f1(int32x2_t v) { }
|
||||
|
@ -72,3 +81,8 @@ void f10(poly16x8_t v) {}
|
|||
// CHECK-AARCH64: 13__Float64x2_t
|
||||
void f11(float64x2_t v) { }
|
||||
#endif
|
||||
|
||||
#if defined(__ARM_FEATURE_BF16)
|
||||
// CHECK-AARCH64-BF16: 14__Bfloat16x4_t
|
||||
void f12(bfloat16x4_t v) {}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue