* match.pd (-1 / B < A): Use :c to avoid pattern duplication.
authorAlexander Monakov <amonakov@ispras.ru>
Fri, 10 Jun 2016 12:58:53 +0000 (15:58 +0300)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Fri, 10 Jun 2016 12:58:53 +0000 (15:58 +0300)
From-SVN: r237307

gcc/ChangeLog
gcc/match.pd

index 73ba814f135b914104a539ef20ab38ba16b0691c..9696ad1b7a4cf96b282d04a226ff06ecfdb6eeeb 100644 (file)
@@ -1,3 +1,7 @@
+2016-06-10  Alexander Monakov  <amonakov@ispras.ru>
+
+       * match.pd (-1 / B < A): Use :c to avoid pattern duplication.
+
 2016-06-10  Maxim Ostapenko  <m.ostapenko@samsung.com>
 
        PR sanitizer/71480
index fe711159df9dd6456c61da67599345cb664c5ed6..7d4beeaa4ed3c66db88a1e0bd282da766dadd52f 100644 (file)
@@ -2626,22 +2626,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
        && types_match (TREE_TYPE (@0), TREE_TYPE (@1)))
    (out (imagpart @2) { build_zero_cst (TREE_TYPE (@0)); }))))
 
-/* For unsigned operands, A > -1 / B checks whether A * B would overflow.
+/* For unsigned operands, -1 / B < A checks whether A * B would overflow.
    Simplify it to __builtin_mul_overflow (A, B, <unused>).  */
-/* -1 / B < A */
 (for cmp (lt ge)
      out (ne eq)
  (simplify
-  (cmp (trunc_div:s integer_all_onesp @1) @0)
-  (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && !VECTOR_TYPE_P (TREE_TYPE (@0)))
-   (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
-    (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))
-
-/* A > -1 / B */
-(for cmp (gt le)
-     out (ne eq)
- (simplify
-  (cmp @0 (trunc_div:s integer_all_onesp @1))
+  (cmp:c (trunc_div:s integer_all_onesp @1) @0)
   (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && !VECTOR_TYPE_P (TREE_TYPE (@0)))
    (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
     (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))