diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/regmove.c | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1ed68cb..72729f4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-11-16 Ulrich Weigand <uweigand@de.ibm.com> + + * regmove.c (regmove_optimize): Use lowpart_subreg instead of + gen_rtx_SUBREG with incorrect offset to compute SRC_SUBREG. + 2004-11-16 Devang Patel <dpatel@apple.com> * tree-if-conv.c (clean_predicate_lists): Update gcc_assert check. diff --git a/gcc/regmove.c b/gcc/regmove.c index 7f54559..4876111 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -1150,10 +1150,11 @@ regmove_optimize (rtx f, int nregs, FILE *regmove_dump_file) && GET_MODE_SIZE (GET_MODE (dst)) >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (dst)))) { - src_subreg - = gen_rtx_SUBREG (GET_MODE (SUBREG_REG (dst)), - src, SUBREG_BYTE (dst)); dst = SUBREG_REG (dst); + src_subreg = lowpart_subreg (GET_MODE (dst), + src, GET_MODE (src)); + if (!src_subreg) + continue; } if (!REG_P (dst) || REGNO (dst) < FIRST_PSEUDO_REGISTER) |