Author: Sjoerd Meijer Date: 2022-10-25T15:08:15+05:30 New Revision: 9bd273047d4f66e3f36416acb295a3fd75bc6af4
URL: https://github.com/llvm/llvm-project/commit/9bd273047d4f66e3f36416acb295a3fd75bc6af4 DIFF: https://github.com/llvm/llvm-project/commit/9bd273047d4f66e3f36416acb295a3fd75bc6af4.diff LOG: [Clang][AArch64] Add TargetParser support for defining CPU aliases This adds AArch64 TargetParser support to define CPU aliases, and ports the definition of Grace over to that. This is following up on D136425. Differential Revision: https://reviews.llvm.org/D136611 Added: Modified: clang/test/Misc/target-invalid-cpu-note.c llvm/include/llvm/Support/AArch64TargetParser.def llvm/include/llvm/Support/AArch64TargetParser.h llvm/lib/Support/AArch64TargetParser.cpp llvm/unittests/Support/TargetParserTest.cpp Removed: ################################################################################ diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c index 7857e72eca06..f2071c866956 100644 --- a/clang/test/Misc/target-invalid-cpu-note.c +++ b/clang/test/Misc/target-invalid-cpu-note.c @@ -5,11 +5,11 @@ // RUN: not %clang_cc1 -triple arm64--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix AARCH64 // AARCH64: error: unknown target CPU 'not-a-cpu' -// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1{{$}} +// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, grace{{$}} // RUN: not %clang_cc1 -triple arm64--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_AARCH64 // TUNE_AARCH64: error: unknown target CPU 'not-a-cpu' -// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1{{$}} +// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, grace{{$}} // RUN: not %clang_cc1 -triple i386--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86 // X86: error: unknown target CPU 'not-a-cpu' diff --git a/llvm/include/llvm/Support/AArch64TargetParser.def b/llvm/include/llvm/Support/AArch64TargetParser.def index 49ed806b1d56..2005638e38c3 100644 --- a/llvm/include/llvm/Support/AArch64TargetParser.def +++ b/llvm/include/llvm/Support/AArch64TargetParser.def @@ -315,3 +315,9 @@ AARCH64_CPU_NAME("ampere1", ARMV8_6A, FK_CRYPTO_NEON_FP_ARMV8, false, // Invalid CPU AARCH64_CPU_NAME("invalid", INVALID, FK_INVALID, true, AArch64::AEK_INVALID) #undef AARCH64_CPU_NAME + +#ifndef AARCH64_CPU_ALIAS +#define AARCH64_CPU_ALIAS(ALIAS,NAME) +#endif +AARCH64_CPU_ALIAS("grace", "neoverse-v2") +#undef AARCH64_CPU_ALIAS diff --git a/llvm/include/llvm/Support/AArch64TargetParser.h b/llvm/include/llvm/Support/AArch64TargetParser.h index 3f0981d27427..35b28413a88f 100644 --- a/llvm/include/llvm/Support/AArch64TargetParser.h +++ b/llvm/include/llvm/Support/AArch64TargetParser.h @@ -109,6 +109,20 @@ const ARM::CpuNames<ArchKind> AArch64CPUNames[] = { #include "AArch64TargetParser.def" }; +const struct { + const char *Alias; + size_t AliasLength; + const char *Name; + size_t NameLength; + + StringRef getAlias() const { return StringRef(Alias, AliasLength); } + StringRef getName() const { return StringRef(Name, NameLength); } +} AArch64CPUAliases[] = { +#define AARCH64_CPU_ALIAS(ALIAS,NAME) \ + {ALIAS, sizeof(ALIAS) - 1, NAME, sizeof(NAME) - 1}, +#include "AArch64TargetParser.def" +}; + const ArchKind ArchKinds[] = { #define AARCH64_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR, ARCH_FPU, ARCH_BASE_EXT) \ ArchKind::ID, @@ -138,13 +152,7 @@ StringRef getSubArch(ArchKind AK); StringRef getArchExtName(unsigned ArchExtKind); StringRef getArchExtFeature(StringRef ArchExt); ArchKind convertV9toV8(ArchKind AK); - -// FIXME: We should be able to define CPU aliases in TargetParser. -inline StringRef resolveCPUAlias(StringRef CPU) { - if (CPU == "grace") - return "neoverse-v2"; - return CPU; -} +StringRef resolveCPUAlias(StringRef CPU); // Information by Name unsigned getDefaultFPU(StringRef CPU, ArchKind AK); diff --git a/llvm/lib/Support/AArch64TargetParser.cpp b/llvm/lib/Support/AArch64TargetParser.cpp index cb06f6146be1..ba02a80df23f 100644 --- a/llvm/lib/Support/AArch64TargetParser.cpp +++ b/llvm/lib/Support/AArch64TargetParser.cpp @@ -85,6 +85,14 @@ bool AArch64::getExtensionFeatures(uint64_t Extensions, return true; } +StringRef AArch64::resolveCPUAlias(StringRef CPU) { + return StringSwitch<StringRef>(CPU) +#define AARCH64_CPU_ALIAS(ALIAS,NAME) \ + .Case(ALIAS, NAME) +#include "../../include/llvm/Support/AArch64TargetParser.def" + .Default(CPU); +} + bool AArch64::getArchFeatures(AArch64::ArchKind AK, std::vector<StringRef> &Features) { if (AK == ArchKind::INVALID) @@ -164,6 +172,9 @@ void AArch64::fillValidCPUArchList(SmallVectorImpl<StringRef> &Values) { if (Arch.ArchID != ArchKind::INVALID) Values.push_back(Arch.getName()); } + + for (const auto &Alias: AArch64CPUAliases) + Values.push_back(Alias.getAlias()); } bool AArch64::isX18ReservedByDefault(const Triple &TT) { @@ -194,9 +205,17 @@ AArch64::ArchExtKind AArch64::parseArchExt(StringRef ArchExt) { } AArch64::ArchKind AArch64::parseCPUArch(StringRef CPU) { - for (const auto &C : AArch64CPUNames) { + // Resolve aliases first. + for (const auto &Alias : AArch64CPUAliases) { + if (CPU == Alias.getAlias()) { + CPU = Alias.getName(); + break; + } + } + // Then find the CPU name. + for (const auto &C : AArch64CPUNames) if (CPU == C.getName()) return C.ArchID; - } + return ArchKind::INVALID; } diff --git a/llvm/unittests/Support/TargetParserTest.cpp b/llvm/unittests/Support/TargetParserTest.cpp index e93f1695c70a..805084ac1f29 100644 --- a/llvm/unittests/Support/TargetParserTest.cpp +++ b/llvm/unittests/Support/TargetParserTest.cpp @@ -1295,7 +1295,8 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_LSE | AArch64::AEK_RDM, "8.2-A"))); -static constexpr unsigned NumAArch64CPUArchs = 58; +// Note: number of CPUs includes aliases. +static constexpr unsigned NumAArch64CPUArchs = 59; TEST(TargetParserTest, testAArch64CPUArchList) { SmallVector<StringRef, NumAArch64CPUArchs> List; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits