OSDN Git Service

* loop-iv.c (determine_max_iter): New arg OLD_NITER. All callers
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Mar 2009 15:21:30 +0000 (15:21 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Mar 2009 15:21:30 +0000 (15:21 +0000)
changed.  Use this when trying to improve the upper bound.
Generate the comparison by using simplify_gen_relational.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145354 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/loop-iv.c

index 9aeafa9..d060adf 100644 (file)
        (LTU (PLUS a C) C) or (LTU (PLUS a C) a) to (GEU a -C); likewise with
        GEU/LTU reversed.
 
+       * loop-iv.c (determine_max_iter): New arg OLD_NITER.  All callers
+       changed.  Use this when trying to improve the upper bound.
+       Generate the comparison by using simplify_gen_relational.
+
 2009-03-31  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
         PR target/27237
index 123e37c..9b35b88 100644 (file)
@@ -2114,10 +2114,13 @@ canonicalize_iv_subregs (struct rtx_iv *iv0, struct rtx_iv *iv1,
   return true;
 }
 
-/* Tries to estimate the maximum number of iterations.  */
+/* Tries to estimate the maximum number of iterations in LOOP, and store the
+   result in DESC.  This function is called from iv_number_of_iterations with
+   a number of fields in DESC already filled in.  OLD_NITER is the original
+   expression for the number of iterations, before we tried to simplify it.  */
 
 static unsigned HOST_WIDEST_INT
-determine_max_iter (struct loop *loop, struct niter_desc *desc)
+determine_max_iter (struct loop *loop, struct niter_desc *desc, rtx old_niter)
 {
   rtx niter = desc->niter_expr;
   rtx mmin, mmax, cmp;
@@ -2152,7 +2155,8 @@ determine_max_iter (struct loop *loop, struct niter_desc *desc)
 
   /* We could use a binary search here, but for now improving the upper
      bound by just one eliminates one important corner case.  */
-  cmp = gen_rtx_fmt_ee (desc->signed_p ? LT : LTU, VOIDmode, niter, mmax);
+  cmp = simplify_gen_relational (desc->signed_p ? LT : LTU, VOIDmode,
+                                desc->mode, old_niter, mmax);
   simplify_using_initial_values (loop, UNKNOWN, &cmp);
   if (cmp == const_true_rtx)
     {
@@ -2683,7 +2687,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
   else
     {
       if (!desc->niter_max)
-       desc->niter_max = determine_max_iter (loop, desc);
+       desc->niter_max = determine_max_iter (loop, desc, old_niter);
 
       /* simplify_using_initial_values does a copy propagation on the registers
         in the expression for the number of iterations.  This prolongs life