reload1.c (reg_used_by_pseudo): New static variable.
authorBernd Schmidt <crux@pool.informatik.rwth-aachen.de>
Sat, 17 Oct 1998 01:44:01 +0000 (01:44 +0000)
committerJeff Law <law@gcc.gnu.org>
Sat, 17 Oct 1998 01:44:01 +0000 (19:44 -0600)
* 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

gcc/ChangeLog
gcc/reload1.c

index fe6d68238155589de1b52d3e322919bff965744b..ca7e47046ded59a9951105654c40d0d918580aaf 100644 (file)
@@ -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.
index 96fab07ef7c0429b32fb20cd0d953753d061ece5..3d5cfbe9ab237a823648929b774cd779a9e5567f 100644 (file)
@@ -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])))
                            {