Re: [PATCH 13/13] make inverted_post_order_compute() operate on a vec

2017-05-10 Thread Richard Biener
On Tue, May 9, 2017 at 10:52 PM,   wrote:
> From: Trevor Saunders 
>
> gcc/ChangeLog:

Ok.

Richard.

> 2017-05-09  Trevor Saunders  
>
> * cfganal.c (inverted_post_order_compute): Change argument type
> to vec *.
> * cfganal.h (inverted_post_order_compute): Adjust prototype.
> * df-core.c (rest_of_handle_df_initialize): Adjust.
> (rest_of_handle_df_finish): Likewise.
> (df_analyze_1): Likewise.
> (df_analyze): Likewise.
> (loop_inverted_post_order_compute): Change argument to be a vec *.
> (df_analyze_loop): Adjust.
> (df_get_n_blocks): Likewise.
> (df_get_postorder): Likewise.
> * df.h (struct df_d): Change field to be a vec.
> * lcm.c (compute_laterin): Adjust.
> (compute_available): Likewise.
> * lra-lives.c (lra_create_live_ranges_1): Likewise.
> * tree-ssa-dce.c (remove_dead_stmt): Likewise.
> * tree-ssa-pre.c (compute_antic): Likewise.
> ---
>  gcc/cfganal.c  | 14 ++
>  gcc/cfganal.h  |  2 +-
>  gcc/df-core.c  | 56 
> +-
>  gcc/df.h   |  4 +---
>  gcc/lcm.c  | 14 ++
>  gcc/lra-lives.c|  9 -
>  gcc/tree-ssa-dce.c | 10 --
>  gcc/tree-ssa-pre.c |  9 -
>  8 files changed, 52 insertions(+), 66 deletions(-)
>
> diff --git a/gcc/cfganal.c b/gcc/cfganal.c
> index 27b453ca3f7..a3a6ea86994 100644
> --- a/gcc/cfganal.c
> +++ b/gcc/cfganal.c
> @@ -790,12 +790,12 @@ dfs_find_deadend (basic_block bb)
> and start looking for a "dead end" from that block
> and do another inverted traversal from that block.  */
>
> -int
> -inverted_post_order_compute (int *post_order,
> +void
> +inverted_post_order_compute (vec *post_order,
>  sbitmap *start_points)
>  {
>basic_block bb;
> -  int post_order_num = 0;
> +  post_order->reserve_exact (n_basic_blocks_for_fn (cfun));
>
>if (flag_checking)
>  verify_no_unreachable_blocks ();
> @@ -863,13 +863,13 @@ inverted_post_order_compute (int *post_order,
> time, check its predecessors.  */
> stack.quick_push (ei_start (pred->preds));
>else
> -post_order[post_order_num++] = pred->index;
> +   post_order->quick_push (pred->index);
>  }
>else
>  {
>   if (bb != EXIT_BLOCK_PTR_FOR_FN (cfun)
>   && ei_one_before_end_p (ei))
> -post_order[post_order_num++] = bb->index;
> +   post_order->quick_push (bb->index);
>
>if (!ei_one_before_end_p (ei))
> ei_next ( ());
> @@ -927,9 +927,7 @@ inverted_post_order_compute (int *post_order,
>while (!stack.is_empty ());
>
>/* EXIT_BLOCK is always included.  */
> -  post_order[post_order_num++] = EXIT_BLOCK;
> -
> -  return post_order_num;
> +  post_order->quick_push (EXIT_BLOCK);
>  }
>
>  /* Compute the depth first search order of FN and store in the array
> diff --git a/gcc/cfganal.h b/gcc/cfganal.h
> index 7df484b8441..39bb5e547a5 100644
> --- a/gcc/cfganal.h
> +++ b/gcc/cfganal.h
> @@ -63,7 +63,7 @@ extern void add_noreturn_fake_exit_edges (void);
>  extern void connect_infinite_loops_to_exit (void);
>  extern int post_order_compute (int *, bool, bool);
>  extern basic_block dfs_find_deadend (basic_block);
> -extern int inverted_post_order_compute (int *, sbitmap *start_points = 0);
> +extern void inverted_post_order_compute (vec *postorder, sbitmap 
> *start_points = 0);
>  extern int pre_and_rev_post_order_compute_fn (struct function *,
>   int *, int *, bool);
>  extern int pre_and_rev_post_order_compute (int *, int *, bool);
> diff --git a/gcc/df-core.c b/gcc/df-core.c
> index 1b270d417aa..1e84d4d948f 100644
> --- a/gcc/df-core.c
> +++ b/gcc/df-core.c
> @@ -702,10 +702,9 @@ rest_of_handle_df_initialize (void)
>  df_live_add_problem ();
>
>df->postorder = XNEWVEC (int, last_basic_block_for_fn (cfun));
> -  df->postorder_inverted = XNEWVEC (int, last_basic_block_for_fn (cfun));
>df->n_blocks = post_order_compute (df->postorder, true, true);
> -  df->n_blocks_inverted = inverted_post_order_compute 
> (df->postorder_inverted);
> -  gcc_assert (df->n_blocks == df->n_blocks_inverted);
> +  inverted_post_order_compute (>postorder_inverted);
> +  gcc_assert ((unsigned) df->n_blocks == df->postorder_inverted.length ());
>
>df->hard_regs_live_count = XCNEWVEC (unsigned int, FIRST_PSEUDO_REGISTER);
>
> @@ -816,7 +815,7 @@ rest_of_handle_df_finish (void)
>  }
>
>free (df->postorder);
> -  free (df->postorder_inverted);
> +  df->postorder_inverted.release ();
>free (df->hard_regs_live_count);
>free (df);
>df = NULL;
> @@ -1198,7 +1197,7 @@ df_analyze_1 (void)
>int i;
>
>/* 

[PATCH 13/13] make inverted_post_order_compute() operate on a vec

2017-05-09 Thread tbsaunde+gcc
From: Trevor Saunders 

gcc/ChangeLog:

2017-05-09  Trevor Saunders  

* cfganal.c (inverted_post_order_compute): Change argument type
to vec *.
* cfganal.h (inverted_post_order_compute): Adjust prototype.
* df-core.c (rest_of_handle_df_initialize): Adjust.
(rest_of_handle_df_finish): Likewise.
(df_analyze_1): Likewise.
(df_analyze): Likewise.
(loop_inverted_post_order_compute): Change argument to be a vec *.
(df_analyze_loop): Adjust.
(df_get_n_blocks): Likewise.
(df_get_postorder): Likewise.
* df.h (struct df_d): Change field to be a vec.
* lcm.c (compute_laterin): Adjust.
(compute_available): Likewise.
* lra-lives.c (lra_create_live_ranges_1): Likewise.
* tree-ssa-dce.c (remove_dead_stmt): Likewise.
* tree-ssa-pre.c (compute_antic): Likewise.
---
 gcc/cfganal.c  | 14 ++
 gcc/cfganal.h  |  2 +-
 gcc/df-core.c  | 56 +-
 gcc/df.h   |  4 +---
 gcc/lcm.c  | 14 ++
 gcc/lra-lives.c|  9 -
 gcc/tree-ssa-dce.c | 10 --
 gcc/tree-ssa-pre.c |  9 -
 8 files changed, 52 insertions(+), 66 deletions(-)

diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 27b453ca3f7..a3a6ea86994 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -790,12 +790,12 @@ dfs_find_deadend (basic_block bb)
and start looking for a "dead end" from that block
and do another inverted traversal from that block.  */
 
-int
-inverted_post_order_compute (int *post_order,
+void
+inverted_post_order_compute (vec *post_order,
 sbitmap *start_points)
 {
   basic_block bb;
-  int post_order_num = 0;
+  post_order->reserve_exact (n_basic_blocks_for_fn (cfun));
 
   if (flag_checking)
 verify_no_unreachable_blocks ();
@@ -863,13 +863,13 @@ inverted_post_order_compute (int *post_order,
time, check its predecessors.  */
stack.quick_push (ei_start (pred->preds));
   else
-post_order[post_order_num++] = pred->index;
+   post_order->quick_push (pred->index);
 }
   else
 {
  if (bb != EXIT_BLOCK_PTR_FOR_FN (cfun)
  && ei_one_before_end_p (ei))
-post_order[post_order_num++] = bb->index;
+   post_order->quick_push (bb->index);
 
   if (!ei_one_before_end_p (ei))
ei_next ( ());
@@ -927,9 +927,7 @@ inverted_post_order_compute (int *post_order,
   while (!stack.is_empty ());
 
   /* EXIT_BLOCK is always included.  */
-  post_order[post_order_num++] = EXIT_BLOCK;
-
-  return post_order_num;
+  post_order->quick_push (EXIT_BLOCK);
 }
 
 /* Compute the depth first search order of FN and store in the array
diff --git a/gcc/cfganal.h b/gcc/cfganal.h
index 7df484b8441..39bb5e547a5 100644
--- a/gcc/cfganal.h
+++ b/gcc/cfganal.h
@@ -63,7 +63,7 @@ extern void add_noreturn_fake_exit_edges (void);
 extern void connect_infinite_loops_to_exit (void);
 extern int post_order_compute (int *, bool, bool);
 extern basic_block dfs_find_deadend (basic_block);
-extern int inverted_post_order_compute (int *, sbitmap *start_points = 0);
+extern void inverted_post_order_compute (vec *postorder, sbitmap 
*start_points = 0);
 extern int pre_and_rev_post_order_compute_fn (struct function *,
  int *, int *, bool);
 extern int pre_and_rev_post_order_compute (int *, int *, bool);
diff --git a/gcc/df-core.c b/gcc/df-core.c
index 1b270d417aa..1e84d4d948f 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -702,10 +702,9 @@ rest_of_handle_df_initialize (void)
 df_live_add_problem ();
 
   df->postorder = XNEWVEC (int, last_basic_block_for_fn (cfun));
-  df->postorder_inverted = XNEWVEC (int, last_basic_block_for_fn (cfun));
   df->n_blocks = post_order_compute (df->postorder, true, true);
-  df->n_blocks_inverted = inverted_post_order_compute (df->postorder_inverted);
-  gcc_assert (df->n_blocks == df->n_blocks_inverted);
+  inverted_post_order_compute (>postorder_inverted);
+  gcc_assert ((unsigned) df->n_blocks == df->postorder_inverted.length ());
 
   df->hard_regs_live_count = XCNEWVEC (unsigned int, FIRST_PSEUDO_REGISTER);
 
@@ -816,7 +815,7 @@ rest_of_handle_df_finish (void)
 }
 
   free (df->postorder);
-  free (df->postorder_inverted);
+  df->postorder_inverted.release ();
   free (df->hard_regs_live_count);
   free (df);
   df = NULL;
@@ -1198,7 +1197,7 @@ df_analyze_1 (void)
   int i;
 
   /* These should be the same.  */
-  gcc_assert (df->n_blocks == df->n_blocks_inverted);
+  gcc_assert ((unsigned) df->n_blocks == df->postorder_inverted.length ());
 
   /* We need to do this before the df_verify_all because this is
  not kept incrementally up to date.  */
@@ -1222,8 +1221,8 @@ df_analyze_1 (void)