[all-commits] [llvm/llvm-project] 075a71: [mlir][linalg] Enable scalable vectorization of li...

Andrzej WarzyƄski via All-commits all-commits at lists.llvm.org
Thu Jul 31 05:18:57 PDT 2025


  Branch: refs/heads/users/banach-space/linalg/unpack_vec_update
  Home:   https://github.com/llvm/llvm-project
  Commit: 075a71d9e7cdeef6b29ddab53a6167af18518b81
      https://github.com/llvm/llvm-project/commit/075a71d9e7cdeef6b29ddab53a6167af18518b81
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/include/mlir/Dialect/Vector/Utils/VectorUtils.h
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp
    M mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
    M mlir/test/Dialect/Linalg/vectorization/linalg-ops.mlir

  Log Message:
  -----------
  [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

This patch updates `vectorizeAsTensorUnpackOp` to support scalable
vectorization by requiring user-specified vector sizes for both the
_read_ and _write_ operations involved in `linalg.unpack`. Detailed
rationale and an example are provided below.

Conceptually, `linalg.unpack` consists of the following high-level steps:
  1. _Read_ from the source tensor.
  2. Transpose the value read in step (1).
  3. _Write_ the value from step (2) into the destination tensor.

Currently, when vectorizing with user-provided vector sizes, only the
sizes for the _write_ operation (step 3) are required. Sizes for the
_read_ operation (step 1) are inferred from static shapes and inner tile
sizes.

This logic breaks when the input shapes or tile sizes are dynamic
(indeed, `vectorizeUnPackOpPrecondition` rejects such cases ATM and the
vectorization fails). This patch addresses the issue by requiring
explicit vector sizes for both the read and write sides, enabling
scalable vectorization in such cases.

Example:

```mlir
func.func @unpack(%in: tensor<1x1x8x?xf32>, %out: tensor<8x?xf32>) -> tensor<8x?xf32> {
  %vs = vector.vscale
  %c8 = arith.constant 8 : index
  %tile_size = arith.muli %vs, %c8 : index

  %unpack = linalg.unpack  %in
    inner_dims_pos = [0, 1]
    inner_tiles = [8, %tile_size]
    into %out : tensor<1x1x8x?xf32> -> tensor<8x?xf32>
  return %unpack : tensor<8x?xf32>
}

module attributes {transform.with_named_sequence} {
  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
    %0 = transform.structured.match ops{["linalg.unpack"]} in %arg0 : (!transform.any_op) -> !transform.any_op
    transform.structured.vectorize %0 vector_sizes [1, 1, 8, [8],  8, [8]] : !transform.any_op
    //                                              \         /    \    /
    //                                              read-sizes   write-sizes
    transform.yield
  }
}
```

Finally, this patch also extends `createReadOrMaskedRead` and
`createWriteOrMaskedWrite` to take scalable flags.


  Commit: c4502e043434e3d23deac5110159aea7b2f30773
      https://github.com/llvm/llvm-project/commit/c4502e043434e3d23deac5110159aea7b2f30773
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp

  Log Message:
  -----------
  fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Remove leftover code + comments


  Commit: f5a41275f4128d6bbfe59d58fae2e55120d3c582
      https://github.com/llvm/llvm-project/commit/f5a41275f4128d6bbfe59d58fae2e55120d3c582
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp

  Log Message:
  -----------
  fixup! fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Fix pre-condition calculation


  Commit: 32824687370520a61fd568975a0f5788b0a8ab1c
      https://github.com/llvm/llvm-project/commit/32824687370520a61fd568975a0f5788b0a8ab1c
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp
    M mlir/test/Dialect/Linalg/vectorization/linalg-ops.mlir

  Log Message:
  -----------
  fixup! fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Improve documentation + fix test after rebasing on top of
* https://github.com/llvm/llvm-project/pull/150602


  Commit: f950172fabf6616116e7e3bc3049dcd3970803a4
      https://github.com/llvm/llvm-project/commit/f950172fabf6616116e7e3bc3049dcd3970803a4
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/test/Dialect/Linalg/vectorization/linalg-ops.mlir

  Log Message:
  -----------
  fixup! fixup! fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Remove unintended test change


  Commit: 657c06daa0f6cc8d7a6512d21b342aed7dea8a59
      https://github.com/llvm/llvm-project/commit/657c06daa0f6cc8d7a6512d21b342aed7dea8a59
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp

  Log Message:
  -----------
  fixup! fixup! fixup! fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Remove TODO


  Commit: b8dddce560e28f0f95f1abdf40a91b91cf39f3be
      https://github.com/llvm/llvm-project/commit/b8dddce560e28f0f95f1abdf40a91b91cf39f3be
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp

  Log Message:
  -----------
  fixup! fixup! fixup! fixup! fixup! [mlir][linalg] Enable scalable vectorization of linalg.unpack (WIP)

Fix comment


  Commit: b073854c4e681f2a8c89528ae4108f8bf7c6193f
      https://github.com/llvm/llvm-project/commit/b073854c4e681f2a8c89528ae4108f8bf7c6193f
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp
    M mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp

  Log Message:
  -----------
  Simplify code as per comments from HanHan


  Commit: aa721988ecfe8f5f9caded5791915f15575c7bd1
      https://github.com/llvm/llvm-project/commit/aa721988ecfe8f5f9caded5791915f15575c7bd1
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp

  Log Message:
  -----------
  Address the remaining comments from HanHan


  Commit: 97fbccdc118f1f3da28b91be129ada6fe4f9b0ea
      https://github.com/llvm/llvm-project/commit/97fbccdc118f1f3da28b91be129ada6fe4f9b0ea
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-07-31 (Thu, 31 Jul 2025)

  Changed paths:
    M mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp
    M mlir/test/Dialect/Linalg/vectorization/linalg-ops.mlir

  Log Message:
  -----------
  Simplify to only require read-vector-sizes.


Compare: https://github.com/llvm/llvm-project/compare/56108b1df69e...97fbccdc118f

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list