[PATCH] D94444: [RFC][Scalable] Add scalable shuffle intrinsic to extract evens from a pair of vectors
Paul Walker via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 26 03:22:16 PST 2021
paulwalker-arm added a comment.
Considering:
<A x Elt> llvm.experimental.vector.extract.elements(<B x Elt> %invec, i32 index, i32 stride)
Suitable restrictions are that "A = B/stride" and that "B % stride == 0". When combined with the original restriction that "0 <= index <= stride", I think this nicely joins up our use case of having an intrinsic that effectively extracts field "index" from a vector of structs[1] where each struct has "stride" fields.
[1] invec is not actually a vector of structs at the LLVM level, but logically this is what the vector represents.
There is the option to have no restrictions and allow a use case like:
<2 x Elt> llvm.experimental.vector.extract.elements(<vscale x 4 x Elt> %invec, i32 7, i32 13)
but I honestly think that's needlessly looking for trouble. Besides, this extreme use case has the same interface and so once a restricted variant is available it would be easy enough for others to soften restrictions if they see a genuine reason to do so. The important part is to ensure the intrinsic's return and parameter types are good enough to allow these future use cases, which I believe we've achieved in this instance.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D94444/new/
https://reviews.llvm.org/D94444
More information about the llvm-commits
mailing list