aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop-iv.c
diff options
context:
space:
mode:
authorno-author <no-author@gcc.gnu.org>2004-05-24 02:23:12 +0000
committerno-author <no-author@gcc.gnu.org>2004-05-24 02:23:12 +0000
commit3ff85b2c52e4db494c6facb65a5bd7768ccd8843 (patch)
tree5da6bbd60844f1cad239f017eebb97a849d3f35d /gcc/loop-iv.c
parent03846eafd7c275b583a97c40554da04c978a110a (diff)
This commit was manufactured by cvs2svn to create tagapple/gcc-1755
'apple-gcc-1755'. git-svn-id: https://gcc.gnu.org/svn/gcc/tags/apple-gcc-1755@82190 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop-iv.c')
-rw-r--r--gcc/loop-iv.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c
index 97cfdf7c07e..dd9f06ebddb 100644
--- a/gcc/loop-iv.c
+++ b/gcc/loop-iv.c
@@ -1874,7 +1874,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
enum rtx_code cond;
enum machine_mode mode, comp_mode;
rtx mmin, mmax;
- unsigned HOST_WIDEST_INT s, size, d;
+ unsigned HOST_WIDEST_INT s, size, d, inv;
HOST_WIDEST_INT up, down, inc;
int was_sharp = false;
@@ -2186,8 +2186,9 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
desc->infinite = alloc_EXPR_LIST (0, assumption, desc->infinite);
tmp = simplify_gen_binary (UDIV, mode, tmp1, GEN_INT (d));
- tmp = simplify_gen_binary (MULT, mode,
- tmp, GEN_INT (inverse (s, size)));
+ inv = inverse (s, size);
+ inv = trunc_int_for_mode (inv, mode);
+ tmp = simplify_gen_binary (MULT, mode, tmp, GEN_INT (inv));
desc->niter_expr = simplify_gen_binary (AND, mode, tmp, bound);
}
else
@@ -2281,6 +2282,10 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
simplify_using_initial_values (loop, IOR, &desc->infinite);
simplify_using_initial_values (loop, NIL, &desc->niter_expr);
+ if (desc->noloop_assumptions
+ && XEXP (desc->noloop_assumptions, 0) == const_true_rtx)
+ goto zero_iter;
+
if (GET_CODE (desc->niter_expr) == CONST_INT)
{
unsigned HOST_WIDEST_INT val = INTVAL (desc->niter_expr);