mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-02 06:40:25 +08:00
Consider also negative edges in cycle detection.
2019-09-02 Martin Liska <mliska@suse.cz> 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: r275291
This commit is contained in:
parent
ea323e9e92
commit
9297e01329
@ -1,3 +1,12 @@
|
||||
2019-09-02 Martin Liska <mliska@suse.cz>
|
||||
|
||||
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 <ebotcazou@adacore.com>
|
||||
|
||||
PR target/91472
|
||||
|
10
gcc/gcov.c
10
gcc/gcov.c
@ -730,10 +730,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;
|
||||
}
|
||||
@ -759,7 +759,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;
|
||||
|
||||
@ -770,7 +770,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);
|
||||
@ -785,7 +785,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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user