Re: [PATCH 13/13] make inverted_post_order_compute() operate on a vec
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
From: Trevor Saundersgcc/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)