83ac28d5713c6cfd1dbda9d155ddbb0cb6c2daaf
[platform/upstream/gcc.git] / gcc / cfgloop.c
1 /* Natural loop discovery code for GNU compiler.
2    Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2010
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "rtl.h"
26 #include "function.h"
27 #include "basic-block.h"
28 #include "cfgloop.h"
29 #include "diagnostic-core.h"
30 #include "flags.h"
31 #include "tree.h"
32 #include "tree-flow.h"
33 #include "pointer-set.h"
34 #include "ggc.h"
35 #include "dumpfile.h"
36
37 static void flow_loops_cfg_dump (FILE *);
38 \f
39 /* Dump loop related CFG information.  */
40
41 static void
42 flow_loops_cfg_dump (FILE *file)
43 {
44   basic_block bb;
45
46   if (!file)
47     return;
48
49   FOR_EACH_BB (bb)
50     {
51       edge succ;
52       edge_iterator ei;
53
54       fprintf (file, ";; %d succs { ", bb->index);
55       FOR_EACH_EDGE (succ, ei, bb->succs)
56         fprintf (file, "%d ", succ->dest->index);
57       fprintf (file, "}\n");
58     }
59 }
60
61 /* Return nonzero if the nodes of LOOP are a subset of OUTER.  */
62
63 bool
64 flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
65 {
66   unsigned odepth = loop_depth (outer);
67
68   return (loop_depth (loop) > odepth
69           && VEC_index (loop_p, loop->superloops, odepth) == outer);
70 }
71
72 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
73    loops within LOOP.  */
74
75 struct loop *
76 superloop_at_depth (struct loop *loop, unsigned depth)
77 {
78   unsigned ldepth = loop_depth (loop);
79
80   gcc_assert (depth <= ldepth);
81
82   if (depth == ldepth)
83     return loop;
84
85   return VEC_index (loop_p, loop->superloops, depth);
86 }
87
88 /* Returns the list of the latch edges of LOOP.  */
89
90 static VEC (edge, heap) *
91 get_loop_latch_edges (const struct loop *loop)
92 {
93   edge_iterator ei;
94   edge e;
95   VEC (edge, heap) *ret = NULL;
96
97   FOR_EACH_EDGE (e, ei, loop->header->preds)
98     {
99       if (dominated_by_p (CDI_DOMINATORS, e->src, loop->header))
100         VEC_safe_push (edge, heap, ret, e);
101     }
102
103   return ret;
104 }
105
106 /* Dump the loop information specified by LOOP to the stream FILE
107    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
108
109 void
110 flow_loop_dump (const struct loop *loop, FILE *file,
111                 void (*loop_dump_aux) (const struct loop *, FILE *, int),
112                 int verbose)
113 {
114   basic_block *bbs;
115   unsigned i;
116   VEC (edge, heap) *latches;
117   edge e;
118
119   if (! loop || ! loop->header)
120     return;
121
122   fprintf (file, ";;\n;; Loop %d\n", loop->num);
123
124   fprintf (file, ";;  header %d, ", loop->header->index);
125   if (loop->latch)
126     fprintf (file, "latch %d\n", loop->latch->index);
127   else
128     {
129       fprintf (file, "multiple latches:");
130       latches = get_loop_latch_edges (loop);
131       FOR_EACH_VEC_ELT (edge, latches, i, e)
132         fprintf (file, " %d", e->src->index);
133       VEC_free (edge, heap, latches);
134       fprintf (file, "\n");
135     }
136
137   fprintf (file, ";;  depth %d, outer %ld\n",
138            loop_depth (loop), (long) (loop_outer (loop)
139                                       ? loop_outer (loop)->num : -1));
140
141   fprintf (file, ";;  nodes:");
142   bbs = get_loop_body (loop);
143   for (i = 0; i < loop->num_nodes; i++)
144     fprintf (file, " %d", bbs[i]->index);
145   free (bbs);
146   fprintf (file, "\n");
147
148   if (loop_dump_aux)
149     loop_dump_aux (loop, file, verbose);
150 }
151
152 /* Dump the loop information about loops to the stream FILE,
153    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
154
155 void
156 flow_loops_dump (FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
157 {
158   loop_iterator li;
159   struct loop *loop;
160
161   if (!current_loops || ! file)
162     return;
163
164   fprintf (file, ";; %d loops found\n", number_of_loops ());
165
166   FOR_EACH_LOOP (li, loop, LI_INCLUDE_ROOT)
167     {
168       flow_loop_dump (loop, file, loop_dump_aux, verbose);
169     }
170
171   if (verbose)
172     flow_loops_cfg_dump (file);
173 }
174
175 /* Free data allocated for LOOP.  */
176
177 void
178 flow_loop_free (struct loop *loop)
179 {
180   struct loop_exit *exit, *next;
181
182   VEC_free (loop_p, gc, loop->superloops);
183
184   /* Break the list of the loop exit records.  They will be freed when the
185      corresponding edge is rescanned or removed, and this avoids
186      accessing the (already released) head of the list stored in the
187      loop structure.  */
188   for (exit = loop->exits->next; exit != loop->exits; exit = next)
189     {
190       next = exit->next;
191       exit->next = exit;
192       exit->prev = exit;
193     }
194
195   ggc_free (loop->exits);
196   ggc_free (loop);
197 }
198
199 /* Free all the memory allocated for LOOPS.  */
200
201 void
202 flow_loops_free (struct loops *loops)
203 {
204   if (loops->larray)
205     {
206       unsigned i;
207       loop_p loop;
208
209       /* Free the loop descriptors.  */
210       FOR_EACH_VEC_ELT (loop_p, loops->larray, i, loop)
211         {
212           if (!loop)
213             continue;
214
215           flow_loop_free (loop);
216         }
217
218       VEC_free (loop_p, gc, loops->larray);
219     }
220 }
221
222 /* Find the nodes contained within the LOOP with header HEADER.
223    Return the number of nodes within the loop.  */
224
225 int
226 flow_loop_nodes_find (basic_block header, struct loop *loop)
227 {
228   VEC (basic_block, heap) *stack = NULL;
229   int num_nodes = 1;
230   edge latch;
231   edge_iterator latch_ei;
232
233   header->loop_father = loop;
234
235   FOR_EACH_EDGE (latch, latch_ei, loop->header->preds)
236     {
237       if (latch->src->loop_father == loop
238           || !dominated_by_p (CDI_DOMINATORS, latch->src, loop->header))
239         continue;
240
241       num_nodes++;
242       VEC_safe_push (basic_block, heap, stack, latch->src);
243       latch->src->loop_father = loop;
244
245       while (!VEC_empty (basic_block, stack))
246         {
247           basic_block node;
248           edge e;
249           edge_iterator ei;
250
251           node = VEC_pop (basic_block, stack);
252
253           FOR_EACH_EDGE (e, ei, node->preds)
254             {
255               basic_block ancestor = e->src;
256
257               if (ancestor->loop_father != loop)
258                 {
259                   ancestor->loop_father = loop;
260                   num_nodes++;
261                   VEC_safe_push (basic_block, heap, stack, ancestor);
262                 }
263             }
264         }
265     }
266   VEC_free (basic_block, heap, stack);
267
268   return num_nodes;
269 }
270
271 /* Records the vector of superloops of the loop LOOP, whose immediate
272    superloop is FATHER.  */
273
274 static void
275 establish_preds (struct loop *loop, struct loop *father)
276 {
277   loop_p ploop;
278   unsigned depth = loop_depth (father) + 1;
279   unsigned i;
280
281   VEC_truncate (loop_p, loop->superloops, 0);
282   VEC_reserve (loop_p, gc, loop->superloops, depth);
283   FOR_EACH_VEC_ELT (loop_p, father->superloops, i, ploop)
284     VEC_quick_push (loop_p, loop->superloops, ploop);
285   VEC_quick_push (loop_p, loop->superloops, father);
286
287   for (ploop = loop->inner; ploop; ploop = ploop->next)
288     establish_preds (ploop, loop);
289 }
290
291 /* Add LOOP to the loop hierarchy tree where FATHER is father of the
292    added loop.  If LOOP has some children, take care of that their
293    pred field will be initialized correctly.  */
294
295 void
296 flow_loop_tree_node_add (struct loop *father, struct loop *loop)
297 {
298   loop->next = father->inner;
299   father->inner = loop;
300
301   establish_preds (loop, father);
302 }
303
304 /* Remove LOOP from the loop hierarchy tree.  */
305
306 void
307 flow_loop_tree_node_remove (struct loop *loop)
308 {
309   struct loop *prev, *father;
310
311   father = loop_outer (loop);
312
313   /* Remove loop from the list of sons.  */
314   if (father->inner == loop)
315     father->inner = loop->next;
316   else
317     {
318       for (prev = father->inner; prev->next != loop; prev = prev->next)
319         continue;
320       prev->next = loop->next;
321     }
322
323   VEC_truncate (loop_p, loop->superloops, 0);
324 }
325
326 /* Allocates and returns new loop structure.  */
327
328 struct loop *
329 alloc_loop (void)
330 {
331   struct loop *loop = ggc_alloc_cleared_loop ();
332
333   loop->exits = ggc_alloc_cleared_loop_exit ();
334   loop->exits->next = loop->exits->prev = loop->exits;
335   loop->can_be_parallel = false;
336
337   return loop;
338 }
339
340 /* Initializes loops structure LOOPS, reserving place for NUM_LOOPS loops
341    (including the root of the loop tree).  */
342
343 static void
344 init_loops_structure (struct loops *loops, unsigned num_loops)
345 {
346   struct loop *root;
347
348   memset (loops, 0, sizeof *loops);
349   loops->larray = VEC_alloc (loop_p, gc, num_loops);
350
351   /* Dummy loop containing whole function.  */
352   root = alloc_loop ();
353   root->num_nodes = n_basic_blocks;
354   root->latch = EXIT_BLOCK_PTR;
355   root->header = ENTRY_BLOCK_PTR;
356   ENTRY_BLOCK_PTR->loop_father = root;
357   EXIT_BLOCK_PTR->loop_father = root;
358
359   VEC_quick_push (loop_p, loops->larray, root);
360   loops->tree_root = root;
361 }
362
363 /* Find all the natural loops in the function and save in LOOPS structure and
364    recalculate loop_father information in basic block structures.
365    Return the number of natural loops found.  */
366
367 int
368 flow_loops_find (struct loops *loops)
369 {
370   int b;
371   int num_loops;
372   edge e;
373   sbitmap headers;
374   int *dfs_order;
375   int *rc_order;
376   basic_block header;
377   basic_block bb;
378
379   /* Ensure that the dominators are computed.  */
380   calculate_dominance_info (CDI_DOMINATORS);
381
382   /* Taking care of this degenerate case makes the rest of
383      this code simpler.  */
384   if (n_basic_blocks == NUM_FIXED_BLOCKS)
385     {
386       init_loops_structure (loops, 1);
387       return 1;
388     }
389
390   dfs_order = NULL;
391   rc_order = NULL;
392
393   /* Count the number of loop headers.  This should be the
394      same as the number of natural loops.  */
395   headers = sbitmap_alloc (last_basic_block);
396   bitmap_clear (headers);
397
398   num_loops = 0;
399   FOR_EACH_BB (header)
400     {
401       edge_iterator ei;
402
403       /* If we have an abnormal predecessor, do not consider the
404          loop (not worth the problems).  */
405       if (bb_has_abnormal_pred (header))
406         continue;
407
408       FOR_EACH_EDGE (e, ei, header->preds)
409         {
410           basic_block latch = e->src;
411
412           gcc_assert (!(e->flags & EDGE_ABNORMAL));
413
414           /* Look for back edges where a predecessor is dominated
415              by this block.  A natural loop has a single entry
416              node (header) that dominates all the nodes in the
417              loop.  It also has single back edge to the header
418              from a latch node.  */
419           if (latch != ENTRY_BLOCK_PTR
420               && dominated_by_p (CDI_DOMINATORS, latch, header))
421             {
422               /* Shared headers should be eliminated by now.  */
423               SET_BIT (headers, header->index);
424               num_loops++;
425             }
426         }
427     }
428
429   /* Allocate loop structures.  */
430   init_loops_structure (loops, num_loops + 1);
431
432   /* Find and record information about all the natural loops
433      in the CFG.  */
434   FOR_EACH_BB (bb)
435     bb->loop_father = loops->tree_root;
436
437   if (num_loops)
438     {
439       /* Compute depth first search order of the CFG so that outer
440          natural loops will be found before inner natural loops.  */
441       dfs_order = XNEWVEC (int, n_basic_blocks);
442       rc_order = XNEWVEC (int, n_basic_blocks);
443       pre_and_rev_post_order_compute (dfs_order, rc_order, false);
444
445       num_loops = 1;
446
447       for (b = 0; b < n_basic_blocks - NUM_FIXED_BLOCKS; b++)
448         {
449           struct loop *loop;
450           edge_iterator ei;
451
452           /* Search the nodes of the CFG in reverse completion order
453              so that we can find outer loops first.  */
454           if (!TEST_BIT (headers, rc_order[b]))
455             continue;
456
457           header = BASIC_BLOCK (rc_order[b]);
458
459           loop = alloc_loop ();
460           VEC_quick_push (loop_p, loops->larray, loop);
461
462           loop->header = header;
463           loop->num = num_loops;
464           num_loops++;
465
466           flow_loop_tree_node_add (header->loop_father, loop);
467           loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
468
469           /* Look for the latch for this header block, if it has just a
470              single one.  */
471           FOR_EACH_EDGE (e, ei, header->preds)
472             {
473               basic_block latch = e->src;
474
475               if (flow_bb_inside_loop_p (loop, latch))
476                 {
477                   if (loop->latch != NULL)
478                     {
479                       /* More than one latch edge.  */
480                       loop->latch = NULL;
481                       break;
482                     }
483                   loop->latch = latch;
484                 }
485             }
486         }
487
488       free (dfs_order);
489       free (rc_order);
490     }
491
492   sbitmap_free (headers);
493
494   loops->exits = NULL;
495   return VEC_length (loop_p, loops->larray);
496 }
497
498 /* Ratio of frequencies of edges so that one of more latch edges is
499    considered to belong to inner loop with same header.  */
500 #define HEAVY_EDGE_RATIO 8
501
502 /* Minimum number of samples for that we apply
503    find_subloop_latch_edge_by_profile heuristics.  */
504 #define HEAVY_EDGE_MIN_SAMPLES 10
505
506 /* If the profile info is available, finds an edge in LATCHES that much more
507    frequent than the remaining edges.  Returns such an edge, or NULL if we do
508    not find one.
509
510    We do not use guessed profile here, only the measured one.  The guessed
511    profile is usually too flat and unreliable for this (and it is mostly based
512    on the loop structure of the program, so it does not make much sense to
513    derive the loop structure from it).  */
514
515 static edge
516 find_subloop_latch_edge_by_profile (VEC (edge, heap) *latches)
517 {
518   unsigned i;
519   edge e, me = NULL;
520   gcov_type mcount = 0, tcount = 0;
521
522   FOR_EACH_VEC_ELT (edge, latches, i, e)
523     {
524       if (e->count > mcount)
525         {
526           me = e;
527           mcount = e->count;
528         }
529       tcount += e->count;
530     }
531
532   if (tcount < HEAVY_EDGE_MIN_SAMPLES
533       || (tcount - mcount) * HEAVY_EDGE_RATIO > tcount)
534     return NULL;
535
536   if (dump_file)
537     fprintf (dump_file,
538              "Found latch edge %d -> %d using profile information.\n",
539              me->src->index, me->dest->index);
540   return me;
541 }
542
543 /* Among LATCHES, guesses a latch edge of LOOP corresponding to subloop, based
544    on the structure of induction variables.  Returns this edge, or NULL if we
545    do not find any.
546
547    We are quite conservative, and look just for an obvious simple innermost
548    loop (which is the case where we would lose the most performance by not
549    disambiguating the loop).  More precisely, we look for the following
550    situation: The source of the chosen latch edge dominates sources of all
551    the other latch edges.  Additionally, the header does not contain a phi node
552    such that the argument from the chosen edge is equal to the argument from
553    another edge.  */
554
555 static edge
556 find_subloop_latch_edge_by_ivs (struct loop *loop ATTRIBUTE_UNUSED, VEC (edge, heap) *latches)
557 {
558   edge e, latch = VEC_index (edge, latches, 0);
559   unsigned i;
560   gimple phi;
561   gimple_stmt_iterator psi;
562   tree lop;
563   basic_block bb;
564
565   /* Find the candidate for the latch edge.  */
566   for (i = 1; VEC_iterate (edge, latches, i, e); i++)
567     if (dominated_by_p (CDI_DOMINATORS, latch->src, e->src))
568       latch = e;
569
570   /* Verify that it dominates all the latch edges.  */
571   FOR_EACH_VEC_ELT (edge, latches, i, e)
572     if (!dominated_by_p (CDI_DOMINATORS, e->src, latch->src))
573       return NULL;
574
575   /* Check for a phi node that would deny that this is a latch edge of
576      a subloop.  */
577   for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi))
578     {
579       phi = gsi_stmt (psi);
580       lop = PHI_ARG_DEF_FROM_EDGE (phi, latch);
581
582       /* Ignore the values that are not changed inside the subloop.  */
583       if (TREE_CODE (lop) != SSA_NAME
584           || SSA_NAME_DEF_STMT (lop) == phi)
585         continue;
586       bb = gimple_bb (SSA_NAME_DEF_STMT (lop));
587       if (!bb || !flow_bb_inside_loop_p (loop, bb))
588         continue;
589
590       FOR_EACH_VEC_ELT (edge, latches, i, e)
591         if (e != latch
592             && PHI_ARG_DEF_FROM_EDGE (phi, e) == lop)
593           return NULL;
594     }
595
596   if (dump_file)
597     fprintf (dump_file,
598              "Found latch edge %d -> %d using iv structure.\n",
599              latch->src->index, latch->dest->index);
600   return latch;
601 }
602
603 /* If we can determine that one of the several latch edges of LOOP behaves
604    as a latch edge of a separate subloop, returns this edge.  Otherwise
605    returns NULL.  */
606
607 static edge
608 find_subloop_latch_edge (struct loop *loop)
609 {
610   VEC (edge, heap) *latches = get_loop_latch_edges (loop);
611   edge latch = NULL;
612
613   if (VEC_length (edge, latches) > 1)
614     {
615       latch = find_subloop_latch_edge_by_profile (latches);
616
617       if (!latch
618           /* We consider ivs to guess the latch edge only in SSA.  Perhaps we
619              should use cfghook for this, but it is hard to imagine it would
620              be useful elsewhere.  */
621           && current_ir_type () == IR_GIMPLE)
622         latch = find_subloop_latch_edge_by_ivs (loop, latches);
623     }
624
625   VEC_free (edge, heap, latches);
626   return latch;
627 }
628
629 /* Callback for make_forwarder_block.  Returns true if the edge E is marked
630    in the set MFB_REIS_SET.  */
631
632 static struct pointer_set_t *mfb_reis_set;
633 static bool
634 mfb_redirect_edges_in_set (edge e)
635 {
636   return pointer_set_contains (mfb_reis_set, e);
637 }
638
639 /* Creates a subloop of LOOP with latch edge LATCH.  */
640
641 static void
642 form_subloop (struct loop *loop, edge latch)
643 {
644   edge_iterator ei;
645   edge e, new_entry;
646   struct loop *new_loop;
647
648   mfb_reis_set = pointer_set_create ();
649   FOR_EACH_EDGE (e, ei, loop->header->preds)
650     {
651       if (e != latch)
652         pointer_set_insert (mfb_reis_set, e);
653     }
654   new_entry = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
655                                     NULL);
656   pointer_set_destroy (mfb_reis_set);
657
658   loop->header = new_entry->src;
659
660   /* Find the blocks and subloops that belong to the new loop, and add it to
661      the appropriate place in the loop tree.  */
662   new_loop = alloc_loop ();
663   new_loop->header = new_entry->dest;
664   new_loop->latch = latch->src;
665   add_loop (new_loop, loop);
666 }
667
668 /* Make all the latch edges of LOOP to go to a single forwarder block --
669    a new latch of LOOP.  */
670
671 static void
672 merge_latch_edges (struct loop *loop)
673 {
674   VEC (edge, heap) *latches = get_loop_latch_edges (loop);
675   edge latch, e;
676   unsigned i;
677
678   gcc_assert (VEC_length (edge, latches) > 0);
679
680   if (VEC_length (edge, latches) == 1)
681     loop->latch = VEC_index (edge, latches, 0)->src;
682   else
683     {
684       if (dump_file)
685         fprintf (dump_file, "Merged latch edges of loop %d\n", loop->num);
686
687       mfb_reis_set = pointer_set_create ();
688       FOR_EACH_VEC_ELT (edge, latches, i, e)
689         pointer_set_insert (mfb_reis_set, e);
690       latch = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
691                                     NULL);
692       pointer_set_destroy (mfb_reis_set);
693
694       loop->header = latch->dest;
695       loop->latch = latch->src;
696     }
697
698   VEC_free (edge, heap, latches);
699 }
700
701 /* LOOP may have several latch edges.  Transform it into (possibly several)
702    loops with single latch edge.  */
703
704 static void
705 disambiguate_multiple_latches (struct loop *loop)
706 {
707   edge e;
708
709   /* We eliminate the multiple latches by splitting the header to the forwarder
710      block F and the rest R, and redirecting the edges.  There are two cases:
711
712      1) If there is a latch edge E that corresponds to a subloop (we guess
713         that based on profile -- if it is taken much more often than the
714         remaining edges; and on trees, using the information about induction
715         variables of the loops), we redirect E to R, all the remaining edges to
716         F, then rescan the loops and try again for the outer loop.
717      2) If there is no such edge, we redirect all latch edges to F, and the
718         entry edges to R, thus making F the single latch of the loop.  */
719
720   if (dump_file)
721     fprintf (dump_file, "Disambiguating loop %d with multiple latches\n",
722              loop->num);
723
724   /* During latch merging, we may need to redirect the entry edges to a new
725      block.  This would cause problems if the entry edge was the one from the
726      entry block.  To avoid having to handle this case specially, split
727      such entry edge.  */
728   e = find_edge (ENTRY_BLOCK_PTR, loop->header);
729   if (e)
730     split_edge (e);
731
732   while (1)
733     {
734       e = find_subloop_latch_edge (loop);
735       if (!e)
736         break;
737
738       form_subloop (loop, e);
739     }
740
741   merge_latch_edges (loop);
742 }
743
744 /* Split loops with multiple latch edges.  */
745
746 void
747 disambiguate_loops_with_multiple_latches (void)
748 {
749   loop_iterator li;
750   struct loop *loop;
751
752   FOR_EACH_LOOP (li, loop, 0)
753     {
754       if (!loop->latch)
755         disambiguate_multiple_latches (loop);
756     }
757 }
758
759 /* Return nonzero if basic block BB belongs to LOOP.  */
760 bool
761 flow_bb_inside_loop_p (const struct loop *loop, const_basic_block bb)
762 {
763   struct loop *source_loop;
764
765   if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
766     return 0;
767
768   source_loop = bb->loop_father;
769   return loop == source_loop || flow_loop_nested_p (loop, source_loop);
770 }
771
772 /* Enumeration predicate for get_loop_body_with_size.  */
773 static bool
774 glb_enum_p (const_basic_block bb, const void *glb_loop)
775 {
776   const struct loop *const loop = (const struct loop *) glb_loop;
777   return (bb != loop->header
778           && dominated_by_p (CDI_DOMINATORS, bb, loop->header));
779 }
780
781 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
782    order against direction of edges from latch.  Specially, if
783    header != latch, latch is the 1-st block.  LOOP cannot be the fake
784    loop tree root, and its size must be at most MAX_SIZE.  The blocks
785    in the LOOP body are stored to BODY, and the size of the LOOP is
786    returned.  */
787
788 unsigned
789 get_loop_body_with_size (const struct loop *loop, basic_block *body,
790                          unsigned max_size)
791 {
792   return dfs_enumerate_from (loop->header, 1, glb_enum_p,
793                              body, max_size, loop);
794 }
795
796 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
797    order against direction of edges from latch.  Specially, if
798    header != latch, latch is the 1-st block.  */
799
800 basic_block *
801 get_loop_body (const struct loop *loop)
802 {
803   basic_block *body, bb;
804   unsigned tv = 0;
805
806   gcc_assert (loop->num_nodes);
807
808   body = XNEWVEC (basic_block, loop->num_nodes);
809
810   if (loop->latch == EXIT_BLOCK_PTR)
811     {
812       /* There may be blocks unreachable from EXIT_BLOCK, hence we need to
813          special-case the fake loop that contains the whole function.  */
814       gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks);
815       body[tv++] = loop->header;
816       body[tv++] = EXIT_BLOCK_PTR;
817       FOR_EACH_BB (bb)
818         body[tv++] = bb;
819     }
820   else
821     tv = get_loop_body_with_size (loop, body, loop->num_nodes);
822
823   gcc_assert (tv == loop->num_nodes);
824   return body;
825 }
826
827 /* Fills dominance descendants inside LOOP of the basic block BB into
828    array TOVISIT from index *TV.  */
829
830 static void
831 fill_sons_in_loop (const struct loop *loop, basic_block bb,
832                    basic_block *tovisit, int *tv)
833 {
834   basic_block son, postpone = NULL;
835
836   tovisit[(*tv)++] = bb;
837   for (son = first_dom_son (CDI_DOMINATORS, bb);
838        son;
839        son = next_dom_son (CDI_DOMINATORS, son))
840     {
841       if (!flow_bb_inside_loop_p (loop, son))
842         continue;
843
844       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
845         {
846           postpone = son;
847           continue;
848         }
849       fill_sons_in_loop (loop, son, tovisit, tv);
850     }
851
852   if (postpone)
853     fill_sons_in_loop (loop, postpone, tovisit, tv);
854 }
855
856 /* Gets body of a LOOP (that must be different from the outermost loop)
857    sorted by dominance relation.  Additionally, if a basic block s dominates
858    the latch, then only blocks dominated by s are be after it.  */
859
860 basic_block *
861 get_loop_body_in_dom_order (const struct loop *loop)
862 {
863   basic_block *tovisit;
864   int tv;
865
866   gcc_assert (loop->num_nodes);
867
868   tovisit = XNEWVEC (basic_block, loop->num_nodes);
869
870   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
871
872   tv = 0;
873   fill_sons_in_loop (loop, loop->header, tovisit, &tv);
874
875   gcc_assert (tv == (int) loop->num_nodes);
876
877   return tovisit;
878 }
879
880 /* Gets body of a LOOP sorted via provided BB_COMPARATOR.  */
881
882 basic_block *
883 get_loop_body_in_custom_order (const struct loop *loop,
884                                int (*bb_comparator) (const void *, const void *))
885 {
886   basic_block *bbs = get_loop_body (loop);
887
888   qsort (bbs, loop->num_nodes, sizeof (basic_block), bb_comparator);
889
890   return bbs;
891 }
892
893 /* Get body of a LOOP in breadth first sort order.  */
894
895 basic_block *
896 get_loop_body_in_bfs_order (const struct loop *loop)
897 {
898   basic_block *blocks;
899   basic_block bb;
900   bitmap visited;
901   unsigned int i = 0;
902   unsigned int vc = 1;
903
904   gcc_assert (loop->num_nodes);
905   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
906
907   blocks = XNEWVEC (basic_block, loop->num_nodes);
908   visited = BITMAP_ALLOC (NULL);
909
910   bb = loop->header;
911   while (i < loop->num_nodes)
912     {
913       edge e;
914       edge_iterator ei;
915
916       if (bitmap_set_bit (visited, bb->index))
917         /* This basic block is now visited */
918         blocks[i++] = bb;
919
920       FOR_EACH_EDGE (e, ei, bb->succs)
921         {
922           if (flow_bb_inside_loop_p (loop, e->dest))
923             {
924               if (bitmap_set_bit (visited, e->dest->index))
925                 blocks[i++] = e->dest;
926             }
927         }
928
929       gcc_assert (i >= vc);
930
931       bb = blocks[vc++];
932     }
933
934   BITMAP_FREE (visited);
935   return blocks;
936 }
937
938 /* Hash function for struct loop_exit.  */
939
940 static hashval_t
941 loop_exit_hash (const void *ex)
942 {
943   const struct loop_exit *const exit = (const struct loop_exit *) ex;
944
945   return htab_hash_pointer (exit->e);
946 }
947
948 /* Equality function for struct loop_exit.  Compares with edge.  */
949
950 static int
951 loop_exit_eq (const void *ex, const void *e)
952 {
953   const struct loop_exit *const exit = (const struct loop_exit *) ex;
954
955   return exit->e == e;
956 }
957
958 /* Frees the list of loop exit descriptions EX.  */
959
960 static void
961 loop_exit_free (void *ex)
962 {
963   struct loop_exit *exit = (struct loop_exit *) ex, *next;
964
965   for (; exit; exit = next)
966     {
967       next = exit->next_e;
968
969       exit->next->prev = exit->prev;
970       exit->prev->next = exit->next;
971
972       ggc_free (exit);
973     }
974 }
975
976 /* Returns the list of records for E as an exit of a loop.  */
977
978 static struct loop_exit *
979 get_exit_descriptions (edge e)
980 {
981   return (struct loop_exit *) htab_find_with_hash (current_loops->exits, e,
982                                                    htab_hash_pointer (e));
983 }
984
985 /* Updates the lists of loop exits in that E appears.
986    If REMOVED is true, E is being removed, and we
987    just remove it from the lists of exits.
988    If NEW_EDGE is true and E is not a loop exit, we
989    do not try to remove it from loop exit lists.  */
990
991 void
992 rescan_loop_exit (edge e, bool new_edge, bool removed)
993 {
994   void **slot;
995   struct loop_exit *exits = NULL, *exit;
996   struct loop *aloop, *cloop;
997
998   if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
999     return;
1000
1001   if (!removed
1002       && e->src->loop_father != NULL
1003       && e->dest->loop_father != NULL
1004       && !flow_bb_inside_loop_p (e->src->loop_father, e->dest))
1005     {
1006       cloop = find_common_loop (e->src->loop_father, e->dest->loop_father);
1007       for (aloop = e->src->loop_father;
1008            aloop != cloop;
1009            aloop = loop_outer (aloop))
1010         {
1011           exit = ggc_alloc_loop_exit ();
1012           exit->e = e;
1013
1014           exit->next = aloop->exits->next;
1015           exit->prev = aloop->exits;
1016           exit->next->prev = exit;
1017           exit->prev->next = exit;
1018
1019           exit->next_e = exits;
1020           exits = exit;
1021         }
1022     }
1023
1024   if (!exits && new_edge)
1025     return;
1026
1027   slot = htab_find_slot_with_hash (current_loops->exits, e,
1028                                    htab_hash_pointer (e),
1029                                    exits ? INSERT : NO_INSERT);
1030   if (!slot)
1031     return;
1032
1033   if (exits)
1034     {
1035       if (*slot)
1036         loop_exit_free (*slot);
1037       *slot = exits;
1038     }
1039   else
1040     htab_clear_slot (current_loops->exits, slot);
1041 }
1042
1043 /* For each loop, record list of exit edges, and start maintaining these
1044    lists.  */
1045
1046 void
1047 record_loop_exits (void)
1048 {
1049   basic_block bb;
1050   edge_iterator ei;
1051   edge e;
1052
1053   if (!current_loops)
1054     return;
1055
1056   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1057     return;
1058   loops_state_set (LOOPS_HAVE_RECORDED_EXITS);
1059
1060   gcc_assert (current_loops->exits == NULL);
1061   current_loops->exits = htab_create_ggc (2 * number_of_loops (),
1062                                           loop_exit_hash, loop_exit_eq,
1063                                           loop_exit_free);
1064
1065   FOR_EACH_BB (bb)
1066     {
1067       FOR_EACH_EDGE (e, ei, bb->succs)
1068         {
1069           rescan_loop_exit (e, true, false);
1070         }
1071     }
1072 }
1073
1074 /* Dumps information about the exit in *SLOT to FILE.
1075    Callback for htab_traverse.  */
1076
1077 static int
1078 dump_recorded_exit (void **slot, void *file)
1079 {
1080   struct loop_exit *exit = (struct loop_exit *) *slot;
1081   unsigned n = 0;
1082   edge e = exit->e;
1083
1084   for (; exit != NULL; exit = exit->next_e)
1085     n++;
1086
1087   fprintf ((FILE*) file, "Edge %d->%d exits %u loops\n",
1088            e->src->index, e->dest->index, n);
1089
1090   return 1;
1091 }
1092
1093 /* Dumps the recorded exits of loops to FILE.  */
1094
1095 extern void dump_recorded_exits (FILE *);
1096 void
1097 dump_recorded_exits (FILE *file)
1098 {
1099   if (!current_loops->exits)
1100     return;
1101   htab_traverse (current_loops->exits, dump_recorded_exit, file);
1102 }
1103
1104 /* Releases lists of loop exits.  */
1105
1106 void
1107 release_recorded_exits (void)
1108 {
1109   gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS));
1110   htab_delete (current_loops->exits);
1111   current_loops->exits = NULL;
1112   loops_state_clear (LOOPS_HAVE_RECORDED_EXITS);
1113 }
1114
1115 /* Returns the list of the exit edges of a LOOP.  */
1116
1117 VEC (edge, heap) *
1118 get_loop_exit_edges (const struct loop *loop)
1119 {
1120   VEC (edge, heap) *edges = NULL;
1121   edge e;
1122   unsigned i;
1123   basic_block *body;
1124   edge_iterator ei;
1125   struct loop_exit *exit;
1126
1127   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1128
1129   /* If we maintain the lists of exits, use them.  Otherwise we must
1130      scan the body of the loop.  */
1131   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1132     {
1133       for (exit = loop->exits->next; exit->e; exit = exit->next)
1134         VEC_safe_push (edge, heap, edges, exit->e);
1135     }
1136   else
1137     {
1138       body = get_loop_body (loop);
1139       for (i = 0; i < loop->num_nodes; i++)
1140         FOR_EACH_EDGE (e, ei, body[i]->succs)
1141           {
1142             if (!flow_bb_inside_loop_p (loop, e->dest))
1143               VEC_safe_push (edge, heap, edges, e);
1144           }
1145       free (body);
1146     }
1147
1148   return edges;
1149 }
1150
1151 /* Counts the number of conditional branches inside LOOP.  */
1152
1153 unsigned
1154 num_loop_branches (const struct loop *loop)
1155 {
1156   unsigned i, n;
1157   basic_block * body;
1158
1159   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
1160
1161   body = get_loop_body (loop);
1162   n = 0;
1163   for (i = 0; i < loop->num_nodes; i++)
1164     if (EDGE_COUNT (body[i]->succs) >= 2)
1165       n++;
1166   free (body);
1167
1168   return n;
1169 }
1170
1171 /* Adds basic block BB to LOOP.  */
1172 void
1173 add_bb_to_loop (basic_block bb, struct loop *loop)
1174 {
1175   unsigned i;
1176   loop_p ploop;
1177   edge_iterator ei;
1178   edge e;
1179
1180   gcc_assert (bb->loop_father == NULL);
1181   bb->loop_father = loop;
1182   loop->num_nodes++;
1183   FOR_EACH_VEC_ELT (loop_p, loop->superloops, i, ploop)
1184     ploop->num_nodes++;
1185
1186   FOR_EACH_EDGE (e, ei, bb->succs)
1187     {
1188       rescan_loop_exit (e, true, false);
1189     }
1190   FOR_EACH_EDGE (e, ei, bb->preds)
1191     {
1192       rescan_loop_exit (e, true, false);
1193     }
1194 }
1195
1196 /* Remove basic block BB from loops.  */
1197 void
1198 remove_bb_from_loops (basic_block bb)
1199 {
1200   int i;
1201   struct loop *loop = bb->loop_father;
1202   loop_p ploop;
1203   edge_iterator ei;
1204   edge e;
1205
1206   gcc_assert (loop != NULL);
1207   loop->num_nodes--;
1208   FOR_EACH_VEC_ELT (loop_p, loop->superloops, i, ploop)
1209     ploop->num_nodes--;
1210   bb->loop_father = NULL;
1211
1212   FOR_EACH_EDGE (e, ei, bb->succs)
1213     {
1214       rescan_loop_exit (e, false, true);
1215     }
1216   FOR_EACH_EDGE (e, ei, bb->preds)
1217     {
1218       rescan_loop_exit (e, false, true);
1219     }
1220 }
1221
1222 /* Finds nearest common ancestor in loop tree for given loops.  */
1223 struct loop *
1224 find_common_loop (struct loop *loop_s, struct loop *loop_d)
1225 {
1226   unsigned sdepth, ddepth;
1227
1228   if (!loop_s) return loop_d;
1229   if (!loop_d) return loop_s;
1230
1231   sdepth = loop_depth (loop_s);
1232   ddepth = loop_depth (loop_d);
1233
1234   if (sdepth < ddepth)
1235     loop_d = VEC_index (loop_p, loop_d->superloops, sdepth);
1236   else if (sdepth > ddepth)
1237     loop_s = VEC_index (loop_p, loop_s->superloops, ddepth);
1238
1239   while (loop_s != loop_d)
1240     {
1241       loop_s = loop_outer (loop_s);
1242       loop_d = loop_outer (loop_d);
1243     }
1244   return loop_s;
1245 }
1246
1247 /* Removes LOOP from structures and frees its data.  */
1248
1249 void
1250 delete_loop (struct loop *loop)
1251 {
1252   /* Remove the loop from structure.  */
1253   flow_loop_tree_node_remove (loop);
1254
1255   /* Remove loop from loops array.  */
1256   VEC_replace (loop_p, current_loops->larray, loop->num, NULL);
1257
1258   /* Free loop data.  */
1259   flow_loop_free (loop);
1260 }
1261
1262 /* Cancels the LOOP; it must be innermost one.  */
1263
1264 static void
1265 cancel_loop (struct loop *loop)
1266 {
1267   basic_block *bbs;
1268   unsigned i;
1269   struct loop *outer = loop_outer (loop);
1270
1271   gcc_assert (!loop->inner);
1272
1273   /* Move blocks up one level (they should be removed as soon as possible).  */
1274   bbs = get_loop_body (loop);
1275   for (i = 0; i < loop->num_nodes; i++)
1276     bbs[i]->loop_father = outer;
1277
1278   free (bbs);
1279   delete_loop (loop);
1280 }
1281
1282 /* Cancels LOOP and all its subloops.  */
1283 void
1284 cancel_loop_tree (struct loop *loop)
1285 {
1286   while (loop->inner)
1287     cancel_loop_tree (loop->inner);
1288   cancel_loop (loop);
1289 }
1290
1291 /* Checks that information about loops is correct
1292      -- sizes of loops are all right
1293      -- results of get_loop_body really belong to the loop
1294      -- loop header have just single entry edge and single latch edge
1295      -- loop latches have only single successor that is header of their loop
1296      -- irreducible loops are correctly marked
1297      -- the cached loop depth and loop father of each bb is correct
1298   */
1299 DEBUG_FUNCTION void
1300 verify_loop_structure (void)
1301 {
1302   unsigned *sizes, i, j;
1303   sbitmap irreds;
1304   basic_block *bbs, bb;
1305   struct loop *loop;
1306   int err = 0;
1307   edge e;
1308   unsigned num = number_of_loops ();
1309   loop_iterator li;
1310   struct loop_exit *exit, *mexit;
1311   bool dom_available = dom_info_available_p (CDI_DOMINATORS);
1312   sbitmap visited = sbitmap_alloc (last_basic_block);
1313
1314   /* We need up-to-date dominators, compute or verify them.  */
1315   if (!dom_available)
1316     calculate_dominance_info (CDI_DOMINATORS);
1317   else
1318     verify_dominators (CDI_DOMINATORS);
1319
1320   /* Check sizes.  */
1321   sizes = XCNEWVEC (unsigned, num);
1322   sizes[0] = 2;
1323
1324   FOR_EACH_BB (bb)
1325     for (loop = bb->loop_father; loop; loop = loop_outer (loop))
1326       sizes[loop->num]++;
1327
1328   FOR_EACH_LOOP (li, loop, LI_INCLUDE_ROOT)
1329     {
1330       i = loop->num;
1331
1332       if (loop->num_nodes != sizes[i])
1333         {
1334           error ("size of loop %d should be %d, not %d",
1335                    i, sizes[i], loop->num_nodes);
1336           err = 1;
1337         }
1338     }
1339
1340   /* Check get_loop_body.  */
1341   FOR_EACH_LOOP (li, loop, 0)
1342     {
1343       bbs = get_loop_body (loop);
1344
1345       for (j = 0; j < loop->num_nodes; j++)
1346         if (!flow_bb_inside_loop_p (loop, bbs[j]))
1347           {
1348             error ("bb %d do not belong to loop %d",
1349                    bbs[j]->index, loop->num);
1350             err = 1;
1351           }
1352       free (bbs);
1353     }
1354   bitmap_clear (visited);
1355   FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
1356     {
1357       bbs = get_loop_body (loop);
1358
1359       for (j = 0; j < loop->num_nodes; j++)
1360         {
1361           bb = bbs[j];
1362
1363           /* Ignore this block if it is in an inner loop.  */
1364           if (TEST_BIT (visited, bb->index))
1365             continue;
1366           SET_BIT (visited, bb->index);
1367
1368           if (bb->loop_father != loop)
1369             {
1370               error ("bb %d has father loop %d, should be loop %d",
1371                      bb->index, bb->loop_father->num, loop->num);
1372               err = 1;
1373             }
1374         }
1375       free (bbs);
1376     }
1377
1378   /* Check headers and latches.  */
1379   FOR_EACH_LOOP (li, loop, 0)
1380     {
1381       i = loop->num;
1382
1383       if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS)
1384           && EDGE_COUNT (loop->header->preds) != 2)
1385         {
1386           error ("loop %d%'s header does not have exactly 2 entries", i);
1387           err = 1;
1388         }
1389       if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
1390         {
1391           if (!single_succ_p (loop->latch))
1392             {
1393               error ("loop %d%'s latch does not have exactly 1 successor", i);
1394               err = 1;
1395             }
1396           if (single_succ (loop->latch) != loop->header)
1397             {
1398               error ("loop %d%'s latch does not have header as successor", i);
1399               err = 1;
1400             }
1401           if (loop->latch->loop_father != loop)
1402             {
1403               error ("loop %d%'s latch does not belong directly to it", i);
1404               err = 1;
1405             }
1406         }
1407       if (loop->header->loop_father != loop)
1408         {
1409           error ("loop %d%'s header does not belong directly to it", i);
1410           err = 1;
1411         }
1412       if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1413           && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1414         {
1415           error ("loop %d%'s latch is marked as part of irreducible region", i);
1416           err = 1;
1417         }
1418     }
1419
1420   /* Check irreducible loops.  */
1421   if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
1422     {
1423       /* Record old info.  */
1424       irreds = sbitmap_alloc (last_basic_block);
1425       FOR_EACH_BB (bb)
1426         {
1427           edge_iterator ei;
1428           if (bb->flags & BB_IRREDUCIBLE_LOOP)
1429             SET_BIT (irreds, bb->index);
1430           else
1431             RESET_BIT (irreds, bb->index);
1432           FOR_EACH_EDGE (e, ei, bb->succs)
1433             if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1434               e->flags |= EDGE_ALL_FLAGS + 1;
1435         }
1436
1437       /* Recount it.  */
1438       mark_irreducible_loops ();
1439
1440       /* Compare.  */
1441       FOR_EACH_BB (bb)
1442         {
1443           edge_iterator ei;
1444
1445           if ((bb->flags & BB_IRREDUCIBLE_LOOP)
1446               && !TEST_BIT (irreds, bb->index))
1447             {
1448               error ("basic block %d should be marked irreducible", bb->index);
1449               err = 1;
1450             }
1451           else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
1452               && TEST_BIT (irreds, bb->index))
1453             {
1454               error ("basic block %d should not be marked irreducible", bb->index);
1455               err = 1;
1456             }
1457           FOR_EACH_EDGE (e, ei, bb->succs)
1458             {
1459               if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1460                   && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1461                 {
1462                   error ("edge from %d to %d should be marked irreducible",
1463                          e->src->index, e->dest->index);
1464                   err = 1;
1465                 }
1466               else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1467                        && (e->flags & (EDGE_ALL_FLAGS + 1)))
1468                 {
1469                   error ("edge from %d to %d should not be marked irreducible",
1470                          e->src->index, e->dest->index);
1471                   err = 1;
1472                 }
1473               e->flags &= ~(EDGE_ALL_FLAGS + 1);
1474             }
1475         }
1476       free (irreds);
1477     }
1478
1479   /* Check the recorded loop exits.  */
1480   FOR_EACH_LOOP (li, loop, 0)
1481     {
1482       if (!loop->exits || loop->exits->e != NULL)
1483         {
1484           error ("corrupted head of the exits list of loop %d",
1485                  loop->num);
1486           err = 1;
1487         }
1488       else
1489         {
1490           /* Check that the list forms a cycle, and all elements except
1491              for the head are nonnull.  */
1492           for (mexit = loop->exits, exit = mexit->next, i = 0;
1493                exit->e && exit != mexit;
1494                exit = exit->next)
1495             {
1496               if (i++ & 1)
1497                 mexit = mexit->next;
1498             }
1499
1500           if (exit != loop->exits)
1501             {
1502               error ("corrupted exits list of loop %d", loop->num);
1503               err = 1;
1504             }
1505         }
1506
1507       if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1508         {
1509           if (loop->exits->next != loop->exits)
1510             {
1511               error ("nonempty exits list of loop %d, but exits are not recorded",
1512                      loop->num);
1513               err = 1;
1514             }
1515         }
1516     }
1517
1518   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1519     {
1520       unsigned n_exits = 0, eloops;
1521
1522       memset (sizes, 0, sizeof (unsigned) * num);
1523       FOR_EACH_BB (bb)
1524         {
1525           edge_iterator ei;
1526           if (bb->loop_father == current_loops->tree_root)
1527             continue;
1528           FOR_EACH_EDGE (e, ei, bb->succs)
1529             {
1530               if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
1531                 continue;
1532
1533               n_exits++;
1534               exit = get_exit_descriptions (e);
1535               if (!exit)
1536                 {
1537                   error ("exit %d->%d not recorded",
1538                          e->src->index, e->dest->index);
1539                   err = 1;
1540                 }
1541               eloops = 0;
1542               for (; exit; exit = exit->next_e)
1543                 eloops++;
1544
1545               for (loop = bb->loop_father;
1546                    loop != e->dest->loop_father;
1547                    loop = loop_outer (loop))
1548                 {
1549                   eloops--;
1550                   sizes[loop->num]++;
1551                 }
1552
1553               if (eloops != 0)
1554                 {
1555                   error ("wrong list of exited loops for edge  %d->%d",
1556                          e->src->index, e->dest->index);
1557                   err = 1;
1558                 }
1559             }
1560         }
1561
1562       if (n_exits != htab_elements (current_loops->exits))
1563         {
1564           error ("too many loop exits recorded");
1565           err = 1;
1566         }
1567
1568       FOR_EACH_LOOP (li, loop, 0)
1569         {
1570           eloops = 0;
1571           for (exit = loop->exits->next; exit->e; exit = exit->next)
1572             eloops++;
1573           if (eloops != sizes[loop->num])
1574             {
1575               error ("%d exits recorded for loop %d (having %d exits)",
1576                      eloops, loop->num, sizes[loop->num]);
1577               err = 1;
1578             }
1579         }
1580     }
1581
1582   gcc_assert (!err);
1583
1584   sbitmap_free (visited);
1585   free (sizes);
1586   if (!dom_available)
1587     free_dominance_info (CDI_DOMINATORS);
1588 }
1589
1590 /* Returns latch edge of LOOP.  */
1591 edge
1592 loop_latch_edge (const struct loop *loop)
1593 {
1594   return find_edge (loop->latch, loop->header);
1595 }
1596
1597 /* Returns preheader edge of LOOP.  */
1598 edge
1599 loop_preheader_edge (const struct loop *loop)
1600 {
1601   edge e;
1602   edge_iterator ei;
1603
1604   gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS));
1605
1606   FOR_EACH_EDGE (e, ei, loop->header->preds)
1607     if (e->src != loop->latch)
1608       break;
1609
1610   return e;
1611 }
1612
1613 /* Returns true if E is an exit of LOOP.  */
1614
1615 bool
1616 loop_exit_edge_p (const struct loop *loop, const_edge e)
1617 {
1618   return (flow_bb_inside_loop_p (loop, e->src)
1619           && !flow_bb_inside_loop_p (loop, e->dest));
1620 }
1621
1622 /* Returns the single exit edge of LOOP, or NULL if LOOP has either no exit
1623    or more than one exit.  If loops do not have the exits recorded, NULL
1624    is returned always.  */
1625
1626 edge
1627 single_exit (const struct loop *loop)
1628 {
1629   struct loop_exit *exit = loop->exits->next;
1630
1631   if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
1632     return NULL;
1633
1634   if (exit->e && exit->next == loop->exits)
1635     return exit->e;
1636   else
1637     return NULL;
1638 }
1639
1640 /* Returns true when BB has an incoming edge exiting LOOP.  */
1641
1642 bool
1643 loop_exits_to_bb_p (struct loop *loop, basic_block bb)
1644 {
1645   edge e;
1646   edge_iterator ei;
1647
1648   FOR_EACH_EDGE (e, ei, bb->preds)
1649     if (loop_exit_edge_p (loop, e))
1650       return true;
1651
1652   return false;
1653 }
1654
1655 /* Returns true when BB has an outgoing edge exiting LOOP.  */
1656
1657 bool
1658 loop_exits_from_bb_p (struct loop *loop, basic_block bb)
1659 {
1660   edge e;
1661   edge_iterator ei;
1662
1663   FOR_EACH_EDGE (e, ei, bb->succs)
1664     if (loop_exit_edge_p (loop, e))
1665       return true;
1666
1667   return false;
1668 }