OSDN Git Service

PR tree-optimization/16632
[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 "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       edge_iterator ei;
68
69       fprintf (file, ";; %d succs { ", bb->index);
70       FOR_EACH_EDGE (succ, ei, bb->succs)
71         fprintf (file, "%d ", succ->dest->index);
72       fprintf (file, "}\n");
73     }
74
75   /* Dump the DFS node order.  */
76   if (loops->cfg.dfs_order)
77     {
78       fputs (";; DFS order: ", file);
79       for (i = 0; i < n_basic_blocks; i++)
80         fprintf (file, "%d ", loops->cfg.dfs_order[i]);
81
82       fputs ("\n", file);
83     }
84
85   /* Dump the reverse completion node order.  */
86   if (loops->cfg.rc_order)
87     {
88       fputs (";; RC order: ", file);
89       for (i = 0; i < n_basic_blocks; i++)
90         fprintf (file, "%d ", loops->cfg.rc_order[i]);
91
92       fputs ("\n", file);
93     }
94 }
95
96 /* Return nonzero if the nodes of LOOP are a subset of OUTER.  */
97
98 bool
99 flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
100 {
101   return (loop->depth > outer->depth
102          && loop->pred[outer->depth] == outer);
103 }
104
105 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
106    loops within LOOP.  */
107
108 struct loop *
109 superloop_at_depth (struct loop *loop, unsigned depth)
110 {
111   gcc_assert (depth <= (unsigned) loop->depth);
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       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 int
595 flow_loops_level_compute (struct loops *loops)
596 {
597   return 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 /* Find all the natural loops in the function and save in LOOPS structure and
784    recalculate loop_depth information in basic block structures.  FLAGS
785    controls which loop information is collected.  Return the number of natural
786    loops found.  */
787
788 int
789 flow_loops_find (struct loops *loops, int flags)
790 {
791   int i;
792   int b;
793   int num_loops;
794   edge e;
795   sbitmap headers;
796   int *dfs_order;
797   int *rc_order;
798   basic_block header;
799   basic_block bb;
800
801   /* This function cannot be repeatedly called with different
802      flags to build up the loop information.  The loop tree
803      must always be built if this function is called.  */
804   gcc_assert (flags & LOOP_TREE);
805
806   memset (loops, 0, sizeof *loops);
807
808   /* Taking care of this degenerate case makes the rest of
809      this code simpler.  */
810   if (n_basic_blocks == 0)
811     return 0;
812
813   dfs_order = NULL;
814   rc_order = NULL;
815
816   /* Ensure that the dominators are computed.  */
817   calculate_dominance_info (CDI_DOMINATORS);
818
819   /* Join loops with shared headers.  */
820   canonicalize_loop_headers ();
821
822   /* Count the number of loop headers.  This should be the
823      same as the number of natural loops.  */
824   headers = sbitmap_alloc (last_basic_block);
825   sbitmap_zero (headers);
826
827   num_loops = 0;
828   FOR_EACH_BB (header)
829     {
830       edge_iterator ei;
831       int more_latches = 0;
832
833       header->loop_depth = 0;
834
835       /* If we have an abnormal predecessor, do not consider the
836          loop (not worth the problems).  */
837       FOR_EACH_EDGE (e, ei, header->preds)
838         if (e->flags & EDGE_ABNORMAL)
839           break;
840       if (e)
841         continue;
842
843       FOR_EACH_EDGE (e, ei, header->preds)
844         {
845           basic_block latch = e->src;
846
847           gcc_assert (!(e->flags & EDGE_ABNORMAL));
848
849           /* Look for back edges where a predecessor is dominated
850              by this block.  A natural loop has a single entry
851              node (header) that dominates all the nodes in the
852              loop.  It also has single back edge to the header
853              from a latch node.  */
854           if (latch != ENTRY_BLOCK_PTR
855               && dominated_by_p (CDI_DOMINATORS, latch, header))
856             {
857               /* Shared headers should be eliminated by now.  */
858               gcc_assert (!more_latches);
859               more_latches = 1;
860               SET_BIT (headers, header->index);
861               num_loops++;
862             }
863         }
864     }
865
866   /* Allocate loop structures.  */
867   loops->parray = xcalloc (num_loops + 1, sizeof (struct loop *));
868
869   /* Dummy loop containing whole function.  */
870   loops->parray[0] = xcalloc (1, sizeof (struct loop));
871   loops->parray[0]->next = NULL;
872   loops->parray[0]->inner = NULL;
873   loops->parray[0]->outer = NULL;
874   loops->parray[0]->depth = 0;
875   loops->parray[0]->pred = NULL;
876   loops->parray[0]->num_nodes = n_basic_blocks + 2;
877   loops->parray[0]->latch = EXIT_BLOCK_PTR;
878   loops->parray[0]->header = ENTRY_BLOCK_PTR;
879   ENTRY_BLOCK_PTR->loop_father = loops->parray[0];
880   EXIT_BLOCK_PTR->loop_father = loops->parray[0];
881
882   loops->tree_root = loops->parray[0];
883
884   /* Find and record information about all the natural loops
885      in the CFG.  */
886   loops->num = 1;
887   FOR_EACH_BB (bb)
888     bb->loop_father = loops->tree_root;
889
890   if (num_loops)
891     {
892       /* Compute depth first search order of the CFG so that outer
893          natural loops will be found before inner natural loops.  */
894       dfs_order = xmalloc (n_basic_blocks * sizeof (int));
895       rc_order = xmalloc (n_basic_blocks * sizeof (int));
896       flow_depth_first_order_compute (dfs_order, rc_order);
897
898       /* Save CFG derived information to avoid recomputing it.  */
899       loops->cfg.dfs_order = dfs_order;
900       loops->cfg.rc_order = rc_order;
901
902       num_loops = 1;
903
904       for (b = 0; b < n_basic_blocks; b++)
905         {
906           struct loop *loop;
907           edge_iterator ei;
908
909           /* Search the nodes of the CFG in reverse completion order
910              so that we can find outer loops first.  */
911           if (!TEST_BIT (headers, rc_order[b]))
912             continue;
913
914           header = BASIC_BLOCK (rc_order[b]);
915
916           loop = loops->parray[num_loops] = xcalloc (1, sizeof (struct loop));
917
918           loop->header = header;
919           loop->num = num_loops;
920           num_loops++;
921
922           /* Look for the latch for this header block.  */
923           FOR_EACH_EDGE (e, ei, header->preds)
924             {
925               basic_block latch = e->src;
926
927               if (latch != ENTRY_BLOCK_PTR
928                   && dominated_by_p (CDI_DOMINATORS, latch, header))
929                 {
930                   loop->latch = latch;
931                   break;
932                 }
933             }
934
935           flow_loop_tree_node_add (header->loop_father, loop);
936           loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
937         }
938
939       /* Assign the loop nesting depth and enclosed loop level for each
940          loop.  */
941       loops->levels = flow_loops_level_compute (loops);
942
943       /* Scan the loops.  */
944       for (i = 1; i < num_loops; i++)
945         flow_loop_scan (loops->parray[i], flags);
946
947       loops->num = num_loops;
948     }
949
950   sbitmap_free (headers);
951
952   loops->state = 0;
953 #ifdef ENABLE_CHECKING
954   verify_flow_info ();
955   verify_loop_structure (loops);
956 #endif
957
958   return loops->num;
959 }
960
961 /* Update the information regarding the loops in the CFG
962    specified by LOOPS.  */
963
964 int
965 flow_loops_update (struct loops *loops, int flags)
966 {
967   /* One day we may want to update the current loop data.  For now
968      throw away the old stuff and rebuild what we need.  */
969   if (loops->parray)
970     flow_loops_free (loops);
971
972   return flow_loops_find (loops, flags);
973 }
974
975 /* Return nonzero if basic block BB belongs to LOOP.  */
976 bool
977 flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
978 {
979   struct loop *source_loop;
980
981   if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
982     return 0;
983
984   source_loop = bb->loop_father;
985   return loop == source_loop || flow_loop_nested_p (loop, source_loop);
986 }
987
988 /* Return nonzero if edge E enters header of LOOP from outside of LOOP.  */
989
990 bool
991 flow_loop_outside_edge_p (const struct loop *loop, edge e)
992 {
993   gcc_assert (e->dest == loop->header);
994   return !flow_bb_inside_loop_p (loop, e->src);
995 }
996
997 /* Enumeration predicate for get_loop_body.  */
998 static bool
999 glb_enum_p (basic_block bb, void *glb_header)
1000 {
1001   return bb != (basic_block) glb_header;
1002 }
1003
1004 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
1005    order against direction of edges from latch.  Specially, if
1006    header != latch, latch is the 1-st block.  */
1007 basic_block *
1008 get_loop_body (const struct loop *loop)
1009 {
1010   basic_block *tovisit, bb;
1011   unsigned tv = 0;
1012
1013   gcc_assert (loop->num_nodes);
1014
1015   tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
1016   tovisit[tv++] = loop->header;
1017
1018   if (loop->latch == EXIT_BLOCK_PTR)
1019     {
1020       /* There may be blocks unreachable from EXIT_BLOCK.  */
1021       gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks + 2);
1022       FOR_EACH_BB (bb)
1023         tovisit[tv++] = bb;
1024       tovisit[tv++] = EXIT_BLOCK_PTR;
1025     }
1026   else if (loop->latch != loop->header)
1027     {
1028       tv = dfs_enumerate_from (loop->latch, 1, glb_enum_p,
1029                                tovisit + 1, loop->num_nodes - 1,
1030                                loop->header) + 1;
1031     }
1032
1033   gcc_assert (tv == loop->num_nodes);
1034   return tovisit;
1035 }
1036
1037 /* Fills dominance descendants inside LOOP of the basic block BB into
1038    array TOVISIT from index *TV.  */
1039
1040 static void
1041 fill_sons_in_loop (const struct loop *loop, basic_block bb,
1042                    basic_block *tovisit, int *tv)
1043 {
1044   basic_block son, postpone = NULL;
1045
1046   tovisit[(*tv)++] = bb;
1047   for (son = first_dom_son (CDI_DOMINATORS, bb);
1048        son;
1049        son = next_dom_son (CDI_DOMINATORS, son))
1050     {
1051       if (!flow_bb_inside_loop_p (loop, son))
1052         continue;
1053
1054       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
1055         {
1056           postpone = son;
1057           continue;
1058         }
1059       fill_sons_in_loop (loop, son, tovisit, tv);
1060     }
1061
1062   if (postpone)
1063     fill_sons_in_loop (loop, postpone, tovisit, tv);
1064 }
1065
1066 /* Gets body of a LOOP (that must be different from the outermost loop)
1067    sorted by dominance relation.  Additionally, if a basic block s dominates
1068    the latch, then only blocks dominated by s are be after it.  */
1069
1070 basic_block *
1071 get_loop_body_in_dom_order (const struct loop *loop)
1072 {
1073   basic_block *tovisit;
1074   int tv;
1075
1076   gcc_assert (loop->num_nodes);
1077
1078   tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
1079
1080   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1081
1082   tv = 0;
1083   fill_sons_in_loop (loop, loop->header, tovisit, &tv);
1084
1085   gcc_assert (tv == (int) loop->num_nodes);
1086
1087   return tovisit;
1088 }
1089
1090 /* Get body of a LOOP in breadth first sort order.  */
1091
1092 basic_block *
1093 get_loop_body_in_bfs_order (const struct loop *loop)
1094 {
1095   basic_block *blocks;
1096   basic_block bb;
1097   bitmap visited;
1098   unsigned int i = 0;
1099   unsigned int vc = 1;
1100
1101   gcc_assert (loop->num_nodes);
1102   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1103
1104   blocks = xcalloc (loop->num_nodes, sizeof (basic_block));
1105   visited = BITMAP_XMALLOC ();
1106
1107   bb = loop->header;
1108   while (i < loop->num_nodes)
1109     {
1110       edge e;
1111       edge_iterator ei;
1112       
1113       if (!bitmap_bit_p (visited, bb->index))
1114         { 
1115           /* This basic block is now visited */
1116           bitmap_set_bit (visited, bb->index);
1117           blocks[i++] = bb;
1118         }
1119       
1120       FOR_EACH_EDGE (e, ei, bb->succs)
1121         { 
1122           if (flow_bb_inside_loop_p (loop, e->dest))
1123             { 
1124               if (!bitmap_bit_p (visited, e->dest->index))
1125                 { 
1126                   bitmap_set_bit (visited, e->dest->index);
1127                   blocks[i++] = e->dest;
1128                 }
1129             }
1130         }
1131       
1132       gcc_assert (i >= vc);
1133       
1134       bb = blocks[vc++];
1135     }
1136   
1137   BITMAP_XFREE (visited);
1138   return blocks;
1139 }
1140
1141 /* Gets exit edges of a LOOP, returning their number in N_EDGES.  */
1142 edge *
1143 get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
1144 {
1145   edge *edges, e;
1146   unsigned i, n;
1147   basic_block * body;
1148   edge_iterator ei;
1149
1150   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1151
1152   body = get_loop_body (loop);
1153   n = 0;
1154   for (i = 0; i < loop->num_nodes; i++)
1155     FOR_EACH_EDGE (e, ei, body[i]->succs)
1156       if (!flow_bb_inside_loop_p (loop, e->dest))
1157         n++;
1158   edges = xmalloc (n * sizeof (edge));
1159   *n_edges = n;
1160   n = 0;
1161   for (i = 0; i < loop->num_nodes; i++)
1162     FOR_EACH_EDGE (e, ei, body[i]->succs)
1163       if (!flow_bb_inside_loop_p (loop, e->dest))
1164         edges[n++] = e;
1165   free (body);
1166
1167   return edges;
1168 }
1169
1170 /* Counts the number of conditional branches inside LOOP.  */
1171
1172 unsigned
1173 num_loop_branches (const struct loop *loop)
1174 {
1175   unsigned i, n;
1176   basic_block * body;
1177
1178   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1179
1180   body = get_loop_body (loop);
1181   n = 0;
1182   for (i = 0; i < loop->num_nodes; i++)
1183     if (EDGE_COUNT (body[i]->succs) >= 2)
1184       n++;
1185   free (body);
1186
1187   return n;
1188 }
1189
1190 /* Adds basic block BB to LOOP.  */
1191 void
1192 add_bb_to_loop (basic_block bb, struct loop *loop)
1193 {
1194    int i;
1195
1196    bb->loop_father = loop;
1197    bb->loop_depth = loop->depth;
1198    loop->num_nodes++;
1199    for (i = 0; i < loop->depth; i++)
1200      loop->pred[i]->num_nodes++;
1201  }
1202
1203 /* Remove basic block BB from loops.  */
1204 void
1205 remove_bb_from_loops (basic_block bb)
1206 {
1207    int i;
1208    struct loop *loop = bb->loop_father;
1209
1210    loop->num_nodes--;
1211    for (i = 0; i < loop->depth; i++)
1212      loop->pred[i]->num_nodes--;
1213    bb->loop_father = NULL;
1214    bb->loop_depth = 0;
1215  }
1216
1217 /* Finds nearest common ancestor in loop tree for given loops.  */
1218 struct loop *
1219 find_common_loop (struct loop *loop_s, struct loop *loop_d)
1220 {
1221   if (!loop_s) return loop_d;
1222   if (!loop_d) return loop_s;
1223
1224   if (loop_s->depth < loop_d->depth)
1225     loop_d = loop_d->pred[loop_s->depth];
1226   else if (loop_s->depth > loop_d->depth)
1227     loop_s = loop_s->pred[loop_d->depth];
1228
1229   while (loop_s != loop_d)
1230     {
1231       loop_s = loop_s->outer;
1232       loop_d = loop_d->outer;
1233     }
1234   return loop_s;
1235 }
1236
1237 /* Cancels the LOOP; it must be innermost one.  */
1238 void
1239 cancel_loop (struct loops *loops, struct loop *loop)
1240 {
1241   basic_block *bbs;
1242   unsigned i;
1243
1244   gcc_assert (!loop->inner);
1245
1246   /* Move blocks up one level (they should be removed as soon as possible).  */
1247   bbs = get_loop_body (loop);
1248   for (i = 0; i < loop->num_nodes; i++)
1249     bbs[i]->loop_father = loop->outer;
1250
1251   /* Remove the loop from structure.  */
1252   flow_loop_tree_node_remove (loop);
1253
1254   /* Remove loop from loops array.  */
1255   loops->parray[loop->num] = NULL;
1256
1257   /* Free loop data.  */
1258   flow_loop_free (loop);
1259 }
1260
1261 /* Cancels LOOP and all its subloops.  */
1262 void
1263 cancel_loop_tree (struct loops *loops, struct loop *loop)
1264 {
1265   while (loop->inner)
1266     cancel_loop_tree (loops, loop->inner);
1267   cancel_loop (loops, loop);
1268 }
1269
1270 /* Checks that LOOPS are all right:
1271      -- sizes of loops are all right
1272      -- results of get_loop_body really belong to the loop
1273      -- loop header have just single entry edge and single latch edge
1274      -- loop latches have only single successor that is header of their loop
1275      -- irreducible loops are correctly marked
1276   */
1277 void
1278 verify_loop_structure (struct loops *loops)
1279 {
1280   unsigned *sizes, i, j;
1281   sbitmap irreds;
1282   basic_block *bbs, bb;
1283   struct loop *loop;
1284   int err = 0;
1285   edge e;
1286
1287   /* Check sizes.  */
1288   sizes = xcalloc (loops->num, sizeof (int));
1289   sizes[0] = 2;
1290
1291   FOR_EACH_BB (bb)
1292     for (loop = bb->loop_father; loop; loop = loop->outer)
1293       sizes[loop->num]++;
1294
1295   for (i = 0; i < loops->num; i++)
1296     {
1297       if (!loops->parray[i])
1298         continue;
1299
1300       if (loops->parray[i]->num_nodes != sizes[i])
1301         {
1302           error ("Size of loop %d should be %d, not %d.",
1303                    i, sizes[i], loops->parray[i]->num_nodes);
1304           err = 1;
1305         }
1306     }
1307
1308   /* Check get_loop_body.  */
1309   for (i = 1; i < loops->num; i++)
1310     {
1311       loop = loops->parray[i];
1312       if (!loop)
1313         continue;
1314       bbs = get_loop_body (loop);
1315
1316       for (j = 0; j < loop->num_nodes; j++)
1317         if (!flow_bb_inside_loop_p (loop, bbs[j]))
1318           {
1319             error ("Bb %d do not belong to loop %d.",
1320                     bbs[j]->index, i);
1321             err = 1;
1322           }
1323       free (bbs);
1324     }
1325
1326   /* Check headers and latches.  */
1327   for (i = 1; i < loops->num; i++)
1328     {
1329       loop = loops->parray[i];
1330       if (!loop)
1331         continue;
1332
1333       if ((loops->state & LOOPS_HAVE_PREHEADERS)
1334           && EDGE_COUNT (loop->header->preds) != 2)
1335         {
1336           error ("Loop %d's header does not have exactly 2 entries.", i);
1337           err = 1;
1338         }
1339       if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
1340         {
1341           if (EDGE_COUNT (loop->latch->succs) != 1)
1342             {
1343               error ("Loop %d's latch does not have exactly 1 successor.", i);
1344               err = 1;
1345             }
1346           if (EDGE_SUCC (loop->latch, 0)->dest != loop->header)
1347             {
1348               error ("Loop %d's latch does not have header as successor.", i);
1349               err = 1;
1350             }
1351           if (loop->latch->loop_father != loop)
1352             {
1353               error ("Loop %d's latch does not belong directly to it.", i);
1354               err = 1;
1355             }
1356         }
1357       if (loop->header->loop_father != loop)
1358         {
1359           error ("Loop %d's header does not belong directly to it.", i);
1360           err = 1;
1361         }
1362       if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1363           && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1364         {
1365           error ("Loop %d's latch is marked as part of irreducible region.", i);
1366           err = 1;
1367         }
1368     }
1369
1370   /* Check irreducible loops.  */
1371   if (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1372     {
1373       /* Record old info.  */
1374       irreds = sbitmap_alloc (last_basic_block);
1375       FOR_EACH_BB (bb)
1376         {
1377           edge_iterator ei;
1378           if (bb->flags & BB_IRREDUCIBLE_LOOP)
1379             SET_BIT (irreds, bb->index);
1380           else
1381             RESET_BIT (irreds, bb->index);
1382           FOR_EACH_EDGE (e, ei, bb->succs)
1383             if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1384               e->flags |= EDGE_ALL_FLAGS + 1;
1385         }
1386
1387       /* Recount it.  */
1388       mark_irreducible_loops (loops);
1389
1390       /* Compare.  */
1391       FOR_EACH_BB (bb)
1392         {
1393           edge_iterator ei;
1394
1395           if ((bb->flags & BB_IRREDUCIBLE_LOOP)
1396               && !TEST_BIT (irreds, bb->index))
1397             {
1398               error ("Basic block %d should be marked irreducible.", bb->index);
1399               err = 1;
1400             }
1401           else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
1402               && TEST_BIT (irreds, bb->index))
1403             {
1404               error ("Basic block %d should not be marked irreducible.", bb->index);
1405               err = 1;
1406             }
1407           FOR_EACH_EDGE (e, ei, bb->succs)
1408             {
1409               if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1410                   && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1411                 {
1412                   error ("Edge from %d to %d should be marked irreducible.",
1413                          e->src->index, e->dest->index);
1414                   err = 1;
1415                 }
1416               else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1417                        && (e->flags & (EDGE_ALL_FLAGS + 1)))
1418                 {
1419                   error ("Edge from %d to %d should not be marked irreducible.",
1420                          e->src->index, e->dest->index);
1421                   err = 1;
1422                 }
1423               e->flags &= ~(EDGE_ALL_FLAGS + 1);
1424             }
1425         }
1426       free (irreds);
1427     }
1428
1429   /* Check the single_exit.  */
1430   if (loops->state & LOOPS_HAVE_MARKED_SINGLE_EXITS)
1431     {
1432       memset (sizes, 0, sizeof (unsigned) * loops->num);
1433       FOR_EACH_BB (bb)
1434         {
1435           edge_iterator ei;
1436           if (bb->loop_father == loops->tree_root)
1437             continue;
1438           FOR_EACH_EDGE (e, ei, bb->succs)
1439             {
1440               if (e->dest == EXIT_BLOCK_PTR)
1441                 continue;
1442
1443               if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
1444                 continue;
1445
1446               for (loop = bb->loop_father;
1447                    loop != e->dest->loop_father;
1448                    loop = loop->outer)
1449                 {
1450                   sizes[loop->num]++;
1451                   if (loop->single_exit
1452                       && loop->single_exit != e)
1453                     {
1454                       error ("Wrong single exit %d->%d recorded for loop %d.",
1455                              loop->single_exit->src->index,
1456                              loop->single_exit->dest->index,
1457                              loop->num);
1458                       error ("Right exit is %d->%d.",
1459                              e->src->index, e->dest->index);
1460                       err = 1;
1461                     }
1462                 }
1463             }
1464         }
1465
1466       for (i = 1; i < loops->num; i++)
1467         {
1468           loop = loops->parray[i];
1469           if (!loop)
1470             continue;
1471
1472           if (sizes[i] == 1
1473               && !loop->single_exit)
1474             {
1475               error ("Single exit not recorded for loop %d.", loop->num);
1476               err = 1;
1477             }
1478
1479           if (sizes[i] != 1
1480               && loop->single_exit)
1481             {
1482               error ("Loop %d should not have single exit (%d -> %d).",
1483                      loop->num,
1484                      loop->single_exit->src->index,
1485                      loop->single_exit->dest->index);
1486               err = 1;
1487             }
1488         }
1489     }
1490
1491   gcc_assert (!err);
1492
1493   free (sizes);
1494 }
1495
1496 /* Returns latch edge of LOOP.  */
1497 edge
1498 loop_latch_edge (const struct loop *loop)
1499 {
1500   edge e;
1501   edge_iterator ei;
1502
1503   FOR_EACH_EDGE (e, ei, loop->header->preds)
1504     if (e->src == loop->latch)
1505       break;
1506
1507   return e;
1508 }
1509
1510 /* Returns preheader edge of LOOP.  */
1511 edge
1512 loop_preheader_edge (const struct loop *loop)
1513 {
1514   edge e;
1515   edge_iterator ei;
1516
1517   FOR_EACH_EDGE (e, ei, loop->header->preds)
1518     if (e->src != loop->latch)
1519       break;
1520
1521   return e;
1522 }