[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