Deal with incoming POLY_INT_CST ranges (PR92033)
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 16 Oct 2019 09:50:44 +0000 (09:50 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 16 Oct 2019 09:50:44 +0000 (09:50 +0000)
commit96eb7d7a642085f651e9940f0ee75568d7c4441d
treef7eca938631203946dc47f7d9408210613dc0571
parent4307a485c39fd1c317d6cead2707a903052c4753
Deal with incoming POLY_INT_CST ranges (PR92033)

This patch makes value_range_base::set convert POLY_INT_CST bounds
into the worst-case INTEGER_CST bounds.  The main case in which this
gives useful ranges is a lower bound of A + B * X becoming A when B >= 0.
E.g.:

  [32 + 16X, 100] -> [32, 100]
  [32 + 16X, 32 + 16X] -> [32, MAX]

But the same thing can be useful for the upper bound with negative
X coefficients.

2019-10-16  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR middle-end/92033
* poly-int.h (constant_lower_bound_with_limit): New function.
(constant_upper_bound_with_limit): Likewise.
* doc/poly-int.texi: Document them.
* tree-vrp.c (value_range_base::set): Convert POLY_INT_CST bounds
into the worst-case INTEGER_CST bounds.

From-SVN: r277056
gcc/ChangeLog
gcc/doc/poly-int.texi
gcc/poly-int.h
gcc/tree-vrp.c