> So OK to commit this?
>
> This patch makes sure the profile_count information is initialized for the
> new
> bb created in move_sese_region_to_fn.
>
> gcc/ChangeLog:
>
> * tree-cfg.cc (move_sese_region_to_fn): Initialize profile_count for
> new basic block.
>
> Bootstrapped and regression tested on aarch64-unknown-linux-gnu and
> x86_64-pc-linux-gnu.
This is OK,
thanks!
Honza
>
> On 04/10/2023 12:02, Jan Hubicka wrote:
> > > Hi Honza,
> > >
> > > My current patch set for AArch64 VLA omp codegen started failing on
> > > gcc.dg/gomp/pr87898.c after this. I traced it back to
> > > 'move_sese_region_to_fn' in tree/cfg.cc not setting count for the bb
> > > created.
> > >
> > > I was able to 'fix' it locally by setting the count of the new bb to the
> > > accumulation of e->count () of all the entry_endges (if initialized). I'm
> > > however not even close to certain that's the right approach, attached
> > > patch
> > > for illustration.
> > >
> > > Kind regards,
> > > Andre
> > > diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
> >
> > > index
> > > ffab7518b1568b58e610e26feb9e3cab18ddb3c2..32fc47ae683164bf8fac477fbe6e2c998382e754
> > > 100644
> > > --- a/gcc/tree-cfg.cc
> > > +++ b/gcc/tree-cfg.cc
> > > @@ -8160,11 +8160,15 @@ move_sese_region_to_fn (struct function
> > > *dest_cfun, basic_block entry_bb,
> > > bb = create_empty_bb (entry_pred[0]);
> > > if (current_loops)
> > > add_bb_to_loop (bb, loop);
> > > + profile_count count = profile_count::zero ();
> > > for (i = 0; i < num_entry_edges; i++)
> > > {
> > > e = make_edge (entry_pred[i], bb, entry_flag[i]);
> > > e->probability = entry_prob[i];
> > > + if (e->count ().initialized_p ())
> > > + count += e->count ();
> > > }
> > > + bb->count = count;
> >
> > This looks generally right - if you create a BB you need to set its
> > count and unless it has self-loop that is the sum of counts of
> > incommping edges.
> >
> > However the initialized_p check should be unnecessary: if one of entry
> > edges to BB is uninitialized, the + operation will make bb count
> > uninitialized too, which is OK.
> >
> > Honza
> > > for (i = 0; i < num_exit_edges; i++)
> > > {
> >
> diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
> index
> ffab7518b1568b58e610e26feb9e3cab18ddb3c2..ffeb20b717aead756844c5f48c2cc23f5e9f14a6
> 100644
> --- a/gcc/tree-cfg.cc
> +++ b/gcc/tree-cfg.cc
> @@ -8160,11 +8160,14 @@ move_sese_region_to_fn (struct function *dest_cfun,
> basic_block entry_bb,
> bb = create_empty_bb (entry_pred[0]);
> if (current_loops)
> add_bb_to_loop (bb, loop);
> + profile_count count = profile_count::zero ();
> for (i = 0; i < num_entry_edges; i++)
> {
> e = make_edge (entry_pred[i], bb, entry_flag[i]);
> e->probability = entry_prob[i];
> + count += e->count ();
> }
> + bb->count = count;
>
> for (i = 0; i < num_exit_edges; i++)
> {