[PATCH] D113376: [AArch64][SVE] Lower shuffles to permute instructions: zip1/2, uzp1/2, trn1/2

Paul Walker via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 15 09:18:41 PST 2021


paulwalker-arm added a comment.

Just a passing review I'm afraid.  I'll take a proper look tomorrow.



================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:19567
+        DAG, VT,
+        DAG.getNode(AArch64ISD::ZIP1, DL, Op1.getValueType(), Op1, Op2));
+
----------------
I think you can use `ContainerVT`  here? It might help with the formatting.

Same goes for the other places where you use `Op1.getValueType()`.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:19609-19618
+    if (isZIP_v_undef_Mask(ShuffleMask, VT, WhichResult) && WhichResult != 0)
+      return convertFromScalableVector(
+          DAG, VT,
+          DAG.getNode(AArch64ISD::ZIP2, DL, Op1.getValueType(), Op1, Op1));
+
+    if (isUZP_v_undef_Mask(ShuffleMask, VT, WhichResult)) {
+      unsigned Opc = (WhichResult == 0) ? AArch64ISD::UZP1 : AArch64ISD::UZP2;
----------------
I've not thought about it deeply so might be wrong but given these cases only use `Op1` I'm wondering if they're always safe and thus don't need to be part of the `MinSVESize == MaxSVESize == VT.getSizeInBits()` restricted set?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113376/new/

https://reviews.llvm.org/D113376



More information about the llvm-commits mailing list