Skip to content

Commit 0753cf2

Browse files
committed
[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
1 parent 9ea00fc commit 0753cf2

File tree

6 files changed

+10
-25
lines changed

6 files changed

+10
-25
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -692,10 +692,8 @@ void AArch64TargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
692692
Features[OtherArch->getSubArch()] = Enabled;
693693

694694
// Set any features implied by the architecture
695-
uint64_t Extensions =
696-
llvm::AArch64::getDefaultExtensions("generic", *ArchInfo);
697695
std::vector<StringRef> CPUFeats;
698-
if (llvm::AArch64::getExtensionFeatures(Extensions, CPUFeats)) {
696+
if (llvm::AArch64::getExtensionFeatures(ArchInfo->DefaultExts, CPUFeats)) {
699697
for (auto F : CPUFeats) {
700698
assert(F[0] == '+' && "Expected + in target feature!");
701699
Features[F.drop_front(1)] = true;
@@ -951,7 +949,7 @@ bool AArch64TargetInfo::initFeatureMap(
951949
// Parse the CPU and add any implied features.
952950
std::optional<llvm::AArch64::CpuInfo> CpuInfo = llvm::AArch64::parseCpu(CPU);
953951
if (CpuInfo) {
954-
uint64_t Exts = llvm::AArch64::getDefaultExtensions(CPU, CpuInfo->Arch);
952+
uint64_t Exts = CpuInfo->getImpliedExtensions();
955953
std::vector<StringRef> CPUFeats;
956954
llvm::AArch64::getExtensionFeatures(Exts, CPUFeats);
957955
for (auto F : CPUFeats) {

clang/lib/Driver/ToolChains/Arch/AArch64.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU,
140140

141141
Features.push_back(ArchInfo->ArchFeature);
142142

143-
uint64_t Extension = llvm::AArch64::getDefaultExtensions(CPU, *ArchInfo);
143+
uint64_t Extension = CpuInfo->getImpliedExtensions();
144144
if (!llvm::AArch64::getExtensionFeatures(Extension, Features))
145145
return false;
146146
}

llvm/include/llvm/TargetParser/AArch64TargetParser.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,10 @@ struct CpuInfo {
334334
const ArchInfo &Arch;
335335
uint64_t DefaultExtensions; // Default extensions for this CPU. These will be
336336
// ORd with the architecture defaults.
337+
338+
uint64_t getImpliedExtensions() const {
339+
return DefaultExtensions | Arch.DefaultExts;
340+
}
337341
};
338342

339343
inline constexpr CpuInfo CpuInfos[] = {
@@ -509,7 +513,6 @@ StringRef getArchExtFeature(StringRef ArchExt);
509513
StringRef resolveCPUAlias(StringRef CPU);
510514

511515
// Information by Name
512-
uint64_t getDefaultExtensions(StringRef CPU, const ArchInfo &AI);
513516
void getFeatureOption(StringRef Name, std::string &Feature);
514517
std::optional<ArchInfo> getArchForCpu(StringRef CPU);
515518

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6891,8 +6891,7 @@ bool AArch64AsmParser::parseDirectiveArch(SMLoc L) {
68916891
// Get the architecture and extension features.
68926892
std::vector<StringRef> AArch64Features;
68936893
AArch64Features.push_back(ArchInfo->ArchFeature);
6894-
AArch64::getExtensionFeatures(
6895-
AArch64::getDefaultExtensions("generic", *ArchInfo), AArch64Features);
6894+
AArch64::getExtensionFeatures(ArchInfo->DefaultExts, AArch64Features);
68966895

68976896
MCSubtargetInfo &STI = copySTI();
68986897
std::vector<std::string> ArchFeatures(AArch64Features.begin(), AArch64Features.end());

llvm/lib/TargetParser/AArch64TargetParser.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,6 @@ static unsigned checkArchVersion(llvm::StringRef Arch) {
2525
return 0;
2626
}
2727

28-
uint64_t AArch64::getDefaultExtensions(StringRef CPU,
29-
const AArch64::ArchInfo &AI) {
30-
if (CPU == "generic")
31-
return AI.DefaultExts;
32-
33-
// Note: this now takes cpu aliases into account
34-
std::optional<CpuInfo> Cpu = parseCpu(CPU);
35-
if (!Cpu)
36-
return AI.DefaultExts;
37-
38-
return Cpu->Arch.DefaultExts | Cpu->DefaultExtensions;
39-
}
40-
4128
void AArch64::getFeatureOption(StringRef Name, std::string &Feature) {
4229
for (const auto &E : llvm::AArch64::Extensions) {
4330
if (Name == E.Name) {

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -966,11 +966,9 @@ TEST_P(AArch64CPUTestFixture, testAArch64CPU) {
966966
EXPECT_TRUE(Cpu);
967967
EXPECT_EQ(params.ExpectedArch, Cpu->Arch.Name);
968968

969-
uint64_t default_extensions =
970-
AArch64::getDefaultExtensions(params.CPUName, Cpu->Arch);
971969
EXPECT_PRED_FORMAT2(
972970
AssertSameExtensionFlags<ARM::ISAKind::AARCH64>(params.CPUName),
973-
params.ExpectedFlags, default_extensions);
971+
params.ExpectedFlags, Cpu->getImpliedExtensions());
974972
}
975973

976974
INSTANTIATE_TEST_SUITE_P(
@@ -1472,7 +1470,7 @@ bool testAArch64Extension(StringRef CPUName, StringRef ArchExt) {
14721470
if (!Extension)
14731471
return false;
14741472
std::optional<AArch64::CpuInfo> CpuInfo = AArch64::parseCpu(CPUName);
1475-
return (CpuInfo->Arch.DefaultExts | CpuInfo->DefaultExtensions) & Extension->ID;
1473+
return CpuInfo->getImpliedExtensions() & Extension->ID;
14761474
}
14771475

14781476
bool testAArch64Extension(const AArch64::ArchInfo &AI, StringRef ArchExt) {

0 commit comments

Comments
 (0)