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 ----

Reply via email to