[Mlir-commits] [mlir] [MLIR] Convert LLVMImportDialectInterface using ODS (PR #181923)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Feb 17 14:10:41 PST 2026
https://github.com/aidint created https://github.com/llvm/llvm-project/pull/181923
This PR generates LLVMImportDialectInterface using ODS.
>From 1585bb67710ddfd031c48a07065cc1c21ff2e490 Mon Sep 17 00:00:00 2001
From: aidint <at.aidin at gmail.com>
Date: Tue, 17 Feb 2026 22:56:38 +0100
Subject: [PATCH] convert LLVMImportDialectInterface using ODS
---
.../include/mlir/Target/LLVMIR/CMakeLists.txt | 4 +
.../LLVMIR/LLVMImportDialectInterface.td | 96 +++++++++++++++++++
.../mlir/Target/LLVMIR/LLVMImportInterface.h | 66 +------------
mlir/lib/Target/LLVMIR/CMakeLists.txt | 3 +
4 files changed, 106 insertions(+), 63 deletions(-)
create mode 100644 mlir/include/mlir/Target/LLVMIR/LLVMImportDialectInterface.td
diff --git a/mlir/include/mlir/Target/LLVMIR/CMakeLists.txt b/mlir/include/mlir/Target/LLVMIR/CMakeLists.txt
index 39b3674156dad..8cf9a9cd864da 100644
--- a/mlir/include/mlir/Target/LLVMIR/CMakeLists.txt
+++ b/mlir/include/mlir/Target/LLVMIR/CMakeLists.txt
@@ -3,3 +3,7 @@ add_subdirectory(Transforms)
set(LLVM_TARGET_DEFINITIONS LLVMTranslationDialectInterface.td)
mlir_tablegen(LLVMTranslationDialectInterface.h.inc -gen-dialect-interface-decls)
add_mlir_generic_tablegen_target(MLIRLLVMTranslationDialectInterfaceIncGen)
+
+set(LLVM_TARGET_DEFINITIONS LLVMImportDialectInterface.td)
+mlir_tablegen(LLVMImportDialectInterface.h.inc -gen-dialect-interface-decls)
+add_mlir_generic_tablegen_target(MLIRLLVMImportDialectInterfaceIncGen)
diff --git a/mlir/include/mlir/Target/LLVMIR/LLVMImportDialectInterface.td b/mlir/include/mlir/Target/LLVMIR/LLVMImportDialectInterface.td
new file mode 100644
index 0000000000000..93e6fcf327086
--- /dev/null
+++ b/mlir/include/mlir/Target/LLVMIR/LLVMImportDialectInterface.td
@@ -0,0 +1,96 @@
+#ifndef MLIR_INTERFACES_LLVMIMPORTDIALECTINTERFACE
+#define MLIR_INTERFACES_LLVMIMPORTDIALECTINTERFACE
+
+include "mlir/IR/Interfaces.td"
+
+def LLVMImportDialectInterface : DialectInterface<"LLVMImportDialectInterface"> {
+ let description = [{
+ Base class for dialect interfaces used to import LLVM IR. Dialects that can
+ be imported should provide an implementation of this interface for the
+ supported intrinsics. The interface may be implemented in a separate library
+ to avoid the "main" dialect library depending on LLVM IR. The interface can
+ be attached using the delayed registration mechanism available in
+ DialectRegistry.
+ }];
+ let cppNamespace = "::mlir";
+
+ let methods = [
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to implement the import of
+ intrinsics into MLIR.
+ }],
+ "::llvm::LogicalResult", "convertIntrinsic",
+ (ins "::mlir::OpBuilder &":$builder, "::llvm::CallInst *":$inst,
+ "::mlir::LLVM::ModuleImport &":$moduleImport),
+ [{
+ return ::llvm::failure();
+ }]
+ >,
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to implement the import of
+ instructions into MLIR.
+ }],
+ "::llvm::LogicalResult", "convertInstruction",
+ (ins "::mlir::OpBuilder &":$builder, "::llvm::Instruction *":$inst,
+ "::mlir::ArrayRef<llvm::Value *>":$llvmOperands,
+ "::mlir::LLVM::ModuleImport &":$moduleImport),
+ [{
+ return ::llvm::failure();
+ }]
+ >,
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to implement the import of metadata
+ into MLIR. Attaches the converted metadata kind and node to the provided
+ operation.
+ }],
+ "::mlir::LogicalResult", "setMetadataAttrs",
+ (ins "::mlir::OpBuilder &":$builder, "unsigned":$kind,
+ "::llvm::MDNode *":$node, "::mlir::Operation *":$op,
+ "::mlir::LLVM::ModuleImport &":$moduleImport),
+ [{
+ return ::llvm::failure();
+ }]
+ >,
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to publish the supported intrinsics.
+ As every LLVM IR intrinsic has a unique integer identifier, the function
+ returns the list of supported intrinsic identifiers.
+ }],
+ "::mlir::ArrayRef<unsigned>", "getSupportedIntrinsics", (ins),
+ [{
+ return {};
+ }]
+ >,
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to publish the supported instructions.
+ As every LLVM IR instruction has a unique integer identifier, the function
+ returns the list of supported instruction identifiers. These identifiers
+ will then be used to match LLVM instructions to the appropriate import
+ interface and `convertInstruction` method. It is an error to have multiple
+ interfaces overriding the same instruction.
+ }],
+ "::mlir::ArrayRef<unsigned>", "getSupportedInstructions", (ins),
+ [{
+ return {};
+ }]
+ >,
+ InterfaceMethod<[{
+ Hook for derived dialect interfaces to publish the supported metadata
+ kinds. As every metadata kind has a unique integer identifier, the
+ function returns the list of supported metadata identifiers. The
+ `llvmContext` parameter is used to obtain identifiers for metadata kinds
+ that do not have a fixed static identifier. Since different LLVM contexts
+ can assign different identifiers to these non-static metadata kinds, the
+ function must recompute the list of supported metadata identifiers on each
+ call.
+ }],
+ "::mlir::SmallVector<unsigned>", "getSupportedMetadata",
+ (ins "::llvm::LLVMContext &":$llvmContext),
+ [{
+ return {};
+ }]
+ >
+ ];
+}
+
+#endif
diff --git a/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h b/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
index 0e50fac7e85dd..1c1d56b720a22 100644
--- a/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
+++ b/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
@@ -31,71 +31,11 @@ namespace mlir {
namespace LLVM {
class ModuleImport;
} // namespace LLVM
+} // namespace mlir
-/// Base class for dialect interfaces used to import LLVM IR. Dialects that can
-/// be imported should provide an implementation of this interface for the
-/// supported intrinsics. The interface may be implemented in a separate library
-/// to avoid the "main" dialect library depending on LLVM IR. The interface can
-/// be attached using the delayed registration mechanism available in
-/// DialectRegistry.
-class LLVMImportDialectInterface
- : public DialectInterface::Base<LLVMImportDialectInterface> {
-public:
- LLVMImportDialectInterface(Dialect *dialect) : Base(dialect) {}
-
- /// Hook for derived dialect interfaces to implement the import of
- /// intrinsics into MLIR.
- virtual LogicalResult
- convertIntrinsic(OpBuilder &builder, llvm::CallInst *inst,
- LLVM::ModuleImport &moduleImport) const {
- return failure();
- }
-
- /// Hook for derived dialect interfaces to implement the import of
- /// instructions into MLIR.
- virtual LogicalResult
- convertInstruction(OpBuilder &builder, llvm::Instruction *inst,
- ArrayRef<llvm::Value *> llvmOperands,
- LLVM::ModuleImport &moduleImport) const {
- return failure();
- }
-
- /// Hook for derived dialect interfaces to implement the import of metadata
- /// into MLIR. Attaches the converted metadata kind and node to the provided
- /// operation.
- virtual LogicalResult
- setMetadataAttrs(OpBuilder &builder, unsigned kind, llvm::MDNode *node,
- Operation *op, LLVM::ModuleImport &moduleImport) const {
- return failure();
- }
-
- /// Hook for derived dialect interfaces to publish the supported intrinsics.
- /// As every LLVM IR intrinsic has a unique integer identifier, the function
- /// returns the list of supported intrinsic identifiers.
- virtual ArrayRef<unsigned> getSupportedIntrinsics() const { return {}; }
-
- /// Hook for derived dialect interfaces to publish the supported instructions.
- /// As every LLVM IR instruction has a unique integer identifier, the function
- /// returns the list of supported instruction identifiers. These identifiers
- /// will then be used to match LLVM instructions to the appropriate import
- /// interface and `convertInstruction` method. It is an error to have multiple
- /// interfaces overriding the same instruction.
- virtual ArrayRef<unsigned> getSupportedInstructions() const { return {}; }
-
- /// Hook for derived dialect interfaces to publish the supported metadata
- /// kinds. As every metadata kind has a unique integer identifier, the
- /// function returns the list of supported metadata identifiers. The
- /// `llvmContext` parameter is used to obtain identifiers for metadata kinds
- /// that do not have a fixed static identifier. Since different LLVM contexts
- /// can assign different identifiers to these non-static metadata kinds, the
- /// function must recompute the list of supported metadata identifiers on each
- /// call.
- virtual SmallVector<unsigned>
- getSupportedMetadata(llvm::LLVMContext &llvmContext) const {
- return {};
- }
-};
+#include "mlir/Target/LLVMIR/LLVMImportDialectInterface.h.inc"
+namespace mlir {
/// Interface collection for the import of LLVM IR that dispatches to a concrete
/// dialect interface implementation. Queries the dialect interfaces to obtain a
/// list of the supported LLVM IR constructs and then builds a mapping for the
diff --git a/mlir/lib/Target/LLVMIR/CMakeLists.txt b/mlir/lib/Target/LLVMIR/CMakeLists.txt
index a73a78d17c134..db221697edd05 100644
--- a/mlir/lib/Target/LLVMIR/CMakeLists.txt
+++ b/mlir/lib/Target/LLVMIR/CMakeLists.txt
@@ -76,6 +76,9 @@ add_mlir_translation_library(MLIRTargetLLVMIRImport
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVMIR
+ DEPENDS
+ MLIRLLVMImportDialectInterfaceIncGen
+
LINK_COMPONENTS
Core
IRReader
More information about the Mlir-commits
mailing list