Adjust overflow for invariants in bounds_of_var_in_loop.

Invariants returned from SCEV can have TREE_OVERFLOW set.  Clear the
overflow as we do with the rest of the values returned from this
function.

gcc/ChangeLog:

	* gimple-range.cc (gimple_ranger::range_of_ssa_name_with_loop_info):
	Remove TREE_OVERFLOW special case.
	* vr-values.c (bounds_of_var_in_loop): Adjust overflow for
	invariants.
This commit is contained in:
Aldy Hernandez 2020-10-21 09:33:06 +02:00
parent 121a8812c4
commit 878315ae48
2 changed files with 4 additions and 3 deletions

View File

@ -1156,9 +1156,9 @@ gimple_ranger::range_of_ssa_name_with_loop_info (irange &r, tree name,
// ?? We could do better here. Since MIN/MAX can only be an
// SSA, SSA +- INTEGER_CST, or INTEGER_CST, we could easily call
// the ranger and solve anything not an integer.
if (TREE_CODE (min) != INTEGER_CST || TREE_OVERFLOW (min))
if (TREE_CODE (min) != INTEGER_CST)
min = vrp_val_min (type);
if (TREE_CODE (max) != INTEGER_CST || TREE_OVERFLOW (max))
if (TREE_CODE (max) != INTEGER_CST)
max = vrp_val_max (type);
r.set (min, max);
}

View File

@ -1844,7 +1844,7 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query,
if (is_gimple_min_invariant (chrec))
{
*min = *max = chrec;
return true;
goto fix_overflow;
}
if (TREE_CODE (chrec) != POLYNOMIAL_CHREC)
@ -1964,6 +1964,7 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query,
else
*min = init;
fix_overflow:
/* Even for valid range info, sometimes overflow flag will leak in.
As GIMPLE IL should have no constants with TREE_OVERFLOW set, we
drop them. */