Remove duplicate (A & B) OP (C & B) in match.pd.
authorMarc Glisse <marc.glisse@inria.fr>
Wed, 4 May 2016 05:38:18 +0000 (07:38 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Wed, 4 May 2016 05:38:18 +0000 (05:38 +0000)
2016-05-04  Marc Glisse  <marc.glisse@inria.fr>

* match.pd ((A | B) & (A | C)): Generalize to BIT_XOR_EXPR.  Mark
as commutative.  Check both conversions are NOP.
((A & B) OP (C & B)): Remove.

From-SVN: r235858

gcc/ChangeLog
gcc/match.pd

index 77d81cc57192b20c13dcf94c4088ee2ee794c43c..6461fc196b79b7a25474b1e808a2c6d5d05a0591 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-04  Marc Glisse  <marc.glisse@inria.fr>
+
+       * match.pd ((A | B) & (A | C)): Generalize to BIT_XOR_EXPR.  Mark
+       as commutative.  Check both conversions are NOP.
+       ((A & B) OP (C & B)): Remove.
+
 2016-05-04  Alan Modra  <amodra@gmail.com>
 
        * combine.c (simplify_set): Correct WORD_REGISTER_OPERATIONS test.
index 8de8858b15114580a9f71f2eae3bdb8666e8b9de..ee2aee3723453bdf4005185ac4fa2693462f7f7f 100644 (file)
@@ -685,11 +685,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    constants are involved.  For example, convert
      (A | B) & (A | C) into A | (B & C)
    Further simplification will occur if B and C are constants.  */
-(for op (bit_and bit_ior)
-     rop (bit_ior bit_and)
+(for op (bit_and bit_ior bit_xor)
+     rop (bit_ior bit_and bit_and)
  (simplify
-  (op (convert? (rop:c @0 @1)) (convert? (rop @0 @2)))
-  (if (tree_nop_conversion_p (type, TREE_TYPE (@0)))
+  (op (convert? (rop:c @0 @1)) (convert? (rop:c @0 @2)))
+  (if (tree_nop_conversion_p (type, TREE_TYPE (@1))
+       && tree_nop_conversion_p (type, TREE_TYPE (@2)))
    (rop (convert @0) (op (convert @1) (convert @2))))))
 
 
@@ -787,12 +788,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (bitop:c (rbitop:c (bit_not @0) @1) @0)
   (bitop @0 @1)))
 
-/* Simplify (A & B) OP0 (C & B) to (A OP0 C) & B. */
-(for bitop (bit_and bit_ior bit_xor)
- (simplify
-  (bitop (bit_and:c @0 @1) (bit_and @2 @1))
-  (bit_and (bitop @0 @2) @1)))
-
 /* (x | CST1) & CST2 -> (x & CST2) | (CST1 & CST2) */
 (simplify
   (bit_and (bit_ior @0 CONSTANT_CLASS_P@1) CONSTANT_CLASS_P@2)