aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-niter.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2012-10-14 18:18:26 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2012-10-14 16:18:26 +0000
commitf9bf4777c1f93f733b4e99e44dd176417ed0afca (patch)
tree14ab7474f3d373fee0bea0afe2d5c0a3d96fa5e5 /gcc/tree-ssa-loop-niter.c
parentca6729e2ed7b8a1308fdfdec0edcb6e9240f3258 (diff)
downloadgcc-f9bf4777c1f93f733b4e99e44dd176417ed0afca.zip
gcc-f9bf4777c1f93f733b4e99e44dd176417ed0afca.tar.gz
gcc-f9bf4777c1f93f733b4e99e44dd176417ed0afca.tar.bz2
tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Do not predict loops with multiple exits realistically.
* tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Do not predict loops with multiple exits realistically. * cfgloopanal.c (single_likely_exit): New function. * gcc.dg/unroll_5.c: New testcase. From-SVN: r192433
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r--gcc/tree-ssa-loop-niter.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index cdcdb5c..3c39413 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2965,6 +2965,7 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
struct tree_niter_desc niter_desc;
edge ex;
double_int bound;
+ edge likely_exit;
/* Give up if we already have tried to compute an estimation. */
if (loop->estimate_state != EST_NOT_COMPUTED)
@@ -2975,6 +2976,7 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
loop->any_estimate = false;
exits = get_loop_exit_edges (loop);
+ likely_exit = single_likely_exit (loop);
FOR_EACH_VEC_ELT (edge, exits, i, ex)
{
if (!number_of_iterations_exit (loop, ex, &niter_desc, false))
@@ -2988,7 +2990,7 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
niter);
record_estimate (loop, niter, niter_desc.max,
last_stmt (ex->src),
- true, true, true);
+ true, ex == likely_exit, true);
}
VEC_free (edge, heap, exits);