[PATCH] D141924: [IR] Add new intrinsics interleave and deinterleave vectors
Sander de Smalen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 17 06:07:22 PST 2023
sdesmalen added a comment.
Just to add a bit of context here: The main motivator for adding these intrinsics is so that we can vectorise loops that have complex math using scalable vectors in a way that is simple to hook into the LoopVectorizer.
I'm aware there have been discussions about more generic representations of shuffles. These intrinsics are orthogonal to those discussions. They aim to solve a particular and current problem (vectorizing complex math) and follow the design principle that was taken for vector.insert/extract/reverse/splice, i.e. to have specific intrinsics for different shuffle patterns. We've done a fair bit of experimentation with different kinds of de/interleaving intrinsics. Some of the benefits we found with this proposed form is that:
- They can be trivially combined with loads/stores to get struct load/store instructions (e.g. LD2/ST2).
- They're simple to lower for both SVE and RVV, which have instructions to efficiently do pair-wise interleaving/deinterleaving.
- They're reasonably simple to type-legalize.
- They should be easy to hook into the LoopVectorizer.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D141924/new/
https://reviews.llvm.org/D141924
More information about the llvm-commits
mailing list