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 <[EMAIL PROTECTED]> 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

Reply via email to