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

Andrzej WarzyƄski via All-commits all-commits at lists.llvm.org
Fri Aug 1 03:29:45 PDT 2025


  Branch: refs/heads/users/banach-space/linalg/unpack_vec_update
  Home:   https://github.com/llvm/llvm-project
  Commit: 1992e9ae230e32d4c981676e1237d836b57abafe
      https://github.com/llvm/llvm-project/commit/1992e9ae230e32d4c981676e1237d836b57abafe
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: 8509428b05830bf6ac9e40fa4053c6554014a3e6
      https://github.com/llvm/llvm-project/commit/8509428b05830bf6ac9e40fa4053c6554014a3e6
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: f9766cf2118487d3f017e89ecb0b3d69eebf62af
      https://github.com/llvm/llvm-project/commit/f9766cf2118487d3f017e89ecb0b3d69eebf62af
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: fdcf92ac2589ba579ce496e1ad651ac5d0413e8b
      https://github.com/llvm/llvm-project/commit/fdcf92ac2589ba579ce496e1ad651ac5d0413e8b
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: a8452e9c7b97abd8072a0752ec03325a5d2255e0
      https://github.com/llvm/llvm-project/commit/a8452e9c7b97abd8072a0752ec03325a5d2255e0
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: 771a1f165d7e996b26b7eb327222fe706123e728
      https://github.com/llvm/llvm-project/commit/771a1f165d7e996b26b7eb327222fe706123e728
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: 8a06fd57be094f4bbe50df07afbe29e87cd45e1e
      https://github.com/llvm/llvm-project/commit/8a06fd57be094f4bbe50df07afbe29e87cd45e1e
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: d2f14b9b61ef3f1ffa2f618e068a9999b550d1e1
      https://github.com/llvm/llvm-project/commit/d2f14b9b61ef3f1ffa2f618e068a9999b550d1e1
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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: acfe43252e32a1f13dfb3c6a965024d500dccf93
      https://github.com/llvm/llvm-project/commit/acfe43252e32a1f13dfb3c6a965024d500dccf93
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 2025)

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

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


  Commit: 65488765fa9b71606c41515fce1b6101aab270cf
      https://github.com/llvm/llvm-project/commit/65488765fa9b71606c41515fce1b6101aab270cf
  Author: Andrzej Warzynski <andrzej.warzynski at arm.com>
  Date:   2025-08-01 (Fri, 01 Aug 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/97fbccdc118f...65488765fa9b

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