Skip to content

Commit ccc0256

Browse files
authored
[mlir][linalg]: Fixed possible memory leak in cloneToCollapsedOp (#87595)
* Direct call to `clone` function leads to memory leak. Instead, we should use `RewriterBase` clone function instead.
1 parent bc8726b commit ccc0256

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,9 +1497,10 @@ LinalgOp cloneToCollapsedOp<LinalgOp>(RewriterBase &rewriter, LinalgOp origOp,
14971497
SmallVector<Type> resultTypes;
14981498
collapseOperandsAndResults(origOp, collapsingInfo, rewriter, inputOperands,
14991499
outputOperands, resultTypes);
1500-
return cast<LinalgOp>(clone(
1500+
1501+
return clone(
15011502
rewriter, origOp, resultTypes,
1502-
llvm::to_vector(llvm::concat<Value>(inputOperands, outputOperands))));
1503+
llvm::to_vector(llvm::concat<Value>(inputOperands, outputOperands)));
15031504
}
15041505

15051506
/// Collapse a `GenericOp`

mlir/lib/Dialect/Utils/StructuredOpsUtils.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,10 @@ Operation *mlir::clone(OpBuilder &b, Operation *op, TypeRange newResultTypes,
199199
IRMapping bvm;
200200
OperationState state(op->getLoc(), op->getName(), newOperands, newResultTypes,
201201
op->getAttrs());
202-
for (Region &r : op->getRegions())
203-
r.cloneInto(state.addRegion(), bvm);
202+
for (Region &r : op->getRegions()) {
203+
Region *newRegion = state.addRegion();
204+
b.cloneRegionBefore(r, *newRegion, newRegion->begin(), bvm);
205+
}
204206
return b.create(state);
205207
}
206208

0 commit comments

Comments
 (0)