On Mon, Jul 30, 2018 at 1:42 PM Richard Sandiford <richard.sandif...@arm.com> wrote: > > _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.
OK. Note I have rev_post_order_and_mark_dfs_back_seme for a patch I'm working on (RPO order on a single-entry multiple-exit region). I'll try to remember that "fixme". Richard. > > 2018-07-30 Richard Sandiford <richard.sandif...@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. > > Index: gcc/tree-vect-loop.c > =================================================================== > *** gcc/tree-vect-loop.c 2018-07-30 12:40:59.366015643 +0100 > --- gcc/tree-vect-loop.c 2018-07-30 12:40:59.362015678 +0100 > *************** _loop_vec_info::_loop_vec_info (struct l > *** 834,844 **** > scalar_loop (NULL), > orig_loop_info (NULL) > { > ! /* Create/Update stmt_info for all stmts in the loop. */ > ! basic_block *body = get_loop_body (loop); > ! for (unsigned int i = 0; i < loop->num_nodes; i++) > { > ! basic_block bb = body[i]; > gimple_stmt_iterator si; > > for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) > --- 834,851 ---- > scalar_loop (NULL), > orig_loop_info (NULL) > { > ! /* 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); > ! > ! for (unsigned int i = 0; i < nbbs; i++) > { > ! basic_block bb = bbs[i]; > gimple_stmt_iterator si; > > for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) > *************** _loop_vec_info::_loop_vec_info (struct l > *** 855,870 **** > 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. */ > --- 862,867 ----