[Mlir-commits] [mlir] [mlir][linalg] Edit the yieldOutputs method's builder (PR #73900)
Amir Bishara
llvmlistbot at llvm.org
Wed Nov 29 22:43:09 PST 2023
https://github.com/amirBish created https://github.com/llvm/llvm-project/pull/73900
Passing the `RegionBuilder`'s builder to the `yieldOutputs` method, Instead of creating a new one within the `yieldOutputs` method. This change is being made since having memory leaks issues (when compiling with address sanitizer) when applying `RewritePattern` on `LinalgStructuredOp` (creating and erasing op within `matchAndRewrite` method would reproduce the issue).
>From 0cf515de79041c58c73397b2c31dc3065a0f8ea0 Mon Sep 17 00:00:00 2001
From: Amir Bishara <amir.bishara at mobileye.com>
Date: Wed, 29 Nov 2023 21:13:54 +0200
Subject: [PATCH] [mlir][linalg] Edit the yieldOutputs method's builder
---
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp | 4 ++--
.../Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp | 1 +
mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
index 58af9995548e939..11ebbabe9773787 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
@@ -480,8 +480,8 @@ class RegionBuilderHelper {
llvm_unreachable("unsupported type conversion function");
}
- void yieldOutputs(ValueRange values) {
- OpBuilder builder = getBuilder();
+ void yieldOutputs(OpBuilder builder, ValueRange values) {
+ builder.setInsertionPointToEnd(&block);
Location loc = builder.getUnknownLoc();
builder.create<YieldOp>(loc, values);
}
diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp
index 375e10f9068e43b..e14efd8def0920d 100644
--- a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp
+++ b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp
@@ -260,6 +260,7 @@ struct SparseTensorCodegenPass
// The following operations and dialects may be introduced by the
// codegen rules, and are therefore marked as legal.
target.addLegalOp<linalg::FillOp>();
+ target.addLegalOp<linalg::YieldOp>();
target.addLegalDialect<
arith::ArithDialect, bufferization::BufferizationDialect,
complex::ComplexDialect, memref::MemRefDialect, scf::SCFDialect>();
diff --git a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp
index fb3c9d48f9a9821..cd8398b973a5677 100644
--- a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp
+++ b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp
@@ -1012,7 +1012,7 @@ void {0}::regionBuilder(ImplicitLocOpBuilder &b,
SmallVector<Value> yields;
{2}
{3}
- helper.yieldOutputs(yields);
+ helper.yieldOutputs(b, yields);
}
)FMT";
auto &args = opConfig.structuredOp->args;
More information about the Mlir-commits
mailing list