> On April 17, 2014 6:03:13 PM CEST, Jan Hubicka <hubi...@ucw.cz> wrote: > >> > > + > >> > > + /* 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 ;) > > What is the updated patch you propose?
I was trying to explain, why I kept explicit ggc_collect just after ggc_grow: I want to make it clear that we are ggc safe at that point. I also want to see the ggc run happening w/o checking to have -Q report how much of garbage we see at this stage so I can keep eye on it. I can hide ENABLE_CHECKING ggc_collect call in ggc_grow and update documentation if your preffer. Honza > > Richard > > >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 >