[all-commits] [llvm/llvm-project] 771243: [mlir][tensor] Add transform to make tensor.pad lo...

Matthias Springer via All-commits all-commits at lists.llvm.org
Thu Apr 27 19:47:18 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 77124386feb615343afef2740396de1baceb1336
      https://github.com/llvm/llvm-project/commit/77124386feb615343afef2740396de1baceb1336
  Author: Matthias Springer <springerm at google.com>
  Date:   2023-04-28 (Fri, 28 Apr 2023)

  Changed paths:
    M mlir/include/mlir/Dialect/Affine/Transforms/Transforms.h
    M mlir/include/mlir/Dialect/Tensor/CMakeLists.txt
    A mlir/include/mlir/Dialect/Tensor/TransformOps/CMakeLists.txt
    M mlir/include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h
    A mlir/include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.td
    M mlir/include/mlir/Dialect/Tensor/Transforms/Transforms.h
    M mlir/include/mlir/InitAllDialects.h
    M mlir/include/mlir/Interfaces/ValueBoundsOpInterface.h
    M mlir/lib/Dialect/Affine/Transforms/ReifyValueBounds.cpp
    M mlir/lib/Dialect/Tensor/TransformOps/CMakeLists.txt
    M mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp
    M mlir/lib/Dialect/Tensor/Transforms/CMakeLists.txt
    A mlir/lib/Dialect/Tensor/Transforms/IndependenceTransforms.cpp
    M mlir/lib/Interfaces/ValueBoundsOpInterface.cpp
    A mlir/test/Dialect/Tensor/transform-op-make-loop-independent.mlir
    M utils/bazel/llvm-project-overlay/mlir/BUILD.bazel

  Log Message:
  -----------
  [mlir][tensor] Add transform to make tensor.pad loop-independent

Add a transform to make `tensor.pad` and `tensor.empty` ops independent of SCF loop IVs. Such ops can then be hoisted.

E.g.:
```
scf.for %iv = %lb to %ub step %step {
  %high = affine.apply affine_map<(d0)[s0] -> (s0 - d0)> (%i)[%ub]
  %p = tensor.pad %t low[5] high[%high] ...
  ...
}
```
Is transformed to:
```
%high_new = affine.apply affine_map<()[s0, s1] -> (-s0 + s1)> ()[%lb, %ub]
%p_hoistable = tensor.pad %t low[5] high[%high_new]
%dim = tensor.dim %t, %c0
%size = affine.apply affine_map<(d0)[s0, s1] -> (-d0 + s0 + s1 + 5)>(%iv)[%ub, %dim]
%slice = tensor.extract_slice %p_hoistable [0] [%size] [1]
```

Differential Revision: https://reviews.llvm.org/D143910




More information about the All-commits mailing list