From: Martin Liska Date: Mon, 2 Sep 2019 08:58:17 +0000 (+0200) Subject: Backport r275291 X-Git-Tag: releases/gcc-9.3.0~656 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a1e1c00c95b1bf51f1d85414dfcd29e70b022ba;p=thirdparty%2Fgcc.git Backport r275291 2019-09-02 Martin Liska Backport from mainline 2019-09-02 Martin Liska PR gcov-profile/91601 * gcov.c (path_contains_zero_cycle_arc): Rename to ... (path_contains_zero_or_negative_cycle_arc): ... this and handle also negative edges. (circuit): Handle also negative edges as they can happen in some situations. From-SVN: r275301 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 195aa66e6e04..569691bbb2cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2019-09-02 Martin Liska + + Backport from mainline + 2019-09-02 Martin Liska + + PR gcov-profile/91601 + * gcov.c (path_contains_zero_cycle_arc): Rename to ... + (path_contains_zero_or_negative_cycle_arc): ... this and handle + also negative edges. + (circuit): Handle also negative edges as they can happen + in some situations. + 2019-09-01 Eric Botcazou PR target/91472 diff --git a/gcc/gcov.c b/gcc/gcov.c index b06a6714c2e5..7e51c2efb30a 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -725,10 +725,10 @@ unblock (const block_info *u, block_vector_t &blocked, /* Return true when PATH contains a zero cycle arc count. */ static bool -path_contains_zero_cycle_arc (arc_vector_t &path) +path_contains_zero_or_negative_cycle_arc (arc_vector_t &path) { for (unsigned i = 0; i < path.size (); i++) - if (path[i]->cs_count == 0) + if (path[i]->cs_count <= 0) return true; return false; } @@ -754,7 +754,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue; @@ -765,7 +765,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, handle_cycle (path, count); loop_found = true; } - else if (!path_contains_zero_cycle_arc (path) + else if (!path_contains_zero_or_negative_cycle_arc (path) && find (blocked.begin (), blocked.end (), w) == blocked.end ()) loop_found |= circuit (w, path, start, blocked, block_lists, linfo, count); @@ -780,7 +780,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue;