On Fri, 7 Aug 2026, Alfie Richards wrote:

> gcc/ChangeLog:

Just looking at this in isolation - what's the reason to add this?

tree
 vect_get_loop_mask (loop_vec_info loop_vinfo,
                    gimple_stmt_iterator *gsi, vec_loop_masks *masks,
-                   unsigned int nvectors, tree vectype, unsigned int 
index)
+                   unsigned int nvectors, tree vectype, unsigned int 
index,
+                   slp_tree slp_node ATTRIBUTE_UNUSED)

the interface stayed clear of stmt_vec_info vs. slp_node, if you
add slp_node isn't at least 'vectype' redundant?  What of slp_node
do you need and can that be passed instead?

Thanks,
Richard.

>       * tree-vect-loop.cc (vectorize_fold_left_reduction): Add slp_node
>       argument.
>       (vect_transform_reduction): Ditto.
>       (vectorizable_live_operation_1): Ditto.
>       (vect_get_loop_mask): Add SLP_NODE argument.
>       * tree-vect-stmts.cc (vectorizable_call): Ditto.
>       (vectorizable_simd_clone_call): Ditto.
>       (vectorizable_operation): Ditto.
>       (vectorizable_store): Ditto.
>       (vectorizable_load): Ditto.
>       (vectorizable_condition): Ditto.
>       (vectorizable_early_exit): Ditto.
>       * tree-vectorizer.h (vect_get_loop_mask): Add SLP_NODE argument.
> ---
>  gcc/tree-vect-loop.cc  | 12 +++++++-----
>  gcc/tree-vect-stmts.cc | 39 +++++++++++++++++++++------------------
>  gcc/tree-vectorizer.h  |  2 +-
>  3 files changed, 29 insertions(+), 24 deletions(-)
> 
> diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
> index 42843d17be8..b8eb58246a7 100644
> --- a/gcc/tree-vect-loop.cc
> +++ b/gcc/tree-vect-loop.cc
> @@ -6501,7 +6501,8 @@ vectorize_fold_left_reduction (loop_vec_info loop_vinfo,
>        if (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo))
>       {
>         tree loop_mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
> -                                            vec_num, vectype_in, i);
> +                                            vec_num, vectype_in, i,
> +                                            slp_node);
>         if (is_cond_op)
>           mask = prepare_vec_mask (loop_vinfo, TREE_TYPE (loop_mask),
>                                    loop_mask, vec_opmask[i], gsi);
> @@ -8236,7 +8237,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
>  
>         tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
>                                         vec_num, vectype_in,
> -                                       mask_index++);
> +                                       mask_index++, slp_node);
>         gcall *call;
>         if (code.is_internal_fn () && cond_fn_p)
>           {
> @@ -8266,7 +8267,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
>           {
>             tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
>                                             vec_num, vectype_in,
> -                                           mask_index++);
> +                                           mask_index++, slp_node);
>             build_vect_cond_expr (code, vop, mask, gsi);
>           }
>  
> @@ -10157,7 +10158,7 @@ vectorizable_live_operation_1 (loop_vec_info 
> loop_vinfo, basic_block exit_bb,
>        gimple_stmt_iterator gsi = gsi_last (tem);
>        tree mask = vect_get_loop_mask (loop_vinfo, &gsi,
>                                     &LOOP_VINFO_MASKS (loop_vinfo),
> -                                   1, vectype, 0);
> +                                   1, vectype, 0, slp_node);
>        tree scalar_res;
>        gimple_seq_add_seq (&stmts, tem);
>  
> @@ -10620,7 +10621,8 @@ vect_record_loop_mask (loop_vec_info loop_vinfo, 
> vec_loop_masks *masks,
>  tree
>  vect_get_loop_mask (loop_vec_info loop_vinfo,
>                   gimple_stmt_iterator *gsi, vec_loop_masks *masks,
> -                 unsigned int nvectors, tree vectype, unsigned int index)
> +                 unsigned int nvectors, tree vectype, unsigned int index,
> +                 slp_tree slp_node ATTRIBUTE_UNUSED)
>  {
>    if (LOOP_VINFO_PARTIAL_VECTORS_STYLE (loop_vinfo)
>        == vect_partial_vectors_while_ult)
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index 518ce00d585..7579c5c8cc6 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -3809,7 +3809,8 @@ vectorizable_call (vec_info *vinfo,
>                     unsigned int vec_num = vec_oprnds0.length ();
>                     vargs[varg++] = vect_get_loop_mask (loop_vinfo, gsi,
>                                                         masks, vec_num,
> -                                                       vectype_out, i);
> +                                                       vectype_out, i,
> +                                                       slp_node);
>                   }
>                 else
>                   {
> @@ -3880,7 +3881,8 @@ vectorizable_call (vec_info *vinfo,
>                   {
>                     unsigned int vec_num = vec_oprnds0.length ();
>                     tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
> -                                                   vec_num, vectype_out, i);
> +                                                   vec_num, vectype_out, i,
> +                                                   slp_node);
>                     vargs[mask_opno]
>                       = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
>                                           vargs[mask_opno], gsi);
> @@ -4689,7 +4691,7 @@ vectorizable_simd_clone_call (vec_info *vinfo, 
> stmt_vec_info stmt_info,
>                             tree loop_mask
>                               = vect_get_loop_mask (loop_vinfo, gsi,
>                                                     loop_masks, ncopies_in,
> -                                                   vectype, j);
> +                                                   vectype, j, slp_node);
>                             vec_oprnd0
>                               = prepare_vec_mask (loop_vinfo,
>                                                   TREE_TYPE (loop_mask),
> @@ -4750,7 +4752,7 @@ vectorizable_simd_clone_call (vec_info *vinfo, 
> stmt_vec_info stmt_info,
>                             tree loop_mask
>                               = vect_get_loop_mask (loop_vinfo, gsi,
>                                                     loop_masks, ncopies_in,
> -                                                   vectype, j);
> +                                                   vectype, j, slp_node);
>                             vec_oprnd0
>                               = prepare_vec_mask (loop_vinfo,
>                                                   TREE_TYPE (loop_mask),
> @@ -4900,7 +4902,8 @@ 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 * o, mask_vectype, m);
> +                                          ncopies * o, mask_vectype, m,
> +                                          slp_node);
>               }
>             else
>               mask = vect_build_all_ones_mask (vinfo, stmt_info,
> @@ -7043,7 +7046,7 @@ vectorizable_operation (vec_info *vinfo,
>         tree mask;
>         if (masked_loop_p)
>           mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
> -                                    vec_num, vectype, i);
> +                                    vec_num, vectype, i, slp_node);
>         else
>           /* Dummy mask.  */
>           mask = build_minus_one_cst (truth_type_for (vectype));
> @@ -7100,7 +7103,7 @@ vectorizable_operation (vec_info *vinfo,
>             if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, vec_num 
> }))
>               {
>                 mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
> -                                          vec_num, vectype, i);
> +                                          vec_num, vectype, i, slp_node);
>  
>                 vop0 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
>                                          vop0, gsi);
> @@ -7109,7 +7112,7 @@ vectorizable_operation (vec_info *vinfo,
>             if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, vec_num 
> }))
>               {
>                 mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
> -                                          vec_num, vectype, i);
> +                                          vec_num, vectype, i, slp_node);
>  
>                 vop1 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
>                                          vop1, gsi);
> @@ -8801,7 +8804,7 @@ vectorizable_store (vec_info *vinfo,
>         tree bias = NULL;
>         if (loop_masks)
>           final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
> -                                          ncopies, vectype, j);
> +                                          ncopies, vectype, j, slp_node);
>         if (vec_mask)
>           final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask,
>                                          vec_mask, gsi);
> @@ -8944,7 +8947,7 @@ vectorizable_store (vec_info *vinfo,
>             if (loop_masks)
>               final_mask = vect_get_loop_mask (loop_vinfo, gsi,
>                                                loop_masks, num_stmts,
> -                                              vectype, j);
> +                                              vectype, j, slp_node);
>             if (vec_mask)
>               final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
>                                              final_mask, vec_mask, gsi);
> @@ -9361,7 +9364,7 @@ vectorizable_store (vec_info *vinfo,
>        tree bias = NULL_TREE;
>        if (loop_masks)
>       final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
> -                                      vec_num, vectype, i);
> +                                      vec_num, vectype, i, slp_node);
>        if (vec_mask)
>       vec_mask = vec_masks[i];
>        if (vec_mask)
> @@ -10778,7 +10781,7 @@ vectorizable_load (vec_info *vinfo,
>         tree bias = NULL_TREE;
>         if (loop_masks)
>           final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
> -                                          ncopies, vectype, j);
> +                                          ncopies, vectype, j, slp_node);
>         if (vec_mask)
>           final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask,
>                                          vec_mask, gsi);
> @@ -10928,7 +10931,7 @@ vectorizable_load (vec_info *vinfo,
>               vec_mask = vec_masks[i];
>             if (loop_masks)
>               final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
> -                                              vec_num, vectype, i);
> +                                              vec_num, vectype, i, slp_node);
>             if (vec_mask)
>               final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
>                                              final_mask, vec_mask, gsi);
> @@ -11402,7 +11405,7 @@ vectorizable_load (vec_info *vinfo,
>           vec_mask = vec_masks[i];
>         if (loop_masks)
>           final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
> -                                          vec_num, vectype, i);
> +                                          vec_num, vectype, i, slp_node);
>         if (vec_mask)
>           final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
>                                          final_mask, vec_mask, gsi);
> @@ -12542,7 +12545,7 @@ vectorizable_condition (vec_info *vinfo,
>           {
>             tree loop_mask
>               = vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num,
> -                                   vectype, i);
> +                                   vectype, i, slp_node);
>             tree tmp2 = make_ssa_name (vec_cmp_type);
>             gassign *g
>               = gimple_build_assign (tmp2, BIT_AND_EXPR, vec_compare,
> @@ -13121,7 +13124,7 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, 
> stmt_vec_info stmt_info,
>         {
>           tree stmt_mask
>             = vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num,
> -                                 vectype, i);
> +                                 vectype, i, slp_node);
>           stmt_mask
>             = prepare_vec_mask (loop_vinfo, TREE_TYPE (stmt_mask), stmt_mask,
>                                 stmts[i], &cond_gsi);
> @@ -13167,8 +13170,8 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, 
> stmt_vec_info stmt_info,
>        new_temp = stmts[0];
>        if (masked_loop_p)
>       {
> -       tree mask
> -         = vect_get_loop_mask (loop_vinfo, gsi, masks, 1, vectype, 0);
> +       tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, 1, vectype, 0,
> +                                       slp_node);
>         new_temp = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
>                                      new_temp, &cond_gsi);
>       }
> diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
> index 869b8497780..d15e04de369 100644
> --- a/gcc/tree-vectorizer.h
> +++ b/gcc/tree-vectorizer.h
> @@ -2701,7 +2701,7 @@ extern void vect_record_loop_mask (loop_vec_info, 
> vec_loop_masks *,
>                                  unsigned int, tree, tree);
>  extern tree vect_get_loop_mask (loop_vec_info, gimple_stmt_iterator *,
>                               vec_loop_masks *,
> -                             unsigned int, tree, unsigned int);
> +                             unsigned int, tree, unsigned int, slp_tree);
>  extern void vect_record_loop_len (loop_vec_info, vec_loop_lens *, unsigned 
> int,
>                                 tree, unsigned int);
>  extern tree vect_get_loop_len (loop_vec_info, gimple_stmt_iterator *,
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Abhinav Puri; (HRB 36809, AG Nuernberg)

Reply via email to