[mlir][bufferization] Add DeallocOp
authorMartin Erhart <merhart@google.com>
Mon, 17 Jul 2023 14:27:07 +0000 (14:27 +0000)
committerMartin Erhart <merhart@google.com>
Tue, 18 Jul 2023 07:32:49 +0000 (07:32 +0000)
commitd5825621885d2230044cac669e003ce205ab0f12
treecf68d5dd359271308c57b406a6c6195b7f6a09a6
parent6dccf5b8d550911f06e492a3a75c640c05efdab3
[mlir][bufferization] Add DeallocOp

The dealloc operation deallocates each of the given memrefs if there is no alias
to that memref in the list of retained memrefs and the corresponding
condition value is set. This condition can be used to indicate and pass on
ownership of memref values (or in other words, the responsibility of
deallocating that memref). If two memrefs alias each other, only one will be
deallocated to avoid double free situations.

The memrefs to be deallocated must be the originally allocated memrefs,
however, the memrefs to be retained may be arbitrary memrefs.

Returns a list of conditions corresponding to the list of memrefs which
indicates the new ownerships, i.e., if the memref was deallocated the
ownership was dropped (set to 'false') and otherwise will be the same as the
input condition.

Differential Revision: https://reviews.llvm.org/D155467
mlir/include/mlir/Dialect/Bufferization/IR/BufferizationOps.td
mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp
mlir/test/Dialect/Bufferization/inlining.mlir
mlir/test/Dialect/Bufferization/invalid.mlir
mlir/test/Dialect/Bufferization/ops.mlir