]> gcc.gnu.org Git - gcc.git/commitdiff
combine.c (make_compound_operation): Use simplify_subreg.
authorAndreas Krebbel <krebbel1@de.ibm.com>
Sun, 19 Jun 2005 13:29:45 +0000 (13:29 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Sun, 19 Jun 2005 13:29:45 +0000 (13:29 +0000)
2005-06-19  Andreas Krebbel  <krebbel1@de.ibm.com>

* combine.c (make_compound_operation): Use simplify_subreg.  Delete
a optimization already done by simplify_subreg.

From-SVN: r101183

gcc/ChangeLog
gcc/combine.c

index af13fe0f2cf94b19d032f520427e6714255e4bfd..ef767e23634173995d3ade911cf78f0ee6fd1f9c 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * combine.c (make_compound_operation): Use simplify_subreg.  Delete
+       a optimization already done by simplify_subreg.
+
 2005-06-19  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * loop.c (scan_loop): Do not consider insns setting the frame
index d618c9fcf5ce1e8b46c8f78aba7f0cd7cecfec7f..c4e6f95fa48b505aa8ef7deb3e62243f1e033acd 100644 (file)
@@ -6732,41 +6732,33 @@ make_compound_operation (rtx x, enum rtx_code in_code)
         what it originally did, do this SUBREG as a force_to_mode.  */
 
       tem = make_compound_operation (SUBREG_REG (x), in_code);
-      if (GET_CODE (tem) != GET_CODE (SUBREG_REG (x))
-         && GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (tem))
-         && subreg_lowpart_p (x))
-       {
-         rtx newer = force_to_mode (tem, mode, ~(HOST_WIDE_INT) 0,
-                                    NULL_RTX, 0);
 
-         /* If we have something other than a SUBREG, we might have
-            done an expansion, so rerun ourselves.  */
-         if (GET_CODE (newer) != SUBREG)
-           newer = make_compound_operation (newer, in_code);
+      {
+       rtx simplified;
+       simplified = simplify_subreg (GET_MODE (x), tem, GET_MODE (tem),
+                                     SUBREG_BYTE (x));
 
-         return newer;
-       }
+       if (simplified)
+         tem = simplified;
 
-      /* If this is a paradoxical subreg, and the new code is a sign or
-        zero extension, omit the subreg and widen the extension.  If it
-        is a regular subreg, we can still get rid of the subreg by not
-        widening so much, or in fact removing the extension entirely.  */
-      if ((GET_CODE (tem) == SIGN_EXTEND
-          || GET_CODE (tem) == ZERO_EXTEND)
-         && subreg_lowpart_p (x))
-       {
-         if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem))
-             || (GET_MODE_SIZE (mode) >
-                 GET_MODE_SIZE (GET_MODE (XEXP (tem, 0)))))
-           {
-             if (! SCALAR_INT_MODE_P (mode))
-               break;
-             tem = gen_rtx_fmt_e (GET_CODE (tem), mode, XEXP (tem, 0));
-           }
-         else
-           tem = gen_lowpart (mode, XEXP (tem, 0));
+       if (GET_CODE (tem) != GET_CODE (SUBREG_REG (x))
+           && GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (tem))
+           && subreg_lowpart_p (x))
+         {
+           rtx newer = force_to_mode (tem, mode, ~(HOST_WIDE_INT) 0,
+                                      NULL_RTX, 0);
+           
+           /* If we have something other than a SUBREG, we might have
+              done an expansion, so rerun ourselves.  */
+           if (GET_CODE (newer) != SUBREG)
+             newer = make_compound_operation (newer, in_code);
+           
+           return newer;
+         }
+
+       if (simplified)
          return tem;
-       }
+      }
       break;
 
     default:
This page took 0.083393 seconds and 5 git commands to generate.