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