> Am 26.11.2022 um 17:42 schrieb apinski--- via Gcc-patches > <gcc-patches@gcc.gnu.org>: > > From: Andrew Pinski <apin...@marvell.com> > > The following makes sure to fold (~a) == b to a ^ b for truth > values. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. Ok. Richard > Thanks, > Andrew Pinski > > PR 103356 > > gcc/ChangeLog: > > * match.pd: ((~a) == b -> a ^ b): New pattern. > > gcc/testsuite/ChangeLog: > > * gcc.dg/pr103356-1.c: New test. > --- > gcc/match.pd | 7 +++++++ > gcc/testsuite/gcc.dg/pr103356-1.c | 9 +++++++++ > 2 files changed, 16 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/pr103356-1.c > > diff --git a/gcc/match.pd b/gcc/match.pd > index a4d1386fd9f..67a0a682f31 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -1999,6 +1999,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > && TYPE_PRECISION (TREE_TYPE (@0)) == 1) > (convert (eq @0 @1)))) > > +/* (~a) == b is a ^ b for truth valued a and b. */ > +(simplify > + (eq:c (bit_not:s truth_valued_p@0) truth_valued_p@1) > + (if (INTEGRAL_TYPE_P (TREE_TYPE (@0)) > + && TYPE_PRECISION (TREE_TYPE (@0)) == 1) > + (convert (bit_xor @0 @1)))) > + > /* (x & ~m) | (y & m) -> ((x ^ y) & m) ^ x */ > (simplify > (bit_ior:c (bit_and:cs @0 (bit_not @2)) (bit_and:cs @1 @2)) > diff --git a/gcc/testsuite/gcc.dg/pr103356-1.c > b/gcc/testsuite/gcc.dg/pr103356-1.c > new file mode 100644 > index 00000000000..61d0b81da22 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr103356-1.c > @@ -0,0 +1,9 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O -fdump-tree-forwprop1" } */ > + > +_Bool foo (_Bool a, _Bool b) > +{ > + return a == (!b); > +} > + > +/* { dg-final { scan-tree-dump "\[ab\]_\[0-9\]+\\(D\\) \\\^ > \[ba\]_\[0-9\]+\\(D\\)" "forwprop1" } } */ > -- > 2.17.1 >
Re: [PATCH] tree-optimization/103356 Add missing (~a) == b folding for _Bool
Richard Biener via Gcc-patches Sat, 26 Nov 2022 09:50:18 -0800
- [PATCH] tree-optimization/103356 Add missin... apinski--- via Gcc-patches
- Re: [PATCH] tree-optimization/103356 A... Richard Biener via Gcc-patches