combine.c (simplify_shift_const): Move SHIFT_COUNT_TRUNCATED simplification above...
authorRichard Henderson <rth@redhat.com>
Wed, 12 Dec 2001 02:42:41 +0000 (18:42 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 12 Dec 2001 02:42:41 +0000 (18:42 -0800)
        * combine.c (simplify_shift_const): Move SHIFT_COUNT_TRUNCATED
        simplification above out of range check.

From-SVN: r47912

gcc/ChangeLog
gcc/combine.c

index 48a09e5f73d633aeb93441c0f5c1f2d5d4b5b4bf..981bcc30aa5d164d000d0106b2471df921d2bfaf 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-11  Richard Henderson  <rth@redhat.com>
+
+       * combine.c (simplify_shift_const): Move SHIFT_COUNT_TRUNCATED
+       simplification above out of range check.
+
 2001-12-11  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * config/sparc/sparc.md (prefetch): New.
index 0e15def1fa8116124ce0b303081c7ac810631633..4a58e7194cde065b8e94315eb55b4c6d20c285c8 100644 (file)
@@ -8811,15 +8811,14 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
    are ASHIFTRT and ROTATE, which are always done in their original mode,  */
 
 static rtx
-simplify_shift_const (x, code, result_mode, varop, input_count)
+simplify_shift_const (x, code, result_mode, varop, orig_count)
      rtx x;
      enum rtx_code code;
      enum machine_mode result_mode;
      rtx varop;
-     int input_count;
+     int orig_count;
 {
   enum rtx_code orig_code = code;
-  int orig_count = input_count;
   unsigned int count;
   int signed_count;
   enum machine_mode mode = result_mode;
@@ -8833,26 +8832,26 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
   int complement_p = 0;
   rtx new;
 
+  /* 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)
+    orig_count &= GET_MODE_BITSIZE (mode) - 1;
+#endif
+
   /* If we were given an invalid count, don't do anything except exactly
      what was requested.  */
 
-  if (input_count < 0 || input_count >= (int) GET_MODE_BITSIZE (mode))
+  if (orig_count < 0 || orig_count >= (int) GET_MODE_BITSIZE (mode))
     {
       if (x)
        return x;
 
-      return gen_rtx_fmt_ee (code, mode, varop, GEN_INT (input_count));
+      return gen_rtx_fmt_ee (code, mode, varop, GEN_INT (orig_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
+  count = orig_count;
 
   /* Unless one of the branches of the `if' in this loop does a `continue',
      we will `break' the loop after the `if'.  */