[mlir][Linalg] Introduce linalg.pad_tensor op.
authorHanhan Wang <hanchung@google.com>
Fri, 22 Jan 2021 06:08:51 +0000 (22:08 -0800)
committerHanhan Wang <hanchung@google.com>
Fri, 22 Jan 2021 06:09:28 +0000 (22:09 -0800)
commit16d4bbef30a9e625e04653047759d5636f9e58a5
treec68eff5278cdb317553a4504eb431f2fc0d57792
parentf374138058b6f7ddfeeb145a5c98b9c8d0d95f82
[mlir][Linalg] Introduce linalg.pad_tensor op.

`linalg.pad_tensor` is an operation that pads the `source` tensor
with given `low` and `high` padding config.

Example 1:

```mlir
  %pad_value = ... : f32
  %1 = linalg.pad_tensor %0 low[1, 2] high[2, 3] {
  ^bb0(%arg0 : index, %arg1 : index):
    linalg.yield %pad_value : f32
  } : tensor<?x?xf32> to tensor<?x?xf32>
```

Example 2:
```mlir
  %pad_value = ... : f32
  %1 = linalg.pad_tensor %arg0 low[2, %arg1, 3, 3] high[3, 3, %arg1, 2] {
  ^bb0(%arg2: index, %arg3: index, %arg4: index, %arg5: index):
    linalg.yield %pad_value : f32
  } : tensor<1x2x2x?xf32> to tensor<6x?x?x?xf32>
```

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D93704
mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
mlir/test/Dialect/Linalg/invalid.mlir
mlir/test/Dialect/Linalg/roundtrip.mlir