From 8056f88533806eaab4036e17c62771b3396ec54e Mon Sep 17 00:00:00 2001 From: Rolf Morel Date: Sat, 15 Nov 2025 10:15:27 -0800 Subject: [PATCH 1/2] [MLIR][Transform][Python] Expose applying named_sequences as a method Makes it so that a NamedSequenceOp can be directly applied to a Module, via a method `apply(...)`. --- .../mlir/dialects/transform/__init__.py | 20 +++++++++++++++++++ .../python/dialects/transform_interpreter.py | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/mlir/python/mlir/dialects/transform/__init__.py b/mlir/python/mlir/dialects/transform/__init__.py index de414dc52c0a0..b3dd79c7dbd79 100644 --- a/mlir/python/mlir/dialects/transform/__init__.py +++ b/mlir/python/mlir/dialects/transform/__init__.py @@ -7,6 +7,7 @@ from .._transform_ops_gen import _Dialect from ..._mlir_libs._mlirDialectsTransform import * from ..._mlir_libs._mlirDialectsTransform import AnyOpType, OperationType +from . import interpreter try: from ...ir import * @@ -324,6 +325,25 @@ def bodyTarget(self) -> Value: def bodyExtraArgs(self) -> BlockArgumentList: return self.body.arguments[1:] + def apply( + self, + payload: Module, + transform_options: Optional[interpreter.TransformOptions] = None, + ) -> Module: + assert self.parent + assert "transform.with_named_sequence" in self.parent.attributes + assert isinstance( + self.parent.attributes["transform.with_named_sequence"], UnitAttr + ) + + interpreter.apply_named_sequence( + payload_root=payload, + transform_root=self, + transform_module=self.parent, + transform_options=transform_options, + ) + return payload # NB: was modified in-place (if any transformation happened) + def named_sequence( sym_name: Union[str, SymbolRefAttr], diff --git a/mlir/test/python/dialects/transform_interpreter.py b/mlir/test/python/dialects/transform_interpreter.py index 819a3be1db9d5..d68000d93a213 100644 --- a/mlir/test/python/dialects/transform_interpreter.py +++ b/mlir/test/python/dialects/transform_interpreter.py @@ -30,6 +30,16 @@ def print_self(): # CHECK: transform.print # CHECK: transform.yield +@test_in_context +def print_self_via_apply_method(): + m = ir.Module.parse(print_root_module.replace("from interpreter", "print_self_via_apply_method")) + m.body.operations[0].apply(m) + +# CHECK-LABEL: print_self_via_apply_method +# CHECK: transform.named_sequence @__transform_main +# CHECK: transform.print +# CHECK: transform.yield + @test_in_context def print_other(): From 0deecd02435cdefe4952d1991abcf435737b23e4 Mon Sep 17 00:00:00 2001 From: Rolf Morel Date: Sat, 15 Nov 2025 10:22:07 -0800 Subject: [PATCH 2/2] Formatting --- mlir/test/python/dialects/transform_interpreter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mlir/test/python/dialects/transform_interpreter.py b/mlir/test/python/dialects/transform_interpreter.py index d68000d93a213..ca9ce5dbd23c1 100644 --- a/mlir/test/python/dialects/transform_interpreter.py +++ b/mlir/test/python/dialects/transform_interpreter.py @@ -30,11 +30,15 @@ def print_self(): # CHECK: transform.print # CHECK: transform.yield + @test_in_context def print_self_via_apply_method(): - m = ir.Module.parse(print_root_module.replace("from interpreter", "print_self_via_apply_method")) + m = ir.Module.parse( + print_root_module.replace("from interpreter", "print_self_via_apply_method") + ) m.body.operations[0].apply(m) + # CHECK-LABEL: print_self_via_apply_method # CHECK: transform.named_sequence @__transform_main # CHECK: transform.print