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;