This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Bootstrap times on mainline are getting worse
- From: Zack Weinberg <zack at codesourcery dot com>
- To: Pop Sébastian <pop at gauvain dot u-strasbg dot fr>
- Cc: Diego Novillo <dnovillo at redhat dot com>, gcc at gcc dot gnu dot org,gcc-patches at gcc dot gnu dot org
- Date: Sat, 19 Oct 2002 10:17:41 -0700
- Subject: Re: Bootstrap times on mainline are getting worse
- References: <20021017144047.GA13629@tornado.toronto.redhat.com> <jebs5tp11v.fsf@sykes.suse.de> <200210180359.XAA24196@caip.rutgers.edu> <20021018112206.GA22977@tornado.toronto.redhat.com> <200210181427.KAA07215@caip.rutgers.edu> <20021018153411.GA25881@tornado.toronto.redhat.com> <20021019095206.GA20558@gauvain.u-strasbg.fr>
On Sat, Oct 19, 2002 at 11:52:06AM +0200, Pop Sébastian wrote:
> On Fri, Oct 18, 2002 at 11:34:11AM -0400, Diego Novillo wrote:
> > On Fri, 18 Oct 2002, Kaveh R. Ghazi wrote:
> >
> > > Care to take a stab?
> > >
> > Heh, having the time to do that would be nice. A cursory look at
> > the .diff files doesn't reveal anything blatantly obvious. Only
> > three potential candidates:
> >
> > +2002-10-04 Roger Sayle <roger@eyesopen.com>
> > +
> > + * config/i386/i386.h (processor_costs): Add new fields fadd,
> > + fmul, fdiv, fabs, fchs and fsqrt to costs structure.
> > + (RTX_COSTS): Use these fields to determine the RTX costs
> > + of floating point addition/subtraction, multiplication,
> > + division, fabs, negation and square root respectively.
> > + * config/i386/i386.c (size_cost): Provide instruction sizes
> > + for these new fields.
> > + (i386_cost, i486_cost, pentium_cost, pentiumpro_cost,
> > + k6_cost, athlon_cost, pentium4_cost): Provide typical cycle
> > + counts for these new fields for all x86 processor variants.
> > +
> >
> A 'time make bootstrap' on version "2002-10-03" gives:
>
> real 57m38.632s
> user 51m20.200s
> sys 4m55.500s
>
>
> With this patch I get:
>
> real 58m16.766s
> user 51m14.720s
> sys 5m0.850s
I smell cache blowout. Notice how the real and system times went up,
but the user time went down?
The processor_costs tables are entirely populated with values which we
can reasonably expect will never rise above 256. So I propose to
change all the fields to unsigned char. Would you mind trying out the
appended patch on top of 2002-10-03+Roger's patch?
zw
* config/i386/i386.h (struct processor_costs):
Make all fields const unsigned char.
===================================================================
Index: config/i386/i386.h
--- config/i386/i386.h 19 Oct 2002 08:48:37 -0000 1.297
+++ config/i386/i386.h 19 Oct 2002 17:16:36 -0000
@@ -37,50 +37,53 @@ Boston, MA 02111-1307, USA. */
/* Define the specific costs for a given cpu */
struct processor_costs {
- const int add; /* cost of an add instruction */
- const int lea; /* cost of a lea instruction */
- const int shift_var; /* variable shift costs */
- const int shift_const; /* constant shift costs */
- const int mult_init; /* cost of starting a multiply */
- const int mult_bit; /* cost of multiply per each bit set */
- const int divide; /* cost of a divide/mod */
- int movsx; /* The cost of movsx operation. */
- int movzx; /* The cost of movzx operation. */
- const int large_insn; /* insns larger than this cost more */
- const int move_ratio; /* The threshold of number of scalar
- memory-to-memory move insns. */
- const int movzbl_load; /* cost of loading using movzbl */
- const int int_load[3]; /* cost of loading integer registers
- in QImode, HImode and SImode relative
- to reg-reg move (2). */
- const int int_store[3]; /* cost of storing integer register
- in QImode, HImode and SImode */
- const int fp_move; /* cost of reg,reg fld/fst */
- const int fp_load[3]; /* cost of loading FP register
- in SFmode, DFmode and XFmode */
- const int fp_store[3]; /* cost of storing FP register
- in SFmode, DFmode and XFmode */
- const int mmx_move; /* cost of moving MMX register. */
- const int mmx_load[2]; /* cost of loading MMX register
- in SImode and DImode */
- const int mmx_store[2]; /* cost of storing MMX register
- in SImode and DImode */
- const int sse_move; /* cost of moving SSE register. */
- const int sse_load[3]; /* cost of loading SSE register
- in SImode, DImode and TImode*/
- const int sse_store[3]; /* cost of storing SSE register
- in SImode, DImode and TImode*/
- const int mmxsse_to_integer; /* cost of moving mmxsse register to
- integer and vice versa. */
- const int prefetch_block; /* bytes moved to cache for prefetch. */
- const int simultaneous_prefetches; /* number of parallel prefetch
- operations. */
- const int fadd; /* cost of FADD and FSUB instructions. */
- const int fmul; /* cost of FMUL instruction. */
- const int fdiv; /* cost of FDIV instruction. */
- const int fabs; /* cost of FABS instruction. */
- const int fchs; /* cost of FCHS instruction. */
- const int fsqrt; /* cost of FSQRT instruction. */
+#define cuchar const unsigned char
+ cuchar add; /* cost of an add instruction */
+ cuchar lea; /* cost of a lea instruction */
+ cuchar shift_var; /* variable shift costs */
+ cuchar shift_const; /* constant shift costs */
+ cuchar mult_init; /* cost of starting a multiply */
+ cuchar mult_bit; /* cost of multiply per each bit set */
+ cuchar divide; /* cost of a divide/mod */
+ cuchar movsx; /* The cost of movsx operation. */
+ cuchar movzx; /* The cost of movzx operation. */
+ cuchar large_insn; /* insns larger than this cost more */
+ cuchar move_ratio; /* The threshold of number of scalar
+ memory-to-memory move insns. */
+ cuchar movzbl_load; /* cost of loading using movzbl */
+ cuchar int_load[3]; /* cost of loading integer registers
+ in QImode, HImode and SImode relative
+ to reg-reg move (2). */
+ cuchar int_store[3]; /* cost of storing integer register
+ in QImode, HImode and SImode */
+ cuchar fp_move; /* cost of reg,reg fld/fst */
+ cuchar fp_load[3]; /* cost of loading FP register
+ in SFmode, DFmode and XFmode */
+ cuchar fp_store[3]; /* cost of storing FP register
+ in SFmode, DFmode and XFmode */
+ cuchar mmx_move; /* cost of moving MMX register. */
+ cuchar mmx_load[2]; /* cost of loading MMX register
+ in SImode and DImode. */
+ cuchar mmx_store[2]; /* cost of storing MMX register
+ in SImode and DImode. */
+ cuchar sse_move; /* cost of moving SSE register. */
+ cuchar sse_load[3]; /* cost of loading SSE register
+ in SImode, DImode and TImode. */
+ cuchar sse_store[3]; /* cost of storing SSE register
+ in SImode, DImode and TImode. */
+ cuchar mmxsse_to_integer;
+ /* cost of moving mmxsse register to integer
+ and vice versa. */
+ cuchar prefetch_block; /* bytes moved to cache for prefetch. */
+ cuchar simultaneous_prefetches;
+ /* number of parallel prefetch operations. */
+ cuchar fadd; /* cost of FADD and FSUB instructions. */
+ cuchar fmul; /* cost of FMUL instruction. */
+ cuchar fdiv; /* cost of FDIV instruction. */
+ cuchar fabs; /* cost of FABS instruction. */
+ cuchar fchs; /* cost of FCHS instruction. */
+ cuchar fsqrt; /* cost of FSQRT instruction. */
+#undef cuchar
};
extern const struct processor_costs *ix86_cost;