[Bug target/37488] register allocation spills floats needlessly

2010-02-25 Thread law at redhat dot com
--- Comment #10 from law at redhat dot com 2010-02-25 18:49 --- Fixed long ago. Code looks reasonably efficient with trunk. -- law at redhat dot com changed: What|Removed |Added

[Bug target/37488] register allocation spills floats needlessly

2009-07-22 Thread vmakarov at gcc dot gnu dot org
--- Comment #9 from vmakarov at gcc dot gnu dot org 2009-07-22 22:00 --- Subject: Bug 37488 Author: vmakarov Date: Wed Jul 22 22:00:17 2009 New Revision: 149962 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=149962 Log: 2009-07-22 Vladimir Makarov vmaka...@redhat.com

[Bug target/37488] register allocation spills floats needlessly

2009-06-30 Thread vmakarov at redhat dot com
--- 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

[Bug target/37488] register allocation spills floats needlessly

2009-06-29 Thread vmakarov at redhat dot com
--- Comment #7 from vmakarov at redhat dot com 2009-06-29 19:44 --- Paolo, Steven, thanks for looking into this problem. Using the mips approach is a good idea. Although the costs of FLOAT_REGS and SSE_REGS are the same in ira-costs.c, IRA should prefer SSE_REGS or FLOAT_REGS

[Bug target/37488] register allocation spills floats needlessly

2009-06-22 Thread steven at gcc dot gnu dot org
--- Comment #6 from steven at gcc dot gnu dot org 2009-06-22 22:23 --- Vlad, what can we do with IRA to make it choose a better regclass here? Maybe do something similar to what MIPS does, changing IRA_COVER_CLASSES for i386 depending on target options? --

[Bug target/37488] register allocation spills floats needlessly

2009-02-04 Thread bonzini at gnu dot org
--- Comment #2 from bonzini at gnu dot org 2009-02-04 15:57 --- minimized testcase: void test(char *ip, double *reg_f) { static void * const addrs[] = {L1, L2}; double reg_f_a; reg_f_a = 0.0; goto *addrs[*++ip]; L1: reg_f_a += reg_f[*++ip];

[Bug target/37488] register allocation spills floats needlessly

2009-02-04 Thread bonzini at gnu dot org
--- Comment #3 from bonzini at gnu dot org 2009-02-04 16:03 --- requires computed gotos and floats, even smaller testcase void test(char *ip, double *reg_f) { static void * const addrs[] = {L1, L2}; double reg_f_a; reg_f_a = 0.0; goto *addrs[*++ip]; L1: reg_f_a =

[Bug target/37488] register allocation spills floats needlessly

2009-02-04 Thread bonzini at gnu dot org
--- Comment #4 from bonzini at gnu dot org 2009-02-04 16:22 --- We get a wrong choice of class a1 (r59,l0) best FLOAT_REGS, cover FLOAT_REGS (remember this is with -mfpmath=sse) despite the preferred reload class is indeed SSE_REGS. But then, we get the spill even without SSE

[Bug target/37488] register allocation spills floats needlessly

2009-02-04 Thread bonzini at gnu dot org
--- Comment #5 from bonzini at gnu dot org 2009-02-04 16:31 --- The old register allocator chose Register 59 pref FLOAT_SSE_REGS or none but that is not a cover class. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37488