Hello,
this was bootstrapped and regtested on powerpc64le-unknown-linux-gnu.
2016-05-20 Marc Glisse <marc.gli...@inria.fr>
gcc/
* match.pd ((X ^ Y) ^ (X ^ Z)): Convert the arguments.
gcc/testsuite/
* gcc.dg/tree-ssa/pr71206.c: New testcase.
--
Marc Glisse
Index: gcc/match.pd
===================================================================
--- gcc/match.pd (revision 236489)
+++ gcc/match.pd (working copy)
@@ -733,21 +733,21 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& tree_nop_conversion_p (type, TREE_TYPE (@2)))
(if (single_use (@5) && single_use (@6))
(op @3 (convert @2))
(if (single_use (@3) && single_use (@4))
(op (convert @1) @5))))))
/* (X ^ Y) ^ (X ^ Z) -> Y ^ Z */
(simplify
(bit_xor (convert1? (bit_xor:c @0 @1)) (convert2? (bit_xor:c @0 @2)))
(if (tree_nop_conversion_p (type, TREE_TYPE (@1))
&& tree_nop_conversion_p (type, TREE_TYPE (@2)))
- (convert (bit_xor @1 @2))))
+ (bit_xor (convert @1) (convert @2))))
(simplify
(abs (abs@1 @0))
@1)
(simplify
(abs (negate @0))
(abs @0))
(simplify
(abs tree_expr_nonnegative_p@0)
@0)
Index: gcc/testsuite/gcc.dg/tree-ssa/71206.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/71206.c (revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/71206.c (working copy)
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+int f(int d, unsigned b) {
+ int i2 = b ^ 1;
+ int i4 = d ^ 1;
+ return i2 ^ i4;
+}