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