xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cfgloop.c (revision d909946ca08dceb44d7d0f22ec9488679695d976)
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 
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 
1767