This improves the lowering of v8i16 and v16i8 vector reverse shuffles. Instead of going via a generic tbl it uses a rev64; ext pair, as already happens for v4i32.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | ||
---|---|---|
9060 | nit: Is this condition necessary? I know for LLVM IR nodes the result type doesn't necessarily have the same number of elements as the source vectors (but instead equals the number of elements in the mask), but is the same true for VECTOR_SHUFFLE? The reason for asking is that I see in ISDOpcodes that it says: /// VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as /// VEC1/VEC2. |
Thanks!
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | ||
---|---|---|
9060 | Yeah, I added it as an additional safety check. It didn't alter any of the test cases I had, but I figured it was better safe than sorry. I can remove it though, if it is guaranteed that they will already match in size. |
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | ||
---|---|---|
9060 | I think the sizes are supposed to be the same, looking at SelectionDAGBuilder::visitShuffleVector there is code that ensures the sizes match. To be sure, maybe you can add an assert instead? |
nit: Is this condition necessary?
I know for LLVM IR nodes the result type doesn't necessarily have the same number of elements as the source vectors (but instead equals the number of elements in the mask), but is the same true for VECTOR_SHUFFLE?
The reason for asking is that I see in ISDOpcodes that it says: