]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cfgloop.c
* tree-ssa-loop-ivcanon.c: New file.
[thirdparty/gcc.git] / gcc / cfgloop.c
1 /* Natural loop discovery code for GNU compiler.
2 Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
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.
10
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.
15
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. */
20
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"
33
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
37
38 #define HEADER_BLOCK(B) (* (int *) (B)->aux)
39 #define LATCH_EDGE(E) (*(int *) (E)->aux)
40
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 *);
52 \f
53 /* Dump loop related CFG information. */
54
55 static void
56 flow_loops_cfg_dump (const struct loops *loops, FILE *file)
57 {
58 int i;
59 basic_block bb;
60
61 if (! loops->num || ! file)
62 return;
63
64 FOR_EACH_BB (bb)
65 {
66 edge succ;
67
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");
72 }
73
74 /* Dump the DFS node order. */
75 if (loops->cfg.dfs_order)
76 {
77 fputs (";; DFS order: ", file);
78 for (i = 0; i < n_basic_blocks; i++)
79 fprintf (file, "%d ", loops->cfg.dfs_order[i]);
80
81 fputs ("\n", file);
82 }
83
84 /* Dump the reverse completion node order. */
85 if (loops->cfg.rc_order)
86 {
87 fputs (";; RC order: ", file);
88 for (i = 0; i < n_basic_blocks; i++)
89 fprintf (file, "%d ", loops->cfg.rc_order[i]);
90
91 fputs ("\n", file);
92 }
93 }
94
95 /* Return nonzero if the nodes of LOOP are a subset of OUTER. */
96
97 bool
98 flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
99 {
100 return (loop->depth > outer->depth
101 && loop->pred[outer->depth] == outer);
102 }
103
104 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
105 loops within LOOP. */
106
107 struct loop *
108 superloop_at_depth (struct loop *loop, unsigned depth)
109 {
110 if (depth > (unsigned) loop->depth)
111 abort ();
112
113 if (depth == (unsigned) loop->depth)
114 return loop;
115
116 return loop->pred[depth];
117 }
118
119 /* Dump the loop information specified by LOOP to the stream FILE
120 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
121
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)
126 {
127 basic_block *bbs;
128 unsigned i;
129
130 if (! loop || ! loop->header)
131 return;
132
133 fprintf (file, ";;\n;; Loop %d:%s\n", loop->num,
134 loop->invalid ? " invalid" : "");
135
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));
142
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);
146
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);
157
158 if (loop_dump_aux)
159 loop_dump_aux (loop, file, verbose);
160 }
161
162 /* Dump the loop information specified by LOOPS to the stream FILE,
163 using auxiliary dump callback function LOOP_DUMP_AUX if non null. */
164
165 void
166 flow_loops_dump (const struct loops *loops, FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
167 {
168 int i;
169 int num_loops;
170
171 num_loops = loops->num;
172 if (! num_loops || ! file)
173 return;
174
175 fprintf (file, ";; %d loops found, %d levels\n",
176 num_loops, loops->levels);
177
178 for (i = 0; i < num_loops; i++)
179 {
180 struct loop *loop = loops->parray[i];
181
182 if (!loop)
183 continue;
184
185 flow_loop_dump (loop, file, loop_dump_aux, verbose);
186 }
187
188 if (verbose)
189 flow_loops_cfg_dump (loops, file);
190 }
191
192 /* Free data allocated for LOOP. */
193 void
194 flow_loop_free (struct loop *loop)
195 {
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);
205 }
206
207 /* Free all the memory allocated for LOOPS. */
208
209 void
210 flow_loops_free (struct loops *loops)
211 {
212 if (loops->parray)
213 {
214 unsigned i;
215
216 if (! loops->num)
217 abort ();
218
219 /* Free the loop descriptors. */
220 for (i = 0; i < loops->num; i++)
221 {
222 struct loop *loop = loops->parray[i];
223
224 if (!loop)
225 continue;
226
227 flow_loop_free (loop);
228 }
229
230 free (loops->parray);
231 loops->parray = NULL;
232
233 if (loops->cfg.dfs_order)
234 free (loops->cfg.dfs_order);
235 if (loops->cfg.rc_order)
236 free (loops->cfg.rc_order);
237
238 }
239 }
240
241 /* Find the entry edges into the LOOP. */
242
243 static void
244 flow_loop_entry_edges_find (struct loop *loop)
245 {
246 edge e;
247 int num_entries;
248
249 num_entries = 0;
250 for (e = loop->header->pred; e; e = e->pred_next)
251 {
252 if (flow_loop_outside_edge_p (loop, e))
253 num_entries++;
254 }
255
256 if (! num_entries)
257 abort ();
258
259 loop->entry_edges = xmalloc (num_entries * sizeof (edge *));
260
261 num_entries = 0;
262 for (e = loop->header->pred; e; e = e->pred_next)
263 {
264 if (flow_loop_outside_edge_p (loop, e))
265 loop->entry_edges[num_entries++] = e;
266 }
267
268 loop->num_entries = num_entries;
269 }
270
271 /* Find the exit edges from the LOOP. */
272
273 static void
274 flow_loop_exit_edges_find (struct loop *loop)
275 {
276 edge e;
277 basic_block node, *bbs;
278 unsigned num_exits, i;
279
280 loop->exit_edges = NULL;
281 loop->num_exits = 0;
282
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++)
289 {
290 node = bbs[i];
291 for (e = node->succ; e; e = e->succ_next)
292 {
293 basic_block dest = e->dest;
294
295 if (!flow_bb_inside_loop_p (loop, dest))
296 num_exits++;
297 }
298 }
299
300 if (! num_exits)
301 {
302 free (bbs);
303 return;
304 }
305
306 loop->exit_edges = xmalloc (num_exits * sizeof (edge *));
307
308 /* Store all exiting edges into an array. */
309 num_exits = 0;
310 for (i = 0; i < loop->num_nodes; i++)
311 {
312 node = bbs[i];
313 for (e = node->succ; e; e = e->succ_next)
314 {
315 basic_block dest = e->dest;
316
317 if (!flow_bb_inside_loop_p (loop, dest))
318 loop->exit_edges[num_exits++] = e;
319 }
320 }
321 free (bbs);
322 loop->num_exits = num_exits;
323 }
324
325 /* Find the nodes contained within the LOOP with header HEADER.
326 Return the number of nodes within the loop. */
327
328 static int
329 flow_loop_nodes_find (basic_block header, struct loop *loop)
330 {
331 basic_block *stack;
332 int sp;
333 int num_nodes = 1;
334
335 header->loop_father = loop;
336 header->loop_depth = loop->depth;
337
338 if (loop->latch->loop_father != loop)
339 {
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;
346
347 while (sp)
348 {
349 basic_block node;
350 edge e;
351
352 node = stack[--sp];
353
354 for (e = node->pred; e; e = e->pred_next)
355 {
356 basic_block ancestor = e->src;
357
358 if (ancestor != ENTRY_BLOCK_PTR
359 && ancestor->loop_father != loop)
360 {
361 ancestor->loop_father = loop;
362 ancestor->loop_depth = loop->depth;
363 num_nodes++;
364 stack[sp++] = ancestor;
365 }
366 }
367 }
368 free (stack);
369 }
370 return num_nodes;
371 }
372
373 /* For each loop in the lOOPS tree that has just a single exit
374 record the exit edge. */
375
376 void
377 mark_single_exit_loops (struct loops *loops)
378 {
379 basic_block bb;
380 edge e;
381 struct loop *loop;
382 unsigned i;
383
384 for (i = 1; i < loops->num; i++)
385 {
386 loop = loops->parray[i];
387 if (loop)
388 loop->single_exit = NULL;
389 }
390
391 FOR_EACH_BB (bb)
392 {
393 if (bb->loop_father == loops->tree_root)
394 continue;
395 for (e = bb->succ; e; e = e->succ_next)
396 {
397 if (e->dest == EXIT_BLOCK_PTR)
398 continue;
399
400 if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
401 continue;
402
403 for (loop = bb->loop_father;
404 loop != e->dest->loop_father;
405 loop = loop->outer)
406 {
407 /* If we have already seen an exit, mark this by the edge that
408 surely does not occur as any exit. */
409 if (loop->single_exit)
410 loop->single_exit = ENTRY_BLOCK_PTR->succ;
411 else
412 loop->single_exit = e;
413 }
414 }
415 }
416
417 for (i = 1; i < loops->num; i++)
418 {
419 loop = loops->parray[i];
420 if (!loop)
421 continue;
422
423 if (loop->single_exit == ENTRY_BLOCK_PTR->succ)
424 loop->single_exit = NULL;
425 }
426
427 loops->state |= LOOPS_HAVE_MARKED_SINGLE_EXITS;
428 }
429
430 /* Find the root node of the loop pre-header extended basic block and
431 the edges along the trace from the root node to the loop header. */
432
433 static void
434 flow_loop_pre_header_scan (struct loop *loop)
435 {
436 int num;
437 basic_block ebb;
438 edge e;
439
440 loop->num_pre_header_edges = 0;
441 if (loop->num_entries != 1)
442 return;
443
444 ebb = loop->entry_edges[0]->src;
445 if (ebb == ENTRY_BLOCK_PTR)
446 return;
447
448 /* Count number of edges along trace from loop header to
449 root of pre-header extended basic block. Usually this is
450 only one or two edges. */
451 for (num = 1; ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next;
452 num++)
453 ebb = ebb->pred->src;
454
455 loop->pre_header_edges = xmalloc (num * sizeof (edge));
456 loop->num_pre_header_edges = num;
457
458 /* Store edges in order that they are followed. The source of the first edge
459 is the root node of the pre-header extended basic block and the
460 destination of the last last edge is the loop header. */
461 for (e = loop->entry_edges[0]; num; e = e->src->pred)
462 loop->pre_header_edges[--num] = e;
463 }
464
465 /* Return the block for the pre-header of the loop with header
466 HEADER. Return NULL if there is no pre-header. */
467
468 static basic_block
469 flow_loop_pre_header_find (basic_block header)
470 {
471 basic_block pre_header;
472 edge e;
473
474 /* If block p is a predecessor of the header and is the only block
475 that the header does not dominate, then it is the pre-header. */
476 pre_header = NULL;
477 for (e = header->pred; e; e = e->pred_next)
478 {
479 basic_block node = e->src;
480
481 if (node != ENTRY_BLOCK_PTR
482 && ! dominated_by_p (CDI_DOMINATORS, node, header))
483 {
484 if (pre_header == NULL)
485 pre_header = node;
486 else
487 {
488 /* There are multiple edges into the header from outside
489 the loop so there is no pre-header block. */
490 pre_header = NULL;
491 break;
492 }
493 }
494 }
495
496 return pre_header;
497 }
498
499 static void
500 establish_preds (struct loop *loop)
501 {
502 struct loop *ploop, *father = loop->outer;
503
504 loop->depth = father->depth + 1;
505 if (loop->pred)
506 free (loop->pred);
507 loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
508 memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
509 loop->pred[father->depth] = father;
510
511 for (ploop = loop->inner; ploop; ploop = ploop->next)
512 establish_preds (ploop);
513 }
514
515 /* Add LOOP to the loop hierarchy tree where FATHER is father of the
516 added loop. If LOOP has some children, take care of that their
517 pred field will be initialized correctly. */
518
519 void
520 flow_loop_tree_node_add (struct loop *father, struct loop *loop)
521 {
522 loop->next = father->inner;
523 father->inner = loop;
524 loop->outer = father;
525
526 establish_preds (loop);
527 }
528
529 /* Remove LOOP from the loop hierarchy tree. */
530
531 void
532 flow_loop_tree_node_remove (struct loop *loop)
533 {
534 struct loop *prev, *father;
535
536 father = loop->outer;
537 loop->outer = NULL;
538
539 /* Remove loop from the list of sons. */
540 if (father->inner == loop)
541 father->inner = loop->next;
542 else
543 {
544 for (prev = father->inner; prev->next != loop; prev = prev->next);
545 prev->next = loop->next;
546 }
547
548 loop->depth = -1;
549 free (loop->pred);
550 loop->pred = NULL;
551 }
552
553 /* Helper function to compute loop nesting depth and enclosed loop level
554 for the natural loop specified by LOOP. Returns the loop level. */
555
556 static int
557 flow_loop_level_compute (struct loop *loop)
558 {
559 struct loop *inner;
560 int level = 1;
561
562 if (! loop)
563 return 0;
564
565 /* Traverse loop tree assigning depth and computing level as the
566 maximum level of all the inner loops of this loop. The loop
567 level is equivalent to the height of the loop in the loop tree
568 and corresponds to the number of enclosed loop levels (including
569 itself). */
570 for (inner = loop->inner; inner; inner = inner->next)
571 {
572 int ilevel = flow_loop_level_compute (inner) + 1;
573
574 if (ilevel > level)
575 level = ilevel;
576 }
577
578 loop->level = level;
579 return level;
580 }
581
582 /* Compute the loop nesting depth and enclosed loop level for the loop
583 hierarchy tree specified by LOOPS. Return the maximum enclosed loop
584 level. */
585
586 static int
587 flow_loops_level_compute (struct loops *loops)
588 {
589 return flow_loop_level_compute (loops->tree_root);
590 }
591
592 /* Scan a single natural loop specified by LOOP collecting information
593 about it specified by FLAGS. */
594
595 int
596 flow_loop_scan (struct loop *loop, int flags)
597 {
598 if (flags & LOOP_ENTRY_EDGES)
599 {
600 /* Find edges which enter the loop header.
601 Note that the entry edges should only
602 enter the header of a natural loop. */
603 flow_loop_entry_edges_find (loop);
604 }
605
606 if (flags & LOOP_EXIT_EDGES)
607 {
608 /* Find edges which exit the loop. */
609 flow_loop_exit_edges_find (loop);
610 }
611
612 if (flags & LOOP_PRE_HEADER)
613 {
614 /* Look to see if the loop has a pre-header node. */
615 loop->pre_header = flow_loop_pre_header_find (loop->header);
616
617 /* Find the blocks within the extended basic block of
618 the loop pre-header. */
619 flow_loop_pre_header_scan (loop);
620 }
621
622 return 1;
623 }
624
625 /* A callback to update latch and header info for basic block JUMP created
626 by redirecting an edge. */
627
628 static void
629 update_latch_info (basic_block jump)
630 {
631 alloc_aux_for_block (jump, sizeof (int));
632 HEADER_BLOCK (jump) = 0;
633 alloc_aux_for_edge (jump->pred, sizeof (int));
634 LATCH_EDGE (jump->pred) = 0;
635 set_immediate_dominator (CDI_DOMINATORS, jump, jump->pred->src);
636 }
637
638 /* A callback for make_forwarder block, to redirect all edges except for
639 MFB_KJ_EDGE to the entry part. E is the edge for that we should decide
640 whether to redirect it. */
641
642 static edge mfb_kj_edge;
643 static bool
644 mfb_keep_just (edge e)
645 {
646 return e != mfb_kj_edge;
647 }
648
649 /* A callback for make_forwarder block, to redirect the latch edges into an
650 entry part. E is the edge for that we should decide whether to redirect
651 it. */
652
653 static bool
654 mfb_keep_nonlatch (edge e)
655 {
656 return LATCH_EDGE (e);
657 }
658
659 /* Takes care of merging natural loops with shared headers. */
660
661 static void
662 canonicalize_loop_headers (void)
663 {
664 basic_block header;
665 edge e;
666
667 alloc_aux_for_blocks (sizeof (int));
668 alloc_aux_for_edges (sizeof (int));
669
670 /* Split blocks so that each loop has only single latch. */
671 FOR_EACH_BB (header)
672 {
673 int num_latches = 0;
674 int have_abnormal_edge = 0;
675
676 for (e = header->pred; e; e = e->pred_next)
677 {
678 basic_block latch = e->src;
679
680 if (e->flags & EDGE_ABNORMAL)
681 have_abnormal_edge = 1;
682
683 if (latch != ENTRY_BLOCK_PTR
684 && dominated_by_p (CDI_DOMINATORS, latch, header))
685 {
686 num_latches++;
687 LATCH_EDGE (e) = 1;
688 }
689 }
690 if (have_abnormal_edge)
691 HEADER_BLOCK (header) = 0;
692 else
693 HEADER_BLOCK (header) = num_latches;
694 }
695
696 if (HEADER_BLOCK (ENTRY_BLOCK_PTR->succ->dest))
697 {
698 basic_block bb;
699
700 /* We could not redirect edges freely here. On the other hand,
701 we can simply split the edge from entry block. */
702 bb = split_edge (ENTRY_BLOCK_PTR->succ);
703
704 alloc_aux_for_edge (bb->succ, sizeof (int));
705 LATCH_EDGE (bb->succ) = 0;
706 alloc_aux_for_block (bb, sizeof (int));
707 HEADER_BLOCK (bb) = 0;
708 }
709
710 FOR_EACH_BB (header)
711 {
712 int max_freq, is_heavy;
713 edge heavy, tmp_edge;
714
715 if (HEADER_BLOCK (header) <= 1)
716 continue;
717
718 /* Find a heavy edge. */
719 is_heavy = 1;
720 heavy = NULL;
721 max_freq = 0;
722 for (e = header->pred; e; e = e->pred_next)
723 if (LATCH_EDGE (e) &&
724 EDGE_FREQUENCY (e) > max_freq)
725 max_freq = EDGE_FREQUENCY (e);
726 for (e = header->pred; e; e = e->pred_next)
727 if (LATCH_EDGE (e) &&
728 EDGE_FREQUENCY (e) >= max_freq / HEAVY_EDGE_RATIO)
729 {
730 if (heavy)
731 {
732 is_heavy = 0;
733 break;
734 }
735 else
736 heavy = e;
737 }
738
739 if (is_heavy)
740 {
741 /* Split out the heavy edge, and create inner loop for it. */
742 mfb_kj_edge = heavy;
743 tmp_edge = make_forwarder_block (header, mfb_keep_just,
744 update_latch_info);
745 alloc_aux_for_block (tmp_edge->dest, sizeof (int));
746 HEADER_BLOCK (tmp_edge->dest) = 1;
747 alloc_aux_for_edge (tmp_edge, sizeof (int));
748 LATCH_EDGE (tmp_edge) = 0;
749 HEADER_BLOCK (header)--;
750 }
751
752 if (HEADER_BLOCK (header) > 1)
753 {
754 /* Create a new latch block. */
755 tmp_edge = make_forwarder_block (header, mfb_keep_nonlatch,
756 update_latch_info);
757 alloc_aux_for_block (tmp_edge->dest, sizeof (int));
758 HEADER_BLOCK (tmp_edge->src) = 0;
759 HEADER_BLOCK (tmp_edge->dest) = 1;
760 alloc_aux_for_edge (tmp_edge, sizeof (int));
761 LATCH_EDGE (tmp_edge) = 1;
762 }
763 }
764
765 free_aux_for_blocks ();
766 free_aux_for_edges ();
767
768 #ifdef ENABLE_CHECKING
769 verify_dominators (CDI_DOMINATORS);
770 #endif
771 }
772
773 /* Find all the natural loops in the function and save in LOOPS structure and
774 recalculate loop_depth information in basic block structures. FLAGS
775 controls which loop information is collected. Return the number of natural
776 loops found. */
777
778 int
779 flow_loops_find (struct loops *loops, int flags)
780 {
781 int i;
782 int b;
783 int num_loops;
784 edge e;
785 sbitmap headers;
786 int *dfs_order;
787 int *rc_order;
788 basic_block header;
789 basic_block bb;
790
791 /* This function cannot be repeatedly called with different
792 flags to build up the loop information. The loop tree
793 must always be built if this function is called. */
794 if (! (flags & LOOP_TREE))
795 abort ();
796
797 memset (loops, 0, sizeof *loops);
798
799 /* Taking care of this degenerate case makes the rest of
800 this code simpler. */
801 if (n_basic_blocks == 0)
802 return 0;
803
804 dfs_order = NULL;
805 rc_order = NULL;
806
807 /* Ensure that the dominators are computed. */
808 calculate_dominance_info (CDI_DOMINATORS);
809
810 /* Join loops with shared headers. */
811 canonicalize_loop_headers ();
812
813 /* Count the number of loop headers. This should be the
814 same as the number of natural loops. */
815 headers = sbitmap_alloc (last_basic_block);
816 sbitmap_zero (headers);
817
818 num_loops = 0;
819 FOR_EACH_BB (header)
820 {
821 int more_latches = 0;
822
823 header->loop_depth = 0;
824
825 /* If we have an abnormal predecessor, do not consider the
826 loop (not worth the problems). */
827 for (e = header->pred; e; e = e->pred_next)
828 if (e->flags & EDGE_ABNORMAL)
829 break;
830 if (e)
831 continue;
832
833 for (e = header->pred; e; e = e->pred_next)
834 {
835 basic_block latch = e->src;
836
837 if (e->flags & EDGE_ABNORMAL)
838 abort ();
839
840 /* Look for back edges where a predecessor is dominated
841 by this block. A natural loop has a single entry
842 node (header) that dominates all the nodes in the
843 loop. It also has single back edge to the header
844 from a latch node. */
845 if (latch != ENTRY_BLOCK_PTR
846 && dominated_by_p (CDI_DOMINATORS, latch, header))
847 {
848 /* Shared headers should be eliminated by now. */
849 if (more_latches)
850 abort ();
851 more_latches = 1;
852 SET_BIT (headers, header->index);
853 num_loops++;
854 }
855 }
856 }
857
858 /* Allocate loop structures. */
859 loops->parray = xcalloc (num_loops + 1, sizeof (struct loop *));
860
861 /* Dummy loop containing whole function. */
862 loops->parray[0] = xcalloc (1, sizeof (struct loop));
863 loops->parray[0]->next = NULL;
864 loops->parray[0]->inner = NULL;
865 loops->parray[0]->outer = NULL;
866 loops->parray[0]->depth = 0;
867 loops->parray[0]->pred = NULL;
868 loops->parray[0]->num_nodes = n_basic_blocks + 2;
869 loops->parray[0]->latch = EXIT_BLOCK_PTR;
870 loops->parray[0]->header = ENTRY_BLOCK_PTR;
871 ENTRY_BLOCK_PTR->loop_father = loops->parray[0];
872 EXIT_BLOCK_PTR->loop_father = loops->parray[0];
873
874 loops->tree_root = loops->parray[0];
875
876 /* Find and record information about all the natural loops
877 in the CFG. */
878 loops->num = 1;
879 FOR_EACH_BB (bb)
880 bb->loop_father = loops->tree_root;
881
882 if (num_loops)
883 {
884 /* Compute depth first search order of the CFG so that outer
885 natural loops will be found before inner natural loops. */
886 dfs_order = xmalloc (n_basic_blocks * sizeof (int));
887 rc_order = xmalloc (n_basic_blocks * sizeof (int));
888 flow_depth_first_order_compute (dfs_order, rc_order);
889
890 /* Save CFG derived information to avoid recomputing it. */
891 loops->cfg.dfs_order = dfs_order;
892 loops->cfg.rc_order = rc_order;
893
894 num_loops = 1;
895
896 for (b = 0; b < n_basic_blocks; b++)
897 {
898 struct loop *loop;
899
900 /* Search the nodes of the CFG in reverse completion order
901 so that we can find outer loops first. */
902 if (!TEST_BIT (headers, rc_order[b]))
903 continue;
904
905 header = BASIC_BLOCK (rc_order[b]);
906
907 loop = loops->parray[num_loops] = xcalloc (1, sizeof (struct loop));
908
909 loop->header = header;
910 loop->num = num_loops;
911 num_loops++;
912
913 /* Look for the latch for this header block. */
914 for (e = header->pred; e; e = e->pred_next)
915 {
916 basic_block latch = e->src;
917
918 if (latch != ENTRY_BLOCK_PTR
919 && dominated_by_p (CDI_DOMINATORS, latch, header))
920 {
921 loop->latch = latch;
922 break;
923 }
924 }
925
926 flow_loop_tree_node_add (header->loop_father, loop);
927 loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
928 }
929
930 /* Assign the loop nesting depth and enclosed loop level for each
931 loop. */
932 loops->levels = flow_loops_level_compute (loops);
933
934 /* Scan the loops. */
935 for (i = 1; i < num_loops; i++)
936 flow_loop_scan (loops->parray[i], flags);
937
938 loops->num = num_loops;
939 }
940
941 sbitmap_free (headers);
942
943 loops->state = 0;
944 #ifdef ENABLE_CHECKING
945 verify_flow_info ();
946 verify_loop_structure (loops);
947 #endif
948
949 return loops->num;
950 }
951
952 /* Update the information regarding the loops in the CFG
953 specified by LOOPS. */
954
955 int
956 flow_loops_update (struct loops *loops, int flags)
957 {
958 /* One day we may want to update the current loop data. For now
959 throw away the old stuff and rebuild what we need. */
960 if (loops->parray)
961 flow_loops_free (loops);
962
963 return flow_loops_find (loops, flags);
964 }
965
966 /* Return nonzero if basic block BB belongs to LOOP. */
967 bool
968 flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
969 {
970 struct loop *source_loop;
971
972 if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
973 return 0;
974
975 source_loop = bb->loop_father;
976 return loop == source_loop || flow_loop_nested_p (loop, source_loop);
977 }
978
979 /* Return nonzero if edge E enters header of LOOP from outside of LOOP. */
980
981 bool
982 flow_loop_outside_edge_p (const struct loop *loop, edge e)
983 {
984 if (e->dest != loop->header)
985 abort ();
986 return !flow_bb_inside_loop_p (loop, e->src);
987 }
988
989 /* Enumeration predicate for get_loop_body. */
990 static bool
991 glb_enum_p (basic_block bb, void *glb_header)
992 {
993 return bb != (basic_block) glb_header;
994 }
995
996 /* Gets basic blocks of a LOOP. Header is the 0-th block, rest is in dfs
997 order against direction of edges from latch. Specially, if
998 header != latch, latch is the 1-st block. */
999 basic_block *
1000 get_loop_body (const struct loop *loop)
1001 {
1002 basic_block *tovisit, bb;
1003 unsigned tv = 0;
1004
1005 if (!loop->num_nodes)
1006 abort ();
1007
1008 tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
1009 tovisit[tv++] = loop->header;
1010
1011 if (loop->latch == EXIT_BLOCK_PTR)
1012 {
1013 /* There may be blocks unreachable from EXIT_BLOCK. */
1014 if (loop->num_nodes != (unsigned) n_basic_blocks + 2)
1015 abort ();
1016 FOR_EACH_BB (bb)
1017 tovisit[tv++] = bb;
1018 tovisit[tv++] = EXIT_BLOCK_PTR;
1019 }
1020 else if (loop->latch != loop->header)
1021 {
1022 tv = dfs_enumerate_from (loop->latch, 1, glb_enum_p,
1023 tovisit + 1, loop->num_nodes - 1,
1024 loop->header) + 1;
1025 }
1026
1027 if (tv != loop->num_nodes)
1028 abort ();
1029 return tovisit;
1030 }
1031
1032 /* Fills dominance descendants inside LOOP of the basic block BB into
1033 array TOVISIT from index *TV. */
1034
1035 static void
1036 fill_sons_in_loop (const struct loop *loop, basic_block bb,
1037 basic_block *tovisit, int *tv)
1038 {
1039 basic_block son, postpone = NULL;
1040
1041 tovisit[(*tv)++] = bb;
1042 for (son = first_dom_son (CDI_DOMINATORS, bb);
1043 son;
1044 son = next_dom_son (CDI_DOMINATORS, son))
1045 {
1046 if (!flow_bb_inside_loop_p (loop, son))
1047 continue;
1048
1049 if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
1050 {
1051 postpone = son;
1052 continue;
1053 }
1054 fill_sons_in_loop (loop, son, tovisit, tv);
1055 }
1056
1057 if (postpone)
1058 fill_sons_in_loop (loop, postpone, tovisit, tv);
1059 }
1060
1061 /* Gets body of a LOOP (that must be different from the outermost loop)
1062 sorted by dominance relation. Additionally, if a basic block s dominates
1063 the latch, then only blocks dominated by s are be after it. */
1064
1065 basic_block *
1066 get_loop_body_in_dom_order (const struct loop *loop)
1067 {
1068 basic_block *tovisit;
1069 int tv;
1070
1071 if (!loop->num_nodes)
1072 abort ();
1073
1074 tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
1075
1076 if (loop->latch == EXIT_BLOCK_PTR)
1077 abort ();
1078
1079 tv = 0;
1080 fill_sons_in_loop (loop, loop->header, tovisit, &tv);
1081
1082 if (tv != (int) loop->num_nodes)
1083 abort ();
1084
1085 return tovisit;
1086 }
1087
1088 /* Gets exit edges of a LOOP, returning their number in N_EDGES. */
1089 edge *
1090 get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
1091 {
1092 edge *edges, e;
1093 unsigned i, n;
1094 basic_block * body;
1095
1096 if (loop->latch == EXIT_BLOCK_PTR)
1097 abort ();
1098
1099 body = get_loop_body (loop);
1100 n = 0;
1101 for (i = 0; i < loop->num_nodes; i++)
1102 for (e = body[i]->succ; e; e = e->succ_next)
1103 if (!flow_bb_inside_loop_p (loop, e->dest))
1104 n++;
1105 edges = xmalloc (n * sizeof (edge));
1106 *n_edges = n;
1107 n = 0;
1108 for (i = 0; i < loop->num_nodes; i++)
1109 for (e = body[i]->succ; e; e = e->succ_next)
1110 if (!flow_bb_inside_loop_p (loop, e->dest))
1111 edges[n++] = e;
1112 free (body);
1113
1114 return edges;
1115 }
1116
1117 /* Counts the number of conditional branches inside LOOP. */
1118
1119 unsigned
1120 num_loop_branches (const struct loop *loop)
1121 {
1122 unsigned i, n;
1123 basic_block * body;
1124
1125 if (loop->latch == EXIT_BLOCK_PTR)
1126 abort ();
1127
1128 body = get_loop_body (loop);
1129 n = 0;
1130 for (i = 0; i < loop->num_nodes; i++)
1131 if (body[i]->succ && body[i]->succ->succ_next)
1132 n++;
1133 free (body);
1134
1135 return n;
1136 }
1137
1138 /* Adds basic block BB to LOOP. */
1139 void
1140 add_bb_to_loop (basic_block bb, struct loop *loop)
1141 {
1142 int i;
1143
1144 bb->loop_father = loop;
1145 bb->loop_depth = loop->depth;
1146 loop->num_nodes++;
1147 for (i = 0; i < loop->depth; i++)
1148 loop->pred[i]->num_nodes++;
1149 }
1150
1151 /* Remove basic block BB from loops. */
1152 void
1153 remove_bb_from_loops (basic_block bb)
1154 {
1155 int i;
1156 struct loop *loop = bb->loop_father;
1157
1158 loop->num_nodes--;
1159 for (i = 0; i < loop->depth; i++)
1160 loop->pred[i]->num_nodes--;
1161 bb->loop_father = NULL;
1162 bb->loop_depth = 0;
1163 }
1164
1165 /* Finds nearest common ancestor in loop tree for given loops. */
1166 struct loop *
1167 find_common_loop (struct loop *loop_s, struct loop *loop_d)
1168 {
1169 if (!loop_s) return loop_d;
1170 if (!loop_d) return loop_s;
1171
1172 if (loop_s->depth < loop_d->depth)
1173 loop_d = loop_d->pred[loop_s->depth];
1174 else if (loop_s->depth > loop_d->depth)
1175 loop_s = loop_s->pred[loop_d->depth];
1176
1177 while (loop_s != loop_d)
1178 {
1179 loop_s = loop_s->outer;
1180 loop_d = loop_d->outer;
1181 }
1182 return loop_s;
1183 }
1184
1185 /* Cancels the LOOP; it must be innermost one. */
1186 void
1187 cancel_loop (struct loops *loops, struct loop *loop)
1188 {
1189 basic_block *bbs;
1190 unsigned i;
1191
1192 if (loop->inner)
1193 abort ();
1194
1195 /* Move blocks up one level (they should be removed as soon as possible). */
1196 bbs = get_loop_body (loop);
1197 for (i = 0; i < loop->num_nodes; i++)
1198 bbs[i]->loop_father = loop->outer;
1199
1200 /* Remove the loop from structure. */
1201 flow_loop_tree_node_remove (loop);
1202
1203 /* Remove loop from loops array. */
1204 loops->parray[loop->num] = NULL;
1205
1206 /* Free loop data. */
1207 flow_loop_free (loop);
1208 }
1209
1210 /* Cancels LOOP and all its subloops. */
1211 void
1212 cancel_loop_tree (struct loops *loops, struct loop *loop)
1213 {
1214 while (loop->inner)
1215 cancel_loop_tree (loops, loop->inner);
1216 cancel_loop (loops, loop);
1217 }
1218
1219 /* Checks that LOOPS are all right:
1220 -- sizes of loops are all right
1221 -- results of get_loop_body really belong to the loop
1222 -- loop header have just single entry edge and single latch edge
1223 -- loop latches have only single successor that is header of their loop
1224 -- irreducible loops are correctly marked
1225 */
1226 void
1227 verify_loop_structure (struct loops *loops)
1228 {
1229 unsigned *sizes, i, j;
1230 sbitmap irreds;
1231 basic_block *bbs, bb;
1232 struct loop *loop;
1233 int err = 0;
1234 edge e;
1235
1236 /* Check sizes. */
1237 sizes = xcalloc (loops->num, sizeof (int));
1238 sizes[0] = 2;
1239
1240 FOR_EACH_BB (bb)
1241 for (loop = bb->loop_father; loop; loop = loop->outer)
1242 sizes[loop->num]++;
1243
1244 for (i = 0; i < loops->num; i++)
1245 {
1246 if (!loops->parray[i])
1247 continue;
1248
1249 if (loops->parray[i]->num_nodes != sizes[i])
1250 {
1251 error ("Size of loop %d should be %d, not %d.",
1252 i, sizes[i], loops->parray[i]->num_nodes);
1253 err = 1;
1254 }
1255 }
1256
1257 /* Check get_loop_body. */
1258 for (i = 1; i < loops->num; i++)
1259 {
1260 loop = loops->parray[i];
1261 if (!loop)
1262 continue;
1263 bbs = get_loop_body (loop);
1264
1265 for (j = 0; j < loop->num_nodes; j++)
1266 if (!flow_bb_inside_loop_p (loop, bbs[j]))
1267 {
1268 error ("Bb %d do not belong to loop %d.",
1269 bbs[j]->index, i);
1270 err = 1;
1271 }
1272 free (bbs);
1273 }
1274
1275 /* Check headers and latches. */
1276 for (i = 1; i < loops->num; i++)
1277 {
1278 loop = loops->parray[i];
1279 if (!loop)
1280 continue;
1281
1282 if ((loops->state & LOOPS_HAVE_PREHEADERS)
1283 && (!loop->header->pred->pred_next
1284 || loop->header->pred->pred_next->pred_next))
1285 {
1286 error ("Loop %d's header does not have exactly 2 entries.", i);
1287 err = 1;
1288 }
1289 if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
1290 {
1291 if (!loop->latch->succ
1292 || loop->latch->succ->succ_next)
1293 {
1294 error ("Loop %d's latch does not have exactly 1 successor.", i);
1295 err = 1;
1296 }
1297 if (loop->latch->succ->dest != loop->header)
1298 {
1299 error ("Loop %d's latch does not have header as successor.", i);
1300 err = 1;
1301 }
1302 if (loop->latch->loop_father != loop)
1303 {
1304 error ("Loop %d's latch does not belong directly to it.", i);
1305 err = 1;
1306 }
1307 }
1308 if (loop->header->loop_father != loop)
1309 {
1310 error ("Loop %d's header does not belong directly to it.", i);
1311 err = 1;
1312 }
1313 if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1314 && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1315 {
1316 error ("Loop %d's latch is marked as part of irreducible region.", i);
1317 err = 1;
1318 }
1319 }
1320
1321 /* Check irreducible loops. */
1322 if (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1323 {
1324 /* Record old info. */
1325 irreds = sbitmap_alloc (last_basic_block);
1326 FOR_EACH_BB (bb)
1327 {
1328 if (bb->flags & BB_IRREDUCIBLE_LOOP)
1329 SET_BIT (irreds, bb->index);
1330 else
1331 RESET_BIT (irreds, bb->index);
1332 for (e = bb->succ; e; e = e->succ_next)
1333 if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1334 e->flags |= EDGE_ALL_FLAGS + 1;
1335 }
1336
1337 /* Recount it. */
1338 mark_irreducible_loops (loops);
1339
1340 /* Compare. */
1341 FOR_EACH_BB (bb)
1342 {
1343 if ((bb->flags & BB_IRREDUCIBLE_LOOP)
1344 && !TEST_BIT (irreds, bb->index))
1345 {
1346 error ("Basic block %d should be marked irreducible.", bb->index);
1347 err = 1;
1348 }
1349 else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
1350 && TEST_BIT (irreds, bb->index))
1351 {
1352 error ("Basic block %d should not be marked irreducible.", bb->index);
1353 err = 1;
1354 }
1355 for (e = bb->succ; e; e = e->succ_next)
1356 {
1357 if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1358 && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1359 {
1360 error ("Edge from %d to %d should be marked irreducible.",
1361 e->src->index, e->dest->index);
1362 err = 1;
1363 }
1364 else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1365 && (e->flags & (EDGE_ALL_FLAGS + 1)))
1366 {
1367 error ("Edge from %d to %d should not be marked irreducible.",
1368 e->src->index, e->dest->index);
1369 err = 1;
1370 }
1371 e->flags &= ~(EDGE_ALL_FLAGS + 1);
1372 }
1373 }
1374 free (irreds);
1375 }
1376
1377 /* Check the single_exit. */
1378 if (loops->state & LOOPS_HAVE_MARKED_SINGLE_EXITS)
1379 {
1380 memset (sizes, 0, sizeof (unsigned) * loops->num);
1381 FOR_EACH_BB (bb)
1382 {
1383 if (bb->loop_father == loops->tree_root)
1384 continue;
1385 for (e = bb->succ; e; e = e->succ_next)
1386 {
1387 if (e->dest == EXIT_BLOCK_PTR)
1388 continue;
1389
1390 if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
1391 continue;
1392
1393 for (loop = bb->loop_father;
1394 loop != e->dest->loop_father;
1395 loop = loop->outer)
1396 {
1397 sizes[loop->num]++;
1398 if (loop->single_exit
1399 && loop->single_exit != e)
1400 {
1401 error ("Wrong single exit %d->%d recorded for loop %d.",
1402 loop->single_exit->src->index,
1403 loop->single_exit->dest->index,
1404 loop->num);
1405 error ("Right exit is %d->%d.",
1406 e->src->index, e->dest->index);
1407 err = 1;
1408 }
1409 }
1410 }
1411 }
1412
1413 for (i = 1; i < loops->num; i++)
1414 {
1415 loop = loops->parray[i];
1416 if (!loop)
1417 continue;
1418
1419 if (sizes[i] == 1
1420 && !loop->single_exit)
1421 {
1422 error ("Single exit not recorded for loop %d.", loop->num);
1423 err = 1;
1424 }
1425
1426 if (sizes[i] != 1
1427 && loop->single_exit)
1428 {
1429 error ("Loop %d should not have single exit (%d -> %d).",
1430 loop->num,
1431 loop->single_exit->src->index,
1432 loop->single_exit->dest->index);
1433 err = 1;
1434 }
1435 }
1436 }
1437
1438 if (err)
1439 abort ();
1440
1441 free (sizes);
1442 }
1443
1444 /* Returns latch edge of LOOP. */
1445 edge
1446 loop_latch_edge (const struct loop *loop)
1447 {
1448 edge e;
1449
1450 for (e = loop->header->pred; e->src != loop->latch; e = e->pred_next)
1451 continue;
1452
1453 return e;
1454 }
1455
1456 /* Returns preheader edge of LOOP. */
1457 edge
1458 loop_preheader_edge (const struct loop *loop)
1459 {
1460 edge e;
1461
1462 for (e = loop->header->pred; e->src == loop->latch; e = e->pred_next)
1463 continue;
1464
1465 return e;
1466 }