[07/11] Use single basic block array in loop_vec_info
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 1 Aug 2018 15:14:56 +0000 (15:14 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 1 Aug 2018 15:14:56 +0000 (15:14 +0000)
_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

gcc/ChangeLog
gcc/tree-vect-loop.c

index fb735149918f308338efcd5344e801dafcfc967f..3e7367de13ac334301f77d790ba7b6efe1b7b1ce 100644 (file)
@@ -1,3 +1,9 @@
+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
index f4ce5b6033b4330f1eb4f54bf34c327267d50d7f..92c01a21345762c7d98c64c5c75b338f747e9dab 100644 (file)
@@ -834,11 +834,18 @@ _loop_vec_info::_loop_vec_info (struct loop *loop_in, vec_info_shared *shared)
     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++)
+  /* 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 = body[i];
+      basic_block bb = bbs[i];
       gimple_stmt_iterator 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)
          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.  */