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 <[email protected]>
>
> 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