Commit 04029ca2 by Jeff Law

haifa-sched.c (create_reg_dead_note): Detect and handle another case where we…

haifa-sched.c (create_reg_dead_note): Detect and handle another case where we kill more regs after sched than were...

        * haifa-sched.c (create_reg_dead_note): Detect and handle another
        case where we kill more regs after sched than were killed before
        sched.
        * sched.c (create_reg_dead_note): Similarly.

From-SVN: r17183
parent 1d88b804
......@@ -4467,6 +4467,23 @@ create_reg_dead_note (reg, insn)
while (reg_note_regs < regs_killed)
{
link = XEXP (link, 1);
/* LINK might be zero if we killed more registers after scheduling
than before, and the last hard register we kill is actually
multiple hard regs.
This is normal for interblock scheduling, so deal with it in
that case, else abort. */
if (link == NULL_RTX && current_nr_blocks <= 1)
abort ();
else if (link == NULL_RTX)
{
link = rtx_alloc (EXPR_LIST);
PUT_REG_NOTE_KIND (link, REG_DEAD);
XEXP (link, 0) = gen_rtx (REG, word_mode, 0);
XEXP (link, 1) = NULL_RTX;
}
reg_note_regs += (REGNO (XEXP (link, 0)) >= FIRST_PSEUDO_REGISTER ? 1
: HARD_REGNO_NREGS (REGNO (XEXP (link, 0)),
GET_MODE (XEXP (link, 0))));
......
......@@ -2218,6 +2218,12 @@ create_reg_dead_note (reg, insn)
GET_MODE (XEXP (link, 0))));
while (reg_note_regs < regs_killed)
{
/* LINK might be zero if we killed more registers after scheduling
than before, and the last hard register we kill is actually
multiple hard regs. */
if (link == NULL_RTX)
abort ();
link = XEXP (link, 1);
reg_note_regs += (REGNO (XEXP (link, 0)) >= FIRST_PSEUDO_REGISTER ? 1
: HARD_REGNO_NREGS (REGNO (XEXP (link, 0)),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment