]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix loop masked inbranch SIMD clone codegen for AVX512
authorRichard Biener <rguenther@suse.de>
Wed, 26 Nov 2025 11:49:58 +0000 (12:49 +0100)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 26 Nov 2025 12:59:29 +0000 (13:59 +0100)
The following applies the earlier fix for conditional SIMD clone
calls to the loop masked case.

* tree-vect-stmts.cc (vectorizable_simd_clone_call): Handle
AVX512 masking for loop masked SIMD clone call.

gcc/tree-vect-stmts.cc

index 264475ff0913534d6cc9b6e528196e85065c1662..476a6e570e82298e6280ee4383486fd9d0512a14 100644 (file)
@@ -4820,9 +4820,8 @@ vectorizable_simd_clone_call (vec_info *vinfo, stmt_vec_info stmt_info,
 
          tree masktype = bestn->simdclone->args[mask_i].vector_type;
          if (SCALAR_INT_MODE_P (bestn->simdclone->mask_mode))
-           /* Guess the number of lanes represented by masktype.  */
            callee_nelements = exact_div (bestn->simdclone->simdlen,
-                                         bestn->simdclone->nargs - nargs);
+                                         bestn->simdclone->args[i].linear_step);
          else
            callee_nelements = TYPE_VECTOR_SUBPARTS (masktype);
          o = vector_unroll_factor (nunits, callee_nelements);
@@ -4832,7 +4831,7 @@ vectorizable_simd_clone_call (vec_info *vinfo, stmt_vec_info stmt_info,
                {
                  vec_loop_masks *loop_masks = &LOOP_VINFO_MASKS (loop_vinfo);
                  mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
-                                            ncopies, masktype, j);
+                                            ncopies_in, vectype, j);
                }
              else
                mask = vect_build_all_ones_mask (vinfo, stmt_info, masktype);