* rtl.h (insn_note): Remove NOTE_INSN_PREDICTION.
[official-gcc.git] / gcc / cfgloop.c
blob50f31e67e23e4c667dff8fa36582edb61ccd9207
1 /* Natural loop discovery code for GNU compiler.
2 Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "rtl.h"
26 #include "hard-reg-set.h"
27 #include "basic-block.h"
28 #include "toplev.h"
29 #include "cfgloop.h"
30 #include "flags.h"
31 #include "tree.h"
32 #include "tree-flow.h"
34 /* Ratio of frequencies of edges so that one of more latch edges is
35 considered to belong to inner loop with same header. */
36 #define HEAVY_EDGE_RATIO 8
38 #define HEADER_BLOCK(B) (* (int *) (B)->aux)
39 #define LATCH_EDGE(E) (*(int *) (E)->aux)
41 static void flow_loops_cfg_dump (const struct loops *, FILE *);
42 static void flow_loop_entry_edges_find (struct loop *);
43 static void flow_loop_exit_edges_find (struct loop *);
44 static int flow_loop_nodes_find (basic_block, struct loop *);
45 static void flow_loop_pre_header_scan (struct loop *);
46 static basic_block flow_loop_pre_header_find (basic_block);
47 static int flow_loop_level_compute (struct loop *);
48 static int flow_loops_level_compute (struct loops *);
49 static void establish_preds (struct loop *);
50 static void canonicalize_loop_headers (void);
51 static bool glb_enum_p (basic_block, void *);
53 /* Dump loop related CFG information. */
55 static void
56 flow_loops_cfg_dump (const struct loops *loops, FILE *file)
58 int i;
59 basic_block bb;
61 if (! loops->num || ! file)
62 return;
64 FOR_EACH_BB (bb)
66 edge succ;
68 fprintf (file, ";; %d succs { ", bb->index);
69 for (succ = bb->succ; succ; succ = succ->succ_next)
70 fprintf (file, "%d ", succ->dest->index);
71 fprintf (file, "}\n");
74 /* Dump the DFS node order. */
75 if (loops->cfg.dfs_order)
77 fputs (";; DFS order: ", file);
78 for (i = 0; i < n_basic_blocks; i++)
79 fprintf (file, "%d ", loops->cfg.dfs_order[i]);
81 fputs ("\n", file);
84 /* Dump the reverse completion node order. */
85 if (loops->cfg.rc_order)
87 fputs (";; RC order: ", file);
88 for (i = 0; i < n_basic_blocks; i++)
89 fprintf (file, "%d ", loops->cfg.rc_order[i]);
91 fputs ("\n", file);
95 /* Return nonzero if the nodes of LOOP are a subset of OUTER. */
97 bool
98 flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
100 return (loop->depth > outer->depth
101 && loop->pred[outer->depth] == outer);
104 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
105 loops within LOOP. */
107 struct loop *
108 superloop_at_depth (struct loop *loop, unsigned depth)
110 if (depth > (unsigned) loop->depth)
111 abort ();
113 if (depth == (unsigned) loop->depth)
114 return loop;
116 return loop->pred[depth];
119 /* Dump the loop information specified by LOOP to the stream FILE
120 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
122 void
123 flow_loop_dump (const struct loop *loop, FILE *file,
124 void (*loop_dump_aux) (const struct loop *, FILE *, int),
125 int verbose)
127 basic_block *bbs;
128 unsigned i;
130 if (! loop || ! loop->header)
131 return;
133 fprintf (file, ";;\n;; Loop %d:%s\n", loop->num,
134 loop->invalid ? " invalid" : "");
136 fprintf (file, ";; header %d, latch %d, pre-header %d\n",
137 loop->header->index, loop->latch->index,
138 loop->pre_header ? loop->pre_header->index : -1);
139 fprintf (file, ";; depth %d, level %d, outer %ld\n",
140 loop->depth, loop->level,
141 (long) (loop->outer ? loop->outer->num : -1));
143 if (loop->pre_header_edges)
144 flow_edge_list_print (";; pre-header edges", loop->pre_header_edges,
145 loop->num_pre_header_edges, file);
147 flow_edge_list_print (";; entry edges", loop->entry_edges,
148 loop->num_entries, file);
149 fprintf (file, ";; nodes:");
150 bbs = get_loop_body (loop);
151 for (i = 0; i < loop->num_nodes; i++)
152 fprintf (file, " %d", bbs[i]->index);
153 free (bbs);
154 fprintf (file, "\n");
155 flow_edge_list_print (";; exit edges", loop->exit_edges,
156 loop->num_exits, file);
158 if (loop_dump_aux)
159 loop_dump_aux (loop, file, verbose);
162 /* Dump the loop information specified by LOOPS to the stream FILE,
163 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
165 void
166 flow_loops_dump (const struct loops *loops, FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
168 int i;
169 int num_loops;
171 num_loops = loops->num;
172 if (! num_loops || ! file)
173 return;
175 fprintf (file, ";; %d loops found, %d levels\n",
176 num_loops, loops->levels);
178 for (i = 0; i < num_loops; i++)
180 struct loop *loop = loops->parray[i];
182 if (!loop)
183 continue;
185 flow_loop_dump (loop, file, loop_dump_aux, verbose);
188 if (verbose)
189 flow_loops_cfg_dump (loops, file);
192 /* Free data allocated for LOOP. */
193 void
194 flow_loop_free (struct loop *loop)
196 if (loop->pre_header_edges)
197 free (loop->pre_header_edges);
198 if (loop->entry_edges)
199 free (loop->entry_edges);
200 if (loop->exit_edges)
201 free (loop->exit_edges);
202 if (loop->pred)
203 free (loop->pred);
204 free (loop);
207 /* Free all the memory allocated for LOOPS. */
209 void
210 flow_loops_free (struct loops *loops)
212 if (loops->parray)
214 unsigned i;
216 if (! loops->num)
217 abort ();
219 /* Free the loop descriptors. */
220 for (i = 0; i < loops->num; i++)
222 struct loop *loop = loops->parray[i];
224 if (!loop)
225 continue;
227 flow_loop_free (loop);
230 free (loops->parray);
231 loops->parray = NULL;
233 if (loops->cfg.dfs_order)
234 free (loops->cfg.dfs_order);
235 if (loops->cfg.rc_order)
236 free (loops->cfg.rc_order);
241 /* Find the entry edges into the LOOP. */
243 static void
244 flow_loop_entry_edges_find (struct loop *loop)
246 edge e;
247 int num_entries;
249 num_entries = 0;
250 for (e = loop->header->pred; e; e = e->pred_next)
252 if (flow_loop_outside_edge_p (loop, e))
253 num_entries++;
256 if (! num_entries)
257 abort ();
259 loop->entry_edges = xmalloc (num_entries * sizeof (edge *));
261 num_entries = 0;
262 for (e = loop->header->pred; e; e = e->pred_next)
264 if (flow_loop_outside_edge_p (loop, e))
265 loop->entry_edges[num_entries++] = e;
268 loop->num_entries = num_entries;
271 /* Find the exit edges from the LOOP. */
273 static void
274 flow_loop_exit_edges_find (struct loop *loop)
276 edge e;
277 basic_block node, *bbs;
278 unsigned num_exits, i;
280 loop->exit_edges = NULL;
281 loop->num_exits = 0;
283 /* Check all nodes within the loop to see if there are any
284 successors not in the loop. Note that a node may have multiple
285 exiting edges. */
286 num_exits = 0;
287 bbs = get_loop_body (loop);
288 for (i = 0; i < loop->num_nodes; i++)
290 node = bbs[i];
291 for (e = node->succ; e; e = e->succ_next)
293 basic_block dest = e->dest;
295 if (!flow_bb_inside_loop_p (loop, dest))
296 num_exits++;
300 if (! num_exits)
302 free (bbs);
303 return;
306 loop->exit_edges = xmalloc (num_exits * sizeof (edge *));
308 /* Store all exiting edges into an array. */
309 num_exits = 0;
310 for (i = 0; i < loop->num_nodes; i++)
312 node = bbs[i];
313 for (e = node->succ; e; e = e->succ_next)
315 basic_block dest = e->dest;
317 if (!flow_bb_inside_loop_p (loop, dest))
318 loop->exit_edges[num_exits++] = e;
321 free (bbs);
322 loop->num_exits = num_exits;
325 /* Find the nodes contained within the LOOP with header HEADER.
326 Return the number of nodes within the loop. */
328 static int
329 flow_loop_nodes_find (basic_block header, struct loop *loop)
331 basic_block *stack;
332 int sp;
333 int num_nodes = 1;
335 header->loop_father = loop;
336 header->loop_depth = loop->depth;
338 if (loop->latch->loop_father != loop)
340 stack = xmalloc (n_basic_blocks * sizeof (basic_block));
341 sp = 0;
342 num_nodes++;
343 stack[sp++] = loop->latch;
344 loop->latch->loop_father = loop;
345 loop->latch->loop_depth = loop->depth;
347 while (sp)
349 basic_block node;
350 edge e;
352 node = stack[--sp];
354 for (e = node->pred; e; e = e->pred_next)
356 basic_block ancestor = e->src;
358 if (ancestor != ENTRY_BLOCK_PTR
359 && ancestor->loop_father != loop)
361 ancestor->loop_father = loop;
362 ancestor->loop_depth = loop->depth;
363 num_nodes++;
364 stack[sp++] = ancestor;
368 free (stack);
370 return num_nodes;
373 /* Find the root node of the loop pre-header extended basic block and
374 the edges along the trace from the root node to the loop header. */
376 static void
377 flow_loop_pre_header_scan (struct loop *loop)
379 int num;
380 basic_block ebb;
381 edge e;
383 loop->num_pre_header_edges = 0;
384 if (loop->num_entries != 1)
385 return;
387 ebb = loop->entry_edges[0]->src;
388 if (ebb == ENTRY_BLOCK_PTR)
389 return;
391 /* Count number of edges along trace from loop header to
392 root of pre-header extended basic block. Usually this is
393 only one or two edges. */
394 for (num = 1; ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next;
395 num++)
396 ebb = ebb->pred->src;
398 loop->pre_header_edges = xmalloc (num * sizeof (edge));
399 loop->num_pre_header_edges = num;
401 /* Store edges in order that they are followed. The source of the first edge
402 is the root node of the pre-header extended basic block and the
403 destination of the last last edge is the loop header. */
404 for (e = loop->entry_edges[0]; num; e = e->src->pred)
405 loop->pre_header_edges[--num] = e;
408 /* Return the block for the pre-header of the loop with header
409 HEADER. Return NULL if there is no pre-header. */
411 static basic_block
412 flow_loop_pre_header_find (basic_block header)
414 basic_block pre_header;
415 edge e;
417 /* If block p is a predecessor of the header and is the only block
418 that the header does not dominate, then it is the pre-header. */
419 pre_header = NULL;
420 for (e = header->pred; e; e = e->pred_next)
422 basic_block node = e->src;
424 if (node != ENTRY_BLOCK_PTR
425 && ! dominated_by_p (CDI_DOMINATORS, node, header))
427 if (pre_header == NULL)
428 pre_header = node;
429 else
431 /* There are multiple edges into the header from outside
432 the loop so there is no pre-header block. */
433 pre_header = NULL;
434 break;
439 return pre_header;
442 static void
443 establish_preds (struct loop *loop)
445 struct loop *ploop, *father = loop->outer;
447 loop->depth = father->depth + 1;
448 if (loop->pred)
449 free (loop->pred);
450 loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
451 memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
452 loop->pred[father->depth] = father;
454 for (ploop = loop->inner; ploop; ploop = ploop->next)
455 establish_preds (ploop);
458 /* Add LOOP to the loop hierarchy tree where FATHER is father of the
459 added loop. If LOOP has some children, take care of that their
460 pred field will be initialized correctly. */
462 void
463 flow_loop_tree_node_add (struct loop *father, struct loop *loop)
465 loop->next = father->inner;
466 father->inner = loop;
467 loop->outer = father;
469 establish_preds (loop);
472 /* Remove LOOP from the loop hierarchy tree. */
474 void
475 flow_loop_tree_node_remove (struct loop *loop)
477 struct loop *prev, *father;
479 father = loop->outer;
480 loop->outer = NULL;
482 /* Remove loop from the list of sons. */
483 if (father->inner == loop)
484 father->inner = loop->next;
485 else
487 for (prev = father->inner; prev->next != loop; prev = prev->next);
488 prev->next = loop->next;
491 loop->depth = -1;
492 free (loop->pred);
493 loop->pred = NULL;
496 /* Helper function to compute loop nesting depth and enclosed loop level
497 for the natural loop specified by LOOP. Returns the loop level. */
499 static int
500 flow_loop_level_compute (struct loop *loop)
502 struct loop *inner;
503 int level = 1;
505 if (! loop)
506 return 0;
508 /* Traverse loop tree assigning depth and computing level as the
509 maximum level of all the inner loops of this loop. The loop
510 level is equivalent to the height of the loop in the loop tree
511 and corresponds to the number of enclosed loop levels (including
512 itself). */
513 for (inner = loop->inner; inner; inner = inner->next)
515 int ilevel = flow_loop_level_compute (inner) + 1;
517 if (ilevel > level)
518 level = ilevel;
521 loop->level = level;
522 return level;
525 /* Compute the loop nesting depth and enclosed loop level for the loop
526 hierarchy tree specified by LOOPS. Return the maximum enclosed loop
527 level. */
529 static int
530 flow_loops_level_compute (struct loops *loops)
532 return flow_loop_level_compute (loops->tree_root);
535 /* Scan a single natural loop specified by LOOP collecting information
536 about it specified by FLAGS. */
539 flow_loop_scan (struct loop *loop, int flags)
541 if (flags & LOOP_ENTRY_EDGES)
543 /* Find edges which enter the loop header.
544 Note that the entry edges should only
545 enter the header of a natural loop. */
546 flow_loop_entry_edges_find (loop);
549 if (flags & LOOP_EXIT_EDGES)
551 /* Find edges which exit the loop. */
552 flow_loop_exit_edges_find (loop);
555 if (flags & LOOP_PRE_HEADER)
557 /* Look to see if the loop has a pre-header node. */
558 loop->pre_header = flow_loop_pre_header_find (loop->header);
560 /* Find the blocks within the extended basic block of
561 the loop pre-header. */
562 flow_loop_pre_header_scan (loop);
565 return 1;
568 /* A callback to update latch and header info for basic block JUMP created
569 by redirecting an edge. */
571 static void
572 update_latch_info (basic_block jump)
574 alloc_aux_for_block (jump, sizeof (int));
575 HEADER_BLOCK (jump) = 0;
576 alloc_aux_for_edge (jump->pred, sizeof (int));
577 LATCH_EDGE (jump->pred) = 0;
580 /* A callback for make_forwarder block, to redirect all edges except for
581 MFB_KJ_EDGE to the entry part. E is the edge for that we should decide
582 whether to redirect it. */
584 static edge mfb_kj_edge;
585 static bool
586 mfb_keep_just (edge e)
588 return e != mfb_kj_edge;
591 /* A callback for make_forwarder block, to redirect the latch edges into an
592 entry part. E is the edge for that we should decide whether to redirect
593 it. */
595 static bool
596 mfb_keep_nonlatch (edge e)
598 return LATCH_EDGE (e);
601 /* Takes care of merging natural loops with shared headers. */
603 static void
604 canonicalize_loop_headers (void)
606 basic_block header;
607 edge e;
609 /* Compute the dominators. */
610 calculate_dominance_info (CDI_DOMINATORS);
612 alloc_aux_for_blocks (sizeof (int));
613 alloc_aux_for_edges (sizeof (int));
615 /* Split blocks so that each loop has only single latch. */
616 FOR_EACH_BB (header)
618 int num_latches = 0;
619 int have_abnormal_edge = 0;
621 for (e = header->pred; e; e = e->pred_next)
623 basic_block latch = e->src;
625 if (e->flags & EDGE_ABNORMAL)
626 have_abnormal_edge = 1;
628 if (latch != ENTRY_BLOCK_PTR
629 && dominated_by_p (CDI_DOMINATORS, latch, header))
631 num_latches++;
632 LATCH_EDGE (e) = 1;
635 if (have_abnormal_edge)
636 HEADER_BLOCK (header) = 0;
637 else
638 HEADER_BLOCK (header) = num_latches;
641 free_dominance_info (CDI_DOMINATORS);
643 if (HEADER_BLOCK (ENTRY_BLOCK_PTR->succ->dest))
645 basic_block bb;
647 /* We could not redirect edges freely here. On the other hand,
648 we can simply split the edge from entry block. */
649 bb = split_edge (ENTRY_BLOCK_PTR->succ);
651 alloc_aux_for_edge (bb->succ, sizeof (int));
652 LATCH_EDGE (bb->succ) = 0;
653 alloc_aux_for_block (bb, sizeof (int));
654 HEADER_BLOCK (bb) = 0;
657 FOR_EACH_BB (header)
659 int max_freq, is_heavy;
660 edge heavy, tmp_edge;
662 if (HEADER_BLOCK (header) <= 1)
663 continue;
665 /* Find a heavy edge. */
666 is_heavy = 1;
667 heavy = NULL;
668 max_freq = 0;
669 for (e = header->pred; e; e = e->pred_next)
670 if (LATCH_EDGE (e) &&
671 EDGE_FREQUENCY (e) > max_freq)
672 max_freq = EDGE_FREQUENCY (e);
673 for (e = header->pred; e; e = e->pred_next)
674 if (LATCH_EDGE (e) &&
675 EDGE_FREQUENCY (e) >= max_freq / HEAVY_EDGE_RATIO)
677 if (heavy)
679 is_heavy = 0;
680 break;
682 else
683 heavy = e;
686 if (is_heavy)
688 /* Split out the heavy edge, and create inner loop for it. */
689 mfb_kj_edge = heavy;
690 tmp_edge = make_forwarder_block (header, mfb_keep_just,
691 update_latch_info);
692 alloc_aux_for_block (tmp_edge->dest, sizeof (int));
693 HEADER_BLOCK (tmp_edge->dest) = 1;
694 alloc_aux_for_edge (tmp_edge, sizeof (int));
695 LATCH_EDGE (tmp_edge) = 0;
696 HEADER_BLOCK (header)--;
699 if (HEADER_BLOCK (header) > 1)
701 /* Create a new latch block. */
702 tmp_edge = make_forwarder_block (header, mfb_keep_nonlatch,
703 update_latch_info);
704 alloc_aux_for_block (tmp_edge->dest, sizeof (int));
705 HEADER_BLOCK (tmp_edge->src) = 0;
706 HEADER_BLOCK (tmp_edge->dest) = 1;
707 alloc_aux_for_edge (tmp_edge, sizeof (int));
708 LATCH_EDGE (tmp_edge) = 1;
712 free_aux_for_blocks ();
713 free_aux_for_edges ();
716 /* Find all the natural loops in the function and save in LOOPS structure and
717 recalculate loop_depth information in basic block structures. FLAGS
718 controls which loop information is collected. Return the number of natural
719 loops found. */
722 flow_loops_find (struct loops *loops, int flags)
724 int i;
725 int b;
726 int num_loops;
727 edge e;
728 sbitmap headers;
729 int *dfs_order;
730 int *rc_order;
731 basic_block header;
732 basic_block bb;
734 /* This function cannot be repeatedly called with different
735 flags to build up the loop information. The loop tree
736 must always be built if this function is called. */
737 if (! (flags & LOOP_TREE))
738 abort ();
740 memset (loops, 0, sizeof *loops);
742 /* Taking care of this degenerate case makes the rest of
743 this code simpler. */
744 if (n_basic_blocks == 0)
745 return 0;
747 dfs_order = NULL;
748 rc_order = NULL;
750 /* Join loops with shared headers. */
751 canonicalize_loop_headers ();
753 /* Compute the dominators. */
754 calculate_dominance_info (CDI_DOMINATORS);
756 /* Count the number of loop headers. This should be the
757 same as the number of natural loops. */
758 headers = sbitmap_alloc (last_basic_block);
759 sbitmap_zero (headers);
761 num_loops = 0;
762 FOR_EACH_BB (header)
764 int more_latches = 0;
766 header->loop_depth = 0;
768 /* If we have an abnormal predecessor, do not consider the
769 loop (not worth the problems). */
770 for (e = header->pred; e; e = e->pred_next)
771 if (e->flags & EDGE_ABNORMAL)
772 break;
773 if (e)
774 continue;
776 for (e = header->pred; e; e = e->pred_next)
778 basic_block latch = e->src;
780 if (e->flags & EDGE_ABNORMAL)
781 abort ();
783 /* Look for back edges where a predecessor is dominated
784 by this block. A natural loop has a single entry
785 node (header) that dominates all the nodes in the
786 loop. It also has single back edge to the header
787 from a latch node. */
788 if (latch != ENTRY_BLOCK_PTR
789 && dominated_by_p (CDI_DOMINATORS, latch, header))
791 /* Shared headers should be eliminated by now. */
792 if (more_latches)
793 abort ();
794 more_latches = 1;
795 SET_BIT (headers, header->index);
796 num_loops++;
801 /* Allocate loop structures. */
802 loops->parray = xcalloc (num_loops + 1, sizeof (struct loop *));
804 /* Dummy loop containing whole function. */
805 loops->parray[0] = xcalloc (1, sizeof (struct loop));
806 loops->parray[0]->next = NULL;
807 loops->parray[0]->inner = NULL;
808 loops->parray[0]->outer = NULL;
809 loops->parray[0]->depth = 0;
810 loops->parray[0]->pred = NULL;
811 loops->parray[0]->num_nodes = n_basic_blocks + 2;
812 loops->parray[0]->latch = EXIT_BLOCK_PTR;
813 loops->parray[0]->header = ENTRY_BLOCK_PTR;
814 ENTRY_BLOCK_PTR->loop_father = loops->parray[0];
815 EXIT_BLOCK_PTR->loop_father = loops->parray[0];
817 loops->tree_root = loops->parray[0];
819 /* Find and record information about all the natural loops
820 in the CFG. */
821 loops->num = 1;
822 FOR_EACH_BB (bb)
823 bb->loop_father = loops->tree_root;
825 if (num_loops)
827 /* Compute depth first search order of the CFG so that outer
828 natural loops will be found before inner natural loops. */
829 dfs_order = xmalloc (n_basic_blocks * sizeof (int));
830 rc_order = xmalloc (n_basic_blocks * sizeof (int));
831 flow_depth_first_order_compute (dfs_order, rc_order);
833 /* Save CFG derived information to avoid recomputing it. */
834 loops->cfg.dfs_order = dfs_order;
835 loops->cfg.rc_order = rc_order;
837 num_loops = 1;
839 for (b = 0; b < n_basic_blocks; b++)
841 struct loop *loop;
843 /* Search the nodes of the CFG in reverse completion order
844 so that we can find outer loops first. */
845 if (!TEST_BIT (headers, rc_order[b]))
846 continue;
848 header = BASIC_BLOCK (rc_order[b]);
850 loop = loops->parray[num_loops] = xcalloc (1, sizeof (struct loop));
852 loop->header = header;
853 loop->num = num_loops;
854 num_loops++;
856 /* Look for the latch for this header block. */
857 for (e = header->pred; e; e = e->pred_next)
859 basic_block latch = e->src;
861 if (latch != ENTRY_BLOCK_PTR
862 && dominated_by_p (CDI_DOMINATORS, latch, header))
864 loop->latch = latch;
865 break;
869 flow_loop_tree_node_add (header->loop_father, loop);
870 loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
873 /* Assign the loop nesting depth and enclosed loop level for each
874 loop. */
875 loops->levels = flow_loops_level_compute (loops);
877 /* Scan the loops. */
878 for (i = 1; i < num_loops; i++)
879 flow_loop_scan (loops->parray[i], flags);
881 loops->num = num_loops;
883 else
885 free_dominance_info (CDI_DOMINATORS);
888 sbitmap_free (headers);
890 loops->state = 0;
891 #ifdef ENABLE_CHECKING
892 verify_flow_info ();
893 verify_loop_structure (loops);
894 #endif
896 return loops->num;
899 /* Update the information regarding the loops in the CFG
900 specified by LOOPS. */
903 flow_loops_update (struct loops *loops, int flags)
905 /* One day we may want to update the current loop data. For now
906 throw away the old stuff and rebuild what we need. */
907 if (loops->parray)
908 flow_loops_free (loops);
910 return flow_loops_find (loops, flags);
913 /* Return nonzero if basic block BB belongs to LOOP. */
914 bool
915 flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
917 struct loop *source_loop;
919 if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
920 return 0;
922 source_loop = bb->loop_father;
923 return loop == source_loop || flow_loop_nested_p (loop, source_loop);
926 /* Return nonzero if edge E enters header of LOOP from outside of LOOP. */
928 bool
929 flow_loop_outside_edge_p (const struct loop *loop, edge e)
931 if (e->dest != loop->header)
932 abort ();
933 return !flow_bb_inside_loop_p (loop, e->src);
936 /* Enumeration predicate for get_loop_body. */
937 static bool
938 glb_enum_p (basic_block bb, void *glb_header)
940 return bb != (basic_block) glb_header;
943 /* Gets basic blocks of a LOOP. Header is the 0-th block, rest is in dfs
944 order against direction of edges from latch. Specially, if
945 header != latch, latch is the 1-st block. */
946 basic_block *
947 get_loop_body (const struct loop *loop)
949 basic_block *tovisit, bb;
950 unsigned tv = 0;
952 if (!loop->num_nodes)
953 abort ();
955 tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
956 tovisit[tv++] = loop->header;
958 if (loop->latch == EXIT_BLOCK_PTR)
960 /* There may be blocks unreachable from EXIT_BLOCK. */
961 if (loop->num_nodes != (unsigned) n_basic_blocks + 2)
962 abort ();
963 FOR_EACH_BB (bb)
964 tovisit[tv++] = bb;
965 tovisit[tv++] = EXIT_BLOCK_PTR;
967 else if (loop->latch != loop->header)
969 tv = dfs_enumerate_from (loop->latch, 1, glb_enum_p,
970 tovisit + 1, loop->num_nodes - 1,
971 loop->header) + 1;
974 if (tv != loop->num_nodes)
975 abort ();
976 return tovisit;
979 /* Fills dominance descendants inside LOOP of the basic block BB into
980 array TOVISIT from index *TV. */
982 static void
983 fill_sons_in_loop (const struct loop *loop, basic_block bb,
984 basic_block *tovisit, int *tv)
986 basic_block son, postpone = NULL;
988 tovisit[(*tv)++] = bb;
989 for (son = first_dom_son (CDI_DOMINATORS, bb);
990 son;
991 son = next_dom_son (CDI_DOMINATORS, son))
993 if (!flow_bb_inside_loop_p (loop, son))
994 continue;
996 if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
998 postpone = son;
999 continue;
1001 fill_sons_in_loop (loop, son, tovisit, tv);
1004 if (postpone)
1005 fill_sons_in_loop (loop, postpone, tovisit, tv);
1008 /* Gets body of a LOOP (that must be different from the outermost loop)
1009 sorted by dominance relation. Additionally, if a basic block s dominates
1010 the latch, then only blocks dominated by s are be after it. */
1012 basic_block *
1013 get_loop_body_in_dom_order (const struct loop *loop)
1015 basic_block *tovisit;
1016 int tv;
1018 if (!loop->num_nodes)
1019 abort ();
1021 tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
1023 if (loop->latch == EXIT_BLOCK_PTR)
1024 abort ();
1026 tv = 0;
1027 fill_sons_in_loop (loop, loop->header, tovisit, &tv);
1029 if (tv != (int) loop->num_nodes)
1030 abort ();
1032 return tovisit;
1035 /* Gets exit edges of a LOOP, returning their number in N_EDGES. */
1036 edge *
1037 get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
1039 edge *edges, e;
1040 unsigned i, n;
1041 basic_block * body;
1043 if (loop->latch == EXIT_BLOCK_PTR)
1044 abort ();
1046 body = get_loop_body (loop);
1047 n = 0;
1048 for (i = 0; i < loop->num_nodes; i++)
1049 for (e = body[i]->succ; e; e = e->succ_next)
1050 if (!flow_bb_inside_loop_p (loop, e->dest))
1051 n++;
1052 edges = xmalloc (n * sizeof (edge));
1053 *n_edges = n;
1054 n = 0;
1055 for (i = 0; i < loop->num_nodes; i++)
1056 for (e = body[i]->succ; e; e = e->succ_next)
1057 if (!flow_bb_inside_loop_p (loop, e->dest))
1058 edges[n++] = e;
1059 free (body);
1061 return edges;
1064 /* Counts the number of conditional branches inside LOOP. */
1066 unsigned
1067 num_loop_branches (const struct loop *loop)
1069 unsigned i, n;
1070 basic_block * body;
1072 if (loop->latch == EXIT_BLOCK_PTR)
1073 abort ();
1075 body = get_loop_body (loop);
1076 n = 0;
1077 for (i = 0; i < loop->num_nodes; i++)
1078 if (body[i]->succ && body[i]->succ->succ_next)
1079 n++;
1080 free (body);
1082 return n;
1085 /* Adds basic block BB to LOOP. */
1086 void
1087 add_bb_to_loop (basic_block bb, struct loop *loop)
1089 int i;
1091 bb->loop_father = loop;
1092 bb->loop_depth = loop->depth;
1093 loop->num_nodes++;
1094 for (i = 0; i < loop->depth; i++)
1095 loop->pred[i]->num_nodes++;
1098 /* Remove basic block BB from loops. */
1099 void
1100 remove_bb_from_loops (basic_block bb)
1102 int i;
1103 struct loop *loop = bb->loop_father;
1105 loop->num_nodes--;
1106 for (i = 0; i < loop->depth; i++)
1107 loop->pred[i]->num_nodes--;
1108 bb->loop_father = NULL;
1109 bb->loop_depth = 0;
1112 /* Finds nearest common ancestor in loop tree for given loops. */
1113 struct loop *
1114 find_common_loop (struct loop *loop_s, struct loop *loop_d)
1116 if (!loop_s) return loop_d;
1117 if (!loop_d) return loop_s;
1119 if (loop_s->depth < loop_d->depth)
1120 loop_d = loop_d->pred[loop_s->depth];
1121 else if (loop_s->depth > loop_d->depth)
1122 loop_s = loop_s->pred[loop_d->depth];
1124 while (loop_s != loop_d)
1126 loop_s = loop_s->outer;
1127 loop_d = loop_d->outer;
1129 return loop_s;
1132 /* Cancels the LOOP; it must be innermost one. */
1133 void
1134 cancel_loop (struct loops *loops, struct loop *loop)
1136 basic_block *bbs;
1137 unsigned i;
1139 if (loop->inner)
1140 abort ();
1142 /* Move blocks up one level (they should be removed as soon as possible). */
1143 bbs = get_loop_body (loop);
1144 for (i = 0; i < loop->num_nodes; i++)
1145 bbs[i]->loop_father = loop->outer;
1147 /* Remove the loop from structure. */
1148 flow_loop_tree_node_remove (loop);
1150 /* Remove loop from loops array. */
1151 loops->parray[loop->num] = NULL;
1153 /* Free loop data. */
1154 flow_loop_free (loop);
1157 /* Cancels LOOP and all its subloops. */
1158 void
1159 cancel_loop_tree (struct loops *loops, struct loop *loop)
1161 while (loop->inner)
1162 cancel_loop_tree (loops, loop->inner);
1163 cancel_loop (loops, loop);
1166 /* Checks that LOOPS are all right:
1167 -- sizes of loops are all right
1168 -- results of get_loop_body really belong to the loop
1169 -- loop header have just single entry edge and single latch edge
1170 -- loop latches have only single successor that is header of their loop
1171 -- irreducible loops are correctly marked
1173 void
1174 verify_loop_structure (struct loops *loops)
1176 unsigned *sizes, i, j;
1177 sbitmap irreds;
1178 basic_block *bbs, bb;
1179 struct loop *loop;
1180 int err = 0;
1181 edge e;
1183 /* Check sizes. */
1184 sizes = xcalloc (loops->num, sizeof (int));
1185 sizes[0] = 2;
1187 FOR_EACH_BB (bb)
1188 for (loop = bb->loop_father; loop; loop = loop->outer)
1189 sizes[loop->num]++;
1191 for (i = 0; i < loops->num; i++)
1193 if (!loops->parray[i])
1194 continue;
1196 if (loops->parray[i]->num_nodes != sizes[i])
1198 error ("Size of loop %d should be %d, not %d.",
1199 i, sizes[i], loops->parray[i]->num_nodes);
1200 err = 1;
1204 free (sizes);
1206 /* Check get_loop_body. */
1207 for (i = 1; i < loops->num; i++)
1209 loop = loops->parray[i];
1210 if (!loop)
1211 continue;
1212 bbs = get_loop_body (loop);
1214 for (j = 0; j < loop->num_nodes; j++)
1215 if (!flow_bb_inside_loop_p (loop, bbs[j]))
1217 error ("Bb %d do not belong to loop %d.",
1218 bbs[j]->index, i);
1219 err = 1;
1221 free (bbs);
1224 /* Check headers and latches. */
1225 for (i = 1; i < loops->num; i++)
1227 loop = loops->parray[i];
1228 if (!loop)
1229 continue;
1231 if ((loops->state & LOOPS_HAVE_PREHEADERS)
1232 && (!loop->header->pred->pred_next
1233 || loop->header->pred->pred_next->pred_next))
1235 error ("Loop %d's header does not have exactly 2 entries.", i);
1236 err = 1;
1238 if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
1240 if (!loop->latch->succ
1241 || loop->latch->succ->succ_next)
1243 error ("Loop %d's latch does not have exactly 1 successor.", i);
1244 err = 1;
1246 if (loop->latch->succ->dest != loop->header)
1248 error ("Loop %d's latch does not have header as successor.", i);
1249 err = 1;
1251 if (loop->latch->loop_father != loop)
1253 error ("Loop %d's latch does not belong directly to it.", i);
1254 err = 1;
1257 if (loop->header->loop_father != loop)
1259 error ("Loop %d's header does not belong directly to it.", i);
1260 err = 1;
1262 if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1263 && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1265 error ("Loop %d's latch is marked as part of irreducible region.", i);
1266 err = 1;
1270 /* Check irreducible loops. */
1271 if (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1273 /* Record old info. */
1274 irreds = sbitmap_alloc (last_basic_block);
1275 FOR_EACH_BB (bb)
1277 if (bb->flags & BB_IRREDUCIBLE_LOOP)
1278 SET_BIT (irreds, bb->index);
1279 else
1280 RESET_BIT (irreds, bb->index);
1281 for (e = bb->succ; e; e = e->succ_next)
1282 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1283 e->flags |= EDGE_ALL_FLAGS + 1;
1286 /* Recount it. */
1287 mark_irreducible_loops (loops);
1289 /* Compare. */
1290 FOR_EACH_BB (bb)
1292 if ((bb->flags & BB_IRREDUCIBLE_LOOP)
1293 && !TEST_BIT (irreds, bb->index))
1295 error ("Basic block %d should be marked irreducible.", bb->index);
1296 err = 1;
1298 else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
1299 && TEST_BIT (irreds, bb->index))
1301 error ("Basic block %d should not be marked irreducible.", bb->index);
1302 err = 1;
1304 for (e = bb->succ; e; e = e->succ_next)
1306 if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1307 && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1309 error ("Edge from %d to %d should be marked irreducible.",
1310 e->src->index, e->dest->index);
1311 err = 1;
1313 else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1314 && (e->flags & (EDGE_ALL_FLAGS + 1)))
1316 error ("Edge from %d to %d should not be marked irreducible.",
1317 e->src->index, e->dest->index);
1318 err = 1;
1320 e->flags &= ~(EDGE_ALL_FLAGS + 1);
1323 free (irreds);
1326 if (err)
1327 abort ();
1330 /* Returns latch edge of LOOP. */
1331 edge
1332 loop_latch_edge (const struct loop *loop)
1334 edge e;
1336 for (e = loop->header->pred; e->src != loop->latch; e = e->pred_next)
1337 continue;
1339 return e;
1342 /* Returns preheader edge of LOOP. */
1343 edge
1344 loop_preheader_edge (const struct loop *loop)
1346 edge e;
1348 for (e = loop->header->pred; e->src == loop->latch; e = e->pred_next)
1349 continue;
1351 return e;