[llvm-branch-commits] [clang] bff8d98 - [clang][aarch64] Fix mangling of bfloat16 neon vectors
Hans Wennborg via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Sep 11 04:39:52 PDT 2020
Author: Cullen Rhodes
Date: 2020-09-11T13:34:42+02:00
New Revision: bff8d98129e8512ce9dcaed04e49c4f32f3a7e71
URL: https://github.com/llvm/llvm-project/commit/bff8d98129e8512ce9dcaed04e49c4f32f3a7e71
DIFF: https://github.com/llvm/llvm-project/commit/bff8d98129e8512ce9dcaed04e49c4f32f3a7e71.diff
LOG: [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
(cherry picked from commit cabd60c26b5df34f096cccca5a915bde3b1d8ee1)
Added:
Modified:
clang/lib/AST/ItaniumMangle.cpp
clang/test/CodeGenCXX/mangle-neon-vectors.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index ddfbe9f86499..8b1419074df5 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -3248,7 +3248,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");
}
diff --git a/clang/test/CodeGenCXX/mangle-neon-vectors.cpp b/clang/test/CodeGenCXX/mangle-neon-vectors.cpp
index 6faf6226efd2..cb5e40be6a6d 100644
--- a/clang/test/CodeGenCXX/mangle-neon-vectors.cpp
+++ b/clang/test/CodeGenCXX/mangle-neon-vectors.cpp
@@ -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
More information about the llvm-branch-commits
mailing list