On Thu, Jun 17, 2021 at 4:53 PM Trevor Saunders <tbsau...@tbsaunde.org> wrote:
> On Thu, Jun 17, 2021 at 03:48:28PM +0200, Christophe Lyon wrote: > > 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 > > Ah, interesting, I believe the following patch corrects the oversight > here. Its interesting that newer compilers use the auto_vec(vec<T> &&) > constructor to fix this up but 4.8.5 refuses. > > diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c > index fdd8d3f43fe..2db46c81036 100644 > --- a/gcc/cfgloopanal.c > +++ b/gcc/cfgloopanal.c > @@ -504,7 +504,7 @@ auto_vec<basic_block> > get_loop_hot_path (const class loop *loop) > { > basic_block bb = loop->header; > - vec<basic_block> path = vNULL; > + auto_vec<basic_block> path; > bitmap visited = BITMAP_ALLOC (NULL); > > while (true) > > Sorry about the trouble, will commit the above as obvious if > it bootstraps. > > Thanks, I confirm the builds complete again. Christophe > Trev > > > > > 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 > > > > >