+2016-11-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/71762
+ * match.pd ((~X & Y) -> X < Y, (X & ~Y) -> Y < X,
+ (~X | Y) -> X <= Y, (X | ~Y) -> Y <= X): Remove.
+
2016-11-23 Richard Biener <rguenther@suse.de>
PR lto/78472
(op:c truth_valued_p@0 (logical_inverted_value @0))
{ constant_boolean_node (op == NE_EXPR ? true : false, type); }))
-/* If arg1 and arg2 are booleans (or any single bit type)
- then try to simplify:
-
- (~X & Y) -> X < Y
- (X & ~Y) -> Y < X
- (~X | Y) -> X <= Y
- (X | ~Y) -> Y <= X
-
- But only do this if our result feeds into a comparison as
- this transformation is not always a win, particularly on
- targets with and-not instructions.
- -> simplify_bitwise_binary_boolean */
-(simplify
- (ne (bit_and:c (bit_not @0) @1) integer_zerop)
- (if (INTEGRAL_TYPE_P (TREE_TYPE (@1))
- && TYPE_PRECISION (TREE_TYPE (@1)) == 1)
- (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
- (lt @0 @1)
- (gt @0 @1))))
-(simplify
- (ne (bit_ior:c (bit_not @0) @1) integer_zerop)
- (if (INTEGRAL_TYPE_P (TREE_TYPE (@1))
- && TYPE_PRECISION (TREE_TYPE (@1)) == 1)
- (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
- (le @0 @1)
- (ge @0 @1))))
-
/* ~~x -> x */
(simplify
(bit_not (bit_not @0))
+2016-11-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/71762
+ * gcc.dg/torture/pr71762-1.c: New testcase.
+ * gcc.dg/torture/pr71762-2.c: Likewise.
+ * gcc.dg/torture/pr71762-3.c: Likewise.
+ * gcc.dg/tree-ssa/forwprop-28.c: XFAIL.
+
2016-11-23 Richard Biener <rguenther@suse.de>
PR lto/78472