--- /dev/null
+--- gcc-4_1-branch/gcc/tree-ssa-loop-niter.c (wersja 113819)
++++ gcc-4_1-branch/gcc/tree-ssa-loop-niter.c (wersja 113820)
+@@ -1562,15 +1562,20 @@
+
+ utype = unsigned_type_for (type);
+ if (tree_int_cst_lt (step, integer_zero_node))
+- diff = fold_build2 (MINUS_EXPR, utype, init,
++ diff = fold_build2 (MINUS_EXPR, type, init,
+ TYPE_MIN_VALUE (type));
+ else
+- diff = fold_build2 (MINUS_EXPR, utype,
++ diff = fold_build2 (MINUS_EXPR, type,
+ TYPE_MAX_VALUE (type), init);
+
+- estimation = fold_build2 (CEIL_DIV_EXPR, utype, diff,
+- step);
+- record_estimate (loop, estimation, boolean_true_node, stmt);
++ if (integer_nonzerop (step))
++ {
++ estimation = fold_build2 (CEIL_DIV_EXPR, type, diff,
++ step);
++ record_estimate (loop,
++ fold_convert (utype, estimation),
++ boolean_true_node, stmt);
++ }
+ }
+
+ break;