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