[MLIR] convert ConvertToEmitCPatternInterface to ODS (#188621)

This PR converts `ConvertToEmitCPatternInterface` dialect interface to ODS. Also makes changes to derived classes.
This commit is contained in:
AidinT
2026-04-01 05:30:12 +02:00
committed by GitHub
parent 6581d58819
commit d52a5e8a5a
10 changed files with 48 additions and 17 deletions

View File

@@ -8,3 +8,4 @@ add_mlir_generic_tablegen_target(MLIRConversionPassIncGen)
add_mlir_doc(Passes ConversionPasses ./ -gen-pass-doc)
add_subdirectory(ConvertToLLVM)
add_subdirectory(ConvertToEmitC)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -6,6 +6,7 @@ add_mlir_conversion_library(MLIRConvertToEmitC
DEPENDS
MLIRConversionPassIncGen
MLIRConvertToEmitCPatternInterfaceIncGen
LINK_LIBS PUBLIC
MLIRArithToEmitC

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -8225,12 +8225,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",
],