diff options
Diffstat (limited to 'llvm/lib/TargetParser/AArch64TargetParser.cpp')
| -rw-r--r-- | llvm/lib/TargetParser/AArch64TargetParser.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/llvm/lib/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp index 3a1f549b2803..a3f9dfa4a283 100644 --- a/llvm/lib/TargetParser/AArch64TargetParser.cpp +++ b/llvm/lib/TargetParser/AArch64TargetParser.cpp @@ -12,6 +12,8 @@ //===----------------------------------------------------------------------===// #include "llvm/TargetParser/AArch64TargetParser.h" +#include "llvm/Support/Format.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/ARMTargetParserCommon.h" #include "llvm/TargetParser/Triple.h" #include <cctype> @@ -54,11 +56,12 @@ uint64_t AArch64::getCpuSupportsMask(ArrayRef<StringRef> FeatureStrs) { return FeaturesMask; } -bool AArch64::getExtensionFeatures(uint64_t InputExts, - std::vector<StringRef> &Features) { +bool AArch64::getExtensionFeatures( + const AArch64::ExtensionBitset &InputExts, + std::vector<StringRef> &Features) { for (const auto &E : Extensions) /* INVALID and NONE have no feature name. */ - if ((InputExts & E.ID) && !E.Feature.empty()) + if (InputExts.test(E.ID) && !E.Feature.empty()) Features.push_back(E.Feature); return true; @@ -132,3 +135,18 @@ std::optional<AArch64::CpuInfo> AArch64::parseCpu(StringRef Name) { return {}; } + +void AArch64::PrintSupportedExtensions(StringMap<StringRef> DescMap) { + outs() << "All available -march extensions for AArch64\n\n" + << " " << left_justify("Name", 20) + << (DescMap.empty() ? "\n" : "Description\n"); + for (const auto &Ext : Extensions) { + // Extensions without a feature cannot be used with -march. + if (!Ext.Feature.empty()) { + std::string Description = DescMap[Ext.Name].str(); + outs() << " " + << format(Description.empty() ? "%s\n" : "%-20s%s\n", + Ext.Name.str().c_str(), Description.c_str()); + } + } +} |
