Index: clang/lib/Basic/Targets/AArch64.cpp =================================================================== --- clang/lib/Basic/Targets/AArch64.cpp +++ clang/lib/Basic/Targets/AArch64.cpp @@ -698,8 +698,6 @@ if (llvm::AArch64::getExtensionFeatures(Extensions, CPUFeats)) { for (auto F : CPUFeats) { assert(F[0] == '+' && "Expected + in target feature!"); - if (F == "+crypto") - continue; Features[F.drop_front(1)] = true; } } Index: clang/test/CodeGen/aarch64-targetattr.c =================================================================== --- clang/test/CodeGen/aarch64-targetattr.c +++ clang/test/CodeGen/aarch64-targetattr.c @@ -92,7 +92,7 @@ // CHECK: attributes #0 = { {{.*}} "target-features"="+crc,+fp-armv8,+lse,+neon,+ras,+rdm,+v8.1a,+v8.2a,+v8a" } // CHECK: attributes #1 = { {{.*}} "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+v8.1a,+v8.2a,+v8a" } // CHECK: attributes #2 = { {{.*}} "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8a" } -// CHECK: attributes #3 = { {{.*}} "target-features"="+aes,+bf16,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" } +// CHECK: attributes #3 = { {{.*}} "target-features"="+bf16,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" } // CHECK: attributes #4 = { {{.*}} "target-cpu"="cortex-a710" "target-features"="+bf16,+crc,+dotprod,+flagm,+fp-armv8,+fp16fml,+i8mm,+lse,+mte,+neon,+pauth,+ras,+rcpc,+rdm,+sb,+sve,+sve2,+sve2-bitperm" } // CHECK: attributes #5 = { {{.*}} "tune-cpu"="cortex-a710" } // CHECK: attributes #6 = { {{.*}} "target-cpu"="generic" } @@ -104,6 +104,6 @@ // CHECK: attributes #12 = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+sve" } // CHECK: attributes #13 = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+sve,-sve2" } // CHECK: attributes #14 = { {{.*}} "target-features"="+fullfp16" } -// CHECK: attributes #15 = { {{.*}} "target-cpu"="neoverse-n1" "target-features"="+aes,+bf16,+crc,+crypto,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } -// CHECK: attributes #16 = { {{.*}} "branch-target-enforcement"="true" {{.*}} "target-features"="+aes,+bf16,+crc,+crypto,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } +// CHECK: attributes #15 = { {{.*}} "target-cpu"="neoverse-n1" "target-features"="+bf16,+crc,+crypto,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } +// CHECK: attributes #16 = { {{.*}} "branch-target-enforcement"="true" {{.*}} "target-features"="+bf16,+crc,+crypto,+dotprod,+fp-armv8,+fullfp16,+i8mm,+lse,+neon,+ras,+rcpc,+rdm,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } // CHECK: attributes #17 = { {{.*}} "target-features"="-neon" } Index: clang/test/Preprocessor/aarch64-target-features.c =================================================================== --- clang/test/Preprocessor/aarch64-target-features.c +++ clang/test/Preprocessor/aarch64-target-features.c @@ -181,6 +181,14 @@ // CHECK-SVE-8_5-NOT: __ARM_FEATURE_SVE_MATMUL_INT8 1 // CHECK-SVE-8_5: __ARM_FEATURE_SVE 1 +// RUN: %clang -target aarch64-none-linux-gnu -march=armv8.6-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-8_6 %s +// CHECK-8_6-NOT: __ARM_FEATURE_AES 1 +// CHECK-8_6: __ARM_FEATURE_BF16 1 +// CHECK-8_6: __ARM_FEATURE_MATMUL_INT8 1 +// CHECK-8_6-NOT: __ARM_FEATURE_SHA2 1 +// CHECK-8_6-NOT: __ARM_FEATURE_SHA3 1 +// CHECK-8_6-NOT: __ARM_FEATURE_SM4 1 + // RUN: %clang -target aarch64-none-linux-gnu -march=armv8.6-a+sve -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE-8_6 %s // CHECK-SVE-8_6: __ARM_FEATURE_SVE 1 // CHECK-SVE-8_6: __ARM_FEATURE_SVE_BF16 1 @@ -194,6 +202,10 @@ // CHECK-SVE-8_6-NOFEATURES: __ARM_FEATURE_SVE 1 // RUN: %clang -target aarch64-none-linux-gnu -march=armv9-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s +// RUN: %clang -target aarch64-none-linux-gnu -march=armv9.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s +// RUN: %clang -target aarch64-none-linux-gnu -march=armv9.2-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s +// RUN: %clang -target aarch64-none-linux-gnu -march=armv9.3-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s +// RUN: %clang -target aarch64-none-linux-gnu -march=armv9.4-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s // RUN: %clang -target aarch64-none-linux-gnu -march=armv9-a+sve2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE2 %s // CHECK-SVE2: __ARM_FEATURE_FP16_SCALAR_ARITHMETIC 1 // CHECK-SVE2: __ARM_FEATURE_FP16_VECTOR_ARITHMETIC 1 @@ -217,6 +229,7 @@ // CHECK-SVE2BITPERM: __ARM_FEATURE_SVE2_BITPERM 1 // RUN: %clang -target aarch64-none-linux-gnu -march=armv8.2a+dotprod -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-DOTPROD %s +// RUN: %clang -target aarch64-none-linux-gnu -march=armv8.4a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-DOTPROD %s // CHECK-DOTPROD: __ARM_FEATURE_DOTPROD 1 // CHECK-DOTPROD: __ARM_NEON 1 // CHECK-DOTPROD: __ARM_NEON_FP 0xE Index: llvm/include/llvm/TargetParser/AArch64TargetParser.h =================================================================== --- llvm/include/llvm/TargetParser/AArch64TargetParser.h +++ llvm/include/llvm/TargetParser/AArch64TargetParser.h @@ -303,24 +303,23 @@ // clang-format off inline constexpr ArchInfo INVALID = { VersionTuple{0, 0}, AProfile, "invalid", "+", (AArch64::AEK_NONE)}; -inline constexpr ArchInfo ARMV8A = { VersionTuple{8, 0}, AProfile, "armv8-a", "+v8a", (AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_SIMD), }; +inline constexpr ArchInfo ARMV8A = { VersionTuple{8, 0}, AProfile, "armv8-a", "+v8a", (AArch64::AEK_FP | AArch64::AEK_SIMD), }; inline constexpr ArchInfo ARMV8_1A = { VersionTuple{8, 1}, AProfile, "armv8.1-a", "+v8.1a", (ARMV8A.DefaultExts | AArch64::AEK_CRC | AArch64::AEK_LSE | AArch64::AEK_RDM)}; inline constexpr ArchInfo ARMV8_2A = { VersionTuple{8, 2}, AProfile, "armv8.2-a", "+v8.2a", (ARMV8_1A.DefaultExts | AArch64::AEK_RAS)}; inline constexpr ArchInfo ARMV8_3A = { VersionTuple{8, 3}, AProfile, "armv8.3-a", "+v8.3a", (ARMV8_2A.DefaultExts | AArch64::AEK_RCPC)}; inline constexpr ArchInfo ARMV8_4A = { VersionTuple{8, 4}, AProfile, "armv8.4-a", "+v8.4a", (ARMV8_3A.DefaultExts | AArch64::AEK_DOTPROD)}; inline constexpr ArchInfo ARMV8_5A = { VersionTuple{8, 5}, AProfile, "armv8.5-a", "+v8.5a", (ARMV8_4A.DefaultExts)}; -constexpr unsigned BaseNoCrypto = ARMV8_5A.DefaultExts ^ AArch64::AEK_CRYPTO; // 8.6 onwards has no AEK_CRYPTO -inline constexpr ArchInfo ARMV8_6A = { VersionTuple{8, 6}, AProfile, "armv8.6-a", "+v8.6a", (BaseNoCrypto | AArch64::AEK_SM4 | AArch64::AEK_SHA3 | AArch64::AEK_BF16 | AArch64::AEK_SHA2 | AArch64::AEK_AES | AArch64::AEK_I8MM)}; +inline constexpr ArchInfo ARMV8_6A = { VersionTuple{8, 6}, AProfile, "armv8.6-a", "+v8.6a", (ARMV8_5A.DefaultExts | AArch64::AEK_BF16 | AArch64::AEK_I8MM)}; inline constexpr ArchInfo ARMV8_7A = { VersionTuple{8, 7}, AProfile, "armv8.7-a", "+v8.7a", (ARMV8_6A.DefaultExts)}; inline constexpr ArchInfo ARMV8_8A = { VersionTuple{8, 8}, AProfile, "armv8.8-a", "+v8.8a", (ARMV8_7A.DefaultExts | AArch64::AEK_MOPS | AArch64::AEK_HBC)}; inline constexpr ArchInfo ARMV8_9A = { VersionTuple{8, 9}, AProfile, "armv8.9-a", "+v8.9a", (ARMV8_8A.DefaultExts)}; -inline constexpr ArchInfo ARMV9A = { VersionTuple{9, 0}, AProfile, "armv9-a", "+v9a", (BaseNoCrypto | AArch64::AEK_SVE | AArch64::AEK_SVE2)}; +inline constexpr ArchInfo ARMV9A = { VersionTuple{9, 0}, AProfile, "armv9-a", "+v9a", (ARMV8_5A.DefaultExts | AArch64::AEK_SVE | AArch64::AEK_SVE2)}; inline constexpr ArchInfo ARMV9_1A = { VersionTuple{9, 1}, AProfile, "armv9.1-a", "+v9.1a", (ARMV9A.DefaultExts | AArch64::AEK_BF16 | AArch64::AEK_I8MM)}; inline constexpr ArchInfo ARMV9_2A = { VersionTuple{9, 2}, AProfile, "armv9.2-a", "+v9.2a", (ARMV9_1A.DefaultExts)}; inline constexpr ArchInfo ARMV9_3A = { VersionTuple{9, 3}, AProfile, "armv9.3-a", "+v9.3a", (ARMV9_2A.DefaultExts | AArch64::AEK_MOPS | AArch64::AEK_HBC)}; inline constexpr ArchInfo ARMV9_4A = { VersionTuple{9, 4}, AProfile, "armv9.4-a", "+v9.4a", (ARMV9_3A.DefaultExts)}; // For v8-R, we do not enable crypto and align with GCC that enables a more minimal set of optional architecture extensions. -inline constexpr ArchInfo ARMV8R = { VersionTuple{8, 0}, RProfile, "armv8-r", "+v8r", ((BaseNoCrypto ^ AArch64::AEK_LSE) | AArch64::AEK_SSBS | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SB), }; +inline constexpr ArchInfo ARMV8R = { VersionTuple{8, 0}, RProfile, "armv8-r", "+v8r", ((ARMV8_5A.DefaultExts ^ AArch64::AEK_LSE) | AArch64::AEK_SSBS | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SB), }; // clang-format on // The set of all architectures @@ -339,43 +338,45 @@ }; inline constexpr CpuInfo CpuInfos[] = { - {"cortex-a34", ARMV8A, (AArch64::AEK_CRC)}, - {"cortex-a35", ARMV8A, (AArch64::AEK_CRC)}, - {"cortex-a53", ARMV8A, (AArch64::AEK_CRC)}, + {"cortex-a34", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"cortex-a35", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"cortex-a53", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, {"cortex-a55", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC)}, {"cortex-a510", ARMV9A, (AArch64::AEK_BF16 | AArch64::AEK_I8MM | AArch64::AEK_SB | AArch64::AEK_PAUTH | AArch64::AEK_MTE | AArch64::AEK_SSBS | AArch64::AEK_SVE | AArch64::AEK_SVE2 | AArch64::AEK_SVE2BITPERM | AArch64::AEK_FP16FML)}, - {"cortex-a57", ARMV8A, (AArch64::AEK_CRC)}, + {"cortex-a57", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, {"cortex-a65", ARMV8_2A, - (AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_RCPC | - AArch64::AEK_SSBS)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | + AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, {"cortex-a65ae", ARMV8_2A, - (AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_RCPC | - AArch64::AEK_SSBS)}, - {"cortex-a72", ARMV8A, (AArch64::AEK_CRC)}, - {"cortex-a73", ARMV8A, (AArch64::AEK_CRC)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | + AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, + {"cortex-a72", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"cortex-a73", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, {"cortex-a75", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC)}, {"cortex-a76", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, {"cortex-a76ae", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, {"cortex-a77", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_RCPC | AArch64::AEK_DOTPROD | - AArch64::AEK_SSBS)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_RCPC | + AArch64::AEK_DOTPROD | AArch64::AEK_SSBS)}, {"cortex-a78", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS | AArch64::AEK_PROFILE)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS | AArch64::AEK_PROFILE)}, {"cortex-a78c", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS | AArch64::AEK_PROFILE | AArch64::AEK_FLAGM | - AArch64::AEK_PAUTH | AArch64::AEK_FP16FML)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS | AArch64::AEK_PROFILE | + AArch64::AEK_FLAGM | AArch64::AEK_PAUTH | AArch64::AEK_FP16FML)}, {"cortex-a710", ARMV9A, (AArch64::AEK_MTE | AArch64::AEK_PAUTH | AArch64::AEK_FLAGM | AArch64::AEK_SB | AArch64::AEK_I8MM | AArch64::AEK_FP16FML | @@ -389,11 +390,12 @@ AArch64::AEK_BF16 | AArch64::AEK_FLAGM)}, {"cortex-r82", ARMV8R, (AArch64::AEK_LSE)}, {"cortex-x1", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS | AArch64::AEK_PROFILE)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS | AArch64::AEK_PROFILE)}, {"cortex-x1c", ARMV8_2A, - (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC | - AArch64::AEK_SSBS | AArch64::AEK_PAUTH | AArch64::AEK_PROFILE)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | + AArch64::AEK_RCPC | AArch64::AEK_SSBS | AArch64::AEK_PAUTH | + AArch64::AEK_PROFILE)}, {"cortex-x2", ARMV9A, (AArch64::AEK_MTE | AArch64::AEK_BF16 | AArch64::AEK_I8MM | AArch64::AEK_PAUTH | AArch64::AEK_SSBS | AArch64::AEK_SB | @@ -406,72 +408,83 @@ AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_PREDRES | AArch64::AEK_FLAGM | AArch64::AEK_SSBS)}, {"neoverse-e1", ARMV8_2A, - (AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_RCPC | - AArch64::AEK_SSBS)}, - {"neoverse-n1", ARMV8_2A, - (AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_PROFILE | + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, + {"neoverse-n1", ARMV8_2A, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | + AArch64::AEK_PROFILE | AArch64::AEK_RCPC | AArch64::AEK_SSBS)}, {"neoverse-n2", ARMV8_5A, - (AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | - AArch64::AEK_I8MM | AArch64::AEK_MTE | AArch64::AEK_SB | - AArch64::AEK_SSBS | AArch64::AEK_SVE | AArch64::AEK_SVE2 | - AArch64::AEK_SVE2BITPERM)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | + AArch64::AEK_FP16 | AArch64::AEK_I8MM | AArch64::AEK_MTE | + AArch64::AEK_SB | AArch64::AEK_SSBS | AArch64::AEK_SVE | + AArch64::AEK_SVE2 | AArch64::AEK_SVE2BITPERM)}, {"neoverse-512tvb", ARMV8_4A, - (AArch64::AEK_SVE | AArch64::AEK_SSBS | AArch64::AEK_FP16 | - AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | AArch64::AEK_PROFILE | - AArch64::AEK_RAND | AArch64::AEK_FP16FML | AArch64::AEK_I8MM)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_SVE | AArch64::AEK_SSBS | + AArch64::AEK_FP16 | AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | + AArch64::AEK_PROFILE | AArch64::AEK_RAND | AArch64::AEK_FP16FML | + AArch64::AEK_I8MM)}, {"neoverse-v1", ARMV8_4A, - (AArch64::AEK_SVE | AArch64::AEK_SSBS | AArch64::AEK_FP16 | - AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | AArch64::AEK_PROFILE | - AArch64::AEK_RAND | AArch64::AEK_FP16FML | AArch64::AEK_I8MM)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_SVE | AArch64::AEK_SSBS | + AArch64::AEK_FP16 | AArch64::AEK_BF16 | AArch64::AEK_DOTPROD | + AArch64::AEK_PROFILE | AArch64::AEK_RAND | AArch64::AEK_FP16FML | + AArch64::AEK_I8MM)}, {"neoverse-v2", ARMV9A, (AArch64::AEK_SVE | AArch64::AEK_SVE2 | AArch64::AEK_SSBS | AArch64::AEK_FP16 | AArch64::AEK_BF16 | AArch64::AEK_RAND | AArch64::AEK_DOTPROD | AArch64::AEK_PROFILE | AArch64::AEK_SVE2BITPERM | AArch64::AEK_FP16FML | AArch64::AEK_I8MM | AArch64::AEK_MTE)}, - {"cyclone", ARMV8A, (AArch64::AEK_NONE)}, - {"apple-a7", ARMV8A, (AArch64::AEK_NONE)}, - {"apple-a8", ARMV8A, (AArch64::AEK_NONE)}, - {"apple-a9", ARMV8A, (AArch64::AEK_NONE)}, - {"apple-a10", ARMV8A, (AArch64::AEK_CRC | AArch64::AEK_RDM)}, - {"apple-a11", ARMV8_2A, (AArch64::AEK_FP16)}, - {"apple-a12", ARMV8_3A, (AArch64::AEK_FP16)}, + {"cyclone", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_NONE)}, + {"apple-a7", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_NONE)}, + {"apple-a8", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_NONE)}, + {"apple-a9", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_NONE)}, + {"apple-a10", ARMV8A, + (AArch64::AEK_CRYPTO | AArch64::AEK_CRC | AArch64::AEK_RDM)}, + {"apple-a11", ARMV8_2A, (AArch64::AEK_CRYPTO | AArch64::AEK_FP16)}, + {"apple-a12", ARMV8_3A, (AArch64::AEK_CRYPTO | AArch64::AEK_FP16)}, {"apple-a13", ARMV8_4A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3)}, {"apple-a14", ARMV8_5A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3)}, {"apple-a15", ARMV8_5A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3 | - AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3 | AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, {"apple-a16", ARMV8_5A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3 | - AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3 | AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, {"apple-m1", ARMV8_5A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3)}, {"apple-m2", ARMV8_5A, - (AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_SHA3 | - AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, - {"apple-s4", ARMV8_3A, (AArch64::AEK_FP16)}, - {"apple-s5", ARMV8_3A, (AArch64::AEK_FP16)}, - {"exynos-m3", ARMV8A, (AArch64::AEK_CRC)}, - {"exynos-m4", ARMV8_2A, (AArch64::AEK_DOTPROD | AArch64::AEK_FP16)}, - {"exynos-m5", ARMV8_2A, (AArch64::AEK_DOTPROD | AArch64::AEK_FP16)}, - {"falkor", ARMV8A, (AArch64::AEK_CRC | AArch64::AEK_RDM)}, - {"saphira", ARMV8_3A, (AArch64::AEK_PROFILE)}, - {"kryo", ARMV8A, (AArch64::AEK_CRC)}, - {"thunderx2t99", ARMV8_1A, (AArch64::AEK_NONE)}, - {"thunderx3t110", ARMV8_3A, (AArch64::AEK_NONE)}, - {"thunderx", ARMV8A, (AArch64::AEK_CRC)}, - {"thunderxt88", ARMV8A, (AArch64::AEK_CRC)}, - {"thunderxt81", ARMV8A, (AArch64::AEK_CRC)}, - {"thunderxt83", ARMV8A, (AArch64::AEK_CRC)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | + AArch64::AEK_SHA3 | AArch64::AEK_BF16 | AArch64::AEK_I8MM)}, + {"apple-s4", ARMV8_3A, (AArch64::AEK_CRYPTO | AArch64::AEK_FP16)}, + {"apple-s5", ARMV8_3A, (AArch64::AEK_CRYPTO | AArch64::AEK_FP16)}, + {"exynos-m3", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"exynos-m4", ARMV8_2A, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16)}, + {"exynos-m5", ARMV8_2A, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16)}, + {"falkor", ARMV8A, + (AArch64::AEK_CRYPTO | AArch64::AEK_CRC | AArch64::AEK_RDM)}, + {"saphira", ARMV8_3A, (AArch64::AEK_CRYPTO | AArch64::AEK_PROFILE)}, + {"kryo", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"thunderx2t99", ARMV8_1A, (AArch64::AEK_CRYPTO)}, + {"thunderx3t110", ARMV8_3A, (AArch64::AEK_CRYPTO)}, + {"thunderx", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"thunderxt88", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"thunderxt81", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, + {"thunderxt83", ARMV8A, (AArch64::AEK_CRYPTO | AArch64::AEK_CRC)}, {"tsv110", ARMV8_2A, - (AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | AArch64::AEK_FP16FML | - AArch64::AEK_PROFILE)}, - {"a64fx", ARMV8_2A, (AArch64::AEK_FP16 | AArch64::AEK_SVE)}, - {"carmel", ARMV8_2A, (AArch64::AEK_FP16)}, + (AArch64::AEK_CRYPTO | AArch64::AEK_DOTPROD | AArch64::AEK_FP16 | + AArch64::AEK_FP16FML | AArch64::AEK_PROFILE)}, + {"a64fx", ARMV8_2A, + (AArch64::AEK_CRYPTO | AArch64::AEK_FP16 | AArch64::AEK_SVE)}, + {"carmel", ARMV8_2A, (AArch64::AEK_CRYPTO | AArch64::AEK_FP16)}, {"ampere1", ARMV8_6A, - (AArch64::AEK_FP16 | AArch64::AEK_SB | AArch64::AEK_SSBS)}, + (AArch64::AEK_AES | AArch64::AEK_SHA2 | AArch64::AEK_SHA3 | + AArch64::AEK_FP16 | AArch64::AEK_SB | AArch64::AEK_SSBS)}, // Invalid CPU {"invalid", INVALID, (AArch64::AEK_INVALID)}, }; Index: llvm/unittests/TargetParser/TargetParserTest.cpp =================================================================== --- llvm/unittests/TargetParser/TargetParserTest.cpp +++ llvm/unittests/TargetParser/TargetParserTest.cpp @@ -1327,9 +1327,9 @@ AArch64::AEK_CRC | AArch64::AEK_FP | AArch64::AEK_FP16 | AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE | AArch64::AEK_RDM | AArch64::AEK_RCPC | AArch64::AEK_DOTPROD | - AArch64::AEK_SM4 | AArch64::AEK_SHA3 | AArch64::AEK_BF16 | - AArch64::AEK_SHA2 | AArch64::AEK_AES | AArch64::AEK_I8MM | - AArch64::AEK_SSBS | AArch64::AEK_SB, + AArch64::AEK_SHA3 | AArch64::AEK_BF16 | AArch64::AEK_SHA2 | + AArch64::AEK_AES | AArch64::AEK_I8MM | AArch64::AEK_SSBS | + AArch64::AEK_SB, "8.6-A"), ARMCPUTestParams( "neoverse-512tvb", "armv8.4-a", "crypto-neon-fp-armv8", @@ -1342,13 +1342,13 @@ AArch64::AEK_FP16FML | AArch64::AEK_I8MM, "8.4-A"), ARMCPUTestParams("thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8", - AArch64::AEK_NONE | AArch64::AEK_CRC | + AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE | AArch64::AEK_RDM | AArch64::AEK_FP | AArch64::AEK_SIMD, "8.1-A"), ARMCPUTestParams("thunderx3t110", "armv8.3-a", "crypto-neon-fp-armv8", - AArch64::AEK_NONE | AArch64::AEK_CRC | + AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE | AArch64::AEK_RDM | AArch64::AEK_FP | AArch64::AEK_SIMD | AArch64::AEK_RAS |