Re: [PING][PATCH] match: 1 / X -> X == 1 for positive X [PR125735]

Richard Biener <[email protected]> Mon, 3 Aug 2026 16:14:49 +0200
Newsgroups gmane.comp.gcc.patches
Message-ID <CAFiYyc3JTkKMM+y-oRF4gaT2Gz8aMqNvpbcRiWgT6J8_Lju6RQ@mail.gmail.com>
On Mon, Aug 3, 2026 at 3:57 PM Jeffrey Law <[email protected]> wrote:
>
>
>
> On 7/31/2026 7:51 AM, Kael Andrew Franco wrote:
> > Ping of https://gcc.gnu.org/pipermail/gcc-patches/2026-July/724387.html.
> > Updated patch still works:
> >  From a8dad89050597f075c197bba9b0da2703277671e Mon Sep 17 00:00:00 2001
> > From: Kael Andrew Alonzo Franco <[email protected]>
> > Date: Thu, 30 Jul 2026 21:59:35 -0400
> > Subject: [PATCH] match: 1 / X -> X == 1 for positive X [PR125735]
> >
> > TYPE_UNSIGNED (type) doesn't cover positive signed types and
> > tree_expr_nonnegative_p () doesn't work so use vr0.nonnegative_p ().
> >
> > Bootstrapped and tested on x86_64-pc-linux-gnu.
> >
> >       PR tree-optimization/125735
> >
> > gcc/ChangeLog:
> >
> >       * match.pd: 1 / X -> X == 1 for positive X. [PR125735]
> >
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.dg/pr125735.c: New test.
> >
> > Signed-off-by: Kael Andrew Franco <[email protected]>
> Looks good.  Just one nit:
>
>
> > @@ -640,13 +640,24 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
> >         && TYPE_PRECISION (type) > 1
> >         && !integer_zerop (@1)
> >         && (!flag_non_call_exceptions || tree_expr_nonzero_p (@1)))
> > -  (if (TYPE_UNSIGNED (type))
> > +  (with {
> > +    bool positive_p = TYPE_UNSIGNED (type);
> > +#if GIMPLE
> > +    int_range_max vr0;
> > +    wide_int lower_bnd;
> > +    if (!positive_p
> > +        && gimple_match_range_of_expr (vr0, @1)
> > +        && vr0.nonnegative_p ())
> > +      positive_p = true;
> > +#endif
> lower_bnd isn't used.  You should just remove it.
>
> OK with that change.  No need to go through another review round.

I'm not disagreeing, but given match is supposed to be IL agnostic
and we're accumulating more and more uses like the above I'd like
to see some abstraction around this.  The above _should_ be
equal to tree_expr_nonnegative_p (@1), no?

Richard.

>
> jeff