summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-12 21:15:15 +0000
committerm.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-12 21:15:15 +0000
commit052f57a641fd34078af89adaa8dfe5fefbe6e4b1 (patch)
tree1b7cbf9c800a43242297b150566f7fa69f3d670d
parent3b3151e2567e0e63077426707d82fdb1e28518c2 (diff)
downloadppe42-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/ChangeLog7
-rw-r--r--gcc/flow.c46
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]);
}
OpenPOWER on IntegriCloud