[llvm] [AArch64] Optimize vector slide shuffles with zeros to use shift instructions (PR #185170)

David Green via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 11 06:26:21 PDT 2026


================
@@ -15357,6 +15438,24 @@ SDValue AArch64TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
                                   DL);
   }
 
+  if (VT.getSizeInBits() == 64) {
+    unsigned ShiftAmount;
+    bool IsRightShift;
+    if (isSlideWithZerosMask(ShuffleMask, VT, V1, V2, ShiftAmount,
+                             IsRightShift)) {
+      SDValue DataVec = ISD::isBuildVectorAllZeros(V1.getNode()) ? V2 : V1;
+
+      // Bitcast to v1i64 for scalar shift
+      SDValue Vec64 = DAG.getBitcast(MVT::v1i64, DataVec);
----------------
davemgreen wrote:

Create a NVCAST, as it works more like how you would expect even on big endian.

https://github.com/llvm/llvm-project/pull/185170


More information about the llvm-commits mailing list