[mlir][bufferization] Make `TensorCopyInsertionPass` a test pass
authorMatthias Springer <springerm@google.com>
Fri, 2 Dec 2022 10:46:14 +0000 (11:46 +0100)
committerMatthias Springer <springerm@google.com>
Fri, 2 Dec 2022 14:38:02 +0000 (15:38 +0100)
commitc1fef4e88ad461724f7454d7d8177f7fe30cf58c
tree1dd1c02a1f64ef793b64c7c67a06ea0361972276
parent5fc071f2b452d26dcf79c2ed704510e4bee5b64f
[mlir][bufferization] Make `TensorCopyInsertionPass` a test pass

TensorCopyInsertion should not have been exposed as a pass. This was a flaw in the original design. It is a preparation step for bufferization and certain transforms (that would otherwise be legal) are illegal between TensorCopyInsertion and actual rewrite to MemRef ops. Therefore, even if broken down as two separate steps internally, they should be exposed as a single pass.

This change affects the sparse compiler, which uses `TensorCopyInsertionPass`. A new `SparsificationAndBufferizationPass` is added to replace all passes in the sparse tensor pipeline from `TensorCopyInsertionPass` until the actual bufferization (rewrite to memref/non-tensor). It is generally unsafe to run arbitrary passes in-between, in particular passes that hoist tensor ops out of loops or change SSA use-def chains along tensor ops.

Differential Revision: https://reviews.llvm.org/D138915
22 files changed:
mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h
mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.td
mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
mlir/lib/Dialect/Bufferization/Transforms/TensorCopyInsertion.cpp
mlir/lib/Dialect/SparseTensor/Pipelines/SparseTensorPipelines.cpp
mlir/lib/Dialect/SparseTensor/Transforms/CMakeLists.txt
mlir/lib/Dialect/SparseTensor/Transforms/DenseBufferizationPass.cpp [deleted file]
mlir/lib/Dialect/SparseTensor/Transforms/SparsificationAndBufferizationPass.cpp [new file with mode: 0644]
mlir/test/Dialect/Bufferization/Transforms/tensor-copy-insertion-memory-space-invalid.mlir
mlir/test/Dialect/Bufferization/Transforms/tensor-copy-insertion-memory-space.mlir
mlir/test/Dialect/Bufferization/Transforms/tensor-copy-insertion.mlir
mlir/test/Dialect/SCF/one-shot-bufferize-tensor-copy-insertion.mlir
mlir/test/Dialect/SparseTensor/one_shot_bufferize_tensor_copy_insertion.mlir
mlir/test/Dialect/SparseTensor/sparse_sddmm.mlir
mlir/test/Dialect/Tensor/one-shot-bufferize-tensor-copy-insertion.mlir
mlir/test/lib/Dialect/Bufferization/CMakeLists.txt [new file with mode: 0644]
mlir/test/lib/Dialect/Bufferization/TestTensorCopyInsertion.cpp [new file with mode: 0644]
mlir/test/lib/Dialect/CMakeLists.txt
mlir/tools/mlir-opt/CMakeLists.txt
mlir/tools/mlir-opt/mlir-opt.cpp
utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel