[Mlir-commits] [mlir] [MLIR][Python] Add a DSL for defining IRDL dialects in Python bindings (PR #169045)
Rolf Morel
llvmlistbot at llvm.org
Fri Dec 12 08:46:05 PST 2025
================
@@ -0,0 +1,300 @@
+# RUN: %PYTHON %s 2>&1 | FileCheck %s
+
+from mlir.ir import *
+from mlir.dialects.irdl import dsl as irdsl
+from mlir.dialects import arith
+import sys
+
+
+def run(f):
+ print("\nTEST:", f.__name__, file=sys.stderr)
+ with Context():
+ f()
+
+
+# CHECK: TEST: testMyInt
+ at run
+def testMyInt():
+ myint = irdsl.Dialect("myint")
+ iattr = irdsl.BaseName("#builtin.integer")
+ i32 = irdsl.Is(IntegerType.get_signless(32))
+
+ class ConstantOp(myint.Operation, name="constant"):
----------------
rolfmorel wrote:
Just thinking out loud:
In a `my_dialects/my_int.py` file:
```python
from mlir import ir
from mlir.dialects.irdl import dsl as irdsl
class MyIntDialect(irdsl.Dialect, name="my_int"):
def register(ctx): # or load(...) or ...
with ir.Location.file("my_dialects/my_int.py"):
super().register(ctx) # this method on `irdsl.Dialect` could also automagically set the relevant location based on the subclass's __file__
class ConstantOp(MyIntDialect.Operation, name="constant"):
value = irdsl.Attribute(iattr)
cst = irdsl.Result(i32)
my_int = MyIntDialect()
```
in `some_ir_builder.py`:
```python
from mlir import ir
from my_dialects.my_int import my_int, ConstantOp
def builder():
...
with ir.InsertionPoint(...):
one = ir.IntegerAttr.get(ir.i32Type.get(), 1)
my_one = my_int.constant(value=one)
assert(isinstance(my_one, ir.Value))
assert(isinstance(my_one.owner, ConstantOp))
my_one_too = ConstantOp(one) # NB: question is if this will work as ConstantOp won't (directly) know about the my_int instance of MyIntDialect
assert(isinstance(my_one_too.cst, ir.Value))
assert(isinstance(my_one_too, ConstantOp))
```
in `main.py`:
```python
from mlir import ir
from my_dialects.my_int import my_int
from some_ir_builder import builder
if __name__ == "__main__":
with ir.Context() as ctx, ir.Location.unknown():
my_int.register(ctx) # or my_int.register() or my_int.load(ctx) or ctx.register(my_int) or ...
builder()
```
https://github.com/llvm/llvm-project/pull/169045
More information about the Mlir-commits
mailing list