On Tue, Aug 21, 2018 at 7:20 PM MCC CS <mc...@gmx.com> wrote:
>
> Hello all,
>
> I have updated the testcase and run "make check" on Ubuntu x86_64.
> All of them passed. (However the last part "do-check" couldn't be
> run, probably due to a missing testsuite dependency?)
>
> The match.pd is the same as the original patch, and I have
> updated change-summaries and improved tests.
>
> 2018-08-21  MCC CS  <deswurs...@users.noreply.github.com>
>
>         gcc/
>         PR tree-optimization/87009
>         * match.pd: Add boolean optimizations.
>
> 2018-08-21  MCC CS  <deswurs...@users.noreply.github.com>
>
>         gcc/testsuite/
>         PR tree-optimization/87009
>         * gcc.dg/pr87009.c: New test.
>
> Index: gcc/match.pd
> ===================================================================
> --- gcc/match.pd        (revision 263646)
> +++ gcc/match.pd        (working copy)
> @@ -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:c (bit_not @0) @1) (bit_ior:c @0 (bit_not @1)))

Please add single-use markers after the existing 'c' markers of the bit_ior's

> + (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))

Likewise.

OK with that change.

Richard.


> +
>  /* ~x & ~y -> ~(x | y)
>     ~x | ~y -> ~(x & y) */
>  (for op (bit_and bit_ior)
> Index: gcc/testsuite/gcc.dg/pr87009.c
> ===================================================================
> --- gcc/testsuite/gcc.dg/pr87009.c      (nonexistent)
> +++ gcc/testsuite/gcc.dg/pr87009.c      (working copy)
> @@ -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);
> +}

Reply via email to