diff options
| author | m.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-02-12 21:15:15 +0000 |
|---|---|---|
| committer | m.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-02-12 21:15:15 +0000 |
| commit | 052f57a641fd34078af89adaa8dfe5fefbe6e4b1 (patch) | |
| tree | 1b7cbf9c800a43242297b150566f7fa69f3d670d | |
| parent | 3b3151e2567e0e63077426707d82fdb1e28518c2 (diff) | |
| download | ppe42-gcc-052f57a641fd34078af89adaa8dfe5fefbe6e4b1.tar.gz ppe42-gcc-052f57a641fd34078af89adaa8dfe5fefbe6e4b1.zip | |
* flow.c (flow_loop_tree_node_add): Use better algorithm by passing
previously inserted node instead of root node. Caller changed.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31948 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | 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 <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. 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]); } |

