Commit 510dd77e by Richard Kenner

*** empty log message ***

From-SVN: r1730
parent 87b36970
...@@ -8095,6 +8095,18 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) ...@@ -8095,6 +8095,18 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
if (XEXP (note, 0) == elim_i2 || XEXP (note, 0) == elim_i1) if (XEXP (note, 0) == elim_i2 || XEXP (note, 0) == elim_i1)
break; break;
/* If the register is used in both I2 and I3 and it dies in I3,
we might have added another reference to it. If reg_n_refs
was 2, bump it to 3. This has to be correct since the
register must have been set somewhere. The reason this is
done is because local-alloc.c treats 2 references as a
special case. */
if (place == i3 && i2 != 0 && GET_CODE (XEXP (note, 0)) == REG
&& reg_n_refs[REGNO (XEXP (note, 0))]== 2
&& reg_referenced_p (XEXP (note, 0), PATTERN (i2)))
reg_n_refs[REGNO (XEXP (note, 0))] = 3;
if (place == 0) if (place == 0)
for (tem = prev_nonnote_insn (i3); for (tem = prev_nonnote_insn (i3);
tem && (GET_CODE (tem) == INSN tem && (GET_CODE (tem) == INSN
......
...@@ -2078,6 +2078,13 @@ output_operand (x, code) ...@@ -2078,6 +2078,13 @@ output_operand (x, code)
{ {
if (x && GET_CODE (x) == SUBREG) if (x && GET_CODE (x) == SUBREG)
x = alter_subreg (x); x = alter_subreg (x);
/* If X is a pseudo-register, abort now rather than writing trash to the
assembler file. */
if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER)
abort ();
PRINT_OPERAND (asm_out_file, x, code); PRINT_OPERAND (asm_out_file, x, code);
} }
......
...@@ -3321,7 +3321,7 @@ reload_as_needed (first, live_known) ...@@ -3321,7 +3321,7 @@ reload_as_needed (first, live_known)
for (i = 0; i < NUM_ELIMINABLE_REGS; i++) for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
{ {
INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to, INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to,
reg_eliminate[i].initial_offset) reg_eliminate[i].initial_offset);
reg_eliminate[i].previous_offset reg_eliminate[i].previous_offset
= reg_eliminate[i].offset = reg_eliminate[i].initial_offset; = reg_eliminate[i].offset = reg_eliminate[i].initial_offset;
} }
......
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