]> gcc.gnu.org Git - gcc.git/commit
Fix PR 111331: wrong code for `a > 28 ? MIN<a, 28> : 29`
authorAndrew Pinski <apinski@marvell.com>
Fri, 8 Sep 2023 05:13:31 +0000 (22:13 -0700)
committerAndrew Pinski <apinski@marvell.com>
Sun, 10 Sep 2023 15:46:44 +0000 (08:46 -0700)
commit30e6ee074588bacefd2dfe745b188bb20c81fe5e
tree26d08fd3bac30811c0b63a4d2bc16b66cedfaba7
parent5b33b364652866165431aef1810af1e890229c5e
Fix PR 111331: wrong code for `a > 28 ? MIN<a, 28> : 29`

The problem here is after r6-7425-ga9fee7cdc3c62d0e51730,
the comparison to see if the transformation could be done was using the
wrong value. Instead of see if the inner was LE (for MIN and GE for MAX)
the outer value, it was comparing the inner to the value used in the comparison
which was wrong.
The match pattern copied the same logic mistake when they were added in
r14-1411-g17cca3c43e2f49 .

OK? Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

PR tree-optimization/111331
* match.pd (`(a CMP CST1) ? max<a,CST2> : a`):
Fix the LE/GE comparison to the correct value.
* tree-ssa-phiopt.cc (minmax_replacement):
Fix the LE/GE comparison for the
`(a CMP CST1) ? max<a,CST2> : a` optimization.

gcc/testsuite/ChangeLog:

PR tree-optimization/111331
* gcc.c-torture/execute/pr111331-1.c: New test.
* gcc.c-torture/execute/pr111331-2.c: New test.
* gcc.c-torture/execute/pr111331-3.c: New test.
gcc/match.pd
gcc/testsuite/gcc.c-torture/execute/pr111331-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr111331-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr111331-3.c [new file with mode: 0644]
gcc/tree-ssa-phiopt.cc
This page took 0.058419 seconds and 5 git commands to generate.