+2004-07-10 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ PR rtl-optimization/16001
+ * loop-iv.c (iv_number_of_iterations): Prevent copy propagation in
+ niter_expr.
+
2004-07-10 Geoffrey Keating <geoffk@apple.com>
* config/darwin.h (LINK_COMMAND_SPEC): Don't call c++filt.
2004-07-10 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+ PR rtl-optimization/15387
* calls.c (check_sibcall_argument_overlap_1): Handle pointers
to incoming args space correctly.
unsigned HOST_WIDEST_INT s, size, d, inv;
HOST_WIDEST_INT up, down, inc;
int was_sharp = false;
+ rtx old_niter;
/* The meaning of these assumptions is this:
if !assumptions
desc->niter_expr = delta;
}
+ old_niter = desc->niter_expr;
+
simplify_using_initial_values (loop, AND, &desc->assumptions);
if (desc->assumptions
&& XEXP (desc->assumptions, 0) == const0_rtx)
desc->const_iter = true;
desc->niter_max = desc->niter = val & GET_MODE_MASK (desc->mode);
}
- else if (!desc->niter_max)
- desc->niter_max = determine_max_iter (desc);
+ else
+ {
+ if (!desc->niter_max)
+ desc->niter_max = determine_max_iter (desc);
+
+ /* simplify_using_initial_values does a copy propagation on the registers
+ in the expression for the number of iterations. This prolongs life
+ ranges of registers and increases register pressure, and usually
+ brings no gain (and if it happens to do, the cse pass will take care
+ of it anyway). So prevent this behavior, unless it enabled us to
+ derive that the number of iterations is a constant. */
+ desc->niter_expr = old_niter;
+ }
return;