On Tue, Jul 24, 2018 at 12:02 PM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> This patch makes stmt_info_for_cost carry a stmt_vec_info instead
> of a gimple stmt.  The structure is internal to the vectoriser,
> so targets aren't affected.

OK

>
> 2018-07-24  Richard Sandiford  <richard.sandif...@arm.com>
>
> gcc/
>         * tree-vectorizer.h (stmt_info_for_cost::stmt): Replace with...
>         (stmt_info_for_cost::stmt_info): ...this new field.
>         (add_stmt_costs): Update accordingly.
>         * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)
>         (vect_get_known_peeling_cost): Likewise.
>         (vect_estimate_min_profitable_iters): Likewise.
>         * tree-vect-stmts.c (record_stmt_cost): Likewise.
>
> Index: gcc/tree-vectorizer.h
> ===================================================================
> --- gcc/tree-vectorizer.h       2018-07-24 10:23:18.856878757 +0100
> +++ gcc/tree-vectorizer.h       2018-07-24 10:23:22.264848493 +0100
> @@ -116,7 +116,7 @@ struct stmt_info_for_cost {
>    int count;
>    enum vect_cost_for_stmt kind;
>    enum vect_cost_model_location where;
> -  gimple *stmt;
> +  stmt_vec_info stmt_info;
>    int misalign;
>  };
>
> @@ -1282,10 +1282,7 @@ add_stmt_costs (void *data, stmt_vector_
>    stmt_info_for_cost *cost;
>    unsigned i;
>    FOR_EACH_VEC_ELT (*cost_vec, i, cost)
> -    add_stmt_cost (data, cost->count, cost->kind,
> -                  (cost->stmt
> -                   ? vinfo_for_stmt (cost->stmt)
> -                   : NULL_STMT_VEC_INFO),
> +    add_stmt_cost (data, cost->count, cost->kind, cost->stmt_info,
>                    cost->misalign, cost->where);
>  }
>
> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c        2018-07-24 10:23:12.060939107 +0100
> +++ gcc/tree-vect-loop.c        2018-07-24 10:23:22.260848529 +0100
> @@ -1136,13 +1136,9 @@ vect_compute_single_scalar_iteration_cos
>    int j;
>    FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
>                     j, si)
> -    {
> -      struct _stmt_vec_info *stmt_info
> -       = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -      (void) add_stmt_cost (target_cost_data, si->count,
> -                           si->kind, stmt_info, si->misalign,
> -                           vect_body);
> -    }
> +    (void) add_stmt_cost (target_cost_data, si->count,
> +                         si->kind, si->stmt_info, si->misalign,
> +                         vect_body);
>    unsigned dummy, body_cost = 0;
>    finish_cost (target_cost_data, &dummy, &body_cost, &dummy);
>    destroy_cost_data (target_cost_data);
> @@ -3344,24 +3340,16 @@ vect_get_known_peeling_cost (loop_vec_in
>    int j;
>    if (peel_iters_prologue)
>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
> -       {
> -         stmt_vec_info stmt_info
> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -         retval += record_stmt_cost (prologue_cost_vec,
> -                                     si->count * peel_iters_prologue,
> -                                     si->kind, stmt_info, si->misalign,
> -                                     vect_prologue);
> -       }
> +      retval += record_stmt_cost (prologue_cost_vec,
> +                                 si->count * peel_iters_prologue,
> +                                 si->kind, si->stmt_info, si->misalign,
> +                                 vect_prologue);
>    if (*peel_iters_epilogue)
>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
> -       {
> -         stmt_vec_info stmt_info
> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -         retval += record_stmt_cost (epilogue_cost_vec,
> -                                     si->count * *peel_iters_epilogue,
> -                                     si->kind, stmt_info, si->misalign,
> -                                     vect_epilogue);
> -       }
> +      retval += record_stmt_cost (epilogue_cost_vec,
> +                                 si->count * *peel_iters_epilogue,
> +                                 si->kind, si->stmt_info, si->misalign,
> +                                 vect_epilogue);
>
>    return retval;
>  }
> @@ -3497,13 +3485,9 @@ vect_estimate_min_profitable_iters (loop
>           int j;
>           FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
>                             j, si)
> -           {
> -             struct _stmt_vec_info *stmt_info
> -               = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -             (void) add_stmt_cost (target_cost_data, si->count,
> -                                   si->kind, stmt_info, si->misalign,
> -                                   vect_epilogue);
> -           }
> +           (void) add_stmt_cost (target_cost_data, si->count,
> +                                 si->kind, si->stmt_info, si->misalign,
> +                                 vect_epilogue);
>         }
>      }
>    else if (npeel < 0)
> @@ -3535,15 +3519,13 @@ vect_estimate_min_profitable_iters (loop
>        int j;
>        FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo), j, si)
>         {
> -         struct _stmt_vec_info *stmt_info
> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
>           (void) add_stmt_cost (target_cost_data,
>                                 si->count * peel_iters_prologue,
> -                               si->kind, stmt_info, si->misalign,
> +                               si->kind, si->stmt_info, si->misalign,
>                                 vect_prologue);
>           (void) add_stmt_cost (target_cost_data,
>                                 si->count * peel_iters_epilogue,
> -                               si->kind, stmt_info, si->misalign,
> +                               si->kind, si->stmt_info, si->misalign,
>                                 vect_epilogue);
>         }
>      }
> @@ -3566,20 +3548,12 @@ vect_estimate_min_profitable_iters (loop
>                                           &epilogue_cost_vec);
>
>        FOR_EACH_VEC_ELT (prologue_cost_vec, j, si)
> -       {
> -         struct _stmt_vec_info *stmt_info
> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -         (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
> -                               si->misalign, vect_prologue);
> -       }
> +       (void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,
> +                             si->misalign, vect_prologue);
>
>        FOR_EACH_VEC_ELT (epilogue_cost_vec, j, si)
> -       {
> -         struct _stmt_vec_info *stmt_info
> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
> -         (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
> -                               si->misalign, vect_epilogue);
> -       }
> +       (void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,
> +                             si->misalign, vect_epilogue);
>
>        prologue_cost_vec.release ();
>        epilogue_cost_vec.release ();
> Index: gcc/tree-vect-stmts.c
> ===================================================================
> --- gcc/tree-vect-stmts.c       2018-07-24 10:23:15.756906285 +0100
> +++ gcc/tree-vect-stmts.c       2018-07-24 10:23:22.260848529 +0100
> @@ -98,9 +98,7 @@ record_stmt_cost (stmt_vector_for_cost *
>        && STMT_VINFO_GATHER_SCATTER_P (stmt_info))
>      kind = vector_scatter_store;
>
> -  stmt_info_for_cost si = { count, kind, where,
> -      stmt_info ? STMT_VINFO_STMT (stmt_info) : NULL,
> -      misalign };
> +  stmt_info_for_cost si = { count, kind, where, stmt_info, misalign };
>    body_cost_vec->safe_push (si);
>
>    tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;

Reply via email to