phiopt: Improve minmax optimization [PR95699]
authorJakub Jelinek <jakub@redhat.com>
Thu, 18 Jun 2020 10:11:09 +0000 (12:11 +0200)
committerJakub Jelinek <jakub@redhat.com>
Thu, 18 Jun 2020 10:12:43 +0000 (12:12 +0200)
commit2e0f4a18bc978c73624dd016e4cce229c2809c9c
treeb707531c7df555f60f6fb700333cf9852ca54f77
parent9a875db43cd4210843c480c8df26a1d6624d057d
phiopt: Improve minmax optimization [PR95699]

As discussed in the PR, the
x < 0x80000000U to (int) x >= 0
optimization stands in the way of minmax_replacement optimization,
so for comparisons with most of the constants it works well, but when the
above mentioned optimization triggers, it is unable to do it.
The match.pd (cond (cmp (convert? x) c1) (op x c2) c3) -> (op (minmax x c1) c2)
optimization is able to look through that and this patch
teaches minmax_replacement about it too.

2020-06-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/95699
* tree-ssa-phiopt.c (minmax_replacement): Treat (signed int)x < 0
as x > INT_MAX and (signed int)x >= 0 as x <= INT_MAX.  Move variable
declarations to the statements that set them where possible.

* gcc.dg/tree-ssa/pr95699.c: New test.
gcc/testsuite/gcc.dg/tree-ssa/pr95699.c [new file with mode: 0644]
gcc/tree-ssa-phiopt.c