Fixup possible VR_ANTI_RANGE value_range issues
Checks
Commit Message
After fixing PR107561 the following avoids looking at VR_ANTI_RANGE
ranges where it doesn't seem obvious the code does the correct
thing here (lower_bound and upper_bound do not work as expected).
Bootstrapped and tested on x86_64-unknown-linux-gnu.
OK?
Thanks,
Richard.
* gimple-ssa-sprintf.cc (get_int_range): Avoid VR_ANTI_RANGE
by using range_int_cst_p.
(format_integer): Likewise.
(handle_printf_call): Guard against VR_ANTI_RANGE.
* graphite-sese-to-poly.cc (add_param_constraints): Likewise.
* tree-ssa-strlen.cc (set_strlen_range): Likewise.
---
gcc/gimple-ssa-sprintf.cc | 6 +++---
gcc/graphite-sese-to-poly.cc | 2 +-
gcc/tree-ssa-strlen.cc | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
@@ -1082,7 +1082,7 @@ get_int_range (tree arg, gimple *stmt,
value_range vr;
query->range_of_expr (vr, arg, stmt);
- if (!vr.undefined_p () && !vr.varying_p ())
+ if (range_int_cst_p (&vr))
{
HOST_WIDE_INT type_min
= (TYPE_UNSIGNED (argtype)
@@ -1391,7 +1391,7 @@ format_integer (const directive &dir, tree arg, pointer_query &ptr_qry)
value_range vr;
ptr_qry.rvals->range_of_expr (vr, arg, dir.info->callstmt);
- if (!vr.varying_p () && !vr.undefined_p ())
+ if (range_int_cst_p (&vr))
{
argmin = wide_int_to_tree (TREE_TYPE (arg), vr.lower_bound ());
argmax = wide_int_to_tree (TREE_TYPE (arg), vr.upper_bound ());
@@ -4623,7 +4623,7 @@ handle_printf_call (gimple_stmt_iterator *gsi, pointer_query &ptr_qry)
value_range vr;
ptr_qry.rvals->range_of_expr (vr, size, info.callstmt);
- if (!vr.undefined_p ())
+ if (!vr.undefined_p () && vr.kind () != VR_ANTI_RANGE)
{
tree type = TREE_TYPE (size);
tree tmin = wide_int_to_tree (type, vr.lower_bound ());
@@ -426,7 +426,7 @@ add_param_constraints (scop_p scop, graphite_dim_t p, tree parameter)
if (INTEGRAL_TYPE_P (type)
&& get_range_query (cfun)->range_of_expr (r, parameter)
- && !r.undefined_p ())
+ && range_int_cst_p (&r))
{
min = r.lower_bound ();
max = r.upper_bound ();
@@ -1936,7 +1936,7 @@ set_strlen_range (tree lhs, wide_int min, wide_int max,
{
value_range r;
get_range_query (cfun)->range_of_expr (r, bound);
- if (!r.undefined_p ())
+ if (range_int_cst_p (&r))
{
/* For a bound in a known range, adjust the range determined
above as necessary. For a bound in some anti-range or