forked from OSchip/llvm-project
[AArch64] Define __ARM_FEATURE_{CRC32,ATOMICS}
This patch implements the definition of __ARM_FEATURE_ATOMICS and fixes the missing definition of __ARM_FEATURE_CRC32 for Armv8.1-A. Differential Revision: https://reviews.llvm.org/D91438
This commit is contained in:
parent
fa39b9eab1
commit
a4b80efea9
clang
|
@ -155,8 +155,9 @@ void AArch64TargetInfo::fillValidCPUList(
|
||||||
|
|
||||||
void AArch64TargetInfo::getTargetDefinesARMV81A(const LangOptions &Opts,
|
void AArch64TargetInfo::getTargetDefinesARMV81A(const LangOptions &Opts,
|
||||||
MacroBuilder &Builder) const {
|
MacroBuilder &Builder) const {
|
||||||
// FIXME: Armv8.1 makes __ARM_FEATURE_CRC32 mandatory. Handle it here.
|
|
||||||
Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
|
Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
|
||||||
|
Builder.defineMacro("__ARM_FEATURE_ATOMICS", "1");
|
||||||
|
Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
void AArch64TargetInfo::getTargetDefinesARMV82A(const LangOptions &Opts,
|
void AArch64TargetInfo::getTargetDefinesARMV82A(const LangOptions &Opts,
|
||||||
|
@ -176,8 +177,6 @@ void AArch64TargetInfo::getTargetDefinesARMV83A(const LangOptions &Opts,
|
||||||
void AArch64TargetInfo::getTargetDefinesARMV84A(const LangOptions &Opts,
|
void AArch64TargetInfo::getTargetDefinesARMV84A(const LangOptions &Opts,
|
||||||
MacroBuilder &Builder) const {
|
MacroBuilder &Builder) const {
|
||||||
// Also include the Armv8.3 defines
|
// Also include the Armv8.3 defines
|
||||||
// FIXME: Armv8.4 makes __ARM_FEATURE_ATOMICS, defined in GCC, mandatory.
|
|
||||||
// Add and handle it here.
|
|
||||||
getTargetDefinesARMV83A(Opts, Builder);
|
getTargetDefinesARMV83A(Opts, Builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,6 +303,9 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||||
if (HasMatMul)
|
if (HasMatMul)
|
||||||
Builder.defineMacro("__ARM_FEATURE_MATMUL_INT8", "1");
|
Builder.defineMacro("__ARM_FEATURE_MATMUL_INT8", "1");
|
||||||
|
|
||||||
|
if (HasLSE)
|
||||||
|
Builder.defineMacro("__ARM_FEATURE_ATOMICS", "1");
|
||||||
|
|
||||||
if (HasBFloat16) {
|
if (HasBFloat16) {
|
||||||
Builder.defineMacro("__ARM_FEATURE_BF16", "1");
|
Builder.defineMacro("__ARM_FEATURE_BF16", "1");
|
||||||
Builder.defineMacro("__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", "1");
|
Builder.defineMacro("__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", "1");
|
||||||
|
@ -418,6 +420,7 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
|
||||||
HasSVE2BitPerm = false;
|
HasSVE2BitPerm = false;
|
||||||
HasMatmulFP64 = false;
|
HasMatmulFP64 = false;
|
||||||
HasMatmulFP32 = false;
|
HasMatmulFP32 = false;
|
||||||
|
HasLSE = false;
|
||||||
|
|
||||||
ArchKind = llvm::AArch64::ArchKind::ARMV8A;
|
ArchKind = llvm::AArch64::ArchKind::ARMV8A;
|
||||||
|
|
||||||
|
@ -499,6 +502,8 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
|
||||||
HasMatMul = true;
|
HasMatMul = true;
|
||||||
if (Feature == "+bf16")
|
if (Feature == "+bf16")
|
||||||
HasBFloat16 = true;
|
HasBFloat16 = true;
|
||||||
|
if (Feature == "+lse")
|
||||||
|
HasLSE = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setDataLayout();
|
setDataLayout();
|
||||||
|
|
|
@ -44,6 +44,7 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
|
||||||
bool HasSVE2BitPerm;
|
bool HasSVE2BitPerm;
|
||||||
bool HasMatmulFP64;
|
bool HasMatmulFP64;
|
||||||
bool HasMatmulFP32;
|
bool HasMatmulFP32;
|
||||||
|
bool HasLSE;
|
||||||
|
|
||||||
llvm::AArch64::ArchKind ArchKind;
|
llvm::AArch64::ArchKind ArchKind;
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,8 @@
|
||||||
// RUN: %clang -target arm64-none-linux-gnu -mcrc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
// RUN: %clang -target arm64-none-linux-gnu -mcrc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
||||||
// RUN: %clang -target aarch64-none-linux-gnu -march=armv8-a+crc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
// RUN: %clang -target aarch64-none-linux-gnu -march=armv8-a+crc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
||||||
// RUN: %clang -target arm64-none-linux-gnu -march=armv8-a+crc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
// RUN: %clang -target arm64-none-linux-gnu -march=armv8-a+crc -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
||||||
|
// RUN: %clang -target aarch64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
||||||
|
// RUN: %clang -target arm64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-CRC32 %s
|
||||||
// CHECK-CRC32: __ARM_FEATURE_CRC32 1
|
// CHECK-CRC32: __ARM_FEATURE_CRC32 1
|
||||||
|
|
||||||
// RUN: %clang -target aarch64-none-linux-gnu -fno-math-errno -fno-signed-zeros\
|
// RUN: %clang -target aarch64-none-linux-gnu -fno-math-errno -fno-signed-zeros\
|
||||||
|
@ -447,3 +449,10 @@
|
||||||
// RUN: %clang -target aarch64-arm-none-eabi -march=armv8-a+sve -msve-vector-bits=2048 -x c -E -dM %s -o - 2>&1 | FileCheck -check-prefix=CHECK-SVE-VECTOR-BITS -D#VBITS=2048 %s
|
// RUN: %clang -target aarch64-arm-none-eabi -march=armv8-a+sve -msve-vector-bits=2048 -x c -E -dM %s -o - 2>&1 | FileCheck -check-prefix=CHECK-SVE-VECTOR-BITS -D#VBITS=2048 %s
|
||||||
// CHECK-SVE-VECTOR-BITS: __ARM_FEATURE_SVE_BITS [[#VBITS:]]
|
// CHECK-SVE-VECTOR-BITS: __ARM_FEATURE_SVE_BITS [[#VBITS:]]
|
||||||
// CHECK-SVE-VECTOR-BITS: __ARM_FEATURE_SVE_VECTOR_OPERATORS 1
|
// CHECK-SVE-VECTOR-BITS: __ARM_FEATURE_SVE_VECTOR_OPERATORS 1
|
||||||
|
|
||||||
|
// ================== Check Largse System Extensions (LSE)
|
||||||
|
// RUN: %clang -target aarch64-none-linux-gnu -march=armv8-a+lse -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
|
||||||
|
// RUN: %clang -target arm64-none-linux-gnu -march=armv8-a+lse -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
|
||||||
|
// RUN: %clang -target aarch64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
|
||||||
|
// RUN: %clang -target arm64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
|
||||||
|
// CHECK-LSE: __ARM_FEATURE_ATOMICS 1
|
||||||
|
|
Loading…
Reference in New Issue