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? 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