[mlir][Linalg] Extend fusion to support WAW atm on buffers.
Summary: The RAW fusion happens only if the produecer block dominates the consumer block. The WAW pattern also works with the precondition. I.e., if a producer can dominate the consumer, they can fairly fuse together. Since they are all tilable, we can think the pattern like this way: Input: ``` linalg_op1 view tile_loop subview_2 linalg_op2 subview_2 ``` Tile the first Linalg op as same as the second Linalg. ``` tile_loop subview_1 linalg_op1 subview_1 tile_loop subview_2 liangl_op2 subview_2 ``` Since the first Linalg op is tilable in the same way and the computation are independently, it's fair to fuse it with the second Linalg op. ``` tile_loop subview_1 linalg_op1 subview_1 linalg_op2 subview_2 ``` In short, this patch includes: - Handling both RAW and WAW pattern. - Adding a interface method to get input and output buffers. - Exposing a method to get a StringRef of a dependency type. - Fixing existing WAW tests and add one more use case: initialize the buffer before conv op. Differential Revision: https://reviews.llvm.org/D76897
Loading
Please sign in to comment