mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-24 06:18:59 +08:00
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:
parent
dbe4baf569
commit
84d45ad160
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user