re PR ada/25900 (ICE on ACATS cxac004 in Tree-VRP)
PR ada/25900 * tree-vrp.c (extract_range_from_assert): When merging a VR_RANGE with a VR_ANTI_RANGE and the VR_ANTI_RANGEis completely contained within the VR_RANGE, use the VR_RANGE as the result, not the VR_ANTI_RANGE. (adjust_range_with_scev): Reject ranges from SCEV which are out of bounds for the type. From-SVN: r110261
This commit is contained in:
parent
f4e18df2de
commit
4f67dfcf24
@ -1,4 +1,14 @@
|
||||
2006-01-26 Daniel Berlin <dberlin@dberlin.org>
|
||||
2006-01-26 Jeff Law <law@redhat.com>
|
||||
|
||||
PR ada/25900
|
||||
* tree-vrp.c (extract_range_from_assert): When merging a VR_RANGE
|
||||
with a VR_ANTI_RANGE and the VR_ANTI_RANGEis completely contained
|
||||
within the VR_RANGE, use the VR_RANGE as the result, not the
|
||||
VR_ANTI_RANGE.
|
||||
(adjust_range_with_scev): Reject ranges from SCEV which are out
|
||||
of bounds for the type.
|
||||
|
||||
2005-01-26 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
* tree-ssa-alias.c (maybe_create_global_var): Change
|
||||
subvar walking to an assertion that we don't have subvar'd variables.
|
||||
|
@ -1059,7 +1059,8 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
|
||||
1. The VR_ANTI_RANGE range is competely within the
|
||||
VR_RANGE and the endpoints of the ranges are
|
||||
different. In that case the resulting range
|
||||
should be the VR_ANTI_RANGE.
|
||||
should be whichever range is more precise.
|
||||
Typically that will be the VR_RANGE.
|
||||
|
||||
2. The VR_ANTI_RANGE is completely disjoint from
|
||||
the VR_RANGE. In this case the resulting range
|
||||
@ -1100,8 +1101,8 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
|
||||
if (compare_values (anti_max, real_max) == -1
|
||||
&& compare_values (anti_min, real_min) == 1)
|
||||
{
|
||||
set_value_range (vr_p, VR_ANTI_RANGE, anti_min,
|
||||
anti_max, vr_p->equiv);
|
||||
set_value_range (vr_p, VR_RANGE, real_min,
|
||||
real_max, vr_p->equiv);
|
||||
}
|
||||
/* Case 2, VR_ANTI_RANGE completely disjoint from
|
||||
VR_RANGE. */
|
||||
@ -1918,12 +1919,21 @@ adjust_range_with_scev (value_range_t *vr, struct loop *loop, tree stmt,
|
||||
{
|
||||
/* For VARYING or UNDEFINED ranges, just about anything we get
|
||||
from scalar evolutions should be better. */
|
||||
tree min = TYPE_MIN_VALUE (TREE_TYPE (init));
|
||||
tree max = TYPE_MAX_VALUE (TREE_TYPE (init));
|
||||
|
||||
if (init_is_max)
|
||||
set_value_range (vr, VR_RANGE, TYPE_MIN_VALUE (TREE_TYPE (init)),
|
||||
init, vr->equiv);
|
||||
max = init;
|
||||
else
|
||||
set_value_range (vr, VR_RANGE, init, TYPE_MAX_VALUE (TREE_TYPE (init)),
|
||||
vr->equiv);
|
||||
min = init;
|
||||
|
||||
/* If we would create an invalid range, then just assume we
|
||||
know absolutely nothing. This may be over-conservative,
|
||||
but it's clearly safe. */
|
||||
if (compare_values (min, max) == 1)
|
||||
return;
|
||||
|
||||
set_value_range (vr, VR_RANGE, min, max, vr->equiv);
|
||||
}
|
||||
else if (vr->type == VR_RANGE)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user