[all-commits] [llvm/llvm-project] a5d09c: [mlir][scf] Implement BufferizableOpInterface for ...
Matthias Springer via All-commits
all-commits at lists.llvm.org
Fri May 6 01:28:54 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: a5d09c637261252393a015e7858efd85c9166e32
https://github.com/llvm/llvm-project/commit/a5d09c637261252393a015e7858efd85c9166e32
Author: Matthias Springer <springerm at google.com>
Date: 2022-05-06 (Fri, 06 May 2022)
Changed paths:
M mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp
M mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize-invalid.mlir
M mlir/test/Dialect/SCF/one-shot-bufferize.mlir
Log Message:
-----------
[mlir][scf] Implement BufferizableOpInterface for scf::WhileOp
This follows the same implementation strategy as scf::ForOp and common functionality is extracted into helper functions.
This implementation works well in cases where each yielded value (from either body/condition region) is equivalent to the corresponding bbArg of the parent block. In that case, each OpResult of the loop may be aliasing with the corresponding OpOperand of the loop (and with no other OpOperand).
In the absence of said equivalence relationship, new buffer copies must be inserted, so that the aliasing OpOperand/OpResult contract of scf::WhileOp is honored. In essence, by yielding a newly allocated buffer, we can enforce the specified may-alias relationship. (Newly allocated buffers cannot alias with any OpOperands of the loop.)
Differential Revision: https://reviews.llvm.org/D124929
More information about the All-commits
mailing list