cfgloopmanip.c (duplicate_loop_to_header_edge): Update irreducible flag correctly.

* cfgloopmanip.c (duplicate_loop_to_header_edge): Update irreducible
	flag correctly.

From-SVN: r69755
This commit is contained in:
Zdenek Dvorak 2003-07-24 20:54:26 +02:00 committed by Zdenek Dvorak
parent dbe4baf569
commit 84d45ad160
2 changed files with 26 additions and 16 deletions

View File

@ -1,3 +1,8 @@
2003-07-24 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* cfgloopmanip.c (duplicate_loop_to_header_edge): Update irreducible
flag correctly.
2003-07-24 Zack Weinberg <zack@codesourcery.com>
* c-decl.c: Search-and-replace change 'binding level' to

View File

@ -988,6 +988,27 @@ duplicate_loop_to_header_edge (struct loop *loop, edge e, struct loops *loops,
/* Copy bbs. */
copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop, loops);
/* Note whether the blocks and edges belong to an irreducible loop. */
if (add_irreducible_flag)
{
for (i = 0; i < n; i++)
new_bbs[i]->rbi->duplicated = 1;
for (i = 0; i < n; i++)
{
new_bb = new_bbs[i];
if (new_bb->loop_father == target)
new_bb->flags |= BB_IRREDUCIBLE_LOOP;
for (ae = new_bb->succ; ae; ae = ae->succ_next)
if (ae->dest->rbi->duplicated
&& (ae->src->loop_father == target
|| ae->dest->loop_father == target))
ae->flags |= EDGE_IRREDUCIBLE_LOOP;
}
for (i = 0; i < n; i++)
new_bbs[i]->rbi->duplicated = 0;
}
/* Redirect the special edges. */
if (is_latch)
{
@ -1011,22 +1032,6 @@ duplicate_loop_to_header_edge (struct loop *loop, edge e, struct loops *loops,
if (orig && TEST_BIT (wont_exit, j + 1))
to_remove[(*n_to_remove)++] = new_spec_edges[SE_ORIG];
/* Note whether the blocks and edges belong to an irreducible loop. */
if (add_irreducible_flag)
{
for (i = 0; i < n; i++)
{
new_bb = new_bbs[i];
if (new_bb->loop_father == target)
new_bb->flags |= BB_IRREDUCIBLE_LOOP;
for (ae = new_bb->succ; ae; ae = ae->succ_next)
if (ae->src->loop_father == target
|| ae->dest->loop_father == target)
ae->flags |= EDGE_IRREDUCIBLE_LOOP;
}
}
/* Record the first copy in the control flow order if it is not
the original loop (i.e. in case of peeling). */
if (!first_active_latch)