regrename.c (regrename_optimize): Don't accept a part-clobbered register if the repla...
authorAlexandre Oliva <aoliva@redhat.com>
Mon, 11 Feb 2002 13:35:14 +0000 (13:35 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Mon, 11 Feb 2002 13:35:14 +0000 (13:35 +0000)
* regrename.c (regrename_optimize): Don't accept a
part-clobbered register if the replaced register is not part
clobbered.

From-SVN: r49676

gcc/ChangeLog
gcc/regrename.c

index 748d7a7..46d6899 100644 (file)
@@ -1,5 +1,9 @@
 2002-02-11  Alexandre Oliva  <aoliva@redhat.com>
 
+       * regrename.c (regrename_optimize): Don't accept a
+       part-clobbered register if the replaced register is not part
+       clobbered.
+
        * calls.c (store_one_arg): In the non-BLKmode non-partial case,
        take padding into account when computing the argument value.
 
index b830b88..135eaef 100644 (file)
@@ -325,7 +325,12 @@ regrename_optimize ()
              /* See whether it accepts all modes that occur in
                 definition and uses.  */
              for (tmp = this; tmp; tmp = tmp->next_use)
-               if (! HARD_REGNO_MODE_OK (new_reg, GET_MODE (*tmp->loc)))
+               if (! HARD_REGNO_MODE_OK (new_reg, GET_MODE (*tmp->loc))
+                   || (tmp->need_caller_save_reg
+                       && ! (HARD_REGNO_CALL_PART_CLOBBERED
+                             (reg, GET_MODE (*tmp->loc)))
+                       && (HARD_REGNO_CALL_PART_CLOBBERED
+                           (new_reg, GET_MODE (*tmp->loc)))))
                  break;
              if (! tmp)
                {