[Mlir-commits] [mlir] [MLIR][Standalone] use narrow registration instead of RegisterEverything (PR #160469)
Maksim Levental
llvmlistbot at llvm.org
Wed Sep 24 01:54:14 PDT 2025
https://github.com/makslevental updated https://github.com/llvm/llvm-project/pull/160469
>From a8da09a369daa8a42ad3f667889e1c44bc7f25b3 Mon Sep 17 00:00:00 2001
From: makslevental <maksim.levental at gmail.com>
Date: Wed, 24 Sep 2025 01:37:41 -0700
Subject: [PATCH] [MLIR][Standalone] use narrow registration instead of
RegisterEverything
---
.../examples/standalone/python/CMakeLists.txt | 12 +++----
.../python/StandaloneExtensionNanobind.cpp | 17 +++++++---
.../python/StandaloneExtensionPybind11.cpp | 17 +++++++---
.../standalone/test/CAPI/CMakeLists.txt | 3 --
.../test/CAPI/standalone-capi-test.c | 15 +++------
.../standalone/test/python/smoketest.py | 3 +-
mlir/include/mlir-c/Dialect/Builtin.h | 33 +++++++++++++++++++
mlir/lib/CAPI/Dialect/Builtin.cpp | 14 ++++++++
mlir/lib/CAPI/Dialect/CMakeLists.txt | 8 +++++
9 files changed, 90 insertions(+), 32 deletions(-)
create mode 100644 mlir/include/mlir-c/Dialect/Builtin.h
create mode 100644 mlir/lib/CAPI/Dialect/Builtin.cpp
diff --git a/mlir/examples/standalone/python/CMakeLists.txt b/mlir/examples/standalone/python/CMakeLists.txt
index 5404128e5fa27..65510e5d6deb7 100644
--- a/mlir/examples/standalone/python/CMakeLists.txt
+++ b/mlir/examples/standalone/python/CMakeLists.txt
@@ -30,7 +30,8 @@ declare_mlir_python_extension(StandalonePythonSources.Pybind11Extension
PRIVATE_LINK_LIBS
LLVMSupport
EMBED_CAPI_LINK_LIBS
- StandaloneCAPI
+ MLIRCAPIIR
+ MLIRCAPITransforms
PYTHON_BINDINGS_LIBRARY pybind11
)
@@ -42,7 +43,8 @@ declare_mlir_python_extension(StandalonePythonSources.NanobindExtension
PRIVATE_LINK_LIBS
LLVMSupport
EMBED_CAPI_LINK_LIBS
- StandaloneCAPI
+ MLIRCAPIIR
+ MLIRCAPITransforms
PYTHON_BINDINGS_LIBRARY nanobind
)
@@ -58,9 +60,6 @@ add_mlir_python_common_capi_library(StandalonePythonCAPI
RELATIVE_INSTALL_ROOT "../../../.."
DECLARED_SOURCES
StandalonePythonSources
- # TODO: Remove this in favor of showing fine grained registration once
- # available.
- MLIRPythonExtension.RegisterEverything
MLIRPythonSources.Core
MLIRPythonSources.Dialects.builtin
)
@@ -130,9 +129,6 @@ declare_mlir_python_sources(
)
set(_declared_sources
StandalonePythonSources
- # TODO: Remove this in favor of showing fine grained registration once
- # available.
- MLIRPythonExtension.RegisterEverything
MLIRPythonSources.Core
MLIRPythonSources.Dialects.builtin
)
diff --git a/mlir/examples/standalone/python/StandaloneExtensionNanobind.cpp b/mlir/examples/standalone/python/StandaloneExtensionNanobind.cpp
index e06ec3b6472b8..704ffde20ede6 100644
--- a/mlir/examples/standalone/python/StandaloneExtensionNanobind.cpp
+++ b/mlir/examples/standalone/python/StandaloneExtensionNanobind.cpp
@@ -10,6 +10,8 @@
//===----------------------------------------------------------------------===//
#include "Standalone-c/Dialects.h"
+#include "mlir-c/Dialect/Arith.h"
+#include "mlir-c/Dialect/Builtin.h"
#include "mlir/Bindings/Python/Nanobind.h"
#include "mlir/Bindings/Python/NanobindAdaptors.h"
@@ -22,12 +24,19 @@ NB_MODULE(_standaloneDialectsNanobind, m) {
auto standaloneM = m.def_submodule("standalone");
standaloneM.def(
- "register_dialect",
+ "register_dialects",
[](MlirContext context, bool load) {
- MlirDialectHandle handle = mlirGetDialectHandle__standalone__();
- mlirDialectHandleRegisterDialect(handle, context);
+ MlirDialectHandle arithHandle = mlirGetDialectHandle__arith__();
+ MlirDialectHandle builtinHandle = mlirGetDialectHandle__builtin__();
+ MlirDialectHandle standaloneHandle =
+ mlirGetDialectHandle__standalone__();
+ mlirDialectHandleRegisterDialect(arithHandle, context);
+ mlirDialectHandleRegisterDialect(builtinHandle, context);
+ mlirDialectHandleRegisterDialect(standaloneHandle, context);
if (load) {
- mlirDialectHandleLoadDialect(handle, context);
+ mlirDialectHandleLoadDialect(arithHandle, context);
+ mlirDialectHandleRegisterDialect(builtinHandle, context);
+ mlirDialectHandleRegisterDialect(standaloneHandle, context);
}
},
nb::arg("context").none() = nb::none(), nb::arg("load") = true,
diff --git a/mlir/examples/standalone/python/StandaloneExtensionPybind11.cpp b/mlir/examples/standalone/python/StandaloneExtensionPybind11.cpp
index 397db4c20e743..530ce316049b6 100644
--- a/mlir/examples/standalone/python/StandaloneExtensionPybind11.cpp
+++ b/mlir/examples/standalone/python/StandaloneExtensionPybind11.cpp
@@ -10,6 +10,8 @@
//===----------------------------------------------------------------------===//
#include "Standalone-c/Dialects.h"
+#include "mlir-c/Dialect/Arith.h"
+#include "mlir-c/Dialect/Builtin.h"
#include "mlir/Bindings/Python/PybindAdaptors.h"
using namespace mlir::python::adaptors;
@@ -21,12 +23,19 @@ PYBIND11_MODULE(_standaloneDialectsPybind11, m) {
auto standaloneM = m.def_submodule("standalone");
standaloneM.def(
- "register_dialect",
+ "register_dialects",
[](MlirContext context, bool load) {
- MlirDialectHandle handle = mlirGetDialectHandle__standalone__();
- mlirDialectHandleRegisterDialect(handle, context);
+ MlirDialectHandle arithHandle = mlirGetDialectHandle__arith__();
+ MlirDialectHandle builtinHandle = mlirGetDialectHandle__builtin__();
+ MlirDialectHandle standaloneHandle =
+ mlirGetDialectHandle__standalone__();
+ mlirDialectHandleRegisterDialect(arithHandle, context);
+ mlirDialectHandleRegisterDialect(builtinHandle, context);
+ mlirDialectHandleRegisterDialect(standaloneHandle, context);
if (load) {
- mlirDialectHandleLoadDialect(handle, context);
+ mlirDialectHandleLoadDialect(arithHandle, context);
+ mlirDialectHandleRegisterDialect(builtinHandle, context);
+ mlirDialectHandleRegisterDialect(standaloneHandle, context);
}
},
py::arg("context") = py::none(), py::arg("load") = true);
diff --git a/mlir/examples/standalone/test/CAPI/CMakeLists.txt b/mlir/examples/standalone/test/CAPI/CMakeLists.txt
index eaa6cfc102c73..ff27db499371d 100644
--- a/mlir/examples/standalone/test/CAPI/CMakeLists.txt
+++ b/mlir/examples/standalone/test/CAPI/CMakeLists.txt
@@ -6,9 +6,6 @@ add_mlir_aggregate(StandaloneCAPITestLib
SHARED
EMBED_LIBS
MLIRCAPIIR
- # TODO: Remove this in favor of showing fine grained dialect registration
- # (once available).
- MLIRCAPIRegisterEverything
StandaloneCAPI
)
diff --git a/mlir/examples/standalone/test/CAPI/standalone-capi-test.c b/mlir/examples/standalone/test/CAPI/standalone-capi-test.c
index 54f3ca7f7ff14..20e86d39cdc82 100644
--- a/mlir/examples/standalone/test/CAPI/standalone-capi-test.c
+++ b/mlir/examples/standalone/test/CAPI/standalone-capi-test.c
@@ -12,21 +12,14 @@
#include <stdio.h>
#include "Standalone-c/Dialects.h"
+#include "mlir-c/Dialect/Arith.h"
+#include "mlir-c/Dialect/Builtin.h"
#include "mlir-c/IR.h"
-#include "mlir-c/RegisterEverything.h"
-
-static void registerAllUpstreamDialects(MlirContext ctx) {
- MlirDialectRegistry registry = mlirDialectRegistryCreate();
- mlirRegisterAllDialects(registry);
- mlirContextAppendDialectRegistry(ctx, registry);
- mlirDialectRegistryDestroy(registry);
-}
int main(int argc, char **argv) {
MlirContext ctx = mlirContextCreate();
- // TODO: Create the dialect handles for the builtin dialects and avoid this.
- // This adds dozens of MB of binary size over just the standalone dialect.
- registerAllUpstreamDialects(ctx);
+ mlirDialectHandleRegisterDialect(mlirGetDialectHandle__arith__(), ctx);
+ mlirDialectHandleRegisterDialect(mlirGetDialectHandle__builtin__(), ctx);
mlirDialectHandleRegisterDialect(mlirGetDialectHandle__standalone__(), ctx);
MlirModule module = mlirModuleCreateParse(
diff --git a/mlir/examples/standalone/test/python/smoketest.py b/mlir/examples/standalone/test/python/smoketest.py
index bd40c65d16164..26d84fd63e947 100644
--- a/mlir/examples/standalone/test/python/smoketest.py
+++ b/mlir/examples/standalone/test/python/smoketest.py
@@ -3,7 +3,6 @@
import sys
from mlir_standalone.ir import *
-from mlir_standalone.dialects import builtin as builtin_d
if sys.argv[1] == "pybind11":
from mlir_standalone.dialects import standalone_pybind11 as standalone_d
@@ -14,7 +13,7 @@
with Context():
- standalone_d.register_dialect()
+ standalone_d.register_dialects()
module = Module.parse(
"""
%0 = arith.constant 2 : i32
diff --git a/mlir/include/mlir-c/Dialect/Builtin.h b/mlir/include/mlir-c/Dialect/Builtin.h
new file mode 100644
index 0000000000000..c5d958249b36f
--- /dev/null
+++ b/mlir/include/mlir-c/Dialect/Builtin.h
@@ -0,0 +1,33 @@
+//===-- mlir-c/Dialect/Builtin.h - C API for Builtin dialect ------*- C -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM
+// Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header declares the C interface for registering and accessing the
+// Builtin dialect. A dialect should be registered with a context to make it
+// available to users of the context. These users must load the dialect
+// before using any of its attributes, operations or types. Parser and pass
+// manager can load registered dialects automatically.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MLIR_C_DIALECT_BUILTIN_H
+#define MLIR_C_DIALECT_BUILTIN_H
+
+#include "mlir-c/IR.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(Builtin, builtin);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MLIR_C_DIALECT_BUILTIN_H
diff --git a/mlir/lib/CAPI/Dialect/Builtin.cpp b/mlir/lib/CAPI/Dialect/Builtin.cpp
new file mode 100644
index 0000000000000..dd44c8db84a14
--- /dev/null
+++ b/mlir/lib/CAPI/Dialect/Builtin.cpp
@@ -0,0 +1,14 @@
+//===- Builtin.cpp - C Interface for Builtin dialect
+//--------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir-c/Dialect/Builtin.h"
+#include "mlir/CAPI/Registration.h"
+#include "mlir/IR/BuiltinDialect.h"
+
+MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Builtin, builtin, mlir::BuiltinDialect)
diff --git a/mlir/lib/CAPI/Dialect/CMakeLists.txt b/mlir/lib/CAPI/Dialect/CMakeLists.txt
index bb1fdf8be3c8f..0b8a542b8826d 100644
--- a/mlir/lib/CAPI/Dialect/CMakeLists.txt
+++ b/mlir/lib/CAPI/Dialect/CMakeLists.txt
@@ -31,6 +31,14 @@ add_mlir_upstream_c_api_library(MLIRCAPIAsync
MLIRPass
)
+add_mlir_upstream_c_api_library(MLIRCAPIBuiltin
+ Builtin.cpp
+
+ PARTIAL_SOURCES_INTENDED
+ LINK_LIBS PUBLIC
+ MLIRCAPIIR
+)
+
add_mlir_upstream_c_api_library(MLIRCAPIControlFlow
ControlFlow.cpp
More information about the Mlir-commits
mailing list