[mlir] add VectorizeOp to structured transform ops
authorAlex Zinenko <zinenko@google.com>
Mon, 30 May 2022 13:13:23 +0000 (15:13 +0200)
committerAlex Zinenko <zinenko@google.com>
Mon, 30 May 2022 15:37:50 +0000 (17:37 +0200)
commitcc6c15920358a93185eced1d9dcec201815debf0
tree646cbff5f4d3cde6ac0bae2b5f49217b3654eb7d
parentb2719349d2a640187b66baeb91115a00e706f4c6
[mlir] add VectorizeOp to structured transform ops

Vectorization is a key transformation to achieve high performance on most
architectures. In the transform dialect, vectorization is implemented as a
parameterizable transform op. It currently applies to a scope of payload IR
delimited by some isolated-from-above op, mainly because several enabling
transformations (such as affine simplification) are needed to perform
vectorization and these transformation would apply to ops other than the "main"
computational payload op. A separate "navigation" transform op that obtains the
isolated-from-above ancestor of an op is introduced in the core transform
dialect. Even though it is currently only useful for vectorization,
isolated-from-above ops are a common anchor for transformations (usually
implemented as passes) that is likely to be reused in the future.

Depends On D126374

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D126542
mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td
mlir/include/mlir/Dialect/Transform/IR/TransformOps.td
mlir/lib/Dialect/Linalg/TransformOps/CMakeLists.txt
mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
mlir/lib/Dialect/Transform/IR/TransformOps.cpp
mlir/test/Dialect/Linalg/transform-op-vectorize.mlir [new file with mode: 0644]
mlir/test/Dialect/Transform/test-interpreter.mlir
utils/bazel/llvm-project-overlay/mlir/BUILD.bazel