re PR rtl-optimization/16001 (unable to find a register to spill in class `AREG' (-O2 -funroll-loops))
PR rtl-optimization/16001 * loop-iv.c (iv_number_of_iterations): Prevent copy propagation in niter_expr. From-SVN: r84486
This commit is contained in:
parent
ef262483b8
commit
fe3f617f6d
2 changed files with 23 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
@ -10,6 +16,7 @@
|
|||
|
||||
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.
|
||||
|
||||
|
|
|
@ -1967,6 +1967,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
|
|||
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
|
||||
|
@ -2366,6 +2367,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
|
|||
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)
|
||||
|
@ -2408,8 +2411,19 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
|
|||
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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue