tree-ssanames: Allow non-SSA_NAME arguments to get_range_info
authorJakub Jelinek <jakub@redhat.com>
Fri, 27 Nov 2020 10:38:31 +0000 (11:38 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 27 Nov 2020 10:38:31 +0000 (11:38 +0100)
commit83325a9db8348c3ba5e9c871d106ee1b76d40526
treed9cb52e1652545a0940f7fa917380bd0059e2734
parentbf0a63a1f47525d1c466dbb84616dcb72010affa
tree-ssanames: Allow non-SSA_NAME arguments to get_range_info

My recent match.pd change required quite a lot of code due to the separate
need to handle INTEGER_CSTs and SSA_NAMEs, and after all, I didn't even
handle one case there, when in x * y / y the x is INTEGER_CST and y is
SSA_NAME.
The following patch allows to simplify it, by allowing non-SSA_NAME argument
to get_range_info, for INTEGER_CSTs it will return VR_RANGE with *min == *max
equal to the constnat, and for non-INTEGER_CST/SSA_NAMEs it will just return
VR_VARYING.

This allows not to simplify just the match.pd, but some other spots too.

2020-11-27  Jakub Jelinek  <jakub@redhat.com>

* tree-ssanames.c (get_range_info): Handle INTEGER_CST by returning
VR_RANGE with both *min and *max set to the wide_int value of the
INTEGER_CST.  Return VR_VARYING for non-SSA_NAMEs.
* match.pd ((t * 2) / 2) -> t): Handle also @0 being INTEGER_CST.
Simplify by calling get_range_info on everything.
* tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Simplify by calling
get_range_info on everything.
* tree-scalar-evolution.c (iv_can_overflow_p): Likewise.
gcc/match.pd
gcc/tree-scalar-evolution.c
gcc/tree-ssa-strlen.c
gcc/tree-ssanames.c