[PATCH v7] Missed function specialization + partial devirtualization

Jan Hubicka hubicka@ucw.cz
Wed Jan 15 14:51:00 GMT 2020


> On Wed, Jan 15, 2020 at 1:37 PM Jan Hubicka <hubicka@ucw.cz> wrote:
> >
> > > gcc/ChangeLog:
> > >
> > > 2020-01-15  Martin Liska  <mliska@suse.cz>
> > >
> > >       * ipa-profile.c (ipa_profile_read_edge_summary): Do not allow
> > >       2 calls of streamer_read_hwi in a function call.
> >
> > Good catch, Martin!
> > > ---
> > >  gcc/ipa-profile.c | 5 +++--
> > >  1 file changed, 3 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
> > > index fc231c916b7..03272f20987 100644
> > > --- a/gcc/ipa-profile.c
> > > +++ b/gcc/ipa-profile.c
> > > @@ -451,8 +451,9 @@ ipa_profile_read_edge_summary (class lto_input_block *ib, cgraph_edge *edge)
> > >
> > >    for (i = 0; i < len; i++)
> > >    {
> > > -    speculative_call_target item (streamer_read_hwi (ib),
> > > -     streamer_read_hwi (ib));
> > > +    unsigned int target_id = streamer_read_hwi (ib);
> > > +    int target_probability = streamer_read_hwi (ib);
> > > +    speculative_call_target item (target_id, target_probability);
> >
> > David, this may be interesting case for analyzer/warning. This surfaced
> > in LTO stremaing for second time quite recently and leads to hard to
> > find bugs.
> >
> > While day before yesterday in pub I argued that warning for nested
> > function calls is not a good way since it would warn too often, perhaps
> > we want to have some way to annotate streamer functions to make it clear
> > that we do not want them to appear inside function call parameters where
> > evaluation order is undefined.
> 
> Maybe one can always warn if you call the same function twice (and the
> function appears to have side-effects)?  Might fire too often for tree checking
> functions tho.

Yep warning always when function calls appear within different
parameters of a function calls seems like something we would not be able
to enable by default...

Honza
> 
> Richard.
> 
> > Honza
> > >      csum->speculative_call_targets.safe_push (item);
> > >    }
> > >  }
> > > --
> > > 2.24.1
> > >
> >



More information about the Gcc-patches mailing list