On Sun, Sep 20, 2026 at 8:35 PM Jeff Law <[email protected]> wrote: > > > > On 9/6/26 8:21 PM, Shivam Gupta wrote: > > When evaluating integer division of the form (t * u) / v where constants > > u and v share a common factor g = gcd(u, v) > 1, the expression can be > > simplified to (t * (u / g)) / (v / g). > > > > This patch adds a new match.pd pattern to compute the GCD of INTEGER_CST > > operands using wi::gcd on absolute values and reduce both operands > > accordingly to reduce signed overflow and generate cheaper > > division-by-constant reciprocal sequences. > > > > Regression tested on x86_64-pc-linux-gnu. > > > > PR tree-optimization/126311 > > > > gcc/ChangeLog: > > > > * match.pd ((t * u) / v): Reduce integer constants u and v by > > their greatest common divisor if gcd(u, v) > 1. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.dg/tree-ssa/pr126311.c: New test. > > > > Signed-off-by: Shivam Gupta <[email protected]> > So I can see what you're doing and why. My concern is more about testing. > > > + > > +/* gcd(6, 10) == 2: (t * 6) / 10 -> (t * 3) / 5 */ > > +int src_pos (int t) { > > + return (t * 6) / 10; > > +} > This case should be reduced AFAICT. > > + > > +int src_neg (int t) { > > + return (t * -6) / 10; > > +} > This one too. > > > + > > +unsigned int src_unsigned (unsigned int t) { > > + return (t * 6u) / 10u; > > +} > This one won't reduce as the ranger is going to signal that the multiply > may overflow because @0 is has a range [0..UINT_MAX]. > > > + > > +/* No common factor: gcd(7, 10) == 1 (should stay / 10) */ > > +int src_gcd_one (int t) { > > + return (t * 7) / 10; > > +} > As the comment, says, no common factor. > > > So by my count, two reduce, two do not. Yet we've got these counts in > the test: > > > + > > +/* { dg-final { scan-tree-dump-times " / 5" 3 "optimized" } } */ > > +/* { dg-final { scan-tree-dump-times " / 10" 1 "optimized" } } */ > Something seems inconsistent. >
Thanks for catching it, I am not exactly sure how this happened. I have updated the count in new patch version - https://gcc.gnu.org/pipermail/gcc-patches/2026-October/734173.html. This also adds a bounded test case so sound is 3 and 2. Shivam > jeff > >
