]> gcc.gnu.org Git - gcc.git/commitdiff
re PR rtl-optimization/18942 (Do loop is not as optimized as 3.3.2)
authorZdenek Dvorak <dvorakz@suse.cz>
Mon, 20 Dec 2004 20:48:53 +0000 (21:48 +0100)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Mon, 20 Dec 2004 20:48:53 +0000 (20:48 +0000)
PR rtl-optimization/18942
* simplify-rtx.c (simplify_relational_operation_1): Simplify
x + cst1 == cst2 to x == cst2 - cst1.  Made static.

From-SVN: r92429

gcc/ChangeLog
gcc/simplify-rtx.c

index db153d504ed2c297073d01187b183868ebcbc47b..45c0a27f235035c84e124aa6ca01ff5e1b746c05 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-20  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR rtl-optimization/18942
+       * simplify-rtx.c (simplify_relational_operation_1): Simplify
+       x + cst1 == cst2 to x == cst2 - cst1.  Made static.
+
 2004-12-20  Matt Austern  <austern@apple.com>
 
        PR c++/19044
index 5feeb650dc97f5ca9c0a492f8dbd4abd69dde529..8d7cb3ff247e7a106fa5e26f91d8a804a4398616 100644 (file)
@@ -2773,10 +2773,13 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode,
 
    MODE is the mode of the result, while CMP_MODE specifies in which
    mode the comparison is done in, so it is the mode of the operands.  */
-rtx
+
+static rtx
 simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
                                 enum machine_mode cmp_mode, rtx op0, rtx op1)
 {
+  enum rtx_code op0code = GET_CODE (op0);
+
   if (GET_CODE (op1) == CONST_INT)
     {
       if (INTVAL (op1) == 0 && COMPARISON_P (op0))
@@ -2800,6 +2803,20 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
        }
     }
 
+  /* (eq/ne (plus x cst1) cst2) simplifies to (eq/ne x (cst2 - cst1))  */
+  if ((code == EQ || code == NE)
+      && (op0code == PLUS || op0code == MINUS)
+      && CONSTANT_P (op1)
+      && CONSTANT_P (XEXP (op0, 1)))
+    {
+      rtx x = XEXP (op0, 0);
+      rtx c = XEXP (op0, 1);
+
+      c = simplify_gen_binary (op0code == PLUS ? MINUS : PLUS,
+                              cmp_mode, op1, c);
+      return simplify_gen_relational (code, mode, cmp_mode, x, c);
+    }
+
   return NULL_RTX;
 }
 
This page took 0.084537 seconds and 5 git commands to generate.