re PR middle-end/77407 (Optimize integer i / abs (i) into the sign of i)
authorRichard Biener <rguenther@suse.de>
Tue, 4 Oct 2016 13:18:18 +0000 (13:18 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 4 Oct 2016 13:18:18 +0000 (13:18 +0000)
2016-10-04  Richard Biener  <rguenther@suse.de>

PR middle-end/77407
* match.pd (X / abs (X) -> X < 0 ? -1 : 1): Drop vector
type support, mark with :C.
(X / -X -> -1): Mark with :C.

From-SVN: r240742

gcc/ChangeLog
gcc/match.pd

index efed569f6057f3824d97de3b6079cdce5ac7bc79..d182496a509c0df1c20cb06e1a2f44d2b7d312d1 100644 (file)
@@ -1,3 +1,10 @@
+2016-10-04  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/77407
+       * match.pd (X / abs (X) -> X < 0 ? -1 : 1): Drop vector
+       type support, mark with :C.
+       (X / -X -> -1): Mark with :C.
+
 2016-10-04  Jakub Jelinek  <jakub@redhat.com>
 
        * defaults.h (JCR_SECTION_NAME, TARGET_USE_JCR_SECTION): Remove.
index ba7e0132e31c109bfaad6d19f1a33614e38dbb0b..dadf51cd20562facb24b13716934cfac725909c8 100644 (file)
@@ -155,14 +155,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
     (negate @0)))
  /* X / abs (X) is X < 0 ? -1 : 1.  */ 
  (simplify
-   (div @0 (abs @0))
-   (if ((INTEGRAL_TYPE_P (type) || VECTOR_INTEGER_TYPE_P (type))
+   (div:C @0 (abs @0))
+   (if (INTEGRAL_TYPE_P (type)
        && TYPE_OVERFLOW_UNDEFINED (type))
     (cond (lt @0 { build_zero_cst (type); })
           { build_minus_one_cst (type); } { build_one_cst (type); })))
  /* X / -X is -1.  */
  (simplify
-   (div @0 (negate @0))
+   (div:C @0 (negate @0))
    (if ((INTEGRAL_TYPE_P (type) || VECTOR_INTEGER_TYPE_P (type))
        && TYPE_OVERFLOW_UNDEFINED (type))
     { build_minus_one_cst (type); })))