aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/match.pd6
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index efed569..d182496 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/match.pd b/gcc/match.pd
index ba7e013..dadf51c 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -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); })))