re PR middle-end/87009 (Can't find XOR pattern applying De Morgan sequentially)
PR tree-optimization/87009 * match.pd: Add boolean optimizations. PR tree-optimization/87009 * gcc.dg/pr87009.c: New test. From-SVN: r263931
This commit is contained in:
parent
96c19db55b
commit
fd8303a508
|
@ -1,3 +1,8 @@
|
|||
2018-08-28 MCC CS <deswurstes@users.noreply.github.com>
|
||||
|
||||
PR tree-optimization/87009
|
||||
* match.pd: Add boolean optimizations.
|
||||
|
||||
2018-08-28 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR middle-end/86631
|
||||
|
|
15
gcc/match.pd
15
gcc/match.pd
|
@ -776,6 +776,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
|||
(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)))
|
||||
|
||||
/* Simplify (~X & Y) to X ^ Y if we know that (X & ~Y) is 0. */
|
||||
#if GIMPLE
|
||||
(simplify
|
||||
|
@ -981,6 +986,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
|||
(bit_and:c (bit_ior:c @0 @1) (bit_xor:c @1 (bit_not @0)))
|
||||
(bit_and @0 @1))
|
||||
|
||||
/* (~x | y) & (x | ~y) -> ~(x ^ y) */
|
||||
(simplify
|
||||
(bit_and (bit_ior:cs (bit_not @0) @1) (bit_ior:cs @0 (bit_not @1)))
|
||||
(bit_not (bit_xor @0 @1)))
|
||||
|
||||
/* (~x | y) ^ (x | ~y) -> x ^ y */
|
||||
(simplify
|
||||
(bit_xor (bit_ior:c (bit_not @0) @1) (bit_ior:c @0 (bit_not @1)))
|
||||
(bit_xor @0 @1))
|
||||
|
||||
/* ~x & ~y -> ~(x | y)
|
||||
~x | ~y -> ~(x & y) */
|
||||
(for op (bit_and bit_ior)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-08-28 MCC CS <deswurstes@users.noreply.github.com>
|
||||
|
||||
PR tree-optimization/87009
|
||||
* gcc.dg/pr87009.c: New test.
|
||||
|
||||
2018-08-28 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR middle-end/86631
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -fdump-tree-original" } */
|
||||
/* { dg-final { scan-tree-dump-times "return s \\^ x;" 4 "original" } } */
|
||||
|
||||
int f1 (int x, int s)
|
||||
{
|
||||
return ~(~(x|s)|x)|~(~(x|s)|s);
|
||||
}
|
||||
|
||||
int f2 (int x, int s)
|
||||
{
|
||||
return ~(~(~x&s)&~(x&~s));
|
||||
}
|
||||
|
||||
int f3 (int x, int s)
|
||||
{
|
||||
return ~((x|~s)&(~x|s));
|
||||
}
|
||||
|
||||
int f4 (int x, int s)
|
||||
{
|
||||
return (x|~s)^(~x|s);
|
||||
}
|
Loading…
Reference in New Issue