aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/const-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/pure-2.c4
-rw-r--r--gcc/tree-ssa-loop-niter.c31
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;
}
/*