Message ID | 20210615055922.27205-3-tbsaunde@tbsaunde.org |
---|---|
State | New |
Headers | show |
Series | [1/6] auto_vec copy/move improvements | expand |
On Tue, Jun 15, 2021 at 8:01 AM Trevor Saunders <tbsaunde@tbsaunde.org> wrote: > > This ensures callers take ownership of the returned vector. > > Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org> > > bootstrapped and regtested on x86_64-linux-gnu, ok? OK. > 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 >
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 <tbsaunde@tbsaunde.org> wrote: > > > > This ensures callers take ownership of the returned vector. > > > > Signed-off-by: Trevor Saunders <tbsaunde@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 > >
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 <tbsaunde@tbsaunde.org> wrote: > > > > > > This ensures callers take ownership of the returned vector. > > > > > > Signed-off-by: Trevor Saunders <tbsaunde@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. 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 > > >
On Thu, Jun 17, 2021 at 4:53 PM Trevor Saunders <tbsaunde@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 <tbsaunde@tbsaunde.org> > wrote: > > > > > > > > This ensures callers take ownership of the returned vector. > > > > > > > > Signed-off-by: Trevor Saunders <tbsaunde@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 > > > > >
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,
This ensures callers take ownership of the returned vector. Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org> bootstrapped and regtested on x86_64-linux-gnu, ok? 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(-)