[llvm] [AArch64][llvm] Generate asm parser extension map from TableGen (NFC) (PR #191045)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 30 06:15:53 PDT 2026
================
@@ -150,6 +213,42 @@ static void emitARMTargetDef(const RecordKeeper &RK, raw_ostream &OS) {
<< "#endif // EMIT_EXTENSIONS\n"
<< "\n";
+ OS << "#ifdef EMIT_ASM_PARSER_EXTENSIONS\n"
+ << "static const struct Extension {\n"
+ << " const char *Name;\n"
+ << " const FeatureBitset Features;\n"
+ << " bool AllowInDirective;\n"
+ << "} ExtensionMap[] = {\n";
+ for (const Record *Rec : SortedExtensions) {
+ bool AllowInDirective = allowInAArch64AsmParserDirective(Rec);
+ auto EmitEntry = [&](StringRef Name) {
+ if (Name.empty())
+ return;
+ OS << " {\"" << Name << "\", {AArch64::" << Rec->getName();
+ for (StringRef Extra : getAArch64AsmParserExtraFeatures(Rec))
+ OS << ", AArch64::" << Extra;
+ OS << "}, " << (AllowInDirective ? "true" : "false") << "},\n";
+ };
+
+ StringRef PrimaryName = getAArch64AsmParserPrimaryName(Rec);
+ if (PrimaryName.empty())
+ PrimaryName = Rec->getValueAsString("UserVisibleName");
+ if (PrimaryName.empty())
+ PrimaryName = Rec->getValueAsString("Name");
+ EmitEntry(PrimaryName);
+
+ if (auto Name = Rec->getValueAsString("UserVisibleName");
+ !Name.empty() && Name != PrimaryName)
+ EmitEntry(Name);
+ if (auto Alias = Rec->getValueAsString("UserVisibleAlias");
+ !Alias.empty() && Alias != PrimaryName)
+ EmitEntry(Alias);
+ }
+ OS << "};\n"
+ << "#undef EMIT_ASM_PARSER_EXTENSIONS\n"
----------------
CarolineConcatto wrote:
If we cannot remove the undef from here, should it not be the other way around.
OS << "};\n"
<< "#endif // EMIT_ASM_PARSER_EXTENSIONS\n"
<< "#undef EMIT_ASM_PARSER_EXTENSIONS\n"
https://github.com/llvm/llvm-project/pull/191045
More information about the llvm-commits
mailing list