Commit f3321158 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/49218 (Incorrect optimization of a 'for' loop creates an infinite loop)

2011-05-30  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/49218
	* tree-vrp.c (adjust_range_with_scev): Properly check whether
	overflow occured.

	* gcc.c-torture/execute/pr49218.c: New testcase.

From-SVN: r174429
parent d12d8efe
2011-05-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/49218
* tree-vrp.c (adjust_range_with_scev): Properly check whether
overflow occured.
2011-05-30 Richard Guenther <rguenther@suse.de>
* tree-ssa-forwprop.c (forward_propagate_into_comparison):
New function split out from ...
(forward_propagate_into_gimple_cond): ... here. Adjust.
......
2011-05-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/49218
* gcc.c-torture/execute/pr49218.c: New testcase.
2011-05-30 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/49199
......
#ifdef __SIZEOF_INT128__
typedef __int128 L;
#else
typedef long long L;
#endif
float f;
int
main ()
{
L i = f;
if (i <= 10)
do
{
++i;
asm ("");
}
while (i != 11);
return 0;
}
......@@ -3423,11 +3423,17 @@ adjust_range_with_scev (value_range_t *vr, struct loop *loop,
loop->nb_iterations_upper_bound,
double_int_one),
unsigned_p, &overflow);
tem = double_int_to_tree (TREE_TYPE (init), dtmp);
/* If the multiplication overflowed we can't do a meaningful
adjustment. */
if (!overflow && double_int_equal_p (dtmp, tree_to_double_int (tem)))
{
adjustment. Likewise if the result doesn't fit in the type
of the induction variable. For a signed type we have to
check whether the result has the expected signedness which
is that of the step as nb_iterations_upper_bound is unsigned. */
if (!overflow
&& double_int_fits_to_tree_p (TREE_TYPE (init), dtmp)
&& (unsigned_p
|| ((dtmp.high ^ TREE_INT_CST_HIGH (step)) >= 0)))
{
tem = double_int_to_tree (TREE_TYPE (init), dtmp);
extract_range_from_binary_expr (&maxvr, PLUS_EXPR,
TREE_TYPE (init), init, tem);
/* Likewise if the addition did. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment