aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <crux@pool.informatik.rwth-aachen.de>1998-10-17 01:44:01 +0000
committerJeff Law <law@gcc.gnu.org>1998-10-16 19:44:01 -0600
commit297927a89c74904958ecc24986b2ea3f010cc4d9 (patch)
tree59fb9610ae61a43c2522b4360538396009443a61 /gcc
parentf8dd7f9883b1c1b8707a9a2ef47f2c1a93ab141d (diff)
downloadgcc-297927a89c74904958ecc24986b2ea3f010cc4d9.zip
gcc-297927a89c74904958ecc24986b2ea3f010cc4d9.tar.gz
gcc-297927a89c74904958ecc24986b2ea3f010cc4d9.tar.bz2
reload1.c (reg_used_by_pseudo): New static variable.
* 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. From-SVN: r23149
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/reload1.c12
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fe6d682..ca7e470 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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.
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 96fab07..3d5cfbe 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -4683,6 +4683,10 @@ static HARD_REG_SET reload_reg_used_at_all;
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. */
@@ -5812,6 +5816,10 @@ choose_reload_regs (chain, avoid_return_reg)
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 (&reg_used_by_pseudo, chain->live_before);
+ compute_use_by_pseudos (&reg_used_by_pseudo, chain->live_after);
+
for (i = 0; i < reload_n_operands; i++)
{
CLEAR_HARD_REG_SET (reload_reg_used_in_output[i]);
@@ -6161,7 +6169,7 @@ choose_reload_regs (chain, avoid_return_reg)
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
@@ -6174,7 +6182,7 @@ choose_reload_regs (chain, avoid_return_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])))
{