Hi All, When issuing multiple calls to a simdclone in a vectorized loop, TYPE_VECTOR_SUBPARTS(vectype) gives the incorrect number when compared to the TYPE_VECTOR_SUBPARTS result we get from the mask type derived from the relevant `rgroup_controls' entry within `vect_get_loop_mask'.
By passing `masktype' instead, we are able to get the correct number of vector subparts and thu eliminate the ICE in the call to `vect_get_loop_mask' when the data type for which we retrieve the mask is wider than the one used when defining the mask at mask registration time. gcc/ChangeLog: PR target/96342 * tree-vect-stmts.cc (vectorizable_simd_clone_call): s/vectype/masktype/ in call to vect_get_loop_mask. Bootstrapped Regtested on aarch64-none-linux-gnu, arm-none-linux-gnueabihf, x86_64-pc-linux-gnu -m32, -m64 and no issues. Ok for master? Thanks, Tamar --- diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 497a31322accba8672b82dee00f5403b40dca22b..be1139a423c85608755f10750bb68e70223a84ea 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -4964,7 +4964,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, vectype, j); + ncopies, masktype, j); } else mask = vect_build_all_ones_mask (vinfo, stmt_info, masktype); --
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 497a31322accba8672b82dee00f5403b40dca22b..be1139a423c85608755f10750bb68e70223a84ea 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -4964,7 +4964,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, vectype, j); + ncopies, masktype, j); } else mask = vect_build_all_ones_mask (vinfo, stmt_info, masktype);