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;
// 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) {
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;
}
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[] = {
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);
// 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());
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) {
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(
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) {