From 9b1f1622449a1580c4fbae089a4e087efd835da4 Mon Sep 17 00:00:00 2001 From: Nicolas Vasilache Date: Mon, 17 Apr 2023 07:16:04 -0700 Subject: [PATCH] [mlir][Linalg] NFC - Add builder for TileToScfForOp --- .../Linalg/TransformOps/LinalgTransformOps.td | 6 ++++++ .../Linalg/TransformOps/LinalgTransformOps.cpp | 24 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td index 6af1210..56fd2e0 100644 --- a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td +++ b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td @@ -1709,6 +1709,12 @@ def TileToScfForOp : Op:$interchange); let results = (outs PDL_Operation:$tiled_linalg_op, Variadic:$loops); + + let builders = [ + OpBuilder<(ins "Value":$target, + "ArrayRef":$mixedTileSizes, + CArg<"ArrayRef", "{}">:$interchange)> + ]; let hasCustomAssemblyFormat = 1; diff --git a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp index 23c4020..8c31e41 100644 --- a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp +++ b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp @@ -2821,6 +2821,30 @@ LogicalResult TileToForallOp::verify() { // TileToScfForOp //===----------------------------------------------------------------------===// +void transform::TileToScfForOp::build(OpBuilder &builder, OperationState &result, + Value target, + ArrayRef mixedTileSizes, + ArrayRef interchange) { + SmallVector staticTileSizes; + SmallVector dynamicTileSizes; + dispatchIndexOpFoldResults(mixedTileSizes, dynamicTileSizes, staticTileSizes); + // Call the default builder which sets up the proper operands segment sizes + // attributes for multiple variadic operands. In the absence of this, + // horrible bugs ensue. + auto staticTileSizesAttr = builder.getDenseI64ArrayAttr(staticTileSizes); + int64_t numExpectedLoops = + staticTileSizes.size() - llvm::count(staticTileSizes, 0); + SmallVector resultTypes; + resultTypes.reserve(numExpectedLoops); + build(builder, result, + /*tiled_linalg_op=*/target.getType(), + /*loops=*/resultTypes, + /*target=*/target, + /*dynamic_sizes=*/dynamicTileSizes, + /*static_sizes=*/staticTileSizesAttr, + /*interchange=*/builder.getDenseI64ArrayAttr(interchange)); +} + DiagnosedSilenceableFailure transform::TileToScfForOp::apply(TransformResults &transformResults, TransformState &state) { -- 2.7.4