Skip to content

Commit e46cbb0

Browse files
neildhickeyElvinaYakubova
authored andcommitted
[AArch64] Add getHostCPUFeatures to query for enabled features in cpuinfo
1 parent 3ac75ee commit e46cbb0

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,21 @@ getAArch64ArchFeaturesFromMarch(const Driver &D, StringRef March,
135135
return true;
136136
}
137137

138-
static bool
139-
getAArch64ArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu,
140-
const ArgList &Args,
141-
llvm::AArch64::ExtensionSet &Extensions) {
138+
static bool getAArch64ArchFeaturesFromMcpu(
139+
const Driver &D, StringRef Mcpu, const ArgList &Args,
140+
llvm::AArch64::ExtensionSet &Extensions, std::vector<StringRef> &Features) {
142141
StringRef CPU;
143142
std::string McpuLowerCase = Mcpu.lower();
144143
if (!DecodeAArch64Mcpu(D, McpuLowerCase, CPU, Extensions))
145144
return false;
146145

146+
if (Mcpu == "native") {
147+
llvm::StringMap<bool> HostFeatures = llvm::sys::getHostCPUFeatures();
148+
for (auto &[Feature, Enabled] : HostFeatures) {
149+
Features.push_back(Args.MakeArgString((Enabled ? "+" : "-") + Feature));
150+
}
151+
}
152+
147153
return true;
148154
}
149155

@@ -210,11 +216,11 @@ void aarch64::getAArch64TargetFeatures(const Driver &D,
210216
success =
211217
getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Extensions);
212218
else if ((A = Args.getLastArg(options::OPT_mcpu_EQ)))
213-
success =
214-
getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Extensions);
219+
success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Extensions,
220+
Features);
215221
else if (isCPUDeterminedByTriple(Triple))
216222
success = getAArch64ArchFeaturesFromMcpu(
217-
D, getAArch64TargetCPU(Args, Triple, A), Args, Extensions);
223+
D, getAArch64TargetCPU(Args, Triple, A), Args, Extensions, Features);
218224
else
219225
// Default to 'A' profile if the architecture is not specified.
220226
success = getAArch64ArchFeaturesFromMarch(D, "armv8-a", Args, Extensions);

0 commit comments

Comments
 (0)