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