[Mlir-commits] [mlir] f6242fc - [mlir][python] Fix tile interchange ArrayAttr dispatch (#215996)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Aug 13 22:32:18 PDT 2026


Author: Shenghang Tsai
Date: 2026-08-13T22:32:13-07:00
New Revision: f6242fc4b4446c49b603629c3d44e8218ea0b37e

URL: https://github.com/llvm/llvm-project/commit/f6242fc4b4446c49b603629c3d44e8218ea0b37e
DIFF: https://github.com/llvm/llvm-project/commit/f6242fc4b4446c49b603629c3d44e8218ea0b37e.diff

LOG: [mlir][python] Fix tile interchange ArrayAttr dispatch (#215996)

Dispatch `ArrayAttr` interchange values through `DynamicIndexList`.

Added: 
    

Modified: 
    mlir/python/mlir/dialects/transform/structured.py
    mlir/test/python/dialects/transform_structured_ext.py

Removed: 
    


################################################################################
diff  --git a/mlir/python/mlir/dialects/transform/structured.py b/mlir/python/mlir/dialects/transform/structured.py
index 67eca6886c5dc..4c7d76e70c5d9 100644
--- a/mlir/python/mlir/dialects/transform/structured.py
+++ b/mlir/python/mlir/dialects/transform/structured.py
@@ -610,11 +610,28 @@ def __init__(
             if packed_tile_sizes is not None
             else sum(v if v == 0 else 1 for v in static_sizes)
         )
-        (
-            dynamic_interchange,
-            packed_interchange,
-            static_interchange,
-        ) = _dispatch_mixed_values(interchange)
+        dynamic_interchange = []
+        packed_interchange = None
+        static_interchange = []
+        if isinstance(interchange, (Operation, Value, OpView)):
+            (
+                dynamic_interchange,
+                packed_interchange,
+                static_interchange,
+            ) = _dispatch_mixed_values(interchange)
+        elif (
+            isinstance(interchange, Sequence)
+            and not isinstance(interchange, (str, bytes))
+        ) or isinstance(interchange, (ArrayAttr, DenseI64ArrayAttr)):
+            (
+                dynamic_interchange,
+                static_interchange,
+                _,
+            ) = _dispatch_dynamic_index_list(interchange)
+        elif interchange is not None:
+            raise ValueError(
+                f"expected {interchange=} to be an MLIR object or sequence of mixed values"
+            )
 
         if isinstance(loop_types_or_target, (Operation, Value, OpView)):
             loop_types = [transform.AnyOpType.get()] * num_loops

diff  --git a/mlir/test/python/dialects/transform_structured_ext.py b/mlir/test/python/dialects/transform_structured_ext.py
index dfe798932a238..584ec79179cd7 100644
--- a/mlir/test/python/dialects/transform_structured_ext.py
+++ b/mlir/test/python/dialects/transform_structured_ext.py
@@ -523,6 +523,27 @@ def testTileInterchangeMixed(target):
     # CHECK-SAME: [4, 8] interchange = [%[[I0]], 1]
 
 
+ at run
+ at create_sequence
+def testTileInterchangeArrayAttr(target):
+    interchange = ArrayAttr.get(
+        [IntegerAttr.get(IndexType.get(), 0), IntegerAttr.get(IndexType.get(), 1)]
+    )
+    structured.TileUsingForOp(target, sizes=[4, 8], interchange=interchange)
+    # CHECK-LABEL: TEST: testTileInterchangeArrayAttr
+    # CHECK: %{{.+}}, %{{.+}}:2 = transform.structured.tile_using_for
+    # CHECK-SAME: [4, 8] interchange = [0, 1]
+
+
+ at run
+ at create_sequence
+def testTileInterchangeTuple(target):
+    structured.TileUsingForOp(target, sizes=[4, 8], interchange=(0, 1))
+    # CHECK-LABEL: TEST: testTileInterchangeTuple
+    # CHECK: %{{.+}}, %{{.+}}:2 = transform.structured.tile_using_for
+    # CHECK-SAME: [4, 8] interchange = [0, 1]
+
+
 @run
 @create_sequence
 def testTileZero(target):


        


More information about the Mlir-commits mailing list