flow.c (flow_loop_tree_node_add): Use better algorithm by passing previously inserted node instead of root node.
* flow.c (flow_loop_tree_node_add): Use better algorithm by passing previously inserted node instead of root node. Caller changed. From-SVN: r31948
This commit is contained in:
parent
f5b647ab0f
commit
3abd3239f3
|
@ -1,4 +1,9 @@
|
|||
2000-02-12 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
|
||||
2000-02-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
|
||||
|
||||
* flow.c (flow_loop_tree_node_add): Use better algorithm by passing
|
||||
previously inserted node instead of root node. Caller changed.
|
||||
|
||||
2000-02-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
|
||||
|
||||
* basic-block.h (FLOW_LOOP_FIRST_BLOCK, FLOW_LOOP_LAST_BLOCK): Delete.
|
||||
|
||||
|
|
48
gcc/flow.c
48
gcc/flow.c
|
@ -6716,41 +6716,35 @@ flow_loop_pre_header_find (header, dom)
|
|||
}
|
||||
|
||||
|
||||
/* Add LOOP to the loop hierarchy tree so that it is a sibling or a
|
||||
descendant of ROOT. */
|
||||
/* Add LOOP to the loop hierarchy tree where PREVLOOP was the loop
|
||||
previously added. The insertion algorithm assumes that the loops
|
||||
are added in the order found by a depth first search of the CFG. */
|
||||
static void
|
||||
flow_loop_tree_node_add (root, loop)
|
||||
struct loop *root;
|
||||
flow_loop_tree_node_add (prevloop, loop)
|
||||
struct loop *prevloop;
|
||||
struct loop *loop;
|
||||
{
|
||||
struct loop *outer;
|
||||
|
||||
if (! loop)
|
||||
return;
|
||||
|
||||
for (outer = root; outer; outer = outer->next)
|
||||
if (flow_loop_nested_p (prevloop, loop))
|
||||
{
|
||||
if (flow_loop_nested_p (outer, loop))
|
||||
prevloop->inner = loop;
|
||||
loop->outer = prevloop;
|
||||
return;
|
||||
}
|
||||
|
||||
while (prevloop->outer)
|
||||
{
|
||||
if (flow_loop_nested_p (prevloop->outer, loop))
|
||||
{
|
||||
if (outer->inner)
|
||||
{
|
||||
/* Add LOOP as a sibling or descendent of OUTER->INNER. */
|
||||
flow_loop_tree_node_add (outer->inner, loop);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Add LOOP as child of OUTER. */
|
||||
outer->inner = loop;
|
||||
loop->outer = outer;
|
||||
loop->next = NULL;
|
||||
}
|
||||
prevloop->next = loop;
|
||||
loop->outer = prevloop->outer;
|
||||
return;
|
||||
}
|
||||
prevloop = prevloop->outer;
|
||||
}
|
||||
/* Add LOOP as a sibling of ROOT. */
|
||||
loop->next = root->next;
|
||||
root->next = loop;
|
||||
loop->outer = root->outer;
|
||||
|
||||
prevloop->next = loop;
|
||||
loop->outer = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -6774,7 +6768,7 @@ flow_loops_tree_build (loops)
|
|||
|
||||
/* Add the remaining loops to the tree. */
|
||||
for (i = 1; i < num_loops; i++)
|
||||
flow_loop_tree_node_add (loops->tree, &loops->array[i]);
|
||||
flow_loop_tree_node_add (&loops->array[i - 1], &loops->array[i]);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue