diff options
author | Matthias Springer <springerm@google.com> | 2023-04-28 10:34:03 +0900 |
---|---|---|
committer | Matthias Springer <springerm@google.com> | 2023-04-28 11:46:32 +0900 |
commit | 77124386feb615343afef2740396de1baceb1336 (patch) | |
tree | 3866cb5e9c496a4df79e7aaed34ee7cc76af5b18 /utils | |
parent | fbf42f1fe2b541ea039ea576f57040eec2ff9480 (diff) | |
download | llvm-77124386feb615343afef2740396de1baceb1336.tar.gz |
[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
Diffstat (limited to 'utils')
-rw-r--r-- | utils/bazel/llvm-project-overlay/mlir/BUILD.bazel | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel index c941face6f43..dfa8f43ab439 100644 --- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel @@ -5808,6 +5808,7 @@ cc_library( includes = ["include"], deps = [ ":AffineDialect", + ":AffineTransforms", ":AffineUtils", ":ArithDialect", ":ArithUtils", @@ -5824,20 +5825,57 @@ cc_library( ":TensorPassIncGen", ":TilingInterface", ":Transforms", + ":ValueBoundsOpInterface", ":VectorDialect", "//llvm:Support", ], ) +td_library( + name = "TensorTransformOpsTdFiles", + srcs = [ + "include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.td", + ], + includes = ["include"], + deps = [ + ":PDLDialect", + ":TransformDialectTdFiles", + ], +) + +gentbl_cc_library( + name = "TensorTransformOpsIncGen", + strip_include_prefix = "include", + tbl_outs = [ + ( + ["-gen-op-decls"], + "include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h.inc", + ), + ( + ["-gen-op-defs"], + "include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.cpp.inc", + ), + ], + tblgen = ":mlir-tblgen", + td_file = "include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.td", + deps = [ + ":TensorTransformOpsTdFiles", + ], +) + cc_library( name = "TensorTransformOps", srcs = glob(["lib/Dialect/Tensor/TransformOps/*.cpp"]), hdrs = glob(["include/mlir/Dialect/Tensor/TransformOps/*.h"]), includes = ["include"], deps = [ + ":AffineDialect", ":IR", ":PDLDialect", + ":SCFDialect", ":TensorDialect", + ":TensorTransformOpsIncGen", + ":TensorTransforms", ":TransformDialect", "//llvm:Support", ], |