aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgloopanal.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-11-25 07:51:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-11-25 07:51:38 +0000
commitf10d2d85c90c9c649675c248cd5a99f66288f81f (patch)
tree284bcf852c57a2fa1c05c83c5138e1553cc14a03 /gcc/cfgloopanal.c
parent5a34952edb758109a3b919bc149136ee9277ee3a (diff)
downloadgcc-f10d2d85c90c9c649675c248cd5a99f66288f81f.zip
gcc-f10d2d85c90c9c649675c248cd5a99f66288f81f.tar.gz
gcc-f10d2d85c90c9c649675c248cd5a99f66288f81f.tar.bz2
cfgloop.h (get_loop_exit_edges): Add extra parameter denoting loop body, defaulted to NULL.
2019-11-25 Richard Biener <rguenther@suse.de> * cfgloop.h (get_loop_exit_edges): Add extra parameter denoting loop body, defaulted to NULL. (single_likely_exit): Add exit vector argument * tree-ssa-loop-niter.h (loop_only_exit_p): Add loop body argument. (number_of_iterations_exit): Likewise. (number_of_iterations_exit_assumptions): Likewise. * cfgloop.c (get_loop_exit_edges): Use passed in loop body if not NULL. * cfgloopanal.c (single_likely_exit): Use passed in exit vector. * tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables): Compute exit vector around call to single_likely_exit. * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize_loop): Pass down loop body to loop_only_exit_p. * tree-ssa-loop-niter.c (loop_only_exit_p): Get loop body from caller. (number_of_iterations_exit_assumptions): Get loop body from caller if not NULL. (number_of_iterations_exit): Pass through new loop body arg. (infer_loop_bounds_from_undefined): Get loop body from caller. (estimate_numbers_of_iterations): Compute loop body once. From-SVN: r278667
Diffstat (limited to 'gcc/cfgloopanal.c')
-rw-r--r--gcc/cfgloopanal.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c
index 199c20b..d78bfc6 100644
--- a/gcc/cfgloopanal.c
+++ b/gcc/cfgloopanal.c
@@ -467,16 +467,14 @@ mark_loop_exit_edges (void)
to noreturn call. */
edge
-single_likely_exit (class loop *loop)
+single_likely_exit (class loop *loop, vec<edge> exits)
{
edge found = single_exit (loop);
- vec<edge> exits;
unsigned i;
edge ex;
if (found)
return found;
- exits = get_loop_exit_edges (loop);
FOR_EACH_VEC_ELT (exits, i, ex)
{
if (probably_never_executed_edge_p (cfun, ex)
@@ -489,12 +487,8 @@ single_likely_exit (class loop *loop)
if (!found)
found = ex;
else
- {
- exits.release ();
- return NULL;
- }
+ return NULL;
}
- exits.release ();
return found;
}