diff options
author | Martin Liska <mliska@suse.cz> | 2016-07-25 12:56:08 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2016-07-25 10:56:08 +0000 |
commit | c1e1a688fb50bffe2ab21e4cce7374ac65e89205 (patch) | |
tree | 0f82732086e16bd62553ae60fc855f592b627baa /gcc | |
parent | ccae0c8546a8b9e6fe00f180ae097a3f83b1e113 (diff) | |
download | gcc-c1e1a688fb50bffe2ab21e4cce7374ac65e89205.zip gcc-c1e1a688fb50bffe2ab21e4cce7374ac65e89205.tar.gz gcc-c1e1a688fb50bffe2ab21e4cce7374ac65e89205.tar.bz2 |
Handle loops with loop->latch == NULL (PR gcov-profile/71868)
PR gcov-profile/71868
* cfgloopanal.c (expected_loop_iterations_unbounded): When we
have a function with multiple latches, count them all.
From-SVN: r238706
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgloopanal.c | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 18a969f..7a8a69c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2016-07-25 Martin Liska <mliska@suse.cz> + PR gcov-profile/71868 + * cfgloopanal.c (expected_loop_iterations_unbounded): When we + have a function with multiple latches, count them all. + +2016-07-25 Martin Liska <mliska@suse.cz> + * tree-ssa-loop-niter.c (loop_only_exit_p): Release body array. 2016-07-25 Martin Liska <mliska@suse.cz> diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c index 2739f44..001cf45 100644 --- a/gcc/cfgloopanal.c +++ b/gcc/cfgloopanal.c @@ -244,7 +244,7 @@ expected_loop_iterations_unbounded (const struct loop *loop, /* If we have no profile at all, use AVG_LOOP_NITER. */ if (profile_status_for_fn (cfun) == PROFILE_ABSENT) expected = PARAM_VALUE (PARAM_AVG_LOOP_NITER); - else if (loop->latch->count || loop->header->count) + else if (loop->latch && (loop->latch->count || loop->header->count)) { gcov_type count_in, count_latch; @@ -274,8 +274,8 @@ expected_loop_iterations_unbounded (const struct loop *loop, freq_latch = 0; FOR_EACH_EDGE (e, ei, loop->header->preds) - if (e->src == loop->latch) - freq_latch = EDGE_FREQUENCY (e); + if (flow_bb_inside_loop_p (loop, e->src)) + freq_latch += EDGE_FREQUENCY (e); else freq_in += EDGE_FREQUENCY (e); |