summaryrefslogtreecommitdiff
path: root/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp')
-rw-r--r--mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
index 2277989bf841..b548f8ce8b56 100644
--- a/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
+++ b/mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp
@@ -657,21 +657,29 @@ getResultTilePosition(RewriterBase &rewriter, int64_t index, Value tiledResult,
resultOffset, resultSize);
case scf::SCFTilingOptions::ReductionTilingStrategy::
PartialReductionOuterReduction: {
- // TODO: This does not work for non identity accesses to the result tile.
- // The proper fix is to add a getPartialResultTilePosition method to
- // PartialReductionOpInterface.
- resultOffset =
- SmallVector<OpFoldResult>(offsets.size(), rewriter.getIndexAttr(0));
- for (size_t i = 0; i < offsets.size(); i++) {
- resultSize.push_back(
- tensor::getMixedSize(rewriter, op.getLoc(), tiledResult, i));
+ auto redOp = dyn_cast<PartialReductionOpInterface>(op.getOperation());
+ if (!redOp) {
+ return rewriter.notifyMatchFailure(
+ op, "PartialReductionOuterReduction tiling strategy is only supported"
+ "for operations implementing PartialReductionOpInterface");
}
- return success();
+ // Get reduction dimensions.
+ // TODO: PartialReductionOpInterface should really query TilingInterface
+ // itself and find reduction dimensions.
+ SmallVector<int> reductionDims;
+ for (auto [idx, iteratorType] :
+ llvm::enumerate(op.getLoopIteratorTypes())) {
+ if (iteratorType == utils::IteratorType::reduction)
+ reductionDims.push_back(idx);
+ }
+ return redOp.getPartialResultTilePosition(rewriter, index, offsets, sizes,
+ resultOffset, resultSize,
+ reductionDims);
+ }
default:
return rewriter.notifyMatchFailure(op,
"unhandled reduction tiling strategy");
}
- }
}
static FailureOr<MergeResult>