OSDN Git Service

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