#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)
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
{
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];
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. */
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)