https://gcc.gnu.org/g:240cbd2f26c0f1c1f83cfc3b69cc0271b56172e2

commit r15-6107-g240cbd2f26c0f1c1f83cfc3b69cc0271b56172e2
Author: Victor Do Nascimento <victor.donascime...@arm.com>
Date:   Wed Dec 11 11:58:55 2024 +0000

    middle-end: Fix mask length arg in call to vect_get_loop_mask [PR96342]
    
    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.

Diff:
---
 gcc/tree-vect-stmts.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 497a31322acc..be1139a423c8 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);

Reply via email to