> > +
> > +  /* 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
> 
> 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