Vector Dialect Roundtable – EuroLLVM 2025 Summary

Hi, below are my notes from the Vector Dialect Roundtable at EuroLLVM 2025 in Berlin.

It was a rather focused session with a smaller group - we mostly discussed several already ongoing areas of work.

  1. @KFAF brought up this thread in the context of Vector. Although the example is vector-related, the underlying issue is broader, so we only touched on it briefly.

  2. We also revisited the RFC to generalize tiling interfaces to operate on ShapedType. For the Vector dialect+type, we noted that there is currently no iteration-space-specific abstraction or bufferization support, which may complicate things. I also pointed out that with scalable flags (to support scalable dimensions), VectorType is quite different from ShapedType in practice. The current thinking is to simply relax the tiling API to allow downstream users to re-implement what’s needed (see the RFC for details). It also seemed like some folks weren’t aware of the “vector unrolling” capabilities — please check out -test-vector-unrolling-patterns if curious!

  3. Another topic was the boundary between the Vector and Tensor dialects/types — this remains somewhat unclear, and we’ll need to keep engaging with the broader community to clarify it. In the meantime, please refer to FAQ - MLIR.

  4. On the question of restricting 0-D vectors, progress is pending a counter-proposal from @Groverkss. There’s tentative agreement to revisit this at the April 29 MLIR Open Design Meeting, which will be hosted by the Tensor Compiler Design Group — to be confirmed.

  5. Another topic briefly explored was the idea of vectorizing scf.parallel (prototyped by @Hardcode84 downstream). IIRC, this would be somewhat akin to SLP vectorization in LLVM? While definitely interesting, we couldn’t identify immediate use cases — but if this sounds relevant to your work, you know who to ping :wink:

Btw, many of these topics are also mentioned in the “WIP” Vector (re-)design document:

As a next step, I’ll be reviewing that doc with the Tensor Compiler Design Group and starting to implement relevant parts of the plan.

As always, feedback is most welcome — and please let me know if I missed or misinterpreted anything. Also, feel free to post your notes in the replies.

Thanks again to those who joined!

-Andrzej

Another topic briefly mentioned is duplication between (non-scalable)vector.step and step-like arith.constant. Maybe we need to canonicalize one into another. Another idea is to have something like StepElementsAttr for the arith.constant similar to the existing SplatElementsAttr instead of separate step op.

Here is the old PR with the code [mlir][scf][vector] Add `scf.parallel` vectorizer by Hardcode84 · Pull Request #94168 · llvm/llvm-project · GitHub

FYI, I wrote a simple SLP vectorizer for MLIR, mostly for fun [mlir][vector] MLIR SLP vectorizer by Hardcode84 · Pull Request #140469 · llvm/llvm-project · GitHub. Ping me if anyone interested )