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;
+}

Reply via email to