aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2016-07-25 12:56:08 +0200
committerMartin Liska <marxin@gcc.gnu.org>2016-07-25 10:56:08 +0000
commitc1e1a688fb50bffe2ab21e4cce7374ac65e89205 (patch)
tree0f82732086e16bd62553ae60fc855f592b627baa /gcc
parentccae0c8546a8b9e6fe00f180ae097a3f83b1e113 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cfgloopanal.c6
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);