Simplify X * C1 == C2 with wrapping overflow

Jakub Jelinek jakub@redhat.com
Mon Aug 10 08:39:04 GMT 2020


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.glisse@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



More information about the Gcc-patches mailing list