On Tue, 15 Jun 2021 at 08:47, Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > On Tue, Jun 15, 2021 at 8:01 AM Trevor Saunders <tbsau...@tbsaunde.org> wrote: > > > > This ensures callers take ownership of the returned vector. > > > > Signed-off-by: Trevor Saunders <tbsau...@tbsaunde.org> > > > > bootstrapped and regtested on x86_64-linux-gnu, ok? > > OK.
Since this was committed, I've noticed build errors (for cross-compilers): /tmp/9562118_6.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgloopanal.c: In function 'auto_vec<basic_block_def*> get_loop_hot_path(const loop*)': /tmp/9562118_6.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgloopanal.c:528:10: error: could not convert 'path' from 'vec<basic_block_def*>' to 'auto_vec<basic_block_def*>' return path; ^ /tmp/9562118_6.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgloopanal.c:529:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ I'm using gcc-4.8.5 as host compiler Christophe > > > gcc/ChangeLog: > > > > * cfgloop.h (get_loop_hot_path): Return auto_vec<basic_block>. > > * cfgloopanal.c (get_loop_hot_path): Likewise. > > * tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Likewise. > > --- > > gcc/cfgloop.h | 2 +- > > gcc/cfgloopanal.c | 2 +- > > gcc/tree-ssa-loop-ivcanon.c | 5 ++--- > > 3 files changed, 4 insertions(+), 5 deletions(-) > > > > diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h > > index 113241da130..5e699276c88 100644 > > --- a/gcc/cfgloop.h > > +++ b/gcc/cfgloop.h > > @@ -840,7 +840,7 @@ enum > > > > extern void doloop_optimize_loops (void); > > extern void move_loop_invariants (void); > > -extern vec<basic_block> get_loop_hot_path (const class loop *loop); > > +extern auto_vec<basic_block> get_loop_hot_path (const class loop *loop); > > > > /* Returns the outermost loop of the loop nest that contains LOOP.*/ > > static inline class loop * > > diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c > > index d0eade3dd34..e7b7ae2163e 100644 > > --- a/gcc/cfgloopanal.c > > +++ b/gcc/cfgloopanal.c > > @@ -500,7 +500,7 @@ single_likely_exit (class loop *loop, vec<edge> exits) > > order against direction of edges from latch. Specially, if > > header != latch, latch is the 1-st block. */ > > > > -vec<basic_block> > > +auto_vec<basic_block> > > get_loop_hot_path (const class loop *loop) > > { > > basic_block bb = loop->header; > > diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c > > index 3f9e9d0869f..b1971f83544 100644 > > --- a/gcc/tree-ssa-loop-ivcanon.c > > +++ b/gcc/tree-ssa-loop-ivcanon.c > > @@ -218,7 +218,7 @@ tree_estimate_loop_size (class loop *loop, edge exit, > > edge edge_to_cancel, > > gimple_stmt_iterator gsi; > > unsigned int i; > > bool after_exit; > > - vec<basic_block> path = get_loop_hot_path (loop); > > + auto_vec<basic_block> path = get_loop_hot_path (loop); > > > > size->overall = 0; > > size->eliminated_by_peeling = 0; > > @@ -342,7 +342,6 @@ tree_estimate_loop_size (class loop *loop, edge exit, > > edge edge_to_cancel, > > - size->last_iteration_eliminated_by_peeling) > upper_bound) > > { > > free (body); > > - path.release (); > > return true; > > } > > } > > @@ -379,7 +378,7 @@ tree_estimate_loop_size (class loop *loop, edge exit, > > edge edge_to_cancel, > > size->num_branches_on_hot_path++; > > } > > } > > - path.release (); > > + > > if (dump_file && (dump_flags & TDF_DETAILS)) > > fprintf (dump_file, "size: %i-%i, last_iteration: %i-%i\n", > > size->overall, > > size->eliminated_by_peeling, size->last_iteration, > > -- > > 2.20.1 > >