> On Mon, Nov 06, 2017 at 02:47:52PM +0100, Jan Hubicka wrote:
> > Hi,
> > this patch fixes sanity checking ICE with FDO bootstrap.
> > The problem is when ENTRY_BLOCK_PTR count is zero and function is being
> > inlined we disabled scaling. This is no longer correct because scaling
> > also involves conversion between local and global profiles.
> > 
> > Bootstrapped/regtested x86_64-linux, comitted.
> > 
> > Honza
> > 
> >     PR bootstrap/82832
> >     * ipa-inline-transform.c (update_noncloned_frequencies): Always
> >     scale.
> >     (inline_transform): Likewise.
> >     * predict.c (counts_to_freqs): Remove useless conditional.
> >     * profile-count.h (profile_count::apply_scale): Move sanity check.
> >     * tree-inline.c (copy_bb): Always scale.
> >     (copy_cfg_body): Likewise.
> > Index: ipa-inline-transform.c
> > ===================================================================
> > --- ipa-inline-transform.c  (revision 254411)
> > +++ ipa-inline-transform.c  (working copy)
> > @@ -59,7 +59,18 @@ update_noncloned_frequencies (struct cgr
> >                           profile_count den)
> >  {
> >    struct cgraph_edge *e;
> > -  bool scale = (num == profile_count::zero () || den > 0);
> > +
> > +  /* We always must scale to be sure counters end up compatible.
> > +     If den is zero, just force it nonzero and hope for reasonable
> > +     approximation.
> > +     When num is forced nonzero, also update den, so we do not scale 
> > profile
> > +     to 0.   */
> > +  if (!(num == den)
> > +      && !(den.force_nonzero () == den))
> 
> Can't we use != here?

Profile_count comparsions are three state (true/false/unknown) and
conservative. This is becuase we have uninitialized counts for BBs missing
profile and also counts of different types (local guess and global profile
feedback)

I do not define != on profie counts for this reason, but still
this is somewhat counter-intuitive way to write that I really want to consider
pairs like 0,unknown as non-equal. Ideas for better API would be welcome.

Honza

Reply via email to