[llvm-branch-commits] [llvm] [AArch64] Lower mask_beforefirst to brkb for NEON types on SVE (PR #232255)

Luke Lau via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Oct 15 04:06:04 PDT 2026


================
@@ -35624,6 +35627,31 @@ AArch64TargetLowering::LowerGET_ACTIVE_LANE_MASK(SDValue Op,
   return DAG.getExtractSubvector(DL, VT, MaskAsInt, 0);
 }
 
+SDValue AArch64TargetLowering::LowerMASK_BEFOREFIRST(SDValue Op,
+                                                     SelectionDAG &DAG) const {
+  assert(Subtarget->isSVEorStreamingSVEAvailable() &&
+         "Lowering fixed length mask_beforefirst requires SVE!");
+
+  SDLoc DL(Op);
+  EVT VT = Op.getValueType();
+  assert(VT.isFixedLengthVector() && "Expected fixed length vector type!");
+
+  SDValue Pg = getPredicateForFixedLengthVector(DAG, DL, VT);
+  SDValue Mask = convertFixedMaskToScalableVector(Op.getOperand(0), DAG);
+
+  // brkb only supports .b forms, so cast to make sure all our p regs match.
+  SDValue Brk = DAG.getNode(
+      ISD::INTRINSIC_WO_CHAIN, DL, MVT::nxv16i1,
+      DAG.getTargetConstant(Intrinsic::aarch64_sve_brkb_z, DL, MVT::i64),
+      getSVEPredicateBitCast(MVT::nxv16i1, Pg, DAG),
+      DAG.getNode(AArch64ISD::REINTERPRET_CAST, DL, MVT::nxv16i1, Mask));
+  Brk = DAG.getNode(AArch64ISD::REINTERPRET_CAST, DL, Pg.getValueType(), Brk);
----------------
lukel97 wrote:

Done in ba9f856a979adc560a92bb8b64e070e1680f3142

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


More information about the llvm-branch-commits mailing list