On Sun, Aug 09, 2020 at 11:24:54PM +0200, Marc Glisse wrote: > Odd numbers are invertible in Z / 2^n Z, so X * C1 == C2 can be rewritten as > X == C2 * inv(C1) when overflow wraps. > > mod_inv should probably be updated to better match the other wide_int > functions, but that's a separate issue. > > Bootstrap+regtest on x86_64-pc-linux-gnu. > > 2020-08-10 Marc Glisse <marc.gli...@inria.fr> > > PR tree-optimization/95433 > * match.pd (X * C1 == C2): Handle wrapping overflow. > * expr.c (maybe_optimize_mod_cmp): Qualify call to mod_inv. > (mod_inv): Move... > * wide-int.cc (mod_inv): ... here. > * wide-int.h (mod_inv): Declare it. > > * gcc.dg/tree-ssa/pr95433-2.c: New file.
LGTM, thanks. Jakub