diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/regrename.c | 7 |
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) { |
