This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/37488] register allocation spills floats needlessly
- From: "vmakarov at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Jun 2009 21:49:57 -0000
- Subject: [Bug target/37488] register allocation spills floats needlessly
- References: <bug-37488-16700@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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