combine.c (simplify_shift_const): Revert previous two changes.
authorRichard Henderson <rth@cygnus.com>
Wed, 16 Aug 2000 07:56:04 +0000 (00:56 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 16 Aug 2000 07:56:04 +0000 (00:56 -0700)
        * combine.c (simplify_shift_const): Revert previous two
        changes.  If SHIFT_COUNT_TRUNCATED, crop the shift count
        before the main loop.

From-SVN: r35742

gcc/ChangeLog
gcc/combine.c

index 40df92ab8100565111f324665406a3d47f2e2162..0a319c69032228988f5e4ecd28ff2f96dcb4d695 100644 (file)
@@ -1,3 +1,9 @@
+2000-08-16  Richard Henderson  <rth@cygnus.com>
+
+       * combine.c (simplify_shift_const): Revert previous two
+       changes.  If SHIFT_COUNT_TRUNCATED, crop the shift count
+       before the main loop.
+
 2000-08-15  Richard Henderson  <rth@cygnus.com>
 
        * combine.c (simplify_shift_const): Bound shift count when
index e4be714abb5b70982e209a7537090ce8c1a9f124..9e7083bb407abcbae643e94d85a9c543be9301de 100644 (file)
@@ -8851,6 +8851,14 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
 
   count = input_count;
 
+  /* Make sure and truncate the "natural" shift on the way in.  We don't
+     want to do this inside the loop as it makes it more difficult to
+     combine shifts.  */
+#ifdef SHIFT_COUNT_TRUNCATED
+  if (SHIFT_COUNT_TRUNCATED)
+    count %= GET_MODE_BITSIZE (mode);
+#endif
+
   /* Unless one of the branches of the `if' in this loop does a `continue',
      we will `break' the loop after the `if'.  */
 
@@ -8879,11 +8887,10 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
           ? result_mode : mode);
 
       /* Handle cases where the count is greater than the size of the mode
-        minus 1.  If SHIFT_COUNT_TRUNCATED, there aren't really any such
-        cases.  Otherwise, for ASHIFT, use the size minus one as the count
-        (this can occur when simplifying (lshiftrt (ashiftrt ..))).  For
-        rotates, take the count modulo the size.  For other shifts, the
-        result is zero.
+        minus 1.  For ASHIFT, use the size minus one as the count (this can
+        occur when simplifying (lshiftrt (ashiftrt ..))).  For rotates,
+        take the count modulo the size.  For other shifts, the result is
+        zero.
 
         Since these shifts are being produced by the compiler by combining
         multiple operations, each of which are defined, we know what the
@@ -8891,11 +8898,6 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
 
       if (count > GET_MODE_BITSIZE (shift_mode) - 1)
        {
-#ifdef SHIFT_COUNT_TRUNCATED
-         if (SHIFT_COUNT_TRUNCATED)
-           count %= GET_MODE_BITSIZE (shift_mode);
-         else
-#endif
          if (code == ASHIFTRT)
            count = GET_MODE_BITSIZE (shift_mode) - 1;
          else if (code == ROTATE || code == ROTATERT)
@@ -9149,8 +9151,6 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
                    break;
 
                  count += first_count;
-                 if (count >= GET_MODE_BITSIZE (shift_mode))
-                   count = GET_MODE_BITSIZE (shift_mode) - 1;
                  varop = XEXP (varop, 0);
                  continue;
                }
@@ -9204,9 +9204,6 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
              else
                count = signed_count;
 
-             if (count >= GET_MODE_BITSIZE (shift_mode))
-               count = GET_MODE_BITSIZE (shift_mode) - 1;
-
              varop = XEXP (varop, 0);
              continue;
            }