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:
Michael Hayes 2000-02-12 21:15:15 +00:00 committed by Michael Hayes
parent f5b647ab0f
commit 3abd3239f3
2 changed files with 27 additions and 28 deletions

View File

@ -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.

View File

@ -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]);
}