From: Tomas Matheson Date: Fri, 18 Nov 2022 13:05:11 +0000 (+0000) Subject: [AArch64TargetParser] getArchFeatures -> getArchFeature X-Git-Tag: upstream/17.0.6~25736 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f57f086714bc7a1399acf05d5ca1d665237cd725;p=platform%2Fupstream%2Fllvm.git [AArch64TargetParser] getArchFeatures -> getArchFeature Differential Revision: https://reviews.llvm.org/D138753 --- diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index fb3d0b5..c36e942 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -810,12 +810,9 @@ ParsedTargetAttr AArch64TargetInfo::parseTargetAttr(StringRef Features) const { // Parse the architecture version, adding the required features to // Ret.Features. - std::vector FeatureStrs; - if (ArchKind == llvm::AArch64::ArchKind::INVALID || - !llvm::AArch64::getArchFeatures(ArchKind, FeatureStrs)) + if (ArchKind == llvm::AArch64::ArchKind::INVALID) continue; - for (auto R : FeatureStrs) - Ret.Features.push_back(R.str()); + Ret.Features.push_back(llvm::AArch64::getArchFeature(ArchKind).str()); // Add any extra features, after the + SplitAndAddFeatures(Split.second, Ret.Features); } else if (Feature.startswith("cpu=")) { diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 2a5c471..2a12693 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -135,8 +135,9 @@ static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU, Features.push_back("+neon"); } else { ArchKind = llvm::AArch64::parseCPUArch(CPU); - if (!llvm::AArch64::getArchFeatures(ArchKind, Features)) + if (ArchKind == llvm::AArch64::ArchKind::INVALID) return false; + Features.push_back(llvm::AArch64::getArchFeature(ArchKind)); uint64_t Extension = llvm::AArch64::getDefaultExtensions(CPU, ArchKind); if (!llvm::AArch64::getExtensionFeatures(Extension, Features)) @@ -160,9 +161,9 @@ getAArch64ArchFeaturesFromMarch(const Driver &D, StringRef March, llvm::AArch64::ArchKind ArchKind = llvm::AArch64::parseArch(Split.first); if (Split.first == "native") ArchKind = llvm::AArch64::getCPUArchKind(llvm::sys::getHostCPUName().str()); - if (ArchKind == llvm::AArch64::ArchKind::INVALID || - !llvm::AArch64::getArchFeatures(ArchKind, Features)) + if (ArchKind == llvm::AArch64::ArchKind::INVALID) return false; + Features.push_back(llvm::AArch64::getArchFeature(ArchKind)); // Enable SVE2 by default on Armv9-A. // It can still be disabled if +nosve2 is present. diff --git a/llvm/include/llvm/Support/AArch64TargetParser.h b/llvm/include/llvm/Support/AArch64TargetParser.h index ccee51f..5347c4e 100644 --- a/llvm/include/llvm/Support/AArch64TargetParser.h +++ b/llvm/include/llvm/Support/AArch64TargetParser.h @@ -160,7 +160,7 @@ inline ArchKind &operator--(ArchKind &Kind) { bool getExtensionFeatures(uint64_t Extensions, std::vector &Features); -bool getArchFeatures(ArchKind AK, std::vector &Features); +StringRef getArchFeature(ArchKind AK); StringRef getArchName(ArchKind AK); StringRef getSubArch(ArchKind AK); diff --git a/llvm/lib/Support/AArch64TargetParser.cpp b/llvm/lib/Support/AArch64TargetParser.cpp index e13b061..aecb193 100644 --- a/llvm/lib/Support/AArch64TargetParser.cpp +++ b/llvm/lib/Support/AArch64TargetParser.cpp @@ -80,12 +80,8 @@ StringRef AArch64::resolveCPUAlias(StringRef CPU) { .Default(CPU); } -bool AArch64::getArchFeatures(AArch64::ArchKind AK, - std::vector &Features) { - if (AK == ArchKind::INVALID) - return false; - Features.push_back(AArch64ARCHNames[static_cast(AK)].ArchFeature); - return true; +StringRef AArch64::getArchFeature(AArch64::ArchKind AK) { + return AArch64ARCHNames[static_cast(AK)].ArchFeature; } StringRef AArch64::getArchName(AArch64::ArchKind AK) { diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index 8556bd7..53290c6 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -6889,7 +6889,7 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) { // Get the architecture and extension features. std::vector AArch64Features; - AArch64::getArchFeatures(ID, AArch64Features); + AArch64Features.push_back(AArch64::getArchFeature(ID)); AArch64::getExtensionFeatures(AArch64::getDefaultExtensions("generic", ID), AArch64Features); diff --git a/llvm/unittests/Support/TargetParserTest.cpp b/llvm/unittests/Support/TargetParserTest.cpp index 42b0ed8..5bcb131 100644 --- a/llvm/unittests/Support/TargetParserTest.cpp +++ b/llvm/unittests/Support/TargetParserTest.cpp @@ -1689,14 +1689,23 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) { } TEST(TargetParserTest, AArch64ArchFeatures) { - std::vector Features; - - for (auto AK : AArch64::ArchKinds) { - if (AK == AArch64::ArchKind::INVALID) - EXPECT_FALSE(AArch64::getArchFeatures(AK, Features)); - else - EXPECT_TRUE(AArch64::getArchFeatures(AK, Features)); - } + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::INVALID), "+"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8A), "+v8a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_1A), "+v8.1a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_2A), "+v8.2a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_3A), "+v8.3a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_4A), "+v8.4a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_5A), "+v8.5a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_6A), "+v8.6a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_7A), "+v8.7a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_8A), "+v8.8a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8_9A), "+v8.9a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV9A), "+v9a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV9_1A), "+v9.1a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV9_2A), "+v9.2a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV9_3A), "+v9.3a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV9_4A), "+v9.4a"); + EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8R), "+v8r"); } TEST(TargetParserTest, AArch64ArchV9toV8Conversion) {