This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Avoid unnecesary GGC runs during LTO
- From: Richard Biener <rguenther at suse dot de>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 17 Apr 2014 19:14:49 +0200
- Subject: Re: Avoid unnecesary GGC runs during LTO
- Authentication-results: sourceware.org; auth=none
- References: <20140411060757 dot GI12814 at kam dot mff dot cuni dot cz> <alpine dot LSU dot 2 dot 11 dot 1404110955110 dot 31108 at zhemvz dot fhfr dot qr> <20140411191358 dot GC20526 at kam dot mff dot cuni dot cz> <20140417160313 dot GB18268 at kam dot mff dot cuni dot cz>
On April 17, 2014 6:03:13 PM CEST, Jan Hubicka <hubicka@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 <rguenther@suse.de>
>> > SUSE / SUSE Labs
>> > SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
>> > GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer