* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
@ 2012-09-03 18:25 ` ubizjak at gmail dot com
2012-09-04 14:48 ` ubizjak at gmail dot com
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2012-09-03 18:25 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
Uros Bizjak <ubizjak at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |izamyatin at gmail dot com
--- Comment #1 from Uros Bizjak <ubizjak at gmail dot com> 2012-09-03 18:24:59 UTC ---
This is the problem with scheduler, where insns involving hard registers are
moved around. This part should be fixed by the WIP patch at [1].
[1] http://gcc.gnu.org/ml/gcc-patches/2012-08/msg00810.html
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
2012-09-03 18:25 ` [Bug rtl-optimization/54472] " ubizjak at gmail dot com
@ 2012-09-04 14:48 ` ubizjak at gmail dot com
2012-09-04 17:47 ` abel at gcc dot gnu.org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2012-09-04 14:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #2 from Uros Bizjak <ubizjak at gmail dot com> 2012-09-04 14:48:02 UTC ---
For some reason, -fselective-scheduling is moving
(insn 19 16 22 2 (use (reg/i:SI 0 ax)) testcase.c:6 -1
(nil))
around. This insn marks function return, so IMO should be at the function exit
all the time. -fschedule-insns (without -fselective-scheduling) leaves the insn
at the function exit. Is it OK to move this marker around?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
2012-09-03 18:25 ` [Bug rtl-optimization/54472] " ubizjak at gmail dot com
2012-09-04 14:48 ` ubizjak at gmail dot com
@ 2012-09-04 17:47 ` abel at gcc dot gnu.org
2012-10-04 9:29 ` ubizjak at gmail dot com
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2012-09-04 17:47 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #3 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-09-04 17:47:24 UTC ---
(In reply to comment #2)
> For some reason, -fselective-scheduling is moving
>
> (insn 19 16 22 2 (use (reg/i:SI 0 ax)) testcase.c:6 -1
> (nil))
>
> around. This insn marks function return, so IMO should be at the function exit
> all the time. -fschedule-insns (without -fselective-scheduling) leaves the insn
> at the function exit. Is it OK to move this marker around?
I will take a look but I'm out of office until Friday at least (maybe Monday).
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (2 preceding siblings ...)
2012-09-04 17:47 ` abel at gcc dot gnu.org
@ 2012-10-04 9:29 ` ubizjak at gmail dot com
2012-10-04 12:43 ` abel at gcc dot gnu.org
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2012-10-04 9:29 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2012-10-04 09:29:15 UTC ---
(In reply to comment #3)
> > For some reason, -fselective-scheduling is moving
> >
> > (insn 19 16 22 2 (use (reg/i:SI 0 ax)) testcase.c:6 -1
> > (nil))
> >
> > around. This insn marks function return, so IMO should be at the function exit
> > all the time. -fschedule-insns (without -fselective-scheduling) leaves the insn
> > at the function exit. Is it OK to move this marker around?
>
> I will take a look but I'm out of office until Friday at least (maybe Monday).
Any progress on this?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (3 preceding siblings ...)
2012-10-04 9:29 ` ubizjak at gmail dot com
@ 2012-10-04 12:43 ` abel at gcc dot gnu.org
2012-10-24 11:10 ` izamyatin at gmail dot com
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2012-10-04 12:43 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
Andrey Belevantsev <abel at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2012-10-04
AssignedTo|unassigned at gcc dot |abel at gcc dot gnu.org
|gnu.org |
Ever Confirmed|0 |1
--- Comment #5 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-10-04 12:43:36 UTC ---
(In reply to comment #4)
> (In reply to comment #3)
> > > For some reason, -fselective-scheduling is moving
> > >
> > > (insn 19 16 22 2 (use (reg/i:SI 0 ax)) testcase.c:6 -1
> > > (nil))
> > >
> > > around. This insn marks function return, so IMO should be at the function exit
> > > all the time. -fschedule-insns (without -fselective-scheduling) leaves the insn
> > > at the function exit. Is it OK to move this marker around?
> >
> > I will take a look but I'm out of office until Friday at least (maybe Monday).
>
> Any progress on this?
Sorry Uros, I forgot about this. I took a look, the reason is actually in
selective scheduler not handling implicit_sets (we miss dependencies between
implicit_sets register sets and other sets/clobbers). In this example, we miss
a dependency between insns 9 and 16 and thus schedule insn #16 earlier than
insn #9 and then its dependent insn #19 earlier than insn #9. Thus we are
moving the return mark before the actual function code.
The below patch fixes the test case for me. I need to double-check whether I
have caught all cases of implicit_sets generating dependencies in sched-deps.c
and then I will submit the patch for review.
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index e7ca3f1..0fbfdbe 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -3185,7 +3185,7 @@ has_dependence_note_reg_set (int regno)
|| reg_last->clobbers != NULL)
*dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
- if (reg_last->uses)
+ if (reg_last->uses || reg_last->implicit_sets)
*dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
}
}
@@ -3205,7 +3205,7 @@ has_dependence_note_reg_clobber (int regno)
if (reg_last->sets)
*dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
- if (reg_last->uses)
+ if (reg_last->uses || reg_last->implicit_sets)
*dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
}
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (4 preceding siblings ...)
2012-10-04 12:43 ` abel at gcc dot gnu.org
@ 2012-10-24 11:10 ` izamyatin at gmail dot com
2012-10-26 14:04 ` abel at gcc dot gnu.org
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: izamyatin at gmail dot com @ 2012-10-24 11:10 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #6 from Igor Zamyatin <izamyatin at gmail dot com> 2012-10-24 11:09:49 UTC ---
Have you managed to check the patch?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (5 preceding siblings ...)
2012-10-24 11:10 ` izamyatin at gmail dot com
@ 2012-10-26 14:04 ` abel at gcc dot gnu.org
2012-11-09 12:28 ` abel at gcc dot gnu.org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2012-10-26 14:04 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #7 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-10-26 14:04:03 UTC ---
(In reply to comment #6)
> Have you managed to check the patch?
The patch does the right thing for sets and clobbers, but the uses case should
be amended, too, judging from the sched-deps.c code. Sorry, I was too busy to
send the patch, now, I'll try doing this on the next week.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (6 preceding siblings ...)
2012-10-26 14:04 ` abel at gcc dot gnu.org
@ 2012-11-09 12:28 ` abel at gcc dot gnu.org
2012-11-09 12:33 ` abel at gcc dot gnu.org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2012-11-09 12:28 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #8 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-11-09 12:28:30 UTC ---
Author: abel
Date: Fri Nov 9 12:28:21 2012
New Revision: 193358
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193358
Log:
PR rtl-optimization/54472
* sel-sched-ir.c (has_dependence_note_reg_set): Handle implicit sets.
(has_dependence_note_reg_clobber,
has_dependence_note_reg_use): Likewise.
* gcc.dg/pr54472.c: New test.
Added:
trunk/gcc/testsuite/gcc.dg/pr54472.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/sel-sched-ir.c
trunk/gcc/testsuite/ChangeLog
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (7 preceding siblings ...)
2012-11-09 12:28 ` abel at gcc dot gnu.org
@ 2012-11-09 12:33 ` abel at gcc dot gnu.org
2013-04-03 14:53 ` mpolacek at gcc dot gnu.org
2013-04-03 15:51 ` abel at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2012-11-09 12:33 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #9 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-11-09 12:33:33 UTC ---
Fixed on trunk, backports to 4.7/4.6 are needed.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (8 preceding siblings ...)
2012-11-09 12:33 ` abel at gcc dot gnu.org
@ 2013-04-03 14:53 ` mpolacek at gcc dot gnu.org
2013-04-03 15:51 ` abel at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2013-04-03 14:53 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |mpolacek at gcc dot gnu.org
--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> 2013-04-03 14:53:36 UTC ---
So are we going to backport this one?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/54472] ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling
2012-09-03 18:04 [Bug rtl-optimization/54472] New: ICE (spill_failure): unable to find a register to spill in class 'AREG' with -O -fschedule-insns -fselective-scheduling zsojka at seznam dot cz
` (9 preceding siblings ...)
2013-04-03 14:53 ` mpolacek at gcc dot gnu.org
@ 2013-04-03 15:51 ` abel at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: abel at gcc dot gnu.org @ 2013-04-03 15:51 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54472
--- Comment #11 from Andrey Belevantsev <abel at gcc dot gnu.org> 2013-04-03 15:51:50 UTC ---
(In reply to comment #10)
> So are we going to backport this one?
Sorry, I've missed this one when backporting other stuff. I can do this
tomorrow, the patch is safe. However, the branch is frozen now, we need to ask
Richi for approval to squeeze it into the next 4.7 release.
^ permalink raw reply [flat|nested] 12+ messages in thread