basic-block.h (struct loops): New field `levels'.
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>
Sun, 23 Jan 2000 23:10:09 +0000 (23:10 +0000)
committerMichael Hayes <m.hayes@gcc.gnu.org>
Sun, 23 Jan 2000 23:10:09 +0000 (23:10 +0000)
2000-01-24  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

* basic-block.h (struct loops): New field `levels'.
* flow.c (flow_loops_level_compute): Traverse all outer loops.
(flow_loop_level_compute): Initialise level to 1.
(flow_loops_find): Set loops->levels.
(flow_loops_dump): Print loops->levels.

From-SVN: r31577

gcc/ChangeLog
gcc/basic-block.h
gcc/flow.c

index e8b5574ea72cd7aaf25c0b6367a80ea1421f6ecb..b00f9af055efac9480a1a0269a8446de048f3b52 100644 (file)
@@ -1,3 +1,11 @@
+2000-01-24  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * basic-block.h (struct loops): New field `levels'.
+       * flow.c (flow_loops_level_compute): Traverse all outer loops.
+       (flow_loop_level_compute): Initialise level to 1.
+       (flow_loops_find): Set loops->levels.
+       (flow_loops_dump): Print loops->levels.
+
 2000-01-23  Richard Henderson  <rth@cygnus.com>
 
        * libgcc2.c (dwarf_reg_size_table): Size with DWARF_FRAME_REGISTERS.
index 912d1efe59769678b70c1dfde33b06a23350bbd3..c5c29c9b1274f25244daea970f79fc6a59895d81 100644 (file)
@@ -325,6 +325,9 @@ struct loops
   /* Number of natural loops in the function.  */
   int num;
 
+  /* Maxium nested loop level in the function.  */
+  int levels;
+
   /* Array of natural loop descriptors (scanning this array in reverse order
      will find the inner loops before their enclosing outer loops).  */
   struct loop *array;
index dbbb580c9a0bccd29e6e8133a736b27f938d1240..2e4b66617d4f074668a8cbf9e9dc0b1a2d76dff0 100644 (file)
@@ -6387,7 +6387,8 @@ flow_loops_dump (loops, file, verbose)
   if (! num_loops || ! file)
     return;
 
-  fprintf (file, ";; %d loops found\n", num_loops);
+  fprintf (file, ";; %d loops found, %d levels\n", 
+          num_loops, loops->levels);
 
   for (i = 0; i < num_loops; i++)
     {
@@ -6783,7 +6784,7 @@ flow_loop_level_compute (loop, depth)
      int depth;
 {
   struct loop *inner;
-  int level = 0;
+  int level = 1;
 
   if (! loop)
     return 0;
@@ -6791,7 +6792,8 @@ flow_loop_level_compute (loop, depth)
   /* Traverse loop tree assigning depth and computing level as the
      maximum level of all the inner loops of this loop.  The loop
      level is equivalent to the height of the loop in the loop tree
-     and corresponds to the number of enclosed loop levels.  */
+     and corresponds to the number of enclosed loop levels (including
+     itself).  */
   for (inner = loop->inner; inner; inner = inner->next)
     {
       int ilevel;
@@ -6811,11 +6813,22 @@ flow_loop_level_compute (loop, depth)
    hierarchy tree specfied by LOOPS.  Return the maximum enclosed loop
    level.  */
 
-static int 
+static int
 flow_loops_level_compute (loops)
      struct loops *loops;
 {
-  return flow_loop_level_compute (loops->tree, 1);
+  struct loop *loop;
+  int level;
+  int levels = 0;
+
+  /* Traverse all the outer level loops.  */
+  for (loop = loops->tree; loop; loop = loop->next)
+    {
+      level = flow_loop_level_compute (loop, 1);
+      if (level > levels)
+       levels = level;
+    }
+  return levels;
 }
 
 
@@ -6970,7 +6983,7 @@ flow_loops_find (loops)
 
   /* Assign the loop nesting depth and enclosed loop level for each
      loop.  */
-  flow_loops_level_compute (loops);
+  loops->levels = flow_loops_level_compute (loops);
 
   return num_loops;
 }