[Mlir-commits] [mlir] [MLIR][Transform] friendlier Python-bindings apply_registered_pass op (PR #143159)

Maksim Levental llvmlistbot at llvm.org
Fri Jun 6 12:10:15 PDT 2025


================
@@ -254,3 +254,42 @@ def testReplicateOp(module: Module):
     # CHECK: %[[FIRST:.+]] = pdl_match
     # CHECK: %[[SECOND:.+]] = pdl_match
     # CHECK: %{{.*}} = replicate num(%[[FIRST]]) %[[SECOND]]
+
+
+ at run
+def testApplyRegisteredPassOp(module: Module):
+    sequence = transform.SequenceOp(
+        transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get()
+    )
+    with InsertionPoint(sequence.body):
+        mod = transform.ApplyRegisteredPassOp(
+            transform.AnyOpType.get(), "canonicalize", sequence.bodyTarget
+        )
+        mod = transform.ApplyRegisteredPassOp(
+            transform.AnyOpType.get(),
+            "canonicalize",
+            mod.result,
+            options=("top-down=false",),
+        )
+        max_iter = transform.param_constant(
+            transform.AnyParamType.get(), StringAttr.get("max-iterations=10")
+        )
+        max_rewrites = transform.param_constant(
+            transform.AnyParamType.get(), StringAttr.get("max-num-rewrites=1")
+        )
+        transform.apply_registered_pass(
+            transform.AnyOpType.get(),
+            "canonicalize",
+            mod,
+            options=("top-down=false", max_iter, "test-convergence=true", max_rewrites),
----------------
makslevental wrote:

i have this "[widget](https://github.com/makslevental/mlir-python-extras/blob/main/mlir/extras/runtime/passes.py#L125-L134)":

```python
def add_pass(self, pass_name, **kwargs):
    kwargs = {
        k.replace("_", "-"): int(v) if isinstance(v, bool) else v
        for k, v in kwargs.items()
        if v is not None
    }
    if kwargs:
        args_str = " ".join(f"{k}={v}" for k, v in kwargs.items())
```

string interpolation of python values does the right thing for the kinds of args seen in passes (ints, strings, lists, etc) except for bools `True/False`, which is handled by `int(True)/int(False) -> 0/1`.


https://github.com/llvm/llvm-project/pull/143159


More information about the Mlir-commits mailing list