On Thu, Jul 23, 2026 at 9:16 AM Jeffrey Law <[email protected]> wrote: > > > > On 7/23/2026 2:59 AM, Richard Biener wrote: > > On Thu, Jul 23, 2026 at 9:12 AM Eikansh Gupta > > <[email protected]> wrote: > >> Fold (signbit (x) cmp1 0) cmp (signbit (y) cmp2 0) ? y : -y > >> to copysign (y, +-x). The result keeps the magnitude of Y and takes its > >> sign from X (or -X). Emitted as IFN_COPYSIGN when the target supports it. > >> > >> PR tree-optimization/109843 > >> > >> gcc/ChangeLog: > >> > >> * match.pd ((signbit (x) cmp 0) cmp (signbit (y) cmp 0) ? y : -y): > >> New simplification to copysign (y, +-x). > >> > >> gcc/testsuite/ChangeLog: > >> > >> * gcc.dg/tree-ssa/pr109843.c: New test. > >> > >> Signed-off-by: Eikansh Gupta <[email protected]> > >> --- > >> gcc/match.pd | 20 +++++++ > >> gcc/testsuite/gcc.dg/tree-ssa/pr109843.c | 76 ++++++++++++++++++++++++ > >> 2 files changed, 96 insertions(+) > >> create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr109843.c > >> > >> diff --git a/gcc/match.pd b/gcc/match.pd > >> index d1a12c35ed3..59ea0e1cc0c 100644 > >> --- a/gcc/match.pd > >> +++ b/gcc/match.pd > >> @@ -9864,6 +9864,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > >> (abs @0) > >> (negate (abs @0)))))) > >> > >> +/* (signbit (x) cmp1 0) cmp (signbit (y) cmp2 0) ? y : -y > >> + -> copysign (y, +-x). */ > >> +#if GIMPLE > >> +(for cmp (eq ne) > >> + (for icmp1 (eq ne) > >> + (for icmp2 (eq ne) > >> + (for sign (SIGNBIT) > > That's an awful a lot of combinations (2*2*2*4) > > > >> + (simplify > >> + (cond (cmp:c (icmp1 (sign @0) integer_zerop) > > Plus :c here. > > > > I wonder where the pattern request comes from ... > Probably not spec given Andrea has been tagging things she finds with > spec when relevant.
In this case, I was looking into PR 109829 when I noticed this one too. I don't think it is in spec or any other benchmark though. Thanks, Andrea > > Are you objecting to the number of patterns this generates, or just > noting that it's a bunch? > > jeff > >
