> > > +
> > > +  /* At this stage we know that majority of GGC memory is reachable.  
> > > +     Growing the limits prevents unnecesary invocation of GGC.  */
> > > +  ggc_grow ();
> > >    ggc_collect ();
> > 
> > Isn't the collect here pointless?  I see not in ENABLE_CHECKING, but
> > shouldn't this be abstracted away, thus call ggc_collect from ggc_grow?
> > Or maybe rather even for ENABLE_CHECKING adjust G.allocated_last_gc
> > and simply drop the ggc_collect above ().
> 
> I am fine with both.  I basically decided to keep the explicit ggc_collect() 
> to
> make it clear (from lto.c source code) that we are GGC safe at this point and
> to have way to double check that we do not produce too much of garbage with
> checking disabled. (so with -Q I will see how much it is collected at that 
> place).
> 
> We can embed it into ggc_grow and document that w/o checking it is equivalent
> to ggc_cooect.
> > 
> > Anyway, this is sth for stage1 at this point.
> 
> OK,
> Honza

Ping...
the patches saves 33 GGC runs during libxul.so link, that is not that bad ;)

Honza
> > 
> > Thanks,
> > Richard.
> > 
> > >    /* Set the hooks so that all of the ipa passes can read in their data. 
> > >  */
> > > Index: ggc-none.c
> > > ===================================================================
> > > --- ggc-none.c    (revision 209170)
> > > +++ ggc-none.c    (working copy)
> > > @@ -63,3 +63,8 @@ ggc_free (void *p)
> > >  {
> > >    free (p);
> > >  }
> > > +
> > > +void
> > > +ggc_grow (void)
> > > +{
> > > +}
> > > Index: ggc-page.c
> > > ===================================================================
> > > --- ggc-page.c    (revision 209170)
> > > +++ ggc-page.c    (working copy)
> > > @@ -2095,6 +2095,19 @@ ggc_collect (void)
> > >      fprintf (G.debug_file, "END COLLECTING\n");
> > >  }
> > >  
> > > +/* Assume that all GGC memory is reachable and grow the limits for next 
> > > collection. */
> > > +
> > > +void
> > > +ggc_grow (void)
> > > +{
> > > +#ifndef ENABLE_CHECKING
> > > +  G.allocated_last_gc = MAX (G.allocated_last_gc,
> > > +                      G.allocated);
> > > +#endif
> > > +  if (!quiet_flag)
> > > +    fprintf (stderr, " {GC start %luk} ", (unsigned long) G.allocated / 
> > > 1024);
> > > +}
> > > +
> > >  /* Print allocation statistics.  */
> > >  #define SCALE(x) ((unsigned long) ((x) < 1024*10 \
> > >             ? (x) \
> > > 
> > > 
> > 
> > -- 
> > Richard Biener <rguent...@suse.de>
> > SUSE / SUSE Labs
> > SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
> > GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer

Reply via email to