From 3abd3239f3333c81e890f5aeefb7e4d06b526920 Mon Sep 17 00:00:00 2001 From: Michael Hayes Date: Sat, 12 Feb 2000 21:15:15 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 ++++++- gcc/flow.c | 46 ++++++++++++++++++++-------------------------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 229c6b89e59..4e3bf23ff50 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,9 @@ -2000-02-12 Michael Hayes +2000-02-13 Michael Hayes + + * 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 * basic-block.h (FLOW_LOOP_FIRST_BLOCK, FLOW_LOOP_LAST_BLOCK): Delete. diff --git a/gcc/flow.c b/gcc/flow.c index 49b2ae16422..6508075ebaa 100644 --- a/gcc/flow.c +++ b/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; + if (flow_loop_nested_p (prevloop, loop)) + { + prevloop->inner = loop; + loop->outer = prevloop; + return; + } - for (outer = root; outer; outer = outer->next) + while (prevloop->outer) { - if (flow_loop_nested_p (outer, loop)) + 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]); } -- 2.30.2