loop-iv.c (determine_max_iter): Moved in front of its sole user.

* loop-iv.c (determine_max_iter): Moved in front of its sole user.

From-SVN: r122264
This commit is contained in:
Bernd Schmidt 2007-02-23 18:03:56 +00:00 committed by Bernd Schmidt
parent 74a5d8b9fe
commit c67dc1a321
2 changed files with 67 additions and 65 deletions

View File

@ -3,6 +3,8 @@
* config/bfin/bfin.md (doloop_end): Fail for loops that can iterate
2^32-1 or more times unless flag_unsafe_loop_optimizations.
* loop-iv.c (determine_max_iter): Moved in front of its sole user.
2007-02-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* builtins.c (fold_builtin_logb, fold_builtin_significand): New.

View File

@ -1261,71 +1261,6 @@ inverse (unsigned HOST_WIDEST_INT x, int mod)
return rslt;
}
/* Tries to estimate the maximum number of iterations. */
static unsigned HOST_WIDEST_INT
determine_max_iter (struct niter_desc *desc)
{
rtx niter = desc->niter_expr;
rtx mmin, mmax, left, right;
unsigned HOST_WIDEST_INT nmax, inc;
if (GET_CODE (niter) == AND
&& GET_CODE (XEXP (niter, 0)) == CONST_INT)
{
nmax = INTVAL (XEXP (niter, 0));
if (!(nmax & (nmax + 1)))
{
desc->niter_max = nmax;
return nmax;
}
}
get_mode_bounds (desc->mode, desc->signed_p, desc->mode, &mmin, &mmax);
nmax = INTVAL (mmax) - INTVAL (mmin);
if (GET_CODE (niter) == UDIV)
{
if (GET_CODE (XEXP (niter, 1)) != CONST_INT)
{
desc->niter_max = nmax;
return nmax;
}
inc = INTVAL (XEXP (niter, 1));
niter = XEXP (niter, 0);
}
else
inc = 1;
if (GET_CODE (niter) == PLUS)
{
left = XEXP (niter, 0);
right = XEXP (niter, 0);
if (GET_CODE (right) == CONST_INT)
right = GEN_INT (-INTVAL (right));
}
else if (GET_CODE (niter) == MINUS)
{
left = XEXP (niter, 0);
right = XEXP (niter, 0);
}
else
{
left = niter;
right = mmin;
}
if (GET_CODE (left) == CONST_INT)
mmax = left;
if (GET_CODE (right) == CONST_INT)
mmin = right;
nmax = INTVAL (mmax) - INTVAL (mmin);
desc->niter_max = nmax / inc;
return nmax / inc;
}
/* Checks whether register *REG is in set ALT. Callback for for_each_rtx. */
static int
@ -1981,6 +1916,71 @@ canonicalize_iv_subregs (struct rtx_iv *iv0, struct rtx_iv *iv1,
return true;
}
/* Tries to estimate the maximum number of iterations. */
static unsigned HOST_WIDEST_INT
determine_max_iter (struct niter_desc *desc)
{
rtx niter = desc->niter_expr;
rtx mmin, mmax, left, right;
unsigned HOST_WIDEST_INT nmax, inc;
if (GET_CODE (niter) == AND
&& GET_CODE (XEXP (niter, 0)) == CONST_INT)
{
nmax = INTVAL (XEXP (niter, 0));
if (!(nmax & (nmax + 1)))
{
desc->niter_max = nmax;
return nmax;
}
}
get_mode_bounds (desc->mode, desc->signed_p, desc->mode, &mmin, &mmax);
nmax = INTVAL (mmax) - INTVAL (mmin);
if (GET_CODE (niter) == UDIV)
{
if (GET_CODE (XEXP (niter, 1)) != CONST_INT)
{
desc->niter_max = nmax;
return nmax;
}
inc = INTVAL (XEXP (niter, 1));
niter = XEXP (niter, 0);
}
else
inc = 1;
if (GET_CODE (niter) == PLUS)
{
left = XEXP (niter, 0);
right = XEXP (niter, 0);
if (GET_CODE (right) == CONST_INT)
right = GEN_INT (-INTVAL (right));
}
else if (GET_CODE (niter) == MINUS)
{
left = XEXP (niter, 0);
right = XEXP (niter, 0);
}
else
{
left = niter;
right = mmin;
}
if (GET_CODE (left) == CONST_INT)
mmax = left;
if (GET_CODE (right) == CONST_INT)
mmin = right;
nmax = INTVAL (mmax) - INTVAL (mmin);
desc->niter_max = nmax / inc;
return nmax / inc;
}
/* Computes number of iterations of the CONDITION in INSN in LOOP and stores
the result into DESC. Very similar to determine_number_of_iterations
(basically its rtl version), complicated by things like subregs. */