Author: Lucas Prates Date: 2023-01-27T12:37:18Z New Revision: 0753cf2caca707e3957a70c9756b7f1d42fab2af
URL: https://github.com/llvm/llvm-project/commit/0753cf2caca707e3957a70c9756b7f1d42fab2af DIFF: https://github.com/llvm/llvm-project/commit/0753cf2caca707e3957a70c9756b7f1d42fab2af.diff LOG: [NFC][AArch64] Get default features directly from ArchInfo and CpuInfo objects This updates the AArch64's Target Parser and its uses to capture information about default features directly from ArchInfo and CpuInfo objects, instead of relying on an API function to access them indirectly. Reviewed By: tmatheson Differential Revision: https://reviews.llvm.org/D142540 Added: Modified: clang/lib/Basic/Targets/AArch64.cpp clang/lib/Driver/ToolChains/Arch/AArch64.cpp llvm/include/llvm/TargetParser/AArch64TargetParser.h llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp llvm/lib/TargetParser/AArch64TargetParser.cpp llvm/unittests/TargetParser/TargetParserTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 5971489ce8004..fc171357bb605 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -692,10 +692,8 @@ void AArch64TargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features, Features[OtherArch->getSubArch()] = Enabled; // Set any features implied by the architecture - uint64_t Extensions = - llvm::AArch64::getDefaultExtensions("generic", *ArchInfo); std::vector<StringRef> CPUFeats; - if (llvm::AArch64::getExtensionFeatures(Extensions, CPUFeats)) { + if (llvm::AArch64::getExtensionFeatures(ArchInfo->DefaultExts, CPUFeats)) { for (auto F : CPUFeats) { assert(F[0] == '+' && "Expected + in target feature!"); Features[F.drop_front(1)] = true; @@ -951,7 +949,7 @@ bool AArch64TargetInfo::initFeatureMap( // Parse the CPU and add any implied features. std::optional<llvm::AArch64::CpuInfo> CpuInfo = llvm::AArch64::parseCpu(CPU); if (CpuInfo) { - uint64_t Exts = llvm::AArch64::getDefaultExtensions(CPU, CpuInfo->Arch); + uint64_t Exts = CpuInfo->getImpliedExtensions(); std::vector<StringRef> CPUFeats; llvm::AArch64::getExtensionFeatures(Exts, CPUFeats); for (auto F : CPUFeats) { diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 81b0245d57a6c..4476b9f37bd9d 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -140,7 +140,7 @@ static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU, Features.push_back(ArchInfo->ArchFeature); - uint64_t Extension = llvm::AArch64::getDefaultExtensions(CPU, *ArchInfo); + uint64_t Extension = CpuInfo->getImpliedExtensions(); if (!llvm::AArch64::getExtensionFeatures(Extension, Features)) return false; } diff --git a/llvm/include/llvm/TargetParser/AArch64TargetParser.h b/llvm/include/llvm/TargetParser/AArch64TargetParser.h index ea06d7da29691..b7ecd444c7eef 100644 --- a/llvm/include/llvm/TargetParser/AArch64TargetParser.h +++ b/llvm/include/llvm/TargetParser/AArch64TargetParser.h @@ -334,6 +334,10 @@ struct CpuInfo { const ArchInfo &Arch; uint64_t DefaultExtensions; // Default extensions for this CPU. These will be // ORd with the architecture defaults. + + uint64_t getImpliedExtensions() const { + return DefaultExtensions | Arch.DefaultExts; + } }; inline constexpr CpuInfo CpuInfos[] = { @@ -509,7 +513,6 @@ StringRef getArchExtFeature(StringRef ArchExt); StringRef resolveCPUAlias(StringRef CPU); // Information by Name -uint64_t getDefaultExtensions(StringRef CPU, const ArchInfo &AI); void getFeatureOption(StringRef Name, std::string &Feature); std::optional<ArchInfo> getArchForCpu(StringRef CPU); diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index 840f792325cd2..f42ddf7e53eaa 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -6891,8 +6891,7 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) { // Get the architecture and extension features. std::vector<StringRef> AArch64Features; AArch64Features.push_back(ArchInfo->ArchFeature); - AArch64::getExtensionFeatures( - AArch64::getDefaultExtensions("generic", *ArchInfo), AArch64Features); + AArch64::getExtensionFeatures(ArchInfo->DefaultExts, AArch64Features); MCSubtargetInfo &STI = copySTI(); std::vector<std::string> ArchFeatures(AArch64Features.begin(), AArch64Features.end()); diff --git a/llvm/lib/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp index 7dd0c45939b63..e2519e8212d81 100644 --- a/llvm/lib/TargetParser/AArch64TargetParser.cpp +++ b/llvm/lib/TargetParser/AArch64TargetParser.cpp @@ -25,19 +25,6 @@ static unsigned checkArchVersion(llvm::StringRef Arch) { return 0; } -uint64_t AArch64::getDefaultExtensions(StringRef CPU, - const AArch64::ArchInfo &AI) { - if (CPU == "generic") - return AI.DefaultExts; - - // Note: this now takes cpu aliases into account - std::optional<CpuInfo> Cpu = parseCpu(CPU); - if (!Cpu) - return AI.DefaultExts; - - return Cpu->Arch.DefaultExts | Cpu->DefaultExtensions; -} - void AArch64::getFeatureOption(StringRef Name, std::string &Feature) { for (const auto &E : llvm::AArch64::Extensions) { if (Name == E.Name) { diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp index 2970e01a32ebd..6341cb201f454 100644 --- a/llvm/unittests/TargetParser/TargetParserTest.cpp +++ b/llvm/unittests/TargetParser/TargetParserTest.cpp @@ -966,11 +966,9 @@ TEST_P(AArch64CPUTestFixture, testAArch64CPU) { EXPECT_TRUE(Cpu); EXPECT_EQ(params.ExpectedArch, Cpu->Arch.Name); - uint64_t default_extensions = - AArch64::getDefaultExtensions(params.CPUName, Cpu->Arch); EXPECT_PRED_FORMAT2( AssertSameExtensionFlags<ARM::ISAKind::AARCH64>(params.CPUName), - params.ExpectedFlags, default_extensions); + params.ExpectedFlags, Cpu->getImpliedExtensions()); } INSTANTIATE_TEST_SUITE_P( @@ -1472,7 +1470,7 @@ bool testAArch64Extension(StringRef CPUName, StringRef ArchExt) { if (!Extension) return false; std::optional<AArch64::CpuInfo> CpuInfo = AArch64::parseCpu(CPUName); - return (CpuInfo->Arch.DefaultExts | CpuInfo->DefaultExtensions) & Extension->ID; + return CpuInfo->getImpliedExtensions() & Extension->ID; } bool testAArch64Extension(const AArch64::ArchInfo &AI, StringRef ArchExt) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits