[Mlir-commits] [mlir] [mlir] Decouple enum generation from attributes, adding EnumInfo and EnumCase (PR #132148)

Matthias Springer llvmlistbot at llvm.org
Fri Mar 21 03:01:09 PDT 2025


================
@@ -66,20 +67,34 @@ static void emitEnumClass(const Record &enumDef, StringRef enumName,
   os << "};\n\n";
 }
 
-static void emitParserPrinter(const EnumAttr &enumAttr, StringRef qualName,
+static void emitParserPrinter(const EnumInfo &enumInfo, StringRef qualName,
                               StringRef cppNamespace, raw_ostream &os) {
-  if (enumAttr.getUnderlyingType().empty() ||
-      enumAttr.getConstBuilderTemplate().empty())
+  std::optional<Attribute> enumAttrInfo = enumInfo.asEnumAttr();
+  if (enumInfo.getUnderlyingType().empty() ||
+      (enumAttrInfo && enumAttrInfo->getConstBuilderTemplate().empty()))
     return;
-  auto cases = enumAttr.getAllCases();
+  auto cases = enumInfo.getAllCases();
 
   // Check which cases shouldn't be printed using a keyword.
   llvm::BitVector nonKeywordCases(cases.size());
-  for (auto [index, caseVal] : llvm::enumerate(cases))
-    if (!mlir::tblgen::canFormatStringAsKeyword(caseVal.getStr()))
+  std::string casesList;
+  llvm::raw_string_ostream caseListOs(casesList);
+  caseListOs << "[";
+  for (auto [index, caseVal] : llvm::enumerate(cases)) {
+    if (index != 0)
----------------
matthias-springer wrote:

Can you use `llvm::interleaveComma` here?

https://github.com/llvm/llvm-project/pull/132148


More information about the Mlir-commits mailing list