[Mlir-commits] [llvm] [mlir] [MLIR] convert ConvertToEmitCPatternInterface to ODS (PR #188621)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Mar 25 14:53:16 PDT 2026


https://github.com/aidint created https://github.com/llvm/llvm-project/pull/188621

This PR converts `ConvertToEmitCPatternInterface` dialect interface to tablegen generated format using ODS.
Also makes changes to derived classes. 

>From 2f707d902fb30270932178c4806e57e135849cca Mon Sep 17 00:00:00 2001
From: aidint <at.aidin at gmail.com>
Date: Wed, 25 Mar 2026 22:08:53 +0100
Subject: [PATCH 1/2] convert ConvertToEmitCPatternInterface to ODS

---
 mlir/include/mlir/Conversion/CMakeLists.txt   |  1 +
 .../Conversion/ConvertToEmitC/CMakeLists.txt  |  3 +++
 .../ConvertToEmitCPatternInterface.td         | 22 +++++++++++++++++++
 .../ConvertToEmitC/ToEmitCInterface.h         | 15 ++-----------
 .../Conversion/ArithToEmitC/ArithToEmitC.cpp  |  3 ++-
 .../Conversion/ConvertToEmitC/CMakeLists.txt  |  1 +
 .../Conversion/FuncToEmitC/FuncToEmitC.cpp    |  3 ++-
 .../MemRefToEmitC/MemRefToEmitC.cpp           |  3 ++-
 mlir/lib/Conversion/SCFToEmitC/SCFToEmitC.cpp |  3 ++-
 9 files changed, 37 insertions(+), 17 deletions(-)
 create mode 100644 mlir/include/mlir/Conversion/ConvertToEmitC/CMakeLists.txt
 create mode 100644 mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.td

diff --git a/mlir/include/mlir/Conversion/CMakeLists.txt b/mlir/include/mlir/Conversion/CMakeLists.txt
index 602c8ff72fbae..209f35d3774ec 100644
--- a/mlir/include/mlir/Conversion/CMakeLists.txt
+++ b/mlir/include/mlir/Conversion/CMakeLists.txt
@@ -8,3 +8,4 @@ add_mlir_generic_tablegen_target(MLIRConversionPassIncGen)
 add_mlir_doc(Passes ConversionPasses ./ -gen-pass-doc)
 
 add_subdirectory(ConvertToLLVM)
+add_subdirectory(ConvertToEmitC)
diff --git a/mlir/include/mlir/Conversion/ConvertToEmitC/CMakeLists.txt b/mlir/include/mlir/Conversion/ConvertToEmitC/CMakeLists.txt
new file mode 100644
index 0000000000000..d748d3bde2b76
--- /dev/null
+++ b/mlir/include/mlir/Conversion/ConvertToEmitC/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(LLVM_TARGET_DEFINITIONS ConvertToEmitCPatternInterface.td)
+mlir_tablegen(ConvertToEmitCPatternInterface.h.inc -gen-dialect-interface-decls)
+add_mlir_generic_tablegen_target(MLIRConvertToEmitCPatternInterfaceIncGen)
diff --git a/mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.td b/mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.td
new file mode 100644
index 0000000000000..e300826cdc281
--- /dev/null
+++ b/mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.td
@@ -0,0 +1,22 @@
+#ifndef MLIR_INTERFACES_CONVERTTOEMITCPATTERNINTERFACE
+#define MLIR_INTERFACES_CONVERTTOEMITCPATTERNINTERFACE
+
+include "mlir/IR/Interfaces.td"
+
+def ConvertToEmitCPatternInterface : DialectInterface<"ConvertToEmitCPatternInterface"> {
+  let description = [{}];
+  let cppNamespace = "::mlir";
+
+  let methods = [
+    PureVirtualInterfaceMethod<[{
+        Hook for derived dialect interface to provide conversion patterns
+        and mark dialect legal for the conversion target.
+      }],
+      "void", "populateConvertToEmitCConversionPatterns",
+      (ins "::mlir::ConversionTarget &":$target, "::mlir::TypeConverter &":$typeConverter,
+           "::mlir::RewritePatternSet &":$patterns)
+    >
+  ];
+}
+
+#endif
diff --git a/mlir/include/mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h b/mlir/include/mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h
index d438f27006232..f6546fc27e0b3 100644
--- a/mlir/include/mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h
+++ b/mlir/include/mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h
@@ -20,19 +20,6 @@ class MLIRContext;
 class Operation;
 class RewritePatternSet;
 class AnalysisManager;
-
-class ConvertToEmitCPatternInterface
-    : public DialectInterface::Base<ConvertToEmitCPatternInterface> {
-public:
-  ConvertToEmitCPatternInterface(Dialect *dialect) : Base(dialect) {}
-
-  /// Hook for derived dialect interface to provide conversion patterns
-  /// and mark dialect legal for the conversion target.
-  virtual void populateConvertToEmitCConversionPatterns(
-      ConversionTarget &target, TypeConverter &typeConverter,
-      RewritePatternSet &patterns) const = 0;
-};
-
 /// Recursively walk the IR and collect all dialects implementing the interface,
 /// and populate the conversion patterns.
 void populateConversionTargetFromOperation(Operation *op,
@@ -42,4 +29,6 @@ void populateConversionTargetFromOperation(Operation *op,
 
 } // namespace mlir
 
+#include "mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.h.inc"
+
 #endif // MLIR_CONVERSION_CONVERTTOEMITC_TOEMITCINTERFACE_H
diff --git a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp
index 02091a407ac11..d003dc7a6dff3 100644
--- a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp
+++ b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp
@@ -26,7 +26,8 @@ using namespace mlir;
 namespace {
 /// Implement the interface to convert Arith to EmitC.
 struct ArithToEmitCDialectInterface : public ConvertToEmitCPatternInterface {
-  using ConvertToEmitCPatternInterface::ConvertToEmitCPatternInterface;
+  ArithToEmitCDialectInterface(Dialect *dialect)
+      : ConvertToEmitCPatternInterface(dialect) {}
 
   /// Hook for derived dialect interface to provide conversion patterns
   /// and mark dialect legal for the conversion target.
diff --git a/mlir/lib/Conversion/ConvertToEmitC/CMakeLists.txt b/mlir/lib/Conversion/ConvertToEmitC/CMakeLists.txt
index e0d766570d5eb..014ab26345033 100644
--- a/mlir/lib/Conversion/ConvertToEmitC/CMakeLists.txt
+++ b/mlir/lib/Conversion/ConvertToEmitC/CMakeLists.txt
@@ -6,6 +6,7 @@ add_mlir_conversion_library(MLIRConvertToEmitC
 
   DEPENDS
   MLIRConversionPassIncGen
+  MLIRConvertToEmitCPatternInterfaceIncGen
 
   LINK_LIBS PUBLIC
   MLIRArithToEmitC
diff --git a/mlir/lib/Conversion/FuncToEmitC/FuncToEmitC.cpp b/mlir/lib/Conversion/FuncToEmitC/FuncToEmitC.cpp
index 197caeb4ffbfa..d2fb359c9aabe 100644
--- a/mlir/lib/Conversion/FuncToEmitC/FuncToEmitC.cpp
+++ b/mlir/lib/Conversion/FuncToEmitC/FuncToEmitC.cpp
@@ -24,7 +24,8 @@ namespace {
 
 /// Implement the interface to convert Func to EmitC.
 struct FuncToEmitCDialectInterface : public ConvertToEmitCPatternInterface {
-  using ConvertToEmitCPatternInterface::ConvertToEmitCPatternInterface;
+  FuncToEmitCDialectInterface(Dialect *dialect)
+      : ConvertToEmitCPatternInterface(dialect) {}
 
   /// Hook for derived dialect interface to provide conversion patterns
   /// and mark dialect legal for the conversion target.
diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
index 87125b39e4666..b8924c63adf09 100644
--- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
+++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
@@ -37,7 +37,8 @@ static bool isMemRefTypeLegalForEmitC(MemRefType memRefType) {
 namespace {
 /// Implement the interface to convert MemRef to EmitC.
 struct MemRefToEmitCDialectInterface : public ConvertToEmitCPatternInterface {
-  using ConvertToEmitCPatternInterface::ConvertToEmitCPatternInterface;
+  MemRefToEmitCDialectInterface(Dialect *dialect)
+      : ConvertToEmitCPatternInterface(dialect) {}
 
   /// Hook for derived dialect interface to provide conversion patterns
   /// and mark dialect legal for the conversion target.
diff --git a/mlir/lib/Conversion/SCFToEmitC/SCFToEmitC.cpp b/mlir/lib/Conversion/SCFToEmitC/SCFToEmitC.cpp
index 07feba7e565d9..d7c943ef7c4f1 100644
--- a/mlir/lib/Conversion/SCFToEmitC/SCFToEmitC.cpp
+++ b/mlir/lib/Conversion/SCFToEmitC/SCFToEmitC.cpp
@@ -35,7 +35,8 @@ namespace {
 
 /// Implement the interface to convert SCF to EmitC.
 struct SCFToEmitCDialectInterface : public ConvertToEmitCPatternInterface {
-  using ConvertToEmitCPatternInterface::ConvertToEmitCPatternInterface;
+  SCFToEmitCDialectInterface(Dialect *dialect)
+      : ConvertToEmitCPatternInterface(dialect) {}
 
   /// Hook for derived dialect interface to provide conversion patterns
   /// and mark dialect legal for the conversion target.

>From e95d7370f514580d22f4b6f01acf3bda9708a5aa Mon Sep 17 00:00:00 2001
From: aidint <at.aidin at gmail.com>
Date: Wed, 25 Mar 2026 22:49:06 +0100
Subject: [PATCH 2/2] add corresponding bazel changes

---
 utils/bazel/llvm-project-overlay/mlir/BUILD.bazel | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
index 40fdc056857d1..b484cdad87e45 100644
--- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
@@ -8211,12 +8211,23 @@ cc_library(
     ],
 )
 
+gentbl_cc_library(
+    name = "ConvertToEmitCPatternInterfaceIncGen",
+    tbl_outs = {
+        "include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.h.inc": ["-gen-dialect-interface-decls"],
+    },
+    tblgen = ":mlir-tblgen",
+    td_file = "include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPatternInterface.td",
+    deps = [":OpBaseTdFiles"],
+)
+
 cc_library(
     name = "ConvertToEmitCInterface",
     hdrs = ["include/mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h"],
     includes = ["include"],
     deps = [
         ":ConversionPassIncGen",
+        ":ConvertToEmitCPatternInterfaceIncGen",
         ":IR",
         "//llvm:Support",
     ],



More information about the Mlir-commits mailing list