On Tue, Jun 15, 2021 at 8:03 AM Trevor Saunders <tbsau...@tbsaunde.org> wrote: > > This ensures the vector gets cleaned up by the caller when appropriate. > > Signed-off-by: Trevor Saunders <tbsau...@tbsaunde.org> > > bootstrapped and regtested on x86_64-linux-gnu, ok?
OK. Richard. > gcc/ChangeLog: > > * dominance.c (get_dominated_to_depth): Return auto_vec<basic_block>. > * dominance.h (get_dominated_to_depth): Likewise. > (get_all_dominated_blocks): Likewise. > * cfgcleanup.c (delete_unreachable_blocks): Adjust. > * gcse.c (hoist_code): Likewise. > * tree-cfg.c (remove_edge_and_dominated_blocks): Likewise. > * tree-parloops.c (oacc_entry_exit_ok): Likewise. > * tree-ssa-dce.c (eliminate_unnecessary_stmts): Likewise. > * tree-ssa-phiprop.c (pass_phiprop::execute): Likewise. > --- > gcc/cfgcleanup.c | 4 +--- > gcc/dominance.c | 6 +++--- > gcc/dominance.h | 8 ++++---- > gcc/gcse.c | 13 +++++-------- > gcc/tree-cfg.c | 3 +-- > gcc/tree-parloops.c | 3 +-- > gcc/tree-ssa-dce.c | 3 +-- > gcc/tree-ssa-phiprop.c | 7 +++---- > 8 files changed, 19 insertions(+), 28 deletions(-) > > diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c > index 17edc4f37ad..7b1e1ba6e80 100644 > --- a/gcc/cfgcleanup.c > +++ b/gcc/cfgcleanup.c > @@ -3027,7 +3027,7 @@ delete_unreachable_blocks (void) > delete_basic_block (b); > else > { > - vec<basic_block> h > + auto_vec<basic_block> h > = get_all_dominated_blocks (CDI_DOMINATORS, b); > > while (h.length ()) > @@ -3040,8 +3040,6 @@ delete_unreachable_blocks (void) > > delete_basic_block (b); > } > - > - h.release (); > } > > changed = true; > diff --git a/gcc/dominance.c b/gcc/dominance.c > index 4943102ff1d..6a262ce8283 100644 > --- a/gcc/dominance.c > +++ b/gcc/dominance.c > @@ -933,10 +933,10 @@ get_dominated_by_region (enum cdi_direction dir, > basic_block *region, > produce a vector containing all dominated blocks. The vector will be > sorted > in preorder. */ > > -vec<basic_block> > +auto_vec<basic_block> > get_dominated_to_depth (enum cdi_direction dir, basic_block bb, int depth) > { > - vec<basic_block> bbs = vNULL; > + auto_vec<basic_block> bbs; > unsigned i; > unsigned next_level_start; > > @@ -965,7 +965,7 @@ get_dominated_to_depth (enum cdi_direction dir, > basic_block bb, int depth) > /* Returns the list of basic blocks including BB dominated by BB, in the > direction DIR. The vector will be sorted in preorder. */ > > -vec<basic_block> > +auto_vec<basic_block> > get_all_dominated_blocks (enum cdi_direction dir, basic_block bb) > { > return get_dominated_to_depth (dir, bb, 0); > diff --git a/gcc/dominance.h b/gcc/dominance.h > index c74ad297c6a..1a8c248ee98 100644 > --- a/gcc/dominance.h > +++ b/gcc/dominance.h > @@ -50,10 +50,10 @@ extern auto_vec<basic_block> get_dominated_by (enum > cdi_direction, basic_block); > extern auto_vec<basic_block> get_dominated_by_region (enum cdi_direction, > basic_block *, > unsigned); > -extern vec<basic_block> get_dominated_to_depth (enum cdi_direction, > - basic_block, int); > -extern vec<basic_block> get_all_dominated_blocks (enum cdi_direction, > - basic_block); > +extern auto_vec<basic_block> get_dominated_to_depth (enum cdi_direction, > + basic_block, int); > +extern auto_vec<basic_block> get_all_dominated_blocks (enum cdi_direction, > + basic_block); > extern void redirect_immediate_dominators (enum cdi_direction, basic_block, > basic_block); > extern basic_block nearest_common_dominator (enum cdi_direction, > diff --git a/gcc/gcse.c b/gcc/gcse.c > index 9114f30705e..ecf7e51aac5 100644 > --- a/gcc/gcse.c > +++ b/gcc/gcse.c > @@ -3050,9 +3050,7 @@ static int > hoist_code (void) > { > basic_block bb, dominated; > - vec<basic_block> dom_tree_walk; > unsigned int dom_tree_walk_index; > - vec<basic_block> domby; > unsigned int i, j, k; > struct gcse_expr **index_map; > struct gcse_expr *expr; > @@ -3106,15 +3104,16 @@ hoist_code (void) > if (flag_ira_hoist_pressure) > hoisted_bbs = BITMAP_ALLOC (NULL); > > - dom_tree_walk = get_all_dominated_blocks (CDI_DOMINATORS, > - ENTRY_BLOCK_PTR_FOR_FN > (cfun)->next_bb); > + auto_vec<basic_block> dom_tree_walk > + = get_all_dominated_blocks (CDI_DOMINATORS, > + ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb); > > /* Walk over each basic block looking for potentially hoistable > expressions, nothing gets hoisted from the entry block. */ > FOR_EACH_VEC_ELT (dom_tree_walk, dom_tree_walk_index, bb) > { > - domby = get_dominated_to_depth (CDI_DOMINATORS, bb, > - param_max_hoist_depth); > + auto_vec<basic_block> domby > + = get_dominated_to_depth (CDI_DOMINATORS, bb, param_max_hoist_depth); > > if (domby.length () == 0) > continue; > @@ -3315,10 +3314,8 @@ hoist_code (void) > bitmap_clear (from_bbs); > } > } > - domby.release (); > } > > - dom_tree_walk.release (); > BITMAP_FREE (from_bbs); > if (flag_ira_hoist_pressure) > BITMAP_FREE (hoisted_bbs); > diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c > index c9403deed19..4c32f83257f 100644 > --- a/gcc/tree-cfg.c > +++ b/gcc/tree-cfg.c > @@ -8683,7 +8683,6 @@ gimple_flow_call_edges_add (sbitmap blocks) > void > remove_edge_and_dominated_blocks (edge e) > { > - vec<basic_block> bbs_to_remove = vNULL; > vec<basic_block> bbs_to_fix_dom = vNULL; > edge f; > edge_iterator ei; > @@ -8734,6 +8733,7 @@ remove_edge_and_dominated_blocks (edge e) > } > > auto_bitmap df, df_idom; > + auto_vec<basic_block> bbs_to_remove; > if (none_removed) > bitmap_set_bit (df_idom, > get_immediate_dominator (CDI_DOMINATORS, e->dest)->index); > @@ -8800,7 +8800,6 @@ remove_edge_and_dominated_blocks (edge e) > > iterate_fix_dominators (CDI_DOMINATORS, bbs_to_fix_dom, true); > > - bbs_to_remove.release (); > bbs_to_fix_dom.release (); > } > > diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c > index deff2d5e08b..fe1baef32a7 100644 > --- a/gcc/tree-parloops.c > +++ b/gcc/tree-parloops.c > @@ -3949,7 +3949,7 @@ oacc_entry_exit_ok (class loop *loop, > reduction_info_table_type *reduction_list) > { > basic_block *loop_bbs = get_loop_body_in_dom_order (loop); > - vec<basic_block> region_bbs > + auto_vec<basic_block> region_bbs > = get_all_dominated_blocks (CDI_DOMINATORS, ENTRY_BLOCK_PTR_FOR_FN > (cfun)); > > bitmap in_loop_bbs = BITMAP_ALLOC (NULL); > @@ -3972,7 +3972,6 @@ oacc_entry_exit_ok (class loop *loop, > } > } > > - region_bbs.release (); > free (loop_bbs); > > BITMAP_FREE (in_loop_bbs); > diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c > index def6ae69e24..e2d3b63a30c 100644 > --- a/gcc/tree-ssa-dce.c > +++ b/gcc/tree-ssa-dce.c > @@ -1275,7 +1275,6 @@ eliminate_unnecessary_stmts (void) > gimple_stmt_iterator gsi, psi; > gimple *stmt; > tree call; > - vec<basic_block> h; > auto_vec<edge> to_remove_edges; > > if (dump_file && (dump_flags & TDF_DETAILS)) > @@ -1306,6 +1305,7 @@ eliminate_unnecessary_stmts (void) > > as desired. */ > gcc_assert (dom_info_available_p (CDI_DOMINATORS)); > + auto_vec<basic_block> h; > h = get_all_dominated_blocks (CDI_DOMINATORS, > single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun))); > > @@ -1460,7 +1460,6 @@ eliminate_unnecessary_stmts (void) > something_changed |= remove_dead_phis (bb); > } > > - h.release (); > > /* Since we don't track liveness of virtual PHI nodes, it is possible that > we > rendered some PHI nodes unreachable while they are still in use. > diff --git a/gcc/tree-ssa-phiprop.c b/gcc/tree-ssa-phiprop.c > index 64d6eda5f6c..78b0461c839 100644 > --- a/gcc/tree-ssa-phiprop.c > +++ b/gcc/tree-ssa-phiprop.c > @@ -484,7 +484,6 @@ public: > unsigned int > pass_phiprop::execute (function *fun) > { > - vec<basic_block> bbs; > struct phiprop_d *phivn; > bool did_something = false; > basic_block bb; > @@ -499,8 +498,9 @@ pass_phiprop::execute (function *fun) > phivn = XCNEWVEC (struct phiprop_d, n); > > /* Walk the dominator tree in preorder. */ > - bbs = get_all_dominated_blocks (CDI_DOMINATORS, > - single_succ (ENTRY_BLOCK_PTR_FOR_FN (fun))); > + auto_vec<basic_block> bbs > + = get_all_dominated_blocks (CDI_DOMINATORS, > + single_succ (ENTRY_BLOCK_PTR_FOR_FN (fun))); > FOR_EACH_VEC_ELT (bbs, i, bb) > { > /* Since we're going to move dereferences across predecessor > @@ -514,7 +514,6 @@ pass_phiprop::execute (function *fun) > if (did_something) > gsi_commit_edge_inserts (); > > - bbs.release (); > free (phivn); > > free_dominance_info (CDI_POST_DOMINATORS); > -- > 2.20.1 >