aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2002-02-11 13:35:14 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2002-02-11 13:35:14 +0000
commit66df7a985f423ee12a75bd1ae0852ad942b925c3 (patch)
tree144ced58776e7edc3dc5b6d761a57485acb2848b
parent841404cd713cb3a78eeebb451039386581a3eb01 (diff)
downloadgcc-66df7a985f423ee12a75bd1ae0852ad942b925c3.zip
gcc-66df7a985f423ee12a75bd1ae0852ad942b925c3.tar.gz
gcc-66df7a985f423ee12a75bd1ae0852ad942b925c3.tar.bz2
regrename.c (regrename_optimize): Don't accept a part-clobbered register if the replaced register is not part...
* regrename.c (regrename_optimize): Don't accept a part-clobbered register if the replaced register is not part clobbered. From-SVN: r49676
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/regrename.c7
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 748d7a7..46d6899 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/regrename.c b/gcc/regrename.c
index b830b88..135eaef 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -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)
{