Skip to content

Commit 170a9e6

Browse files
Automerge: [mlir][scf] Modify the return logic of generateLoopNestUsingForOp (NFC) (#159394)
When loops is empty, avoid executing yieldTiledValuesFn and Add a test which all tile sizes are set to zero.
2 parents c9e2be4 + a25eda2 commit 170a9e6

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,8 @@ static LogicalResult generateLoopNestUsingForOp(
455455
rewriter.setInsertionPointToEnd(loop.getBody());
456456
destinationTensors = loop.getRegionIterArgs();
457457
}
458+
if (loops.empty())
459+
return success();
458460

459461
SmallVector<Value> tiledResults;
460462
SmallVector<SmallVector<OpFoldResult>> resultOffsets, resultSizes;
@@ -463,9 +465,6 @@ static LogicalResult generateLoopNestUsingForOp(
463465
return rewriter.notifyMatchFailure(
464466
loc, "failed to generate inner tile loop body");
465467
}
466-
if (loops.empty())
467-
return success();
468-
469468
assert(tiledResults.size() == destinationTensors.size() &&
470469
"Number of results of body should be equal to number of iter args");
471470

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,23 @@ func.func @tile_linalg_matmul(
266266
-> tensor<128x128xf32>
267267
return %0 : tensor<128x128xf32>
268268
}
269+
270+
// -----
271+
272+
module attributes {transform.with_named_sequence} {
273+
transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
274+
%0 = transform.structured.match ops{["linalg.matmul"]} in %arg1 : (!transform.any_op) -> !transform.any_op
275+
// expected-error @below {{op expected number of loops to tile (0) to match number of `loops` results (1)}}
276+
%1, %loops = transform.structured.tile_using_for %0 tile_sizes [0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op)
277+
transform.yield
278+
}
279+
}
280+
281+
func.func @tile_linalg_matmul(
282+
%arg0: tensor<128x128xf32>, %arg1: tensor<128x128xf32>, %arg2: tensor<128x128xf32>)
283+
-> tensor<128x128xf32> {
284+
%0 = linalg.matmul ins(%arg0, %arg1: tensor<128x128xf32>, tensor<128x128xf32>)
285+
outs(%arg2: tensor<128x128xf32>)
286+
-> tensor<128x128xf32>
287+
return %0 : tensor<128x128xf32>
288+
}

0 commit comments

Comments
 (0)