[mlir][scf][Transform] Refactor transform.fuse_into_containing_op so it is iterative...
authorNicolas Vasilache <nicolas.vasilache@gmail.com>
Tue, 13 Sep 2022 06:01:25 +0000 (23:01 -0700)
committerNicolas Vasilache <nicolas.vasilache@gmail.com>
Fri, 16 Sep 2022 16:21:46 +0000 (09:21 -0700)
commit0422a4407f6b1dcb12d37c8b59841e3ccf0c9861
tree0baa3cc6c9b3d4c2bccd7e4271c6cea9414275f2
parent7061a3f3f89df1d8ae0afc03550da2c4f0dfbe8b
[mlir][scf][Transform] Refactor transform.fuse_into_containing_op so it is iterative and supports output fusion.

This revision revisits the implementation of `transform.fuse_into_containing_op` so that it iterates on
producers one use at a time.

Support is added to fuse a producer through a foreach_thread shared tensor argument, in which case we
tile and fuse the op inside the containing op and update the shared tensor argument to the unique destination operand.
If one cannot find such a unique destination operand the transform fails.

Differential Revision: https://reviews.llvm.org/D134051
mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
mlir/test/Dialect/Linalg/transform-op-fuse-into-containing.mlir