https://github.com/Qi-Hu updated https://github.com/llvm/llvm-project/pull/75516
>From 535eb36a60a0fd0c7e1858bac699ab24f4f2c4a0 Mon Sep 17 00:00:00 2001 From: Qi Hu <qi...@huawei.com> Date: Thu, 14 Dec 2023 13:35:52 -0500 Subject: [PATCH] [TargetParser] Define AEK_FCMA and AEK_JSCVT for tsv110 We define AEK_JSCVT and AEK_FCMA for CPU features FEAT_JSCVT and FEAT_FCMA respectively, and add them to the CpuInfo of tsv110. --- clang/lib/Driver/ToolChains/Arch/AArch64.cpp | 9 +++++++++ clang/test/Driver/aarch64-complxnum.c | 11 +++++++++++ clang/test/Driver/aarch64-jsconv.c | 11 +++++++++++ llvm/include/llvm/TargetParser/AArch64TargetParser.h | 9 ++++++--- llvm/unittests/TargetParser/TargetParserTest.cpp | 6 ++++-- 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 clang/test/Driver/aarch64-complxnum.c create mode 100644 clang/test/Driver/aarch64-jsconv.c diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 912df79417ae21..2c26a12994ee1e 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -81,6 +81,15 @@ static bool DecodeAArch64Features(const Driver &D, StringRef text, else return false; + // +jsconv and +complxnum implies +neon and +fp-armv8 + if (Feature == "jscvt" || Feature == "fcma") { + Features.push_back("+neon"); + Features.push_back("+fp-armv8"); + } else if (Feature == "nosimd" || Feature == "nofp") { + Features.push_back("-jsconv"); + Features.push_back("-complxnum"); + } + // +sme implies +bf16. // +sme-f64f64 and +sme-i16i64 both imply +sme. if (Feature == "sme") { diff --git a/clang/test/Driver/aarch64-complxnum.c b/clang/test/Driver/aarch64-complxnum.c new file mode 100644 index 00000000000000..484e26ca8494ec --- /dev/null +++ b/clang/test/Driver/aarch64-complxnum.c @@ -0,0 +1,11 @@ +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.3-a+fcma -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-COMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=generic+fcma -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-COMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=tsv110 -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-COMPLXNUM %s +// CHECK-COMPLXNUM: "-target-feature" "+complxnum" + +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.3-a+nofcma -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOCOMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=generic+nofcma -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOCOMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=tsv110+nofcma -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOCOMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.2-a+fcma+nofp -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOCOMPLXNUM %s +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.2-a+fcma+nosimd -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOCOMPLXNUM %s +// CHECK-NOCOMPLXNUM: "-target-feature" "-complxnum" diff --git a/clang/test/Driver/aarch64-jsconv.c b/clang/test/Driver/aarch64-jsconv.c new file mode 100644 index 00000000000000..71cc7c9f4aee93 --- /dev/null +++ b/clang/test/Driver/aarch64-jsconv.c @@ -0,0 +1,11 @@ +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.3-a+jscvt -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-JSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=generic+jscvt -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-JSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=tsv110 -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-JSCONV %s +// CHECK-JSCONV: "-target-feature" "+jsconv" + +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.3-a+nojscvt -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOJSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=generic+nojscvt -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOJSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -mcpu=tsv110+nojscvt -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOJSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.2-a+jscvt+nofp -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOJSCONV %s +// RUN: %clang -target aarch64-none-none-eabi -march=armv8.2-a+jscvt+nosimd -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-NOJSCONV %s +// CHECK-NOJSCONV: "-target-feature" "-jsconv" diff --git a/llvm/include/llvm/TargetParser/AArch64TargetParser.h b/llvm/include/llvm/TargetParser/AArch64TargetParser.h index 56c32fae712cef..276bdf10751118 100644 --- a/llvm/include/llvm/TargetParser/AArch64TargetParser.h +++ b/llvm/include/llvm/TargetParser/AArch64TargetParser.h @@ -173,6 +173,8 @@ enum ArchExtKind : unsigned { AEK_SMEF8F16 = 69, // FEAT_SME_F8F16 AEK_SMEF8F32 = 70, // FEAT_SME_F8F32 AEK_SMEFA64 = 71, // FEAT_SME_FA64 + AEK_JSCVT = 72, // FEAT_JSCVT + AEK_FCMA = 73, // FEAT_FCMA AEK_NUM_EXTENSIONS }; using ExtensionBitset = Bitset<AEK_NUM_EXTENSIONS>; @@ -218,7 +220,7 @@ inline constexpr ExtensionInfo Extensions[] = { {"ebf16", AArch64::AEK_NONE, {}, {}, FEAT_EBF16, "+bf16", 290}, {"f32mm", AArch64::AEK_F32MM, "+f32mm", "-f32mm", FEAT_SVE_F32MM, "+sve,+f32mm,+fullfp16,+fp-armv8,+neon", 350}, {"f64mm", AArch64::AEK_F64MM, "+f64mm", "-f64mm", FEAT_SVE_F64MM, "+sve,+f64mm,+fullfp16,+fp-armv8,+neon", 360}, - {"fcma", AArch64::AEK_NONE, {}, {}, FEAT_FCMA, "+fp-armv8,+neon,+complxnum", 220}, + {"fcma", AArch64::AEK_FCMA, "+complxnum", "-complxnum", FEAT_FCMA, "+fp-armv8,+neon,+complxnum", 220}, {"flagm", AArch64::AEK_FLAGM, "+flagm", "-flagm", FEAT_FLAGM, "+flagm", 20}, {"flagm2", AArch64::AEK_NONE, {}, {}, FEAT_FLAGM2, "+flagm,+altnzcv", 30}, {"fp", AArch64::AEK_FP, "+fp-armv8", "-fp-armv8", FEAT_FP, "+fp-armv8,+neon", 90}, @@ -228,7 +230,7 @@ inline constexpr ExtensionInfo Extensions[] = { {"hbc", AArch64::AEK_HBC, "+hbc", "-hbc", FEAT_INIT, "", 0}, {"i8mm", AArch64::AEK_I8MM, "+i8mm", "-i8mm", FEAT_I8MM, "+i8mm", 270}, {"ite", AArch64::AEK_ITE, "+ite", "-ite", FEAT_INIT, "", 0}, - {"jscvt", AArch64::AEK_NONE, {}, {}, FEAT_JSCVT, "+fp-armv8,+neon,+jsconv", 210}, + {"jscvt", AArch64::AEK_JSCVT, "+jsconv", "-jsconv", FEAT_JSCVT, "+fp-armv8,+neon,+jsconv", 210}, {"ls64_accdata", AArch64::AEK_NONE, {}, {}, FEAT_LS64_ACCDATA, "+ls64", 540}, {"ls64_v", AArch64::AEK_NONE, {}, {}, FEAT_LS64_V, "", 530}, {"ls64", AArch64::AEK_LS64, "+ls64", "-ls64", FEAT_LS64, "", 520}, @@ -666,7 +668,8 @@ inline constexpr CpuInfo CpuInfos[] = { {"tsv110", ARMV8_2A, (AArch64::ExtensionBitset( {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, - AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_PROFILE}))}, + AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, + AArch64::AEK_JSCVT, AArch64::AEK_FCMA}))}, {"a64fx", ARMV8_2A, (AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16, diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp index e2b9712b511eca..1181083ad41ffd 100644 --- a/llvm/unittests/TargetParser/TargetParserTest.cpp +++ b/llvm/unittests/TargetParser/TargetParserTest.cpp @@ -1610,8 +1610,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_PROFILE, - AArch64::AEK_FP16, AArch64::AEK_FP16FML, - AArch64::AEK_DOTPROD})), + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_DOTPROD})), "8.2-A"), ARMCPUTestParams<AArch64::ExtensionBitset>( "a64fx", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1757,6 +1757,8 @@ TEST(TargetParserTest, testAArch64Extension) { EXPECT_TRUE(testAArch64Extension("tsv110", "fp16")); EXPECT_TRUE(testAArch64Extension("tsv110", "fp16fml")); EXPECT_TRUE(testAArch64Extension("tsv110", "dotprod")); + EXPECT_TRUE(testAArch64Extension("tsv110", "jscvt")); + EXPECT_TRUE(testAArch64Extension("tsv110", "fcma")); EXPECT_TRUE(testAArch64Extension("a64fx", "fp16")); EXPECT_TRUE(testAArch64Extension("a64fx", "sve")); EXPECT_FALSE(testAArch64Extension("a64fx", "sve2")); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits