diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-05 11:14:16 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-05 11:14:16 +0000 |
commit | 57337fec9b4a70c3f34aaaa65ae238206aa0e3db (patch) | |
tree | f146274ac306166de82576e3d78df124ff7791e3 /gcc | |
parent | dd0b2a67efee1547f60c9b20d4c9cf4efa6355cf (diff) | |
download | gcc-57337fec9b4a70c3f34aaaa65ae238206aa0e3db.tar.gz |
* tree-ssa-loop-niter.c (find_loop_niter): Remove just_once_each_iteration_p.
(maybe_lower_iteration_bound): Initialize not_executed_last_iteration to NULL
* tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables): Skip
just_once_each_iteration_p; record estimated bound when loop has only one
likely exit; test just_once_each_iteration_p before IV canon itself.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193159 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.c | 14 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 5 |
3 files changed, 16 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ed65951ed89..be526da445b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -6,6 +6,14 @@ 2012-11-05 Jan Hubicka <jh@suse.cz> + * tree-ssa-loop-niter.c (find_loop_niter): Remove just_once_each_iteration_p. + (maybe_lower_iteration_bound): Initialize not_executed_last_iteration to NULL + * tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables): Skip + just_once_each_iteration_p; record estimated bound when loop has only one + likely exit; test just_once_each_iteration_p before IV canon itself. + +2012-11-05 Jan Hubicka <jh@suse.cz> + * ipa-inline.c (leaf_node_p): Rename to ... (num_calls) ... this one. (want_early_inline_function_p): Allow smal growth on non-leafs. diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 433bb7783cf..58f45d2d1c4 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -760,11 +760,7 @@ canonicalize_loop_induction_variables (struct loop *loop, niter = number_of_latch_executions (loop); if (TREE_CODE (niter) == INTEGER_CST) - { - exit = single_exit (loop); - if (!just_once_each_iteration_p (loop, exit->src)) - return false; - } + exit = single_exit (loop); else { /* If the loop has more than one exit, try checking all of them @@ -785,7 +781,10 @@ canonicalize_loop_induction_variables (struct loop *loop, /* We work exceptionally hard here to estimate the bound by find_loop_niter_by_eval. Be sure to keep it for future. */ if (niter && TREE_CODE (niter) == INTEGER_CST) - record_niter_bound (loop, tree_to_double_int (niter), false, true); + { + record_niter_bound (loop, tree_to_double_int (niter), + exit == single_likely_exit (loop), true); + } /* Force re-computation of loop bounds so we can remove redundant exits. */ maxiter = max_loop_iterations_int (loop); @@ -813,7 +812,8 @@ canonicalize_loop_induction_variables (struct loop *loop, return true; if (create_iv - && niter && !chrec_contains_undetermined (niter)) + && niter && !chrec_contains_undetermined (niter) + && exit && just_once_each_iteration_p (loop, exit->src)) create_canonical_iv (loop, exit, niter); return modified; diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 3fd34c14528..87b550cf5b4 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -1941,9 +1941,6 @@ find_loop_niter (struct loop *loop, edge *exit) *exit = NULL; FOR_EACH_VEC_ELT (edge, exits, i, ex) { - if (!just_once_each_iteration_p (loop, ex->src)) - continue; - if (!number_of_iterations_exit (loop, ex, &desc, false)) continue; @@ -3186,7 +3183,7 @@ discover_iteration_bound_by_body_walk (struct loop *loop) static void maybe_lower_iteration_bound (struct loop *loop) { - pointer_set_t *not_executed_last_iteration = pointer_set_create (); + pointer_set_t *not_executed_last_iteration = NULL; struct nb_iter_bound *elt; bool found_exit = false; VEC (basic_block, heap) *queue = NULL; |