diff options
author | Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> | 1998-10-17 01:44:01 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-10-16 19:44:01 -0600 |
commit | 297927a89c74904958ecc24986b2ea3f010cc4d9 (patch) | |
tree | 59fb9610ae61a43c2522b4360538396009443a61 /gcc | |
parent | f8dd7f9883b1c1b8707a9a2ef47f2c1a93ab141d (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reload1.c | 12 |
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 (®_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]); @@ -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]))) { |