regmove.c (regmove_optimize): Use lowpart_subreg instead of gen_rtx_SUBREG with incor...
authorUlrich Weigand <uweigand@de.ibm.com>
Tue, 16 Nov 2004 21:11:33 +0000 (21:11 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Tue, 16 Nov 2004 21:11:33 +0000 (21:11 +0000)
* regmove.c (regmove_optimize): Use lowpart_subreg instead of
gen_rtx_SUBREG with incorrect offset to compute SRC_SUBREG.

From-SVN: r90762

gcc/ChangeLog
gcc/regmove.c

index 1ed68cbbf95256a62cf0092a2a778c1bd5333e33..72729f4563f4c7bf691aca9418288ec55bbd49b6 100644 (file)
@@ -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.
index 7f5455977f966df2edeb7a96dc469d0544eb7912..4876111252e5ea1f98aa58ef9bd913e79c83d876 100644 (file)
@@ -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)