[PATCH] D103105: [AArch64] Optimise bitreverse lowering in ISel

Sjoerd Meijer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 25 11:52:39 PDT 2021


SjoerdMeijer added inline comments.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6868
+  EVT VT = Op.getValueType();
+
+  if (VT.isScalableVector() ||
----------------
Perhaps an assert here for `VT == MVT::v4i32 || VT == MVT::v2i64`.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6869
+
+  if (VT.isScalableVector() ||
+      useSVEForFixedLengthVectorVT(VT, /*OverrideNEON=*/true)) {
----------------
How about these SVE checks, do we need tests for that?


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6872
+    return LowerToPredicatedOp(Op, DAG, AArch64ISD::BITREVERSE_MERGE_PASSTHRU,
+                               true);
+  }
----------------
Nit: `/*OverrideNEON=*/true` ?

And we don't need the curly brackets for this if.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6879
+    REVB = DAG.getNode(AArch64ISD::REV32, DL, MVT::v16i8, Op.getOperand(0));
+  if (VT.getScalarSizeInBits() == 64)
+    REVB = DAG.getNode(AArch64ISD::REV64, DL, MVT::v16i8, Op.getOperand(0));
----------------
then this can be an `else`.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6881
+    REVB = DAG.getNode(AArch64ISD::REV64, DL, MVT::v16i8, Op.getOperand(0));
+  SDValue Bitreverse = DAG.getNode(ISD::BITREVERSE, DL, MVT::v16i8, REVB);
+
----------------
Wanted add a nit about `Bitreverse` -> `BitReverse`, but perhaps we don't need it:

   return DAG.getNode(AArch64ISD::NVCAST, DL, VT,
                      DAG.getNode(ISD::BITREVERSE, DL, MVT::v16i8, REVB));


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D103105



More information about the llvm-commits mailing list