[Mlir-commits] [mlir] [MLIR][test] Avoid copies in tiling transform utilities (NFC) (PR #221073)
Mehdi Amini
llvmlistbot at llvm.org
Thu Sep 3 15:49:32 PDT 2026
https://github.com/joker-eph updated https://github.com/llvm/llvm-project/pull/221073
>From e84aedfd0294fafd682f469ca1d719b3c114c9c6 Mon Sep 17 00:00:00 2001
From: Mehdi Amini <joker.eph at gmail.com>
Date: Thu, 3 Sep 2026 05:49:31 -0700
Subject: [PATCH] [mlir][test] Avoid copies in tiling transform utilities
Move locally owned tiling options, interchange vectors, and custom loop
callbacks at their last use. Also call setTileSizes directly instead of
copy-assigning the options object from its own returned reference.
Found by Coverity.
Assisted-by: Codex
---
.../SCF/Transforms/TileUsingInterface.h | 4 ++--
.../TestTilingInterfaceTransformOps.cpp | 24 +++++++++++--------
2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h b/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
index 0bd5d19b136d0..f457da8b3d71d 100644
--- a/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
+++ b/mlir/include/mlir/Dialect/SCF/Transforms/TileUsingInterface.h
@@ -280,7 +280,7 @@ struct SCFTileAndFuseOptions {
/// The tiling options used to control the tiling of the consumer.
SCFTilingOptions tilingOptions;
SCFTileAndFuseOptions &setTilingOptions(SCFTilingOptions options) {
- tilingOptions = options;
+ tilingOptions = std::move(options);
return *this;
}
@@ -308,7 +308,7 @@ struct SCFTileAndFuseOptions {
return ControlFnResult{};
};
SCFTileAndFuseOptions &setFusionControlFn(ControlFnTy controlFn) {
- fusionControlFn = controlFn;
+ fusionControlFn = std::move(controlFn);
return *this;
}
diff --git a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
index 9467c925e543c..a641143dfce3d 100644
--- a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
+++ b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp
@@ -26,6 +26,8 @@
#include "mlir/Interfaces/TilingInterface.h"
#include "llvm/Support/Debug.h"
+#include <utility>
+
#define DEBUG_TYPE "test-tiling-interface"
#define GET_OP_CLASSES
@@ -63,7 +65,7 @@ template <typename Range>
static LogicalResult
applyTileAndFuseToAll(RewriterBase &rewriter, Operation *transformOp,
Range &&payloadOps, unsigned numLoops,
- scf::SCFTilingOptions tilingOptions,
+ const scf::SCFTilingOptions &tilingOptions,
TransformResults &transformResults) {
SmallVector<Operation *> tiledOps;
SmallVector<SmallVector<Operation *>> loopOps(numLoops);
@@ -97,7 +99,7 @@ applyTileAndFuseToAll(RewriterBase &rewriter, Operation *transformOp,
return scf::SCFTileAndFuseOptions::ControlFnResult{
yieldProducerReplacement};
};
- tileAndFuseOptions.setFusionControlFn(controlFn);
+ tileAndFuseOptions.setFusionControlFn(std::move(controlFn));
rewriter.setInsertionPoint(target);
FailureOr<scf::SCFTileAndFuseResult> tiledResults =
@@ -154,7 +156,8 @@ transform::TestFuseAndYieldOp::apply(TransformRewriter &rewriter,
getAsIndexOpFoldResult(rewriter.getContext(), tileSizes);
scf::SCFTilingOptions tilingOptions;
- tilingOptions.setTileSizes(tileSizesOfr).setInterchange(tileInterchange);
+ tilingOptions.setTileSizes(tileSizesOfr);
+ tilingOptions.interchangeVector = std::move(tileInterchange);
if (getUseForall()) {
tilingOptions.setLoopType(scf::SCFTilingOptions::LoopType::ForallOp);
}
@@ -451,13 +454,13 @@ transform::TestFuseUsingForallOp::apply(TransformRewriter &rewriter,
extractFromIntegerArrayAttr<int64_t>(getInterchange());
scf::SCFTilingOptions tilingOptions;
- tilingOptions.interchangeVector = tileInterchange;
+ tilingOptions.interchangeVector = std::move(tileInterchange);
SmallVector<OpFoldResult> tileSizesOfr =
getAsIndexOpFoldResult(rewriter.getContext(), tileSizes);
- tilingOptions = tilingOptions.setTileSizes(tileSizesOfr);
+ tilingOptions.setTileSizes(tileSizesOfr);
tilingOptions.setLoopType(scf::SCFTilingOptions::LoopType::ForallOp);
scf::SCFTileAndFuseOptions tileAndFuseOptions;
- tileAndFuseOptions.tilingOptions = tilingOptions;
+ tileAndFuseOptions.tilingOptions = std::move(tilingOptions);
LogicalResult result = applyTilingToAll(
rewriter, getOperation(), state.getPayloadOps(getRootOp()),
tileSizes.size() - llvm::count(tileSizes, 0), transformResults,
@@ -652,9 +655,9 @@ DiagnosedSilenceableFailure transform::TestTileUsingCustomLoopOp::apply(
rewriter.setInsertionPointToEnd(forOp.getBody());
return scf::SCFTilingOptions::CustomLoopHeaderInfo{
{cast<LoopLikeOpInterface>(forOp.getOperation())},
- offsets,
- sizes,
- innerDestinationTensors};
+ std::move(offsets),
+ std::move(sizes),
+ std::move(innerDestinationTensors)};
};
scf::SCFTilingOptions::GenerateLoopTerminatorFn terminatorFn =
@@ -683,7 +686,8 @@ DiagnosedSilenceableFailure transform::TestTileUsingCustomLoopOp::apply(
getAsIndexOpFoldResult(transformRewriter.getContext(), staticTileSizes);
tilingOptions.setTileSizes(tileSizes)
.setLoopType(scf::SCFTilingOptions::LoopType::CustomOp)
- .setCustomLoopGenerationFns(loopHeaderFn, terminatorFn);
+ .setCustomLoopGenerationFns(std::move(loopHeaderFn),
+ std::move(terminatorFn));
OpBuilder::InsertionGuard g(transformRewriter);
transformRewriter.setInsertionPoint(target);
More information about the Mlir-commits
mailing list