match: Optimize `max(a,b) == 0` to `(a|b) == 0` for unsigned [PR115275]
For unsigned types, you can optimize `max<a,b> == 0` into
`(a|b) == 0` (that is both have to be zero). A similar thing happens for `!= 0`.
This optimization fixes the missed optimization (g++.dg/tree-ssa/pr115275.C)
that was reported exposed by adding phiprop early.
Bootstrapped and tested on x86_64-linux-gnu.
PR tree-optimization/115275
gcc/ChangeLog:
* match.pd (umax(a,b) ==/!= 0): New pattern.
gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/pr115275.C: New test.
* gcc.dg/tree-ssa/max_eqne-1.c: New test.
* gcc.dg/tree-ssa/max_eqne-2.c: New test.
Signed-off-by:
Andrew Pinski <quic_apinski@quicinc.com>
Showing
- gcc/match.pd 8 additions, 0 deletionsgcc/match.pd
- gcc/testsuite/g++.dg/tree-ssa/pr115275.C 36 additions, 0 deletionsgcc/testsuite/g++.dg/tree-ssa/pr115275.C
- gcc/testsuite/gcc.dg/tree-ssa/max_eqne-1.c 20 additions, 0 deletionsgcc/testsuite/gcc.dg/tree-ssa/max_eqne-1.c
- gcc/testsuite/gcc.dg/tree-ssa/max_eqne-2.c 19 additions, 0 deletionsgcc/testsuite/gcc.dg/tree-ssa/max_eqne-2.c
Loading
Please register or sign in to comment