[llvm] [AArch64] Generate BSP instead of TBL for select shuffles. (PR #121474)

Alexandros Lamprineas via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 6 02:48:06 PST 2025


================
@@ -13985,6 +13985,23 @@ SDValue AArch64TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
                                   dl);
   }
 
+  // Check for a "select shuffle", generating a BSL to pick between lanes in
+  // V1/V2.
+  if (ShuffleVectorInst::isSelectMask(ShuffleMask, NumElts)) {
+    assert(VT.getScalarSizeInBits() <= 32 &&
+           "Expected larger vector element sizes to be handled already");
+    SmallVector<SDValue> MaskElts;
+    for (int M : ShuffleMask)
+      MaskElts.push_back(
+          DAG.getConstant(M >= (int)NumElts ? 0 : 0xffffffff, dl, MVT::i32));
----------------
labrinea wrote:

Nit: static cast here?

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


More information about the llvm-commits mailing list