A problem with the loop structure
Vladimir Yanovsky
volodyan@gmail.com
Thu Jun 7 12:52:00 GMT 2007
Hi,
The problem with the ICE after the loop versioning in SMS was caused
because the header of the versioned loop was at the same time the
latch of the outer loop. After the versioning the nodes of the newly
created loop could not be accessed by a DFS traversal of the outer
loop starting from its latch (header of the versioned loop), leading
to the ICE on assert that the number of nodes reported by DFS is
nloop->outer->num_nodes.
Solution (for the case of the call in SMS): call
canon_loop(loop->outer) before the call to versioning in the
sms_schedule so that a new empty latch is created for the outer loop.
Thanks,
Vladimir
On 5/4/07, Zdenek Dvorak <rakdver@kam.mff.cuni.cz> wrote:
> Hello,
>
> > ii)
> > In loop_version there are two calls to loop_split_edge_with
> > 1. loop_split_edge_with (loop_preheader_edge (loop), NULL);
> > 2. loop_split_edge_with (loop_preheader_edge (nloop), NULL);
> > nloop is the versioned loop, loop is the original.
> >
> > loop_split_edge_with has the following:
> > new_bb = split_edge (e);
> > add_bb_to_loop (new_bb, loop_c);
> >
> > 1) When we get to the fist call, nloop->outer->num_nodes = 8 while dfs
> > returns 6.
>
> then the problem is before this call; you need to check which two blocks
> that are marked as belonging to nloop->outer in fact do not belong to
> this loop, and why.
>
> Zdenek
>
More information about the Gcc
mailing list