http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49218
--- Comment #9 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-05-30 09:13:17 UTC --- I'm going to test @@ -3423,11 +3423,14 @@ adjust_range_with_scev (value_range_t *v 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 unsigned result doesn't fit in the type + of the induction variable. */ + if (!overflow + && double_int_fits_to_tree_p (TREE_TYPE (init), dtmp) + && (unsigned_p || dtmp.high > 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. */