(simplify_comparison, case NEG): Replace large block of code with
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 28 Dec 1992 11:08:28 +0000 (06:08 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 28 Dec 1992 11:08:28 +0000 (06:08 -0500)
equivalent call to num_sign_bit_copies.

From-SVN: r2972

gcc/combine.c

index d702d31674f4f78bca15efcceca10b40dc06cf7c..90a02cf0578d032efcdce02633beb0cff2af3dd1 100644 (file)
@@ -8029,28 +8029,9 @@ simplify_comparison (code, pop0, pop1)
              continue;
            }
 
-         /* If we have NEG of something that is the result of a
-            SIGN_EXTEND, SIGN_EXTRACT, or ASHIFTRT, we know that the
-            two high-order bits must be the same and hence that
-            "(-a) < 0" is equivalent to "a > 0".  Otherwise, we can't
-            do this.  */
-         if (GET_CODE (XEXP (op0, 0)) == SIGN_EXTEND
-             || (GET_CODE (XEXP (op0, 0)) == SIGN_EXTRACT
-                 && GET_CODE (XEXP (XEXP (op0, 0), 1)) == CONST_INT
-                 && (INTVAL (XEXP (XEXP (op0, 0), 1))
-                     < GET_MODE_BITSIZE (GET_MODE (XEXP (XEXP (op0, 0), 0)))))
-             || (GET_CODE (XEXP (op0, 0)) == ASHIFTRT
-                 && GET_CODE (XEXP (XEXP (op0, 0), 1)) == CONST_INT
-                 && XEXP (XEXP (op0, 0), 1) != const0_rtx)
-             || ((tem = get_last_value (XEXP (op0, 0))) != 0
-                 && (GET_CODE (tem) == SIGN_EXTEND
-                     || (GET_CODE (tem) == SIGN_EXTRACT
-                         && GET_CODE (XEXP (tem, 1)) == CONST_INT
-                         && (INTVAL (XEXP (tem, 1))
-                             < GET_MODE_BITSIZE (GET_MODE (XEXP (tem, 0)))))
-                     || (GET_CODE (tem) == ASHIFTRT
-                         && GET_CODE (XEXP (tem, 1)) == CONST_INT
-                         && XEXP (tem, 1) != const0_rtx))))
+         /* If we have NEG of something whose two high-order bits are the
+            same, we know that "(-a) < 0" is equivalent to "a > 0". */
+         if (num_sign_bit_copies (op0, mode) >= 2)
            {
              op0 = XEXP (op0, 0);
              code = swap_condition (code);