[Bug target/37488] register allocation spills floats needlessly

vmakarov at redhat dot com gcc-bugzilla@gcc.gnu.org
Tue Jun 30 21:50:00 GMT 2009



------- Comment #8 from vmakarov at redhat dot com  2009-06-30 21:49 -------
I've checked gcc4.3.  It has the same problem.  So the reason is not only in
the chosen register class.  The both RAs make the pseudo in question
conflicting with all call clobbered hard-regs because it leaves on abnormal
edges (indirect calls are reasons for this).

If SSE_REGS is preferred to FLOAT_REGS by IRA (when the costs of usage SSE_REGS
and FLOAT_REGS are the same), SPEC2000 on Core2 with -O2 -m32 -msse2
-march=i686 -mfpmath=sse is practically the same (2544 vs 2538 for SSE_REGS
preference and 2614 vs 2620 correspondingly on SPECInt2000 and SPECFP2000). 
The code size is 0.28% for SPECInt and 0.56% for SPECFP bigger when SSE_REGS is
preferred because insns using xmm regs are longer than i387 insns as a rule.

I'll post the patch (including part dealing with indirect gotos) on Friday
after a thorough testing.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37488



More information about the Gcc-bugs mailing list