On Tue, Jul 28, 2026 at 12:56 PM Kael Andrew Franco <[email protected]> wrote: > > From 6fd93ce7b4aa9dacf5c10c042f3681a41a50758f Mon Sep 17 00:00:00 2001 > From: Kael Andrew Alonzo Franco <[email protected]> > Date: Tue, 28 Jul 2026 06:53:33 -0400 > Subject: [PATCH] match: Combine patterns into five for. > > This merges 10 simplify patterns so genmatch outputs > less C++ code. > > Bootstrapped and regtested on x86_64-pc-linux-gnu.
OK. Thanks, Richard. > gcc/ChangeLog: > > * match.pd: Combine patterns into five for. > > Signed-off-by: Kael Andrew Franco <[email protected]> > --- > gcc/match.pd | 82 ++++++++++++++++++++++++---------------------------- > 1 file changed, 37 insertions(+), 45 deletions(-) > > diff --git a/gcc/match.pd b/gcc/match.pd > index 62d08093125..87275610fbe 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -1655,15 +1655,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > && (!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 > @@ -1928,27 +1926,27 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > (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 > + (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 */ > (simplify > (bit_xor:c (bit_xor @0 @1) (bit_ior @0 @1)) > (bit_and @0 @1)) > @@ -1966,34 +1964,28 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > (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 > -- > 2.55.0 > >
