* gcc.dg/const-1.c: Update.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2012 18:12:37 +0000 (18:12 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2012 18:12:37 +0000 (18:12 +0000)
* gcc.dg/pure-1.c: Update.
* tree-ssa-loop-niter.c (finite_loop_p): Revamp to be just wrapper of
max_loop_iterations.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/const-1.c
gcc/testsuite/gcc.dg/pure-2.c
gcc/tree-ssa-loop-niter.c

index 6128012..026d62f 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-05  Jan Hubicka  <jh@suse.cz>
+
+       * tree-ssa-loop-niter.c (finite_loop_p): Revamp to be just wrapper of
+       max_loop_iterations.
+
 2012-11-05  Joern Rennecke  <joern.rennecke@embecosm.com>
 
        * reorg.c (fill_simple_delay_slots): Avoid calling optimize_skip
index c310366..4d6a7dc 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-05  Jan Hubicka  <jh@suse.cz>
+
+       * gcc.dg/const-1.c: Update.
+       * gcc.dg/pure-1.c: Update.
+
 2012-11-05  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/55151
index 2657c9b..2a532f8 100644 (file)
@@ -35,10 +35,10 @@ foo2b(int n)
 
 /* Unbounded loops are not safe.  */
 static int __attribute__ ((noinline))
-foo3(int n)  /* { dg-warning "const\[^\n\]* normally" "detect const candidate" } */
+foo3(unsigned int n)  /* { dg-warning "const\[^\n\]* normally" "detect const candidate" } */
 {
   int ret = 0;
-  int i;
+  unsigned int i;
   for (i=0; extern_const (i+n); n++)
     ret+=extern_const (i);
   return ret;
index 97ba31f..8c2ba56 100644 (file)
@@ -35,10 +35,10 @@ foo2b(int n)
 
 /* Unbounded loops are not safe.  */
 static int __attribute__ ((noinline))
-foo3(int n) /* { dg-warning "pure\[^\n\]* normally" "detect pure candidate" } */
+foo3(unsigned int n) /* { dg-warning "pure\[^\n\]* normally" "detect pure candidate" } */
 {
   int ret = 0;
-  int i;
+  unsigned int i;
   for (i=0; extern_const (i+n); n++)
     ret+=extern_const (i);
   return ret;
index 87b550c..3936e60 100644 (file)
@@ -1994,11 +1994,7 @@ find_loop_niter (struct loop *loop, edge *exit)
 bool
 finite_loop_p (struct loop *loop)
 {
-  unsigned i;
-  VEC (edge, heap) *exits;
-  edge ex;
-  struct tree_niter_desc desc;
-  bool finite = false;
+  double_int nit;
   int flags;
 
   if (flag_unsafe_loop_optimizations)
@@ -2012,26 +2008,15 @@ finite_loop_p (struct loop *loop)
       return true;
     }
 
-  exits = get_loop_exit_edges (loop);
-  FOR_EACH_VEC_ELT (edge, exits, i, ex)
+  if (loop->any_upper_bound
+      || max_loop_iterations (loop, &nit))
     {
-      if (!just_once_each_iteration_p (loop, ex->src))
-       continue;
-
-      if (number_of_iterations_exit (loop, ex, &desc, false))
-        {
-         if (dump_file && (dump_flags & TDF_DETAILS))
-           {
-             fprintf (dump_file, "Found loop %i to be finite: iterating ", loop->num);
-             print_generic_expr (dump_file, desc.niter, TDF_SLIM);
-             fprintf (dump_file, " times\n");
-           }
-         finite = true;
-         break;
-       }
+      if (dump_file && (dump_flags & TDF_DETAILS))
+       fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n",
+                loop->num);
+      return true;
     }
-  VEC_free (edge, heap, exits);
-  return finite;
+  return false;
 }
 
 /*