* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
@ 2009-12-29 12:41 ` debian-gcc at lists dot debian dot org
2009-12-31 16:56 ` rguenth at gcc dot gnu dot org
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: debian-gcc at lists dot debian dot org @ 2009-12-29 12:41 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from debian-gcc at lists dot debian dot org 2009-12-29 12:41 -------
Created an attachment (id=19411)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19411&action=view)
preprocessed source
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
2009-12-29 12:41 ` [Bug target/42536] " debian-gcc at lists dot debian dot org
@ 2009-12-31 16:56 ` rguenth at gcc dot gnu dot org
2010-01-02 14:30 ` jakub at gcc dot gnu dot org
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2009-12-31 16:56 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ra
Target Milestone|--- |4.4.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
2009-12-29 12:41 ` [Bug target/42536] " debian-gcc at lists dot debian dot org
2009-12-31 16:56 ` rguenth at gcc dot gnu dot org
@ 2010-01-02 14:30 ` jakub at gcc dot gnu dot org
2010-01-02 16:44 ` jakub at gcc dot gnu dot org
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-01-02 14:30 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from jakub at gcc dot gnu dot org 2010-01-02 14:30 -------
With 3 register vars in the function (ebx, edi, esi) on the register starved
ix86 the error is tollerable. From the 8 registers the programmer takes 3,
%esp is fixed, without -fomit-frame-pointer %ebp is fixed too, which leaves
just %eax, %edx and %ecx for register allocation. Even if this happens to
compile, the result can't work fast, as almost all insns need to have
temporaries spilled and reread back.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
` (2 preceding siblings ...)
2010-01-02 14:30 ` jakub at gcc dot gnu dot org
@ 2010-01-02 16:44 ` jakub at gcc dot gnu dot org
2010-01-07 14:45 ` rguenth at gcc dot gnu dot org
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-01-02 16:44 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from jakub at gcc dot gnu dot org 2010-01-02 16:44 -------
Reduced testcase:
/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-O2 -fno-gcse" } */
struct C;
struct B { struct C *b; };
struct C { void (*baz) (struct B *, void *, int); };
typedef union { int f; void *e; } D;
struct E { struct B *e; };
struct A { struct E *a1; D *a2; D *a3; };
void
foo (long *x, long y)
{
*(long long *) x = y;
}
extern long fn1 (D);
extern void fn2 (void);
void
_bar (struct A *x)
{
register int a asm ("esi");
register D *volatile b asm ("edi");
register int c asm ("ebx");
void *d;
asm volatile ("" : "=r" (a), "=r" (b), "=r" (c) : : "memory");
if ((d = b[-2].e) != 0 && b [-2].e < d)
{
foo (&(((long *) d) + 1) [b[0].f], fn1 (b[-1]));
x->a2 = (D *) c;
x->a3 = b;
fn2 ();
}
x->a1->e->b->baz (x->a1->e, (void *) (long) a, 1);
}
Wonder why RA doesn't try to force the memory address into register, that would
free up one register from the 4 otherwise needed (2 for the address, 2 for
DImode value being stored into the memory).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
` (3 preceding siblings ...)
2010-01-02 16:44 ` jakub at gcc dot gnu dot org
@ 2010-01-07 14:45 ` rguenth at gcc dot gnu dot org
2010-01-21 13:15 ` jakub at gcc dot gnu dot org
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2010-01-07 14:45 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
` (4 preceding siblings ...)
2010-01-07 14:45 ` rguenth at gcc dot gnu dot org
@ 2010-01-21 13:15 ` jakub at gcc dot gnu dot org
2010-03-20 13:04 ` steven at gcc dot gnu dot org
2010-04-30 8:58 ` [Bug target/42536] [4.4/4.5/4.6 " jakub at gcc dot gnu dot org
7 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-01-21 13:15 UTC (permalink / raw)
To: gcc-bugs
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.4.3 |4.4.4
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
` (5 preceding siblings ...)
2010-01-21 13:15 ` jakub at gcc dot gnu dot org
@ 2010-03-20 13:04 ` steven at gcc dot gnu dot org
2010-04-30 8:58 ` [Bug target/42536] [4.4/4.5/4.6 " jakub at gcc dot gnu dot org
7 siblings, 0 replies; 13+ messages in thread
From: steven at gcc dot gnu dot org @ 2010-03-20 13:04 UTC (permalink / raw)
To: gcc-bugs
--
steven at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2010-03-20 13:03:43
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5/4.6 regression] ICE in spill_failure, at reload1.c:2141
2009-12-29 12:41 [Bug target/42536] New: [4.4/4.5 regression] ICE in spill_failure, at reload1.c:2141 debian-gcc at lists dot debian dot org
` (6 preceding siblings ...)
2010-03-20 13:04 ` steven at gcc dot gnu dot org
@ 2010-04-30 8:58 ` jakub at gcc dot gnu dot org
7 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-04-30 8:58 UTC (permalink / raw)
To: gcc-bugs
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.4.4 |4.4.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5/4.6 regression] ICE in spill_failure, at reload1.c:2141
[not found] <bug-42536-4@http.gcc.gnu.org/bugzilla/>
@ 2010-10-01 11:52 ` jakub at gcc dot gnu.org
2010-11-29 20:15 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2010-10-01 11:52 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.4.5 |4.4.6
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5/4.6 regression] ICE in spill_failure, at reload1.c:2141
[not found] <bug-42536-4@http.gcc.gnu.org/bugzilla/>
2010-10-01 11:52 ` jakub at gcc dot gnu.org
@ 2010-11-29 20:15 ` jakub at gcc dot gnu.org
2010-11-29 20:40 ` law at redhat dot com
2010-11-29 21:15 ` vmakarov at redhat dot com
3 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2010-11-29 20:15 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org,
| |law at gcc dot gnu.org,
| |vmakarov at gcc dot gnu.org
Known to fail| |
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-11-29 19:50:18 UTC ---
Jeff/Vlad, how hard would it be to try to split the insn into two insns instead
of a spill failure (for insns using a MEM whose address uses more than one hard
register) - one which forces the address into register (assuming it is
supported) and the store (or load) which would use a simpler address form?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5/4.6 regression] ICE in spill_failure, at reload1.c:2141
[not found] <bug-42536-4@http.gcc.gnu.org/bugzilla/>
2010-10-01 11:52 ` jakub at gcc dot gnu.org
2010-11-29 20:15 ` jakub at gcc dot gnu.org
@ 2010-11-29 20:40 ` law at redhat dot com
2010-11-29 21:15 ` vmakarov at redhat dot com
3 siblings, 0 replies; 13+ messages in thread
From: law at redhat dot com @ 2010-11-29 20:40 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
Jeffrey A. Law <law at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |law at redhat dot com
--- Comment #5 from Jeffrey A. Law <law at redhat dot com> 2010-11-29 20:33:14 UTC ---
I guess it would be possible for reload to split an insn in some circumstances,
particularly when there's complex addressing modes and multiple registers dying
within the insn.
As you know, I've been poking at range splitting and we might be able to model
this case too. Right now I split based on unallocated pseudos and expect to
split ranges based on pseudos getting the wrong kind of register in the future.
However, there's a couple areas were we still want to split ranges and we may
be able to come up with a generic way to express the other ranges we want to
split:
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/42536] [4.4/4.5/4.6 regression] ICE in spill_failure, at reload1.c:2141
[not found] <bug-42536-4@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2010-11-29 20:40 ` law at redhat dot com
@ 2010-11-29 21:15 ` vmakarov at redhat dot com
3 siblings, 0 replies; 13+ messages in thread
From: vmakarov at redhat dot com @ 2010-11-29 21:15 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42536
Vladimir Makarov <vmakarov at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |vmakarov at redhat dot com
--- Comment #6 from Vladimir Makarov <vmakarov at redhat dot com> 2010-11-29 20:39:39 UTC ---
(In reply to comment #4)
> Jeff/Vlad, how hard would it be to try to split the insn into two insns instead
> of a spill failure (for insns using a MEM whose address uses more than one hard
> register) - one which forces the address into register (assuming it is
> supported) and the store (or load) which would use a simpler address form?
If it is done in reload (and imho this is the most right place to do), I think
it would be hard. It needs some person with a good knowledge of the reload.
It is also possible to do some splitting in other parts of compiler but it
would an approximate solution (it means not all such cases will be avoided
or/and it will hurt performance in general case).
^ permalink raw reply [flat|nested] 13+ messages in thread