[mlir][Linalg] Define a linalg.init_tensor operation.
authorMaheshRavishankar <ravishankarm@google.com>
Thu, 17 Dec 2020 22:42:40 +0000 (14:42 -0800)
committerMaheshRavishankar <ravishankarm@google.com>
Thu, 17 Dec 2020 22:45:51 +0000 (14:45 -0800)
commit118a71565462db41cab1dbb0349200627d6e8524
tree6a6be9054db3c0b0bf69fa1179ffd8732092458a
parentde031216bf1755e61418a1515f2b0db0a9cfeddc
[mlir][Linalg] Define a linalg.init_tensor operation.

This operation is used to materialize a tensor of a particular
shape. The shape could be specified as a mix of static and dynamic
values.

The use of this operation is to be an `init` tensor for Linalg
structured operation on tensors where the bounds of the computation
depends on the shape of the output of the linalg operation. The result
of this operation will be used as the `init` tensor of such Linalg
operations. To note,

1) The values in the tensor materialized is not used. Any operation to
   which this is an init tensor is expected to overwrite the entire
   tensor.
2) The tensor is materialized only for the shape of the output and to
   make the loop bounds depend only on operands of the structured
   operation.

Based on (1) and (2) it is assumed that these operations eventually go
away since they are only used in `dim` operations that can be
canonicalized to make this operation dead. Such canonicalization are
added here too.

Differential Revision: https://reviews.llvm.org/D93374
mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td
mlir/include/mlir/Interfaces/ViewLikeInterface.h
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
mlir/lib/Interfaces/ViewLikeInterface.cpp
mlir/test/Dialect/Linalg/canonicalize.mlir
mlir/test/Dialect/Linalg/roundtrip.mlir