aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZack Weinberg <zack@wolery.cumb.org>2000-07-17 18:31:50 +0000
committerZack Weinberg <zack@gcc.gnu.org>2000-07-17 18:31:50 +0000
commitd882fe5150fbbeb4e44d007bb4964e5b22373021 (patch)
tree686ae8c464a8aa900c031d14c4d56fe381b24133 /gcc
parent29bd52c8e2fe5ede7d4cd5d1f2fd8fc98fe41b56 (diff)
downloadgcc-d882fe5150fbbeb4e44d007bb4964e5b22373021.zip
gcc-d882fe5150fbbeb4e44d007bb4964e5b22373021.tar.gz
gcc-d882fe5150fbbeb4e44d007bb4964e5b22373021.tar.bz2
simplify-rtx.c (simplify_binary_operation): Recognize (compare (gt[u] (cc) 0) (lt[u] (cc) 0)).
* simplify-rtx.c (simplify_binary_operation): Recognize (compare (gt[u] (cc) 0) (lt[u] (cc) 0)). (simplify_ternary_operation): Do not examine MODE_BITSIZE of a CONST_INT, it will always be zero. From-SVN: r35098
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/simplify-rtx.c27
2 files changed, 29 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e407547..eafc3b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2000-07-17 Zack Weinberg <zack@wolery.cumb.org>
+
+ * simplify-rtx.c (simplify_binary_operation): Recognize
+ (compare (gt[u] (cc) 0) (lt[u] (cc) 0)).
+ (simplify_ternary_operation): Do not examine MODE_BITSIZE of
+ a CONST_INT, it will always be zero.
+
2000-07-17 Chandrakala Chavva <cchavva@cygnus.com>
* loop.c (check_dbra_loop) : Return if more than one condition is
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 7426949..67f7bab 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -948,11 +948,29 @@ simplify_binary_operation (code, mode, op0, op1)
|| ! FLOAT_MODE_P (mode) || flag_fast_math)
&& op1 == CONST0_RTX (mode))
return op0;
+#endif
+
+ /* Convert (compare (gt (flags) 0) (lt (flags) 0)) to (flags). */
+ if (((GET_CODE (op0) == GT && GET_CODE (op1) == LT)
+ || (GET_CODE (op0) == GTU && GET_CODE (op1) == LTU))
+ && XEXP (op0, 1) == const0_rtx && XEXP (op1, 1) == const0_rtx)
+ {
+ rtx xop00 = XEXP (op0, 0);
+ rtx xop10 = XEXP (op1, 0);
+
+#ifdef HAVE_cc0
+ if (GET_CODE (xop00) == CC0 && GET_CODE (xop10) == CC0)
#else
- /* Do nothing here. */
+ if (GET_CODE (xop00) == REG && GET_CODE (xop10) == REG
+ && GET_MODE (xop00) == GET_MODE (xop10)
+ && REGNO (xop00) == REGNO (xop10)
+ && GET_MODE_CLASS (GET_MODE (xop00)) == MODE_CC
+ && GET_MODE_CLASS (GET_MODE (xop10)) == MODE_CC)
#endif
- break;
-
+ return xop00;
+ }
+
+ break;
case MINUS:
/* None of these optimizations can be done for IEEE
floating point. */
@@ -1912,8 +1930,7 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
if (GET_CODE (op0) == CONST_INT
&& GET_CODE (op1) == CONST_INT
&& GET_CODE (op2) == CONST_INT
- && ((unsigned) INTVAL (op1) + (unsigned) INTVAL (op2)
- <= GET_MODE_BITSIZE (op0_mode))
+ && ((unsigned) INTVAL (op1) + (unsigned) INTVAL (op2) <= width)
&& width <= (unsigned) HOST_BITS_PER_WIDE_INT)
{
/* Extracting a bit-field from a constant */