Simplify X * C1 == C2 with undefined overflow
authorMarc Glisse <marc.glisse@inria.fr>
Tue, 4 Aug 2020 15:30:16 +0000 (17:30 +0200)
committerMarc Glisse <marc.glisse@inria.fr>
Tue, 4 Aug 2020 15:30:16 +0000 (17:30 +0200)
commitca2b8c082c4f16919071c9f8de8db0b33b54c405
tree457a68e6317228a5710215d659e7234c9da209ad
parentc79d8335fd5905324b32d65cc0115986301f07eb
Simplify X * C1 == C2 with undefined overflow

this transformation is quite straightforward, without overflow, 3*X==15 is
the same as X==5 and 3*X==5 cannot happen. Adding a single_use restriction
for the first case didn't seem necessary, although of course it can
slightly increase register pressure in some cases.

2020-08-04  Marc Glisse  <marc.glisse@inria.fr>

PR tree-optimization/95433
* match.pd (X * C1 == C2): New transformation.

* gcc.c-torture/execute/pr23135.c: Add -fwrapv to avoid
undefined behavior.
* gcc.dg/tree-ssa/pr95433.c: New file.
gcc/match.pd
gcc/testsuite/gcc.c-torture/execute/pr23135.c
gcc/testsuite/gcc.dg/tree-ssa/pr95433.c [new file with mode: 0644]