[llvm] [AArch64] Use [SU]ADALP for partial (nx)v4i32 -> (nx)v2i64 add reduce. (PR #213915)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 5 08:15:21 PDT 2026
================
@@ -34755,11 +34743,23 @@ AArch64TargetLowering::LowerPARTIAL_REDUCE_MLA(SDValue Op,
bool IsUnsigned = Op.getOpcode() == ISD::PARTIAL_REDUCE_UMLA;
+ // Attempt to fold v4i32 -> v2i64 via Neon *ADALP.
+ if (Subtarget->isNeonAvailable() && OrigResultVT == MVT::v2i64) {
+ unsigned Opc = IsUnsigned ? AArch64ISD::UADDLP : AArch64ISD::SADDLP;
+ if (ConvertToScalable)
+ DotNode = convertFromScalableVector(DAG, MVT::v4i32, DotNode);
+ SDValue Res = DAG.getNode(Opc, DL, OrigResultVT, DotNode);
+ return DAG.getNode(ISD::ADD, DL, OrigResultVT, OrigAcc, Res);
+ }
----------------
paulwalker-arm wrote:
Can you move this handling to the top? We already have a block for v16i8->v2i32, which I think you can repeat for v16i8->v2i64 when NEON is available and thus bypass SVE altogether.
https://github.com/llvm/llvm-project/pull/213915
More information about the llvm-commits
mailing list