expand: Fold x - y < 0 to x < y during expansion [PR94802]
authorJakub Jelinek <jakub@redhat.com>
Tue, 5 Jan 2021 18:13:29 +0000 (19:13 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 5 Jan 2021 18:13:29 +0000 (19:13 +0100)
commit5de7bf5bc98ec9edc6838a443521204d0eca7605
tree388829cc39978cb2685f30f05b83652575aec353
parent6b577a17b26347e78c8b9167f24fc5c9d9724270
expand: Fold x - y < 0 to x < y during expansion [PR94802]

My earlier patch to simplify x - y < 0 etc. for signed subtraction
with undefined overflow into x < y in match.pd regressed some tests,
even when it was guarded to be post-IPA, the following patch thus
attempts to optimize that during expansion instead (which is the last
time we can do it, afterwards we lose the information whether it was
x - y < 0 or (int) ((unsigned) x - y) < 0 for which we couldn't
optimize it.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94802
* expr.h (maybe_optimize_sub_cmp_0): Declare.
* expr.c: Include tree-pretty-print.h and flags.h.
(maybe_optimize_sub_cmp_0): New function.
(do_store_flag): Use it.
* cfgexpand.c (expand_gimple_cond): Likewise.

* gcc.target/i386/pr94802.c: New test.
* gcc.dg/Wstrict-overflow-25.c: Remove xfail.
gcc/cfgexpand.c
gcc/expr.c
gcc/expr.h
gcc/testsuite/gcc.dg/Wstrict-overflow-25.c
gcc/testsuite/gcc.target/i386/pr94802.c [new file with mode: 0644]