tree.h (enum tree_code_class): Add tcc_vl_exp.
[gcc.git] / gcc / cfgloopanal.c
index 9aa75e4f2d646f21e4cf8154d674ae82e4ed1963..5a9189787eae1727a0eac86b7e49dc5a23cdeda0 100644 (file)
@@ -266,18 +266,19 @@ free_graph (struct graph *g)
 #define BB_REPR(BB) ((BB)->index + 1)
 
 void
-mark_irreducible_loops (struct loops *loops)
+mark_irreducible_loops (void)
 {
   basic_block act;
   edge e;
   edge_iterator ei;
   int i, src, dest;
   struct graph *g;
-  int num = loops ? loops->num : 1;
+  int num = current_loops ? number_of_loops () : 1;
   int *queue1 = XNEWVEC (int, last_basic_block + num);
   int *queue2 = XNEWVEC (int, last_basic_block + num);
   int nq, depth;
-  struct loop *cloop;
+  struct loop *cloop, *loop;
+  loop_iterator li;
 
   /* Reset the flags.  */
   FOR_BB_BETWEEN (act, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
@@ -300,7 +301,7 @@ mark_irreducible_loops (struct loops *loops)
        src = BB_REPR (act);
        dest = BB_REPR (e->dest);
 
-       if (loops)
+       if (current_loops)
          {
            /* Ignore latch edges.  */
            if (e->dest->loop_father->header == e->dest
@@ -343,9 +344,14 @@ mark_irreducible_loops (struct loops *loops)
     {
       queue1[nq++] = BB_REPR (act);
     }
-  for (i = 1; i < num; i++)
-    if (loops->parray[i])
-      queue1[nq++] = LOOP_REPR (loops->parray[i]);
+
+  if (current_loops)
+    {
+      FOR_EACH_LOOP (li, loop, 0)
+       {
+         queue1[nq++] = LOOP_REPR (loop);
+       }
+    }
   dfs (g, queue1, nq, queue2, false);
   for (i = 0; i < nq; i++)
     queue1[i] = queue2[nq - i - 1];
@@ -358,8 +364,8 @@ mark_irreducible_loops (struct loops *loops)
   free (queue1);
   free (queue2);
 
-  if (loops)
-    loops->state |= LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
+  if (current_loops)
+    current_loops->state |= LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
 }
 
 /* Counts number of insns inside LOOP.  */
@@ -572,15 +578,15 @@ global_cost_for_size (unsigned size, unsigned regs_used, unsigned n_uses)
   return cost;
 }
 
-/* Sets EDGE_LOOP_EXIT flag for all exits of LOOPS.  */
+/* Sets EDGE_LOOP_EXIT flag for all loop exits.  */
 
 void
-mark_loop_exit_edges (struct loops *loops)
+mark_loop_exit_edges (void)
 {
   basic_block bb;
   edge e;
 
-  if (loops->num <= 1)
+  if (!current_loops)
     return;
 
   FOR_EACH_BB (bb)