mirror of git://gcc.gnu.org/git/gcc.git
[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 <richard.sandiford@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. From-SVN: r263139
This commit is contained in:
parent
7bcbf2d832
commit
211ee39b9d
|
|
@ -1,3 +1,13 @@
|
|||
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* 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 <richard.sandiford@arm.com>
|
||||
|
||||
* tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue