Skip to content

Commit 8302c0f

Browse files
committed
FuseOp: use UnitAttr with default IR format
1 parent e7452d4 commit 8302c0f

File tree

4 files changed

+18
-20
lines changed

4 files changed

+18
-20
lines changed

mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,8 @@ def FuseOp : Op<Transform_Dialect, "structured.fuse",
415415
Variadic<TransformAnyParamTypeOrAnyHandle> : $tile_interchange,
416416
DefaultValuedOptionalAttr<DenseI64ArrayAttr, "{}">:$static_tile_sizes,
417417
DefaultValuedOptionalAttr<DenseI64ArrayAttr, "{}">:$static_tile_interchange,
418-
DefaultValuedAttr<BoolAttr, "false">:$apply_cleanup,
419-
DefaultValuedAttr<BoolAttr, "false">:$use_forall);
418+
UnitAttr:$apply_cleanup,
419+
UnitAttr:$use_forall);
420420
let results = (outs TransformHandleTypeInterface:$transformed,
421421
Variadic<TransformHandleTypeInterface>:$loops);
422422
let builders = [
@@ -448,9 +448,7 @@ def FuseOp : Op<Transform_Dialect, "structured.fuse",
448448
$target
449449
(`tile_sizes` custom<DynamicIndexList>($tile_sizes, $static_tile_sizes)^)?
450450
(`interchange` custom<DynamicIndexList>($tile_interchange, $static_tile_interchange)^)?
451-
(`apply_cleanup` `=` $apply_cleanup^)?
452-
(`use_forall` `=` $use_forall^)? attr-dict
453-
`:` functional-type(operands, results)
451+
attr-dict `:` functional-type(operands, results)
454452
}];
455453
let hasVerifier = 1;
456454

mlir/test/Dialect/Linalg/transform-op-fuse.mlir

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func.func @fuse_unary_forall(%arg0: tensor<?x?xf32>, %arg1: tensor<?x?xf32>) ->
103103
module attributes {transform.with_named_sequence} {
104104
transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
105105
%0 = transform.structured.match ops{["linalg.add"]} in %arg1 : (!transform.any_op) -> !transform.any_op
106-
%1, %loop = transform.structured.fuse %0 tile_sizes [32, 32] use_forall = true
106+
%1, %loop = transform.structured.fuse %0 tile_sizes [32, 32] {use_forall}
107107
: (!transform.any_op) -> (!transform.any_op, !transform.any_op)
108108
transform.yield
109109
}
@@ -258,7 +258,7 @@ func.func @fuse_through_slice(%arg0: tensor<?x?xf32>, %arg1: tensor<?x?xf32>) ->
258258
module attributes {transform.with_named_sequence} {
259259
transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
260260
%0 = transform.structured.match ops{["linalg.add"]} in %arg1 : (!transform.any_op) -> !transform.any_op
261-
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] apply_cleanup = true
261+
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] {apply_cleanup}
262262
: (!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op)
263263
transform.yield
264264
}
@@ -292,7 +292,7 @@ func.func @fuse_through_slice_and_cast_chain(%arg0: tensor<100x100xf32>, %arg1:
292292
module attributes {transform.with_named_sequence} {
293293
transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
294294
%0 = transform.structured.match ops{["linalg.add"]} in %arg1 : (!transform.any_op) -> !transform.any_op
295-
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] apply_cleanup = true
295+
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] {apply_cleanup}
296296
: (!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op)
297297
transform.yield
298298
}
@@ -327,7 +327,7 @@ func.func @fuse_unrelated_slices(%arg0: tensor<?x?xf32>, %arg1: tensor<?x?xf32>)
327327
module attributes {transform.with_named_sequence} {
328328
transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
329329
%0 = transform.structured.match ops{["linalg.add"]} in %arg1 : (!transform.any_op) -> !transform.any_op
330-
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] apply_cleanup = true
330+
%1, %loops:2 = transform.structured.fuse %0 tile_sizes [32, 32] interchange [0, 1] {apply_cleanup}
331331
: (!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op)
332332
transform.yield
333333
}
@@ -353,7 +353,7 @@ func.func @bubble_up_extract_slice_through_expand_shape(%0: tensor<60xf32>) -> t
353353
module attributes {transform.with_named_sequence} {
354354
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
355355
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
356-
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 1, 5] interchange [0, 1, 2] apply_cleanup = true :
356+
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 1, 5] interchange [0, 1, 2] {apply_cleanup} :
357357
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op, !transform.any_op)
358358
transform.yield
359359
}
@@ -378,7 +378,7 @@ func.func @bubble_up_extract_slice_through_expand_shape_full_inner_dim(%0: tenso
378378
module attributes {transform.with_named_sequence} {
379379
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
380380
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
381-
%transformed, %loops:2 = transform.structured.fuse %0 tile_sizes [1, 2, 0] interchange [0, 1, 2] apply_cleanup = true :
381+
%transformed, %loops:2 = transform.structured.fuse %0 tile_sizes [1, 2, 0] interchange [0, 1, 2] {apply_cleanup} :
382382
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op)
383383
transform.yield
384384
}
@@ -402,7 +402,7 @@ func.func @no_bubble_up_extract_slice_through_expand_shape_non_contiguous(%0: te
402402
module attributes {transform.with_named_sequence} {
403403
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
404404
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
405-
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 2, 5] interchange [0, 1, 2] apply_cleanup = true :
405+
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 2, 5] interchange [0, 1, 2] {apply_cleanup} :
406406
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op, !transform.any_op)
407407
transform.yield
408408
}
@@ -433,7 +433,7 @@ module {
433433
module attributes {transform.with_named_sequence} {
434434
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
435435
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
436-
%transformed, %loops:4 = transform.structured.fuse %0 tile_sizes [1, 2, 0, 1, 4] interchange [0, 1, 2, 3, 4] apply_cleanup = true :
436+
%transformed, %loops:4 = transform.structured.fuse %0 tile_sizes [1, 2, 0, 1, 4] interchange [0, 1, 2, 3, 4] {apply_cleanup} :
437437
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op, !transform.any_op, !transform.any_op)
438438
transform.yield
439439
}
@@ -462,7 +462,7 @@ module {
462462
module attributes {transform.with_named_sequence} {
463463
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
464464
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
465-
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [0, 0, 1, 0] interchange [0, 1, 2, 3] apply_cleanup = true :
465+
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [0, 0, 1, 0] interchange [0, 1, 2, 3] {apply_cleanup} :
466466
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">)
467467
transform.yield
468468
}
@@ -487,7 +487,7 @@ func.func @no_bubble_up_extract_slice_through_expand_shape_on_cleanup_false(%0:
487487
module attributes {transform.with_named_sequence} {
488488
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
489489
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
490-
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 1, 5] interchange [0, 1, 2] apply_cleanup = false :
490+
%transformed, %loops:3 = transform.structured.fuse %0 tile_sizes [1, 1, 5] interchange [0, 1, 2] :
491491
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">, !transform.any_op, !transform.any_op)
492492
transform.yield
493493
}
@@ -510,7 +510,7 @@ func.func @bubble_up_extract_slice_through_collapse_shape(%0: tensor<1x8x1800x32
510510
module attributes {transform.with_named_sequence} {
511511
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
512512
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
513-
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [1, 0, 0] interchange [0, 1, 2] apply_cleanup = true :
513+
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [1, 0, 0] interchange [0, 1, 2] {apply_cleanup} :
514514
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">)
515515
transform.yield
516516
}
@@ -536,7 +536,7 @@ func.func @bubble_up_extract_slice_through_collapse_shape_with_collapse_producer
536536
module attributes {transform.with_named_sequence} {
537537
transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
538538
%0 = transform.structured.match ops{["linalg.exp"]} in %arg0 : (!transform.any_op) -> !transform.any_op
539-
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [1, 0, 0] interchange [0, 1, 2] apply_cleanup = true :
539+
%transformed, %loops:1 = transform.structured.fuse %0 tile_sizes [1, 0, 0] interchange [0, 1, 2] {apply_cleanup} :
540540
(!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">)
541541
transform.yield
542542
}

mlir/test/Interfaces/TilingInterface/tile-and-fuse-using-interface.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ module attributes {transform.with_named_sequence} {
652652
transform.named_sequence @__transform_main(%arg1 : !transform.any_op {transform.readonly}) {
653653
%generic = transform.structured.match ops{["linalg.generic"]} in %arg1
654654
: (!transform.any_op) -> !transform.any_op
655-
%a, %loops:4 = transform.structured.fuse %generic tile_sizes [1, 16, 16, 16] interchange [0, 1, 2, 3] apply_cleanup = false
655+
%a, %loops:4 = transform.structured.fuse %generic tile_sizes [1, 16, 16, 16] interchange [0, 1, 2, 3]
656656
: (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op, !transform.any_op, !transform.any_op)
657657
transform.yield
658658
}

mlir/test/python/dialects/transform_structured_ext.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def testFuseOpCompact(target):
110110
# CHECK-LABEL: TEST: testFuseOpCompact
111111
# CHECK: transform.sequence
112112
# CHECK: %{{.+}}, %{{.+}}:2 = transform.structured.fuse %{{.*}} tile_sizes [4, 8]
113-
# CHECK-SAME: interchange [0, 1] apply_cleanup = true
113+
# CHECK-SAME: interchange [0, 1] {apply_cleanup}
114114
# CHECK-SAME: (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
115115

116116

@@ -126,7 +126,7 @@ def testFuseOpCompactForall(target):
126126
# CHECK-LABEL: TEST: testFuseOpCompact
127127
# CHECK: transform.sequence
128128
# CHECK: %{{.+}}, %{{.+}} = transform.structured.fuse %{{.*}} tile_sizes [4, 8]
129-
# CHECK-SAME: apply_cleanup = true use_forall = true
129+
# CHECK-SAME: {apply_cleanup, use_forall}
130130
# CHECK-SAME: (!transform.any_op) -> (!transform.any_op, !transform.any_op)
131131

132132

0 commit comments

Comments
 (0)