global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED every where we allocate...
authorHerman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
Sat, 12 Jan 2002 01:43:51 +0000 (02:43 +0100)
committerMichael Hayes <m.hayes@gcc.gnu.org>
Sat, 12 Jan 2002 01:43:51 +0000 (01:43 +0000)
* global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED
every where we allocate a register.

From-SVN: r48791

gcc/ChangeLog
gcc/global.c

index b3612e7541c21957e85d278b65625ca104e0922d..0046e6ecfd4ab56b724713254f40bf0d95783dff 100644 (file)
@@ -1,3 +1,8 @@
+2002-01-12  Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
+
+       * global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED
+       every where we allocate a register.
+
 2002-01-12  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
 
        * gcse.c (compute_pre_data, pre_gcse): Use sbitmap_free.
index 99f54caf045252cbde543e6d00e24036408a74f6..0d9618c27b72c73337ce91ace05b7ea407012896 100644 (file)
@@ -1086,6 +1086,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying)
       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
        if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i)
            && HARD_REGNO_MODE_OK (i, mode)
+           && (allocno[num].calls_crossed == 0
+               || accept_call_clobbered
+               || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
            && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
                || reg_class_subset_p (REGNO_REG_CLASS (i),
                                       REGNO_REG_CLASS (best_reg))
@@ -1122,6 +1125,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying)
       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
        if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i)
            && HARD_REGNO_MODE_OK (i, mode)
+           && (allocno[num].calls_crossed == 0
+               || accept_call_clobbered
+               || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode))
            && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg)
                || reg_class_subset_p (REGNO_REG_CLASS (i),
                                       REGNO_REG_CLASS (best_reg))
@@ -1202,6 +1208,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying)
              /* Don't use a reg no good for this pseudo.  */
              && ! TEST_HARD_REG_BIT (used2, regno)
              && HARD_REGNO_MODE_OK (regno, mode)
+             && (allocno[num].calls_crossed == 0
+                 || accept_call_clobbered
+                 || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 #ifdef CLASS_CANNOT_CHANGE_MODE
              && ! (REG_CHANGES_MODE (allocno[num].reg)
                    && (TEST_HARD_REG_BIT