[mlir][transform] add a check for nested consumption in ApplyEachOpTrait
authorAlex Zinenko <zinenko@google.com>
Fri, 9 Jun 2023 09:49:35 +0000 (09:49 +0000)
committerAlex Zinenko <zinenko@google.com>
Fri, 9 Jun 2023 10:44:24 +0000 (10:44 +0000)
commit95f495c7b3a6bc2ed47bb6f9977256ec0f841e52
tree342719991f38935386856b316a6569799fdabefd
parent95bfb1902db98dab846e62dae4d501459691223b
[mlir][transform] add a check for nested consumption in ApplyEachOpTrait

ApplyEachOpTrait applies to payload ops associated with its operand
handle one-by-one in order. If a handle is consumed, this usually
indicates that the associated payload ops are erased or rewritten. Add a
check that we don't consume an ancestor payload operation before
consuming its descendant, as the latter is likely to be a dangling
pointer. Transform operations for which this is a legitimate behavior
(i.e., they consume the handle but don't actually erase or rewrite the
payload operation) should implement the interface directly and allow for
repeated handles.

Reviewed By: springerm

Differential Revision: https://reviews.llvm.org/D152510
mlir/include/mlir/Dialect/Transform/IR/TransformInterfaces.h
mlir/lib/Dialect/Transform/IR/TransformInterfaces.cpp
mlir/test/Dialect/Transform/apply-foreach-nested.mlir [new file with mode: 0644]
mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.td