&& (!wascmp || element_precision (type) == 1))
@0)))
-/* ~(~a & b) --> a | ~b */
-(simplify
- (bit_not (bit_and:cs (bit_not @0) @1))
- (bit_ior @0 (bit_not @1)))
-
-/* ~(~a | b) --> a & ~b */
-(simplify
- (bit_not (bit_ior:cs (bit_not @0) @1))
- (bit_and @0 (bit_not @1)))
+/* ~(~a & b) --> a | ~b
+ ~(~a | b) --> a & ~b */
+(for iop (bit_and bit_ior)
+ res (bit_ior bit_and)
+ (simplify
+ (bit_not (iop:cs (bit_not @0) @1))
+ (res @0 (bit_not @1))))
/* (a ^ b) & ((b ^ c) ^ a) --> (a ^ b) & ~c */
(simplify
(bit_xor:c (bit_ior:c @0 @1) (bit_ior:c @0 (bit_not @1)))
(bit_not @0))
-/* (x & y) | ~(x | y) -> ~(x ^ y) */
-(simplify
- (bit_ior:c (bit_and:s @0 @1) (bit_not:s (bit_ior:s @0 @1)))
- (bit_not (bit_xor @0 @1)))
+/* (x & y) | ~(x | y) -> ~(x ^ y)
+ (x ^ y) | ~(x | y) -> ~(x & y) */
+(for lop (bit_and bit_xor)
+ res (bit_xor bit_and)
+ (simplify
+ (bit_ior:c (lop:s @0 @1) (bit_not:s (bit_ior:s @0 @1)))
+ (bit_not (res @0 @1))))
/* (~x | y) ^ (x ^ y) -> x | ~y */
(simplify
(bit_xor:c (bit_ior:cs (bit_not @0) @1) (bit_xor:s @0 @1))
(bit_ior @0 (bit_not @1)))
-/* (x ^ y) | ~(x | y) -> ~(x & y) */
-(simplify
- (bit_ior:c (bit_xor:s @0 @1) (bit_not:s (bit_ior:s @0 @1)))
- (bit_not (bit_and @0 @1)))
-
-/* (x & y) ^ (x | y) -> x ^ y */
-(simplify
- (bit_xor:c (bit_and @0 @1) (bit_ior @0 @1))
- (bit_xor @0 @1))
-
-/* (x ^ y) ^ (x | y) -> x & y */
-(simplify
- (bit_xor:c (bit_xor @0 @1) (bit_ior @0 @1))
- (bit_and @0 @1))
+/* (x & y) ^ (x | y) -> x ^ y
+ (x ^ y) ^ (x | y) -> x & y */
+(for lop (bit_and bit_xor)
+ res (bit_xor bit_and)
+ (simplify
+ (bit_xor:c (lop @0 @1) (bit_ior @0 @1))
+ (res @0 @1)))
/* (x & y) + (x ^ y) -> x | y */
/* (x & y) | (x ^ y) -> x | y */
(plus:c (bit_and @0 @1) (bit_ior @0 @1))
(plus @0 @1))
-/* (x + y) - (x | y) -> x & y */
-(simplify
- (minus (plus @0 @1) (bit_ior @0 @1))
- (if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
- && !TYPE_SATURATING (type))
- (bit_and @0 @1)))
-
-/* (x + y) - (x & y) -> x | y */
-(simplify
- (minus (plus @0 @1) (bit_and @0 @1))
- (if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
- && !TYPE_SATURATING (type))
- (bit_ior @0 @1)))
+/* (x + y) - (x | y) -> x & y
+ (x + y) - (x & y) -> x | y */
+(for rop (bit_ior bit_and)
+ res (bit_and bit_ior)
+ (simplify
+ (minus (plus @0 @1) (rop @0 @1))
+ (if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
+ && !TYPE_SATURATING (type))
+ (res @0 @1))))
/* (x | y) - y -> (x & ~y) */
(simplify
(minus (bit_ior:cs @0 @1) @1)
(bit_and @0 (bit_not @1)))
-/* (x | y) - (x ^ y) -> x & y */
-(simplify
- (minus (bit_ior @0 @1) (bit_xor @0 @1))
- (bit_and @0 @1))
-
-/* (x | y) - (x & y) -> x ^ y */
-(simplify
- (minus (bit_ior @0 @1) (bit_and @0 @1))
- (bit_xor @0 @1))
+/* (x | y) - (x ^ y) -> x & y
+ (x | y) - (x & y) -> x ^ y */
+(for rop (bit_xor bit_and)
+ res (bit_and bit_xor)
+ (simplify
+ (minus (bit_ior @0 @1) (rop @0 @1))
+ (res @0 @1)))
/* (x | y) & ~(x & y) -> x ^ y */
(simplify