From 211ee39b9d1d7d670dd4885bd1f4f038680a1e90 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 31 Jul 2018 14:23:48 +0000 Subject: [PATCH] [24/46] Make stmt_info_for_cost use a stmt_vec_info 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. 2018-07-31 Richard Sandiford 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. From-SVN: r263139 --- gcc/ChangeLog | 10 +++++++ gcc/tree-vect-loop.c | 66 +++++++++++++------------------------------ gcc/tree-vect-stmts.c | 4 +-- gcc/tree-vectorizer.h | 7 ++--- 4 files changed, 33 insertions(+), 54 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dde2596749d..e67403d1ca2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2018-07-31 Richard Sandiford + + * 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. + 2018-07-31 Richard Sandiford * tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index e611e9908e3..f6b2b4554f5 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -1136,13 +1136,9 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo) 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_info loop_vinfo, int peel_iters_prologue, 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_vec_info loop_vinfo, 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_vec_info loop_vinfo, 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_vec_info loop_vinfo, &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 (); diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 288bdfaa599..18b242c3ed6 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -98,9 +98,7 @@ record_stmt_cost (stmt_vector_for_cost *body_cost_vec, int count, && 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; diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index ff3b4c641b9..fa206a2e871 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -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_for_cost *cost_vec) 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); } -- 2.30.2