[Mlir-commits] [mlir] caa2a4a - [mlir][bufferization] Remove `deallocationFn` from `BufferizationOptions` (#67128)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Sep 22 06:14:46 PDT 2023
Author: Matthias Springer
Date: 2023-09-22T15:14:40+02:00
New Revision: caa2a4ae6a5e6362b4b1090e8a23c0126fd7448f
URL: https://github.com/llvm/llvm-project/commit/caa2a4ae6a5e6362b4b1090e8a23c0126fd7448f
DIFF: https://github.com/llvm/llvm-project/commit/caa2a4ae6a5e6362b4b1090e8a23c0126fd7448f.diff
LOG: [mlir][bufferization] Remove `deallocationFn` from `BufferizationOptions` (#67128)
One-Shot Bufferize no longer deallocates buffers, so `deallocationFn`
can be removed.
Note: There is a `bufferization.dealloc_tensor` op that now always
bufferizes to `memref.dealloc`. This op will be phased out soon.
Added:
Modified:
mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h
mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp
mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h b/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h
index 8859f6e2a5bcaf9..7c09a43f96397b7 100644
--- a/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h
+++ b/mlir/include/mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h
@@ -243,10 +243,6 @@ struct BufferizationOptions {
/// dynamic extents and alignment.
using AllocationFn = std::function<FailureOr<Value>(
OpBuilder &, Location, MemRefType, ValueRange, unsigned int)>;
- /// Deallocator function: Deallocate a buffer that was allocated with
- /// AllocatorFn.
- using DeallocationFn =
- std::function<LogicalResult(OpBuilder &, Location, Value)>;
/// Memcpy function: Generate a memcpy between two buffers.
using MemCpyFn =
std::function<LogicalResult(OpBuilder &, Location, Value, Value)>;
@@ -279,20 +275,14 @@ struct BufferizationOptions {
/// Return `true` if the given op should be bufferized.
bool isOpAllowed(Operation *op) const;
- /// Helper functions for allocation, deallocation, memory copying.
+ /// Helper functions for allocation and memory copying.
std::optional<AllocationFn> allocationFn;
- std::optional<DeallocationFn> deallocationFn;
std::optional<MemCpyFn> memCpyFn;
/// Create a memref allocation with the given type and dynamic extents.
FailureOr<Value> createAlloc(OpBuilder &b, Location loc, MemRefType type,
ValueRange dynShape) const;
- /// Creates a memref deallocation. The given memref buffer must have been
- /// allocated using `createAlloc`.
- LogicalResult createDealloc(OpBuilder &b, Location loc,
- Value allocatedBuffer) const;
-
/// Creates a memcpy between two given buffers.
LogicalResult createMemCpy(OpBuilder &b, Location loc, Value from,
Value to) const;
diff --git a/mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp
index 837b22b4a82a396..1e8dc4387ed4f0d 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp
@@ -220,9 +220,6 @@ LogicalResult BufferizableOpInterface::resolveTensorOpOperandConflicts(
return op->emitError("copying of unranked tensors is not implemented");
AliasingValueList aliasingValues = state.getAliasingValues(opOperand);
- // Is the result yielded from a block? Or are deallocations turned off
- // entirely? In either case, mark the allocation as "escaping", so that it
- // will not be deallocated.
if (aliasingValues.getNumAliases() == 1 &&
isa<OpResult>(aliasingValues.getAliases()[0].value) &&
!state.bufferizesToMemoryWrite(opOperand) &&
@@ -723,7 +720,7 @@ void bufferization::replaceOpWithBufferizedValues(RewriterBase &rewriter,
}
//===----------------------------------------------------------------------===//
-// Bufferization-specific scoped alloc/dealloc insertion support.
+// Bufferization-specific scoped alloc insertion support.
//===----------------------------------------------------------------------===//
/// Create a memref allocation with the given type and dynamic extents.
@@ -742,18 +739,6 @@ FailureOr<Value> BufferizationOptions::createAlloc(OpBuilder &b, Location loc,
return b.create<memref::AllocOp>(loc, type, dynShape).getResult();
}
-/// Creates a memref deallocation. The given memref buffer must have been
-/// allocated using `createAlloc`.
-LogicalResult BufferizationOptions::createDealloc(OpBuilder &b, Location loc,
- Value allocatedBuffer) const {
- if (deallocationFn)
- return (*deallocationFn)(b, loc, allocatedBuffer);
-
- // Default buffer deallocation via DeallocOp.
- b.create<memref::DeallocOp>(loc, allocatedBuffer);
- return success();
-}
-
/// Create a memory copy between two memref buffers.
LogicalResult BufferizationOptions::createMemCpy(OpBuilder &b, Location loc,
Value from, Value to) const {
diff --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp
index 745333de65815ad..7c6c1be351cced1 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp
@@ -526,8 +526,7 @@ LogicalResult DeallocTensorOp::bufferize(RewriterBase &rewriter,
FailureOr<Value> buffer = getBuffer(rewriter, getTensor(), options);
if (failed(buffer))
return failure();
- if (failed(options.createDealloc(rewriter, getLoc(), *buffer)))
- return failure();
+ rewriter.create<memref::DeallocOp>(getLoc(), *buffer);
rewriter.eraseOp(getOperation());
return success();
}
More information about the Mlir-commits
mailing list