Commit 02eb1393 by J"orn Rennecke Committed by Joern Rennecke

reload1.c (reload_as_needed): Set reload_is_output_reload /…

reload1.c (reload_as_needed): Set reload_is_output_reload / reload_has_output_reload for auto_inc expressions...

	* reload1.c (reload_as_needed): Set reload_is_output_reload /
	reload_has_output_reload for auto_inc expressions that could be
	reloaded.  Call forget_old_reloads for REG_INC notes.

From-SVN: r25899
parent 50270076
Mon Mar 22 22:24:30 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload1.c (reload_as_needed): Set reload_is_output_reload /
reload_has_output_reload for auto_inc expressions that could be
reloaded. Call forget_old_reloads for REG_INC notes.
Mon Mar 22 21:51:57 1999 J"orn Rennecke <amylaar@cygnus.co.uk> Mon Mar 22 21:51:57 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* cse.c (cse_insn): Don't change the result register of a libcall. * cse.c (cse_insn): Don't change the result register of a libcall.
......
...@@ -4414,17 +4414,37 @@ reload_as_needed (live_known) ...@@ -4414,17 +4414,37 @@ reload_as_needed (live_known)
break; break;
} }
if (n == 1) if (n == 1)
REG_NOTES (p) = gen_rtx_EXPR_LIST (REG_INC, reload_reg, {
REG_NOTES (p)); REG_NOTES (p)
= gen_rtx_EXPR_LIST (REG_INC, reload_reg,
REG_NOTES (p));
/* Mark this as having an output reload so that the
REG_INC processing code below won't invalidate
the reload for inheritance. */
SET_HARD_REG_BIT (reg_is_output_reload,
REGNO (reload_reg));
reg_has_output_reload[REGNO (XEXP (in_reg, 0))] = 1;
}
else else
forget_old_reloads_1 (XEXP (in_reg, 0), NULL_RTX); forget_old_reloads_1 (XEXP (in_reg, 0), NULL_RTX);
} }
else if ((code == PRE_INC || code == PRE_DEC)
&& TEST_HARD_REG_BIT (reg_reloaded_valid,
REGNO (reload_reg_rtx[i]))
/* Make sure it is the inc/dec pseudo, and not
some other (e.g. output operand) pseudo. */
&& (reg_reloaded_contents[REGNO (reload_reg_rtx[i])]
== REGNO (XEXP (in_reg, 0))))
{
SET_HARD_REG_BIT (reg_is_output_reload,
REGNO (reload_reg_rtx[i]));
reg_has_output_reload[REGNO (XEXP (in_reg, 0))] = 1;
}
} }
} }
#if 0 /* ??? Is this code obsolete now? Need to check carefully. */ /* If a pseudo that got a hard register is auto-incremented,
/* Likewise for regs altered by auto-increment in this insn. we must purge records of copying it into pseudos without
But note that the reg-notes are not changed by reloading: hard registers. */
they still contain the pseudo-regs, not the spill regs. */
for (x = REG_NOTES (insn); x; x = XEXP (x, 1)) for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
if (REG_NOTE_KIND (x) == REG_INC) if (REG_NOTE_KIND (x) == REG_INC)
{ {
...@@ -4439,7 +4459,6 @@ reload_as_needed (live_known) ...@@ -4439,7 +4459,6 @@ reload_as_needed (live_known)
forget_old_reloads_1 (XEXP (x, 0), NULL_RTX); forget_old_reloads_1 (XEXP (x, 0), NULL_RTX);
} }
#endif #endif
#endif
} }
/* A reload reg's contents are unknown after a label. */ /* A reload reg's contents are unknown after a label. */
if (GET_CODE (insn) == CODE_LABEL) if (GET_CODE (insn) == CODE_LABEL)
......
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