[Mlir-commits] [mlir] [MLIR][SCF] Add loops as parameter to LoopTerminator callback when using CustomOp. (PR #161386)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Sep 30 07:42:41 PDT 2025
https://github.com/sebvince created https://github.com/llvm/llvm-project/pull/161386
This PR adds to the generateLoopTerminatorFn callback the loops generated by GenerateLoopHeaderFn. This is needed to correctly set the insertion point with scf.forall ops.
>From a959d50c5911f27f6c17d789ab962945cf9bedfa Mon Sep 17 00:00:00 2001
From: Seb Vince <sebvince at amd.com>
Date: Tue, 30 Sep 2025 14:16:25 +0000
Subject: [PATCH] [MLIR][SCF] Add loops as parameter to LoopTerminator callback
---
mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h | 4 +++-
mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp | 4 ++--
.../TilingInterface/TestTilingInterfaceTransformOps.cpp | 3 ++-
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h b/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
index 668ee6386f71f..7c735d825b445 100644
--- a/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
+++ b/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
@@ -183,6 +183,7 @@ struct SCFTilingOptions {
ArrayRef<OpFoldResult> givenTileSizes, ValueRange destinationTensors)>;
// Type of the callback function that generates the loop terminator.
+ // - `loops` : generated loops from the GenerateLoopHeaderFn callback
// - `tiledResults` : Tiles of the result computed for the iteration space
// tile.
// - `resultOffsets` : For each of the `tiledResults`, the offset at which
@@ -193,7 +194,8 @@ struct SCFTilingOptions {
// tensor.
// Returns the `CustomLoopHeaderInfo` object (described above)
using GenerateLoopTerminatorFn = std::function<LogicalResult(
- RewriterBase &rewriter, Location loc, ValueRange tiledResults,
+ RewriterBase &rewriter, Location loc, ArrayRef<LoopLikeOpInterface> loops,
+ ValueRange tiledResults,
ArrayRef<SmallVector<OpFoldResult>> resultOffsets,
ArrayRef<SmallVector<OpFoldResult>> resultSizes,
ValueRange destinationTensors)>;
diff --git a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
index 89e2c57d709dd..36685d3affe03 100644
--- a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
+++ b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
@@ -665,8 +665,8 @@ generateLoopNestUsingCustomOp(
return failure();
}
- if (failed(generateLoopTerminatorFn(rewriter, loc, tiledResults,
- resultOffsets, resultSizes,
+ if (failed(generateLoopTerminatorFn(rewriter, loc, loopHeaderInfo->loops,
+ tiledResults, resultOffsets, resultSizes,
loopHeaderInfo->destinationTensors))) {
return failure();
}
diff --git a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
index 7981c72c2f2c8..326fec3ee5cf0 100644
--- a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
+++ b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
@@ -581,7 +581,8 @@ DiagnosedSilenceableFailure transform::TestTileUsingCustomLoopOp::apply(
};
scf::SCFTilingOptions::GenerateLoopTerminatorFn terminatorFn =
- [&](RewriterBase &rewriter, Location loc, ValueRange tiledResults,
+ [&](RewriterBase &rewriter, Location loc,
+ ArrayRef<LoopLikeOpInterface> loops, ValueRange tiledResults,
ArrayRef<SmallVector<OpFoldResult>> resultOffsets,
ArrayRef<SmallVector<OpFoldResult>> resultSizes,
ValueRange destinationTensors) -> LogicalResult {
More information about the Mlir-commits
mailing list