[Mlir-commits] [mlir] [NFC][MLIR][TableGen] Eliminate `llvm::` for commonly used types (PR #110841)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Oct 2 08:30:32 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-llvm

@llvm/pr-subscribers-mlir

Author: Rahul Joshi (jurahul)

<details>
<summary>Changes</summary>

Eliminate `llvm::` namespace qualifier for commonly used types in MLIR TableGen backends to reduce code clutter.

---

Patch is 126.29 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/110841.diff


18 Files Affected:

- (modified) mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp (+30-29) 
- (modified) mlir/tools/mlir-tblgen/BytecodeDialectGen.cpp (+5-6) 
- (modified) mlir/tools/mlir-tblgen/DialectGen.cpp (+17-15) 
- (modified) mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp (+5-5) 
- (modified) mlir/tools/mlir-tblgen/EnumPythonBindingGen.cpp (+41-43) 
- (modified) mlir/tools/mlir-tblgen/EnumsGen.cpp (+5-4) 
- (modified) mlir/tools/mlir-tblgen/FormatGen.cpp (+10-9) 
- (modified) mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp (+4-8) 
- (modified) mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp (+47-43) 
- (modified) mlir/tools/mlir-tblgen/OpDocGen.cpp (+31-34) 
- (modified) mlir/tools/mlir-tblgen/OpFormatGen.cpp (+109-113) 
- (modified) mlir/tools/mlir-tblgen/OpGenHelpers.cpp (+5-5) 
- (modified) mlir/tools/mlir-tblgen/OpInterfacesGen.cpp (+43-42) 
- (modified) mlir/tools/mlir-tblgen/OpPythonBindingGen.cpp (+123-129) 
- (modified) mlir/tools/mlir-tblgen/PassCAPIGen.cpp (+15-13) 
- (modified) mlir/tools/mlir-tblgen/PassDocGen.cpp (+3-2) 
- (modified) mlir/tools/mlir-tblgen/PassGen.cpp (+44-47) 
- (modified) mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp (+3-3) 


``````````diff
diff --git a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
index 1a248c3a16647d..877c757894b53b 100644
--- a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
+++ b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
@@ -22,6 +22,9 @@
 
 using namespace mlir;
 using namespace mlir::tblgen;
+using llvm::Record;
+using llvm::RecordKeeper;
+namespace cl = llvm::cl;
 
 //===----------------------------------------------------------------------===//
 // Utility Functions
@@ -30,14 +33,14 @@ using namespace mlir::tblgen;
 /// Find all the AttrOrTypeDef for the specified dialect. If no dialect
 /// specified and can only find one dialect's defs, use that.
 static void collectAllDefs(StringRef selectedDialect,
-                           ArrayRef<const llvm::Record *> records,
+                           ArrayRef<const Record *> records,
                            SmallVectorImpl<AttrOrTypeDef> &resultDefs) {
   // Nothing to do if no defs were found.
   if (records.empty())
     return;
 
   auto defs = llvm::map_range(
-      records, [&](const llvm::Record *rec) { return AttrOrTypeDef(rec); });
+      records, [&](const Record *rec) { return AttrOrTypeDef(rec); });
   if (selectedDialect.empty()) {
     // If a dialect was not specified, ensure that all found defs belong to the
     // same dialect.
@@ -690,15 +693,14 @@ class DefGenerator {
   bool emitDefs(StringRef selectedDialect);
 
 protected:
-  DefGenerator(ArrayRef<const llvm::Record *> defs, raw_ostream &os,
+  DefGenerator(ArrayRef<const Record *> defs, raw_ostream &os,
                StringRef defType, StringRef valueType, bool isAttrGenerator)
       : defRecords(defs), os(os), defType(defType), valueType(valueType),
         isAttrGenerator(isAttrGenerator) {
     // Sort by occurrence in file.
-    llvm::sort(defRecords,
-               [](const llvm::Record *lhs, const llvm::Record *rhs) {
-                 return lhs->getID() < rhs->getID();
-               });
+    llvm::sort(defRecords, [](const Record *lhs, const Record *rhs) {
+      return lhs->getID() < rhs->getID();
+    });
   }
 
   /// Emit the list of def type names.
@@ -707,7 +709,7 @@ class DefGenerator {
   void emitParsePrintDispatch(ArrayRef<AttrOrTypeDef> defs);
 
   /// The set of def records to emit.
-  std::vector<const llvm::Record *> defRecords;
+  std::vector<const Record *> defRecords;
   /// The attribute or type class to emit.
   /// The stream to emit to.
   raw_ostream &os;
@@ -722,13 +724,13 @@ class DefGenerator {
 
 /// A specialized generator for AttrDefs.
 struct AttrDefGenerator : public DefGenerator {
-  AttrDefGenerator(const llvm::RecordKeeper &records, raw_ostream &os)
+  AttrDefGenerator(const RecordKeeper &records, raw_ostream &os)
       : DefGenerator(records.getAllDerivedDefinitionsIfDefined("AttrDef"), os,
                      "Attr", "Attribute", /*isAttrGenerator=*/true) {}
 };
 /// A specialized generator for TypeDefs.
 struct TypeDefGenerator : public DefGenerator {
-  TypeDefGenerator(const llvm::RecordKeeper &records, raw_ostream &os)
+  TypeDefGenerator(const RecordKeeper &records, raw_ostream &os)
       : DefGenerator(records.getAllDerivedDefinitionsIfDefined("TypeDef"), os,
                      "Type", "Type", /*isAttrGenerator=*/false) {}
 };
@@ -1030,9 +1032,9 @@ bool DefGenerator::emitDefs(StringRef selectedDialect) {
 
 /// Find all type constraints for which a C++ function should be generated.
 static std::vector<Constraint>
-getAllTypeConstraints(const llvm::RecordKeeper &records) {
+getAllTypeConstraints(const RecordKeeper &records) {
   std::vector<Constraint> result;
-  for (const llvm::Record *def :
+  for (const Record *def :
        records.getAllDerivedDefinitionsIfDefined("TypeConstraint")) {
     // Ignore constraints defined outside of the top-level file.
     if (llvm::SrcMgr.FindBufferContainingLoc(def->getLoc()[0]) !=
@@ -1047,7 +1049,7 @@ getAllTypeConstraints(const llvm::RecordKeeper &records) {
   return result;
 }
 
-static void emitTypeConstraintDecls(const llvm::RecordKeeper &records,
+static void emitTypeConstraintDecls(const RecordKeeper &records,
                                     raw_ostream &os) {
   static const char *const typeConstraintDecl = R"(
 bool {0}(::mlir::Type type);
@@ -1057,7 +1059,7 @@ bool {0}(::mlir::Type type);
     os << strfmt(typeConstraintDecl, *constr.getCppFunctionName());
 }
 
-static void emitTypeConstraintDefs(const llvm::RecordKeeper &records,
+static void emitTypeConstraintDefs(const RecordKeeper &records,
                                    raw_ostream &os) {
   static const char *const typeConstraintDef = R"(
 bool {0}(::mlir::Type type) {
@@ -1080,21 +1082,21 @@ bool {0}(::mlir::Type type) {
 //===----------------------------------------------------------------------===//
 // AttrDef
 
-static llvm::cl::OptionCategory attrdefGenCat("Options for -gen-attrdef-*");
-static llvm::cl::opt<std::string>
+static cl::OptionCategory attrdefGenCat("Options for -gen-attrdef-*");
+static cl::opt<std::string>
     attrDialect("attrdefs-dialect",
-                llvm::cl::desc("Generate attributes for this dialect"),
-                llvm::cl::cat(attrdefGenCat), llvm::cl::CommaSeparated);
+                cl::desc("Generate attributes for this dialect"),
+                cl::cat(attrdefGenCat), cl::CommaSeparated);
 
 static mlir::GenRegistration
     genAttrDefs("gen-attrdef-defs", "Generate AttrDef definitions",
-                [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                [](const RecordKeeper &records, raw_ostream &os) {
                   AttrDefGenerator generator(records, os);
                   return generator.emitDefs(attrDialect);
                 });
 static mlir::GenRegistration
     genAttrDecls("gen-attrdef-decls", "Generate AttrDef declarations",
-                 [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                 [](const RecordKeeper &records, raw_ostream &os) {
                    AttrDefGenerator generator(records, os);
                    return generator.emitDecls(attrDialect);
                  });
@@ -1102,21 +1104,20 @@ static mlir::GenRegistration
 //===----------------------------------------------------------------------===//
 // TypeDef
 
-static llvm::cl::OptionCategory typedefGenCat("Options for -gen-typedef-*");
-static llvm::cl::opt<std::string>
-    typeDialect("typedefs-dialect",
-                llvm::cl::desc("Generate types for this dialect"),
-                llvm::cl::cat(typedefGenCat), llvm::cl::CommaSeparated);
+static cl::OptionCategory typedefGenCat("Options for -gen-typedef-*");
+static cl::opt<std::string>
+    typeDialect("typedefs-dialect", cl::desc("Generate types for this dialect"),
+                cl::cat(typedefGenCat), cl::CommaSeparated);
 
 static mlir::GenRegistration
     genTypeDefs("gen-typedef-defs", "Generate TypeDef definitions",
-                [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                [](const RecordKeeper &records, raw_ostream &os) {
                   TypeDefGenerator generator(records, os);
                   return generator.emitDefs(typeDialect);
                 });
 static mlir::GenRegistration
     genTypeDecls("gen-typedef-decls", "Generate TypeDef declarations",
-                 [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                 [](const RecordKeeper &records, raw_ostream &os) {
                    TypeDefGenerator generator(records, os);
                    return generator.emitDecls(typeDialect);
                  });
@@ -1124,14 +1125,14 @@ static mlir::GenRegistration
 static mlir::GenRegistration
     genTypeConstrDefs("gen-type-constraint-defs",
                       "Generate type constraint definitions",
-                      [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                      [](const RecordKeeper &records, raw_ostream &os) {
                         emitTypeConstraintDefs(records, os);
                         return false;
                       });
 static mlir::GenRegistration
     genTypeConstrDecls("gen-type-constraint-decls",
                        "Generate type constraint declarations",
-                       [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                       [](const RecordKeeper &records, raw_ostream &os) {
                          emitTypeConstraintDecls(records, os);
                          return false;
                        });
diff --git a/mlir/tools/mlir-tblgen/BytecodeDialectGen.cpp b/mlir/tools/mlir-tblgen/BytecodeDialectGen.cpp
index a2e3227cffea39..39e5e0b51e497b 100644
--- a/mlir/tools/mlir-tblgen/BytecodeDialectGen.cpp
+++ b/mlir/tools/mlir-tblgen/BytecodeDialectGen.cpp
@@ -18,11 +18,10 @@
 
 using namespace llvm;
 
-static llvm::cl::OptionCategory dialectGenCat("Options for -gen-bytecode");
-static llvm::cl::opt<std::string>
-    selectedBcDialect("bytecode-dialect",
-                      llvm::cl::desc("The dialect to gen for"),
-                      llvm::cl::cat(dialectGenCat), llvm::cl::CommaSeparated);
+static cl::OptionCategory dialectGenCat("Options for -gen-bytecode");
+static cl::opt<std::string>
+    selectedBcDialect("bytecode-dialect", cl::desc("The dialect to gen for"),
+                      cl::cat(dialectGenCat), cl::CommaSeparated);
 
 namespace {
 
@@ -306,7 +305,7 @@ void Generator::emitPrint(StringRef kind, StringRef type,
   auto funScope = os.scope("{\n", "}\n\n");
 
   // Check that predicates specified if multiple bytecode instances.
-  for (const llvm::Record *rec : make_second_range(vec)) {
+  for (const Record *rec : make_second_range(vec)) {
     StringRef pred = rec->getValueAsString("printerPredicate");
     if (vec.size() > 1 && pred.empty()) {
       for (auto [index, rec] : vec) {
diff --git a/mlir/tools/mlir-tblgen/DialectGen.cpp b/mlir/tools/mlir-tblgen/DialectGen.cpp
index 2412876958a0c9..a4d38727414936 100644
--- a/mlir/tools/mlir-tblgen/DialectGen.cpp
+++ b/mlir/tools/mlir-tblgen/DialectGen.cpp
@@ -30,17 +30,21 @@
 
 using namespace mlir;
 using namespace mlir::tblgen;
+using llvm::Record;
+using llvm::RecordKeeper;
+namespace cl = llvm::cl;
 
-static llvm::cl::OptionCategory dialectGenCat("Options for -gen-dialect-*");
-llvm::cl::opt<std::string>
-    selectedDialect("dialect", llvm::cl::desc("The dialect to gen for"),
-                    llvm::cl::cat(dialectGenCat), llvm::cl::CommaSeparated);
+static cl::OptionCategory dialectGenCat("Options for -gen-dialect-*");
+cl::opt<std::string> selectedDialect("dialect",
+                                     cl::desc("The dialect to gen for"),
+                                     cl::cat(dialectGenCat),
+                                     cl::CommaSeparated);
 
 /// Utility iterator used for filtering records for a specific dialect.
 namespace {
 using DialectFilterIterator =
-    llvm::filter_iterator<ArrayRef<llvm::Record *>::iterator,
-                          std::function<bool(const llvm::Record *)>>;
+    llvm::filter_iterator<ArrayRef<Record *>::iterator,
+                          std::function<bool(const Record *)>>;
 } // namespace
 
 static void populateDiscardableAttributes(
@@ -62,8 +66,8 @@ static void populateDiscardableAttributes(
 /// the given dialect.
 template <typename T>
 static iterator_range<DialectFilterIterator>
-filterForDialect(ArrayRef<llvm::Record *> records, Dialect &dialect) {
-  auto filterFn = [&](const llvm::Record *record) {
+filterForDialect(ArrayRef<Record *> records, Dialect &dialect) {
+  auto filterFn = [&](const Record *record) {
     return T(record).getDialect() == dialect;
   };
   return {DialectFilterIterator(records.begin(), records.end(), filterFn),
@@ -295,7 +299,7 @@ static void emitDialectDecl(Dialect &dialect, raw_ostream &os) {
        << "::" << dialect.getCppClassName() << ")\n";
 }
 
-static bool emitDialectDecls(const llvm::RecordKeeper &recordKeeper,
+static bool emitDialectDecls(const RecordKeeper &recordKeeper,
                              raw_ostream &os) {
   emitSourceFileHeader("Dialect Declarations", os, recordKeeper);
 
@@ -340,8 +344,7 @@ static const char *const dialectDestructorStr = R"(
 
 )";
 
-static void emitDialectDef(Dialect &dialect,
-                           const llvm::RecordKeeper &recordKeeper,
+static void emitDialectDef(Dialect &dialect, const RecordKeeper &recordKeeper,
                            raw_ostream &os) {
   std::string cppClassName = dialect.getCppClassName();
 
@@ -389,8 +392,7 @@ static void emitDialectDef(Dialect &dialect,
     os << llvm::formatv(dialectDestructorStr, cppClassName);
 }
 
-static bool emitDialectDefs(const llvm::RecordKeeper &recordKeeper,
-                            raw_ostream &os) {
+static bool emitDialectDefs(const RecordKeeper &recordKeeper, raw_ostream &os) {
   emitSourceFileHeader("Dialect Definitions", os, recordKeeper);
 
   auto dialectDefs = recordKeeper.getAllDerivedDefinitions("Dialect");
@@ -411,12 +413,12 @@ static bool emitDialectDefs(const llvm::RecordKeeper &recordKeeper,
 
 static mlir::GenRegistration
     genDialectDecls("gen-dialect-decls", "Generate dialect declarations",
-                    [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                    [](const RecordKeeper &records, raw_ostream &os) {
                       return emitDialectDecls(records, os);
                     });
 
 static mlir::GenRegistration
     genDialectDefs("gen-dialect-defs", "Generate dialect definitions",
-                   [](const llvm::RecordKeeper &records, raw_ostream &os) {
+                   [](const RecordKeeper &records, raw_ostream &os) {
                      return emitDialectDefs(records, os);
                    });
diff --git a/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp b/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp
index 26de95fcc57736..88a6cc9208ca69 100644
--- a/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp
+++ b/mlir/tools/mlir-tblgen/DirectiveCommonGen.cpp
@@ -25,6 +25,7 @@ using llvm::ClauseVal;
 using llvm::raw_ostream;
 using llvm::Record;
 using llvm::RecordKeeper;
+namespace cl = llvm::cl;
 
 // LLVM has multiple places (Clang, Flang, MLIR) where information about
 // the directives (OpenMP/OpenACC), and clauses are needed. It is good software
@@ -96,12 +97,11 @@ static bool emitDecls(const RecordKeeper &recordKeeper, llvm::StringRef dialect,
   return false;
 }
 
-static llvm::cl::OptionCategory
-    directiveGenCat("Options for gen-directive-decl");
-static llvm::cl::opt<std::string>
+static cl::OptionCategory directiveGenCat("Options for gen-directive-decl");
+static cl::opt<std::string>
     dialect("directives-dialect",
-            llvm::cl::desc("Generate directives for this dialect"),
-            llvm::cl::cat(directiveGenCat), llvm::cl::CommaSeparated);
+            cl::desc("Generate directives for this dialect"),
+            cl::cat(directiveGenCat), cl::CommaSeparated);
 
 // Registers the generator to mlir-tblgen.
 static mlir::GenRegistration genDirectiveDecls(
diff --git a/mlir/tools/mlir-tblgen/EnumPythonBindingGen.cpp b/mlir/tools/mlir-tblgen/EnumPythonBindingGen.cpp
index 79249944e484f7..189487794f8f7c 100644
--- a/mlir/tools/mlir-tblgen/EnumPythonBindingGen.cpp
+++ b/mlir/tools/mlir-tblgen/EnumPythonBindingGen.cpp
@@ -21,6 +21,9 @@
 
 using namespace mlir;
 using namespace mlir::tblgen;
+using llvm::formatv;
+using llvm::Record;
+using llvm::RecordKeeper;
 
 /// File header and includes.
 constexpr const char *fileHeader = R"Py(
@@ -42,44 +45,42 @@ static std::string makePythonEnumCaseName(StringRef name) {
 
 /// Emits the Python class for the given enum.
 static void emitEnumClass(EnumAttr enumAttr, raw_ostream &os) {
-  os << llvm::formatv("class {0}({1}):\n", enumAttr.getEnumClassName(),
-                      enumAttr.isBitEnum() ? "IntFlag" : "IntEnum");
+  os << formatv("class {0}({1}):\n", enumAttr.getEnumClassName(),
+                enumAttr.isBitEnum() ? "IntFlag" : "IntEnum");
   if (!enumAttr.getSummary().empty())
-    os << llvm::formatv("    \"\"\"{0}\"\"\"\n", enumAttr.getSummary());
+    os << formatv("    \"\"\"{0}\"\"\"\n", enumAttr.getSummary());
   os << "\n";
 
   for (const EnumAttrCase &enumCase : enumAttr.getAllCases()) {
-    os << llvm::formatv(
-        "    {0} = {1}\n", makePythonEnumCaseName(enumCase.getSymbol()),
-        enumCase.getValue() >= 0 ? std::to_string(enumCase.getValue())
-                                 : "auto()");
+    os << formatv("    {0} = {1}\n",
+                  makePythonEnumCaseName(enumCase.getSymbol()),
+                  enumCase.getValue() >= 0 ? std::to_string(enumCase.getValue())
+                                           : "auto()");
   }
 
   os << "\n";
 
   if (enumAttr.isBitEnum()) {
-    os << llvm::formatv("    def __iter__(self):\n"
-                        "        return iter([case for case in type(self) if "
-                        "(self & case) is case])\n");
-    os << llvm::formatv("    def __len__(self):\n"
-                        "        return bin(self).count(\"1\")\n");
+    os << formatv("    def __iter__(self):\n"
+                  "        return iter([case for case in type(self) if "
+                  "(self & case) is case])\n");
+    os << formatv("    def __len__(self):\n"
+                  "        return bin(self).count(\"1\")\n");
     os << "\n";
   }
 
-  os << llvm::formatv("    def __str__(self):\n");
+  os << formatv("    def __str__(self):\n");
   if (enumAttr.isBitEnum())
-    os << llvm::formatv("        if len(self) > 1:\n"
-                        "            return \"{0}\".join(map(str, self))\n",
-                        enumAttr.getDef().getValueAsString("separator"));
+    os << formatv("        if len(self) > 1:\n"
+                  "            return \"{0}\".join(map(str, self))\n",
+                  enumAttr.getDef().getValueAsString("separator"));
   for (const EnumAttrCase &enumCase : enumAttr.getAllCases()) {
-    os << llvm::formatv("        if self is {0}.{1}:\n",
-                        enumAttr.getEnumClassName(),
-                        makePythonEnumCaseName(enumCase.getSymbol()));
-    os << llvm::formatv("            return \"{0}\"\n", enumCase.getStr());
+    os << formatv("        if self is {0}.{1}:\n", enumAttr.getEnumClassName(),
+                  makePythonEnumCaseName(enumCase.getSymbol()));
+    os << formatv("            return \"{0}\"\n", enumCase.getStr());
   }
-  os << llvm::formatv(
-      "        raise ValueError(\"Unknown {0} enum entry.\")\n\n\n",
-      enumAttr.getEnumClassName());
+  os << formatv("        raise ValueError(\"Unknown {0} enum entry.\")\n\n\n",
+                enumAttr.getEnumClassName());
   os << "\n";
 }
 
@@ -105,15 +106,13 @@ static bool emitAttributeBuilder(const EnumAttr &enumAttr, raw_ostream &os) {
     return true;
   }
 
-  os << llvm::formatv("@register_attribute_builder(\"{0}\")\n",
-                      enumAttr.getAttrDefName());
-  os << llvm::formatv("def _{0}(x, context):\n",
-                      enumAttr.getAttrDefName().lower());
-  os << llvm::formatv(
-      "    return "
-      "_ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless({0}, "
-      "context=context), int(x))\n\n",
-      bitwidth);
+  os << formatv("@register_attribute_builder(\"{0}\")\n",
+                enumAttr.getAttrDefName());
+  os << formatv("def _{0}(x, context):\n", enumAttr.getAttrDefName().lower());
+  os << formatv("    return "
+                "_ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless({0}, "
+                "context=context), int(x))\n\n",
+                bitwidth);
   return false;
 }
 
@@ -123,26 +122,25 @@ static bool emitAttributeBuilder(const EnumAttr &enumAttr, raw_ostream &os) {
 static bool emitDialectEnumAttributeBuilder(StringRef attrDefName,
                                             StringRef formatString,
                                             raw_ostream &os) {
-  os << llvm::formatv("@register_attribute_builder(\"{0}\")\n", attrDefName);
-  os << llvm::formatv("def _{0}(x, context):\n", attrDefName.lower());
-  os << llvm::formatv("    return "
-                      "_ods_ir.Attribute.parse(f'{0}', context=context)\n\n",
-                      formatString);
+  os << formatv("@register_attribute_builder(\"{0}\")\n", attrDefName);
+  os << formatv("def _{0}(x, context):\n", attrDefName.lower());
+  os << formatv("    return "
+                "_ods_ir.Attr...
[truncated]

``````````

</details>


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


More information about the Mlir-commits mailing list