[llvm] [AArch64] Lower scalable i1 vector add reduction to cntp (PR #99031)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 16 07:09:50 PDT 2024


================
@@ -27469,6 +27469,21 @@ SDValue AArch64TargetLowering::LowerReductionToSVE(unsigned Opcode,
     VecOp = convertToScalableVector(DAG, ContainerVT, VecOp);
   }
 
+  // Lower VECREDUCE_ADD of nxv2i1-nxv16i1 to CNTP rather than UADDV.
+  if (ScalarOp.getOpcode() == ISD::VECREDUCE_ADD &&
+      VecOp.getOpcode() == ISD::ZERO_EXTEND) {
+    SDValue Vec = VecOp.getOperand(0);
+    EVT VecVT = Vec.getValueType();
+    if (VecVT.getVectorElementType() == MVT::i1) {
----------------
sdesmalen-arm wrote:

There seems to be a check missing that the vector type is a legal predicate type.
What happens with this patch, if you'd start with a `<vscale x 32 x i1>` ?

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


More information about the llvm-commits mailing list