Sat Oct 17 02:26:03 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+ * reload1.c (reg_used_by_pseudo): New static variable.
+ (choose_reload_regs): Initialize it.
+ Use it instead of testing spill_reg_order to determine whether a
+ pseudo is live in a hard register across the current insn.
+ Fix a typo in a reference to reload_reg_rtx.
+
* flow.c (propagate_block): Replace code that computes and uses
regs_sometimes_live with simpler code that just walks the set of
currently live registers.
in the group. */
static HARD_REG_SET reload_reg_used_for_inherit;
+/* Records which hard regs are allocated to a pseudo during any point of the
+ current insn. */
+static HARD_REG_SET reg_used_by_pseudo;
+
/* Mark reg REGNO as in use for a reload of the sort spec'd by OPNUM and
TYPE. MODE is used to indicate how many consecutive regs are
actually used. */
CLEAR_HARD_REG_SET (reload_reg_used_in_insn);
CLEAR_HARD_REG_SET (reload_reg_used_in_other_addr);
+ CLEAR_HARD_REG_SET (reg_used_by_pseudo);
+ compute_use_by_pseudos (®_used_by_pseudo, chain->live_before);
+ compute_use_by_pseudos (®_used_by_pseudo, chain->live_after);
+
for (i = 0; i < reload_n_operands; i++)
{
CLEAR_HARD_REG_SET (reload_reg_used_in_output[i]);
if (i1 != n_earlyclobbers
/* Don't use it if we'd clobber a pseudo reg. */
- || (spill_reg_order[i] < 0
+ || (! TEST_HARD_REG_BIT (reg_used_by_pseudo, i)
&& reload_out[r]
&& ! TEST_HARD_REG_BIT (reg_reloaded_dead, i))
/* Don't really use the inherited spill reg
/* If find_reloads chose reload_out as reload
register, stay with it - that leaves the
inherited register for subsequent reloads. */
- || (reload_out[r] && reload_reg_rtx
+ || (reload_out[r] && reload_reg_rtx[r]
&& rtx_equal_p (reload_out[r],
reload_reg_rtx[r])))
{