[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