Commit beeb6ce8 by Richard Sandiford Committed by Richard Sandiford

[07/11] Use single basic block array in loop_vec_info

_loop_vec_info::_loop_vec_info used get_loop_array to get the
order of the blocks when creating stmt_vec_infos, but then used
dfs_enumerate_from to get the order of the blocks that the rest
of the vectoriser uses.  We should be able to use that order
for creating stmt_vec_infos too.

2018-08-01  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Use the
	result of dfs_enumerate_from when constructing stmt_vec_infos,
	instead of additionally calling get_loop_body.

From-SVN: r263221
parent 2d4bca81
2018-08-01 Richard Sandiford <richard.sandiford@arm.com> 2018-08-01 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Use the
result of dfs_enumerate_from when constructing stmt_vec_infos,
instead of additionally calling get_loop_body.
2018-08-01 Richard Sandiford <richard.sandiford@arm.com>
* tree-vectorizer.h (vect_create_data_ref_ptr): Remove inv_p * tree-vectorizer.h (vect_create_data_ref_ptr): Remove inv_p
parameter. parameter.
* tree-vect-data-refs.c (vect_create_data_ref_ptr): Likewise. * tree-vect-data-refs.c (vect_create_data_ref_ptr): Likewise.
......
...@@ -834,11 +834,18 @@ _loop_vec_info::_loop_vec_info (struct loop *loop_in, vec_info_shared *shared) ...@@ -834,11 +834,18 @@ _loop_vec_info::_loop_vec_info (struct loop *loop_in, vec_info_shared *shared)
scalar_loop (NULL), scalar_loop (NULL),
orig_loop_info (NULL) orig_loop_info (NULL)
{ {
/* Create/Update stmt_info for all stmts in the loop. */ /* CHECKME: We want to visit all BBs before their successors (except for
basic_block *body = get_loop_body (loop); latch blocks, for which this assertion wouldn't hold). In the simple
for (unsigned int i = 0; i < loop->num_nodes; i++) case of the loop forms we allow, a dfs order of the BBs would the same
as reversed postorder traversal, so we are safe. */
unsigned int nbbs = dfs_enumerate_from (loop->header, 0, bb_in_loop_p,
bbs, loop->num_nodes, loop);
gcc_assert (nbbs == loop->num_nodes);
for (unsigned int i = 0; i < nbbs; i++)
{ {
basic_block bb = body[i]; basic_block bb = bbs[i];
gimple_stmt_iterator si; gimple_stmt_iterator si;
for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
...@@ -855,16 +862,6 @@ _loop_vec_info::_loop_vec_info (struct loop *loop_in, vec_info_shared *shared) ...@@ -855,16 +862,6 @@ _loop_vec_info::_loop_vec_info (struct loop *loop_in, vec_info_shared *shared)
add_stmt (stmt); add_stmt (stmt);
} }
} }
free (body);
/* CHECKME: We want to visit all BBs before their successors (except for
latch blocks, for which this assertion wouldn't hold). In the simple
case of the loop forms we allow, a dfs order of the BBs would the same
as reversed postorder traversal, so we are safe. */
unsigned int nbbs = dfs_enumerate_from (loop->header, 0, bb_in_loop_p,
bbs, loop->num_nodes, loop);
gcc_assert (nbbs == loop->num_nodes);
} }
/* Free all levels of MASKS. */ /* Free all levels of MASKS. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment