The following code extern double f(double, double); void g (double x) { double z, y;
z = 0.0; y = 1.0 - x; again: z = y - z; f(z, 1.0); if (z == 0.0) goto again; } has a fld1 instruction when compiled with "-mfpmath=sse -msse2 -msseregparm -mtune=pentiumpro -O2". This instruction is caused by a reload into a FLOAT_REGS register, and moving the value to a SSE register needs secondary memory. -- Summary: reload uses FLOAT_REGS class eagerly even if - mfpmath=sse Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: missed-optimization, ra Severity: normal Priority: P2 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bonzini at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org,rguenth at gcc dot gnu dot org GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22453