mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 17:40:46 +08:00
tree-vrp.c (extract_range_from_assert): Set the range to VARYING for LT and GT if the computed range is effectively empty.
* tree-vrp.c (extract_range_from_assert): Set the range to VARYING for LT and GT if the computed range is effectively empty. From-SVN: r114108
This commit is contained in:
parent
c3c690eafa
commit
9d6eefd5e9
@ -1,4 +1,9 @@
|
||||
2006-06-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
2006-05-25 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree-vrp.c (extract_range_from_assert): Set the range to VARYING
|
||||
for LT and GT if the computed range is effectively empty.
|
||||
|
||||
2006-05-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR target/27627
|
||||
* pa/pa-modes.def: Use mips_single_format, mips_double_format and
|
||||
|
@ -939,14 +939,22 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
|
||||
max = limit_vr->max;
|
||||
}
|
||||
|
||||
/* For LT_EXPR, we create the range [MIN, MAX - 1]. */
|
||||
if (cond_code == LT_EXPR)
|
||||
/* If the maximum value forces us to be out of bounds, simply punt.
|
||||
It would be pointless to try and do anything more since this
|
||||
all should be optimized away above us. */
|
||||
if (cond_code == LT_EXPR && compare_values (max, min) == 0)
|
||||
set_value_range_to_varying (vr_p);
|
||||
else
|
||||
{
|
||||
tree one = build_int_cst (type, 1);
|
||||
max = fold_build2 (MINUS_EXPR, type, max, one);
|
||||
}
|
||||
/* For LT_EXPR, we create the range [MIN, MAX - 1]. */
|
||||
if (cond_code == LT_EXPR)
|
||||
{
|
||||
tree one = build_int_cst (type, 1);
|
||||
max = fold_build2 (MINUS_EXPR, type, max, one);
|
||||
}
|
||||
|
||||
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
|
||||
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
|
||||
}
|
||||
}
|
||||
else if (cond_code == GE_EXPR || cond_code == GT_EXPR)
|
||||
{
|
||||
@ -962,14 +970,22 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
|
||||
min = limit_vr->min;
|
||||
}
|
||||
|
||||
/* For GT_EXPR, we create the range [MIN + 1, MAX]. */
|
||||
if (cond_code == GT_EXPR)
|
||||
/* If the minimum value forces us to be out of bounds, simply punt.
|
||||
It would be pointless to try and do anything more since this
|
||||
all should be optimized away above us. */
|
||||
if (cond_code == GT_EXPR && compare_values (min, max) == 0)
|
||||
set_value_range_to_varying (vr_p);
|
||||
else
|
||||
{
|
||||
tree one = build_int_cst (type, 1);
|
||||
min = fold_build2 (PLUS_EXPR, type, min, one);
|
||||
}
|
||||
/* For GT_EXPR, we create the range [MIN + 1, MAX]. */
|
||||
if (cond_code == GT_EXPR)
|
||||
{
|
||||
tree one = build_int_cst (type, 1);
|
||||
min = fold_build2 (PLUS_EXPR, type, min, one);
|
||||
}
|
||||
|
||||
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
|
||||
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
|
||||
}
|
||||
}
|
||||
else
|
||||
gcc_unreachable ();
|
||||
|
Loading…
x
Reference in New Issue
Block a user