diff options
author | Jan Hubicka <jh@suse.cz> | 2012-10-14 18:18:26 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2012-10-14 16:18:26 +0000 |
commit | f9bf4777c1f93f733b4e99e44dd176417ed0afca (patch) | |
tree | 14ab7474f3d373fee0bea0afe2d5c0a3d96fa5e5 /gcc/tree-ssa-loop-niter.c | |
parent | ca6729e2ed7b8a1308fdfdec0edcb6e9240f3258 (diff) | |
download | gcc-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.c | 4 |
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); |