On Wed, May 17, 2023 at 8:09 AM Kewen.Lin <li...@linux.ibm.com> wrote:
>
> Hi,
>
> This patch is to refactor the handlings for the case (index
> == count) in a loop of vect_transform_slp_perm_load_1, in
> order to prepare a subsequent adjustment on *nperm.  This
> patch doesn't have any functional changes.

The diff is impossible to be reviewed - can you explain the
refactoring you have done or also attach a patch more clearly
showing what you change?

> Bootstrapped and regtested on x86_64-redhat-linux,
> aarch64-linux-gnu and powerpc64{,le}-linux-gnu.
>
> BR,
> Kewen
> -----
> gcc/ChangeLog:
>
>         * tree-vect-slp.cc (vect_transform_slp_perm_load_1): Refactor the
>         handling on the case index == count.
> ---
>  gcc/tree-vect-slp.cc | 89 ++++++++++++++++++++++----------------------
>  1 file changed, 44 insertions(+), 45 deletions(-)
>
> diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
> index 3b7a21724ec..e5c9d7e766e 100644
> --- a/gcc/tree-vect-slp.cc
> +++ b/gcc/tree-vect-slp.cc
> @@ -8230,59 +8230,50 @@ vect_transform_slp_perm_load_1 (vec_info *vinfo, 
> slp_tree node,
>         noop_p = false;
>        mask[index++] = mask_element;
>
> -      if (index == count && !noop_p)
> +      if (index == count)
>         {
> -         indices.new_vector (mask, second_vec_index == -1 ? 1 : 2, nunits);
> -         if (!can_vec_perm_const_p (mode, mode, indices))
> +         if (!noop_p)
>             {
> -             if (dump_p)
> +             indices.new_vector (mask, second_vec_index == -1 ? 1 : 2, 
> nunits);
> +             if (!can_vec_perm_const_p (mode, mode, indices))
>                 {
> -                 dump_printf_loc (MSG_MISSED_OPTIMIZATION,
> -                                  vect_location,
> -                                  "unsupported vect permute { ");
> -                 for (i = 0; i < count; ++i)
> +                 if (dump_p)
>                     {
> -                     dump_dec (MSG_MISSED_OPTIMIZATION, mask[i]);
> -                     dump_printf (MSG_MISSED_OPTIMIZATION, " ");
> +                     dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
> +                                      "unsupported vect permute { ");
> +                     for (i = 0; i < count; ++i)
> +                       {
> +                         dump_dec (MSG_MISSED_OPTIMIZATION, mask[i]);
> +                         dump_printf (MSG_MISSED_OPTIMIZATION, " ");
> +                       }
> +                     dump_printf (MSG_MISSED_OPTIMIZATION, "}\n");
>                     }
> -                 dump_printf (MSG_MISSED_OPTIMIZATION, "}\n");
> +                 gcc_assert (analyze_only);
> +                 return false;
>                 }
> -             gcc_assert (analyze_only);
> -             return false;
> -           }
>
> -         ++*n_perms;
> -       }
> +             ++*n_perms;
>
> -      if (index == count)
> -       {
> -         if (!analyze_only)
> -           {
> -             tree mask_vec = NULL_TREE;
> -
> -             if (! noop_p)
> -               mask_vec = vect_gen_perm_mask_checked (vectype, indices);
> +             if (!analyze_only)
> +               {
> +                 tree mask_vec = vect_gen_perm_mask_checked (vectype, 
> indices);
>
> -             if (second_vec_index == -1)
> -               second_vec_index = first_vec_index;
> +                 if (second_vec_index == -1)
> +                   second_vec_index = first_vec_index;
>
> -             for (unsigned int ri = 0; ri < nvectors_per_build; ++ri)
> -               {
> -                 /* Generate the permute statement if necessary.  */
> -                 tree first_vec = dr_chain[first_vec_index + ri];
> -                 tree second_vec = dr_chain[second_vec_index + ri];
> -                 gimple *perm_stmt;
> -                 if (! noop_p)
> +                 for (unsigned int ri = 0; ri < nvectors_per_build; ++ri)
>                     {
> -                     gassign *stmt = as_a <gassign *> (stmt_info->stmt);
> +                     /* Generate the permute statement if necessary.  */
> +                     tree first_vec = dr_chain[first_vec_index + ri];
> +                     tree second_vec = dr_chain[second_vec_index + ri];
> +                     gassign *stmt = as_a<gassign *> (stmt_info->stmt);
>                       tree perm_dest
>                         = vect_create_destination_var (gimple_assign_lhs 
> (stmt),
>                                                        vectype);
>                       perm_dest = make_ssa_name (perm_dest);
> -                     perm_stmt
> +                     gimple *perm_stmt
>                         = gimple_build_assign (perm_dest, VEC_PERM_EXPR,
> -                                              first_vec, second_vec,
> -                                              mask_vec);
> +                                              first_vec, second_vec, 
> mask_vec);
>                       vect_finish_stmt_generation (vinfo, stmt_info, 
> perm_stmt,
>                                                    gsi);
>                       if (dce_chain)
> @@ -8290,15 +8281,23 @@ vect_transform_slp_perm_load_1 (vec_info *vinfo, 
> slp_tree node,
>                           bitmap_set_bit (used_defs, first_vec_index + ri);
>                           bitmap_set_bit (used_defs, second_vec_index + ri);
>                         }
> +
> +                     /* Store the vector statement in NODE.  */
> +                     SLP_TREE_VEC_STMTS (node) [vect_stmts_counter++]
> +                       = perm_stmt;
>                     }
> -                 else
> -                   {
> -                     /* If mask was NULL_TREE generate the requested
> -                        identity transform.  */
> -                     perm_stmt = SSA_NAME_DEF_STMT (first_vec);
> -                     if (dce_chain)
> -                       bitmap_set_bit (used_defs, first_vec_index + ri);
> -                   }
> +               }
> +           }
> +         else if (!analyze_only)
> +           {
> +             for (unsigned int ri = 0; ri < nvectors_per_build; ++ri)
> +               {
> +                 tree first_vec = dr_chain[first_vec_index + ri];
> +                 /* If mask was NULL_TREE generate the requested
> +                    identity transform.  */
> +                 gimple *perm_stmt = SSA_NAME_DEF_STMT (first_vec);
> +                 if (dce_chain)
> +                   bitmap_set_bit (used_defs, first_vec_index + ri);
>
>                   /* Store the vector statement in NODE.  */
>                   SLP_TREE_VEC_STMTS (node)[vect_stmts_counter++] = perm_stmt;
> --
> 2.39.1

Reply via email to