diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/const-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pure-2.c | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 31 |
5 files changed, 22 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6128012..026d62f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c310366..4d6a7dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/const-1.c b/gcc/testsuite/gcc.dg/const-1.c index 2657c9b..2a532f8 100644 --- a/gcc/testsuite/gcc.dg/const-1.c +++ b/gcc/testsuite/gcc.dg/const-1.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/pure-2.c b/gcc/testsuite/gcc.dg/pure-2.c index 97ba31f..8c2ba56 100644 --- a/gcc/testsuite/gcc.dg/pure-2.c +++ b/gcc/testsuite/gcc.dg/pure-2.c @@ -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; diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 87b550c..3936e60 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -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; } /* |