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