[llvm] [AArch64] Improve scalar and Neon popcount with SVE CNT. (PR #143870)
Ricardo Jesus via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 26 08:06:33 PDT 2025
================
@@ -10630,6 +10627,34 @@ SDValue AArch64TargetLowering::LowerCTPOP_PARITY(SDValue Op,
if (VT == MVT::i32 && IsParity)
return SDValue();
+ if (Subtarget->isSVEorStreamingSVEAvailable()) {
+ if (VT == MVT::i32 || VT == MVT::i64) {
+ EVT ContainerVT = VT == MVT::i32 ? MVT::nxv4i32 : MVT::nxv2i64;
+ Val = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, ContainerVT,
+ DAG.getUNDEF(ContainerVT), Val,
+ DAG.getVectorIdxConstant(0, DL));
+ Val = DAG.getNode(ISD::CTPOP, DL, ContainerVT, Val);
+ Val = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, Val,
+ DAG.getVectorIdxConstant(0, DL));
+ if (IsParity)
+ Val = DAG.getNode(ISD::AND, DL, VT, Val, DAG.getConstant(1, DL, VT));
+ return Val;
+ } else if (VT == MVT::i128) {
----------------
rj-jesus wrote:
Thanks, done.
https://github.com/llvm/llvm-project/pull/143870
More information about the llvm-commits
mailing list