bool
flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
{
- return loop->depth > outer->depth
- && loop->pred[outer->depth] == outer;
+ return (loop->depth > outer->depth
+ && loop->pred[outer->depth] == outer);
}
-/* Returns superloop of LOOP at given DEPTH. */
+/* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
+ loops within LOOP. */
struct loop *
superloop_at_depth (struct loop *loop, unsigned depth)
HEADER_BLOCK (jump) = 0;
alloc_aux_for_edge (jump->pred, sizeof (int));
LATCH_EDGE (jump->pred) = 0;
+ set_immediate_dominator (CDI_DOMINATORS, jump, jump->pred->src);
}
/* A callback for make_forwarder block, to redirect all edges except for
basic_block header;
edge e;
- /* Compute the dominators. */
- calculate_dominance_info (CDI_DOMINATORS);
-
alloc_aux_for_blocks (sizeof (int));
alloc_aux_for_edges (sizeof (int));
HEADER_BLOCK (header) = num_latches;
}
- free_dominance_info (CDI_DOMINATORS);
-
if (HEADER_BLOCK (ENTRY_BLOCK_PTR->succ->dest))
{
basic_block bb;
free_aux_for_blocks ();
free_aux_for_edges ();
+
+#ifdef ENABLE_CHECKING
+ verify_dominators (CDI_DOMINATORS);
+#endif
}
/* Find all the natural loops in the function and save in LOOPS structure and
dfs_order = NULL;
rc_order = NULL;
+ /* Ensure that the dominators are computed. */
+ calculate_dominance_info (CDI_DOMINATORS);
+
/* Join loops with shared headers. */
canonicalize_loop_headers ();
- /* Compute the dominators. */
- calculate_dominance_info (CDI_DOMINATORS);
-
/* Count the number of loop headers. This should be the
same as the number of natural loops. */
headers = sbitmap_alloc (last_basic_block);
loops->num = num_loops;
}
- else
- {
- free_dominance_info (CDI_DOMINATORS);
- }
sbitmap_free (headers);