]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* simplify-rtx.c (simplify_relational_operation_1): Simplify
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Mar 2009 15:19:33 +0000 (15:19 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Mar 2009 15:19:33 +0000 (15:19 +0000)
(LTU (PLUS a C) C) or (LTU (PLUS a C) a) to (GEU a -C); likewise with
GEU/LTU reversed.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145353 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/simplify-rtx.c

index d4686fd651be91739ac271995c21900e1077af9f..9aeafa9eae200d596e41eb3174af6906802c2984 100644 (file)
        and keep using them to simplify new expressions, while applying the
        same substitutions to them as to the expression.
 
+       * simplify-rtx.c (simplify_relational_operation_1): Simplify
+       (LTU (PLUS a C) C) or (LTU (PLUS a C) a) to (GEU a -C); likewise with
+       GEU/LTU reversed.
+
 2009-03-31  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
         PR target/27237
index 6fe480f5dc7e8e31016f4a4af85f729ecf98054f..b8b6ad81763a86da253af2141e4e93399e3d1830 100644 (file)
@@ -3856,6 +3856,20 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
        }
     }
 
+  /* (LTU/GEU (PLUS a C) C), where C is constant, can be simplified to
+     (GEU/LTU a -C).  Likewise for (LTU/GEU (PLUS a C) a).  */
+  if ((code == LTU || code == GEU)
+      && GET_CODE (op0) == PLUS
+      && GET_CODE (XEXP (op0, 1)) == CONST_INT
+      && (rtx_equal_p (op1, XEXP (op0, 0))
+         || rtx_equal_p (op1, XEXP (op0, 1))))
+    {
+      rtx new_cmp
+       = simplify_gen_unary (NEG, cmp_mode, XEXP (op0, 1), cmp_mode);
+      return simplify_gen_relational ((code == LTU ? GEU : LTU), mode,
+                                     cmp_mode, XEXP (op0, 0), new_cmp);
+    }
+
   /* Canonicalize (LTU/GEU (PLUS a b) b) as (LTU/GEU (PLUS a b) a).  */
   if ((code == LTU || code == GEU)
       && GET_CODE (op0) == PLUS