xref: /openbsd/gnu/gcc/gcc/cfgloop.c (revision 404b540a)
1 /* Natural loop discovery code for GNU compiler.
2    Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10 
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING.  If not, write to the Free
18 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301, USA.  */
20 
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "rtl.h"
26 #include "hard-reg-set.h"
27 #include "obstack.h"
28 #include "function.h"
29 #include "basic-block.h"
30 #include "toplev.h"
31 #include "cfgloop.h"
32 #include "flags.h"
33 #include "tree.h"
34 #include "tree-flow.h"
35 
36 /* Ratio of frequencies of edges so that one of more latch edges is
37    considered to belong to inner loop with same header.  */
38 #define HEAVY_EDGE_RATIO 8
39 
40 #define HEADER_BLOCK(B) (* (int *) (B)->aux)
41 #define LATCH_EDGE(E) (*(int *) (E)->aux)
42 
43 static void flow_loops_cfg_dump (const struct loops *, FILE *);
44 static int flow_loop_level_compute (struct loop *);
45 static void flow_loops_level_compute (struct loops *);
46 static void establish_preds (struct loop *);
47 static void canonicalize_loop_headers (void);
48 static bool glb_enum_p (basic_block, void *);
49 
50 /* Dump loop related CFG information.  */
51 
52 static void
flow_loops_cfg_dump(const struct loops * loops,FILE * file)53 flow_loops_cfg_dump (const struct loops *loops, FILE *file)
54 {
55   int i;
56   basic_block bb;
57 
58   if (! loops->num || ! file)
59     return;
60 
61   FOR_EACH_BB (bb)
62     {
63       edge succ;
64       edge_iterator ei;
65 
66       fprintf (file, ";; %d succs { ", bb->index);
67       FOR_EACH_EDGE (succ, ei, bb->succs)
68 	fprintf (file, "%d ", succ->dest->index);
69       fprintf (file, "}\n");
70     }
71 
72   /* Dump the DFS node order.  */
73   if (loops->cfg.dfs_order)
74     {
75       fputs (";; DFS order: ", file);
76       for (i = NUM_FIXED_BLOCKS; i < n_basic_blocks; i++)
77 	fprintf (file, "%d ", loops->cfg.dfs_order[i]);
78 
79       fputs ("\n", file);
80     }
81 
82   /* Dump the reverse completion node order.  */
83   if (loops->cfg.rc_order)
84     {
85       fputs (";; RC order: ", file);
86       for (i = NUM_FIXED_BLOCKS; i < n_basic_blocks; i++)
87 	fprintf (file, "%d ", loops->cfg.rc_order[i]);
88 
89       fputs ("\n", file);
90     }
91 }
92 
93 /* Return nonzero if the nodes of LOOP are a subset of OUTER.  */
94 
95 bool
flow_loop_nested_p(const struct loop * outer,const struct loop * loop)96 flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
97 {
98   return (loop->depth > outer->depth
99 	 && loop->pred[outer->depth] == outer);
100 }
101 
102 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
103    loops within LOOP.  */
104 
105 struct loop *
superloop_at_depth(struct loop * loop,unsigned depth)106 superloop_at_depth (struct loop *loop, unsigned depth)
107 {
108   gcc_assert (depth <= (unsigned) loop->depth);
109 
110   if (depth == (unsigned) loop->depth)
111     return loop;
112 
113   return loop->pred[depth];
114 }
115 
116 /* Dump the loop information specified by LOOP to the stream FILE
117    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
118 
119 void
flow_loop_dump(const struct loop * loop,FILE * file,void (* loop_dump_aux)(const struct loop *,FILE *,int),int verbose)120 flow_loop_dump (const struct loop *loop, FILE *file,
121 		void (*loop_dump_aux) (const struct loop *, FILE *, int),
122 		int verbose)
123 {
124   basic_block *bbs;
125   unsigned i;
126 
127   if (! loop || ! loop->header)
128     return;
129 
130   fprintf (file, ";;\n;; Loop %d\n", loop->num);
131 
132   fprintf (file, ";;  header %d, latch %d\n",
133 	   loop->header->index, loop->latch->index);
134   fprintf (file, ";;  depth %d, level %d, outer %ld\n",
135 	   loop->depth, loop->level,
136 	   (long) (loop->outer ? loop->outer->num : -1));
137 
138   fprintf (file, ";;  nodes:");
139   bbs = get_loop_body (loop);
140   for (i = 0; i < loop->num_nodes; i++)
141     fprintf (file, " %d", bbs[i]->index);
142   free (bbs);
143   fprintf (file, "\n");
144 
145   if (loop_dump_aux)
146     loop_dump_aux (loop, file, verbose);
147 }
148 
149 /* Dump the loop information specified by LOOPS to the stream FILE,
150    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
151 
152 void
flow_loops_dump(const struct loops * loops,FILE * file,void (* loop_dump_aux)(const struct loop *,FILE *,int),int verbose)153 flow_loops_dump (const struct loops *loops, FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
154 {
155   int i;
156   int num_loops;
157 
158   num_loops = loops->num;
159   if (! num_loops || ! file)
160     return;
161 
162   fprintf (file, ";; %d loops found\n", num_loops);
163 
164   for (i = 0; i < num_loops; i++)
165     {
166       struct loop *loop = loops->parray[i];
167 
168       if (!loop)
169 	continue;
170 
171       flow_loop_dump (loop, file, loop_dump_aux, verbose);
172     }
173 
174   if (verbose)
175     flow_loops_cfg_dump (loops, file);
176 }
177 
178 /* Free data allocated for LOOP.  */
179 void
flow_loop_free(struct loop * loop)180 flow_loop_free (struct loop *loop)
181 {
182   if (loop->pred)
183     free (loop->pred);
184   free (loop);
185 }
186 
187 /* Free all the memory allocated for LOOPS.  */
188 
189 void
flow_loops_free(struct loops * loops)190 flow_loops_free (struct loops *loops)
191 {
192   if (loops->parray)
193     {
194       unsigned i;
195 
196       gcc_assert (loops->num);
197 
198       /* Free the loop descriptors.  */
199       for (i = 0; i < loops->num; i++)
200 	{
201 	  struct loop *loop = loops->parray[i];
202 
203 	  if (!loop)
204 	    continue;
205 
206 	  flow_loop_free (loop);
207 	}
208 
209       free (loops->parray);
210       loops->parray = NULL;
211 
212       if (loops->cfg.dfs_order)
213 	free (loops->cfg.dfs_order);
214       if (loops->cfg.rc_order)
215 	free (loops->cfg.rc_order);
216 
217     }
218 }
219 
220 /* Find the nodes contained within the LOOP with header HEADER.
221    Return the number of nodes within the loop.  */
222 
223 int
flow_loop_nodes_find(basic_block header,struct loop * loop)224 flow_loop_nodes_find (basic_block header, struct loop *loop)
225 {
226   basic_block *stack;
227   int sp;
228   int num_nodes = 1;
229 
230   header->loop_father = loop;
231   header->loop_depth = loop->depth;
232 
233   if (loop->latch->loop_father != loop)
234     {
235       stack = XNEWVEC (basic_block, n_basic_blocks);
236       sp = 0;
237       num_nodes++;
238       stack[sp++] = loop->latch;
239       loop->latch->loop_father = loop;
240       loop->latch->loop_depth = loop->depth;
241 
242       while (sp)
243 	{
244 	  basic_block node;
245 	  edge e;
246 	  edge_iterator ei;
247 
248 	  node = stack[--sp];
249 
250 	  FOR_EACH_EDGE (e, ei, node->preds)
251 	    {
252 	      basic_block ancestor = e->src;
253 
254 	      if (ancestor != ENTRY_BLOCK_PTR
255 		  && ancestor->loop_father != loop)
256 		{
257 		  ancestor->loop_father = loop;
258 		  ancestor->loop_depth = loop->depth;
259 		  num_nodes++;
260 		  stack[sp++] = ancestor;
261 		}
262 	    }
263 	}
264       free (stack);
265     }
266   return num_nodes;
267 }
268 
269 /* For each loop in the lOOPS tree that has just a single exit
270    record the exit edge.  */
271 
272 void
mark_single_exit_loops(struct loops * loops)273 mark_single_exit_loops (struct loops *loops)
274 {
275   basic_block bb;
276   edge e;
277   struct loop *loop;
278   unsigned i;
279 
280   for (i = 1; i < loops->num; i++)
281     {
282       loop = loops->parray[i];
283       if (loop)
284 	loop->single_exit = NULL;
285     }
286 
287   FOR_EACH_BB (bb)
288     {
289       edge_iterator ei;
290       if (bb->loop_father == loops->tree_root)
291 	continue;
292       FOR_EACH_EDGE (e, ei, bb->succs)
293 	{
294 	  if (e->dest == EXIT_BLOCK_PTR)
295 	    continue;
296 
297 	  if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
298 	    continue;
299 
300 	  for (loop = bb->loop_father;
301 	       loop != e->dest->loop_father;
302 	       loop = loop->outer)
303 	    {
304 	      /* If we have already seen an exit, mark this by the edge that
305 		 surely does not occur as any exit.  */
306 	      if (loop->single_exit)
307 		loop->single_exit = single_succ_edge (ENTRY_BLOCK_PTR);
308 	      else
309 		loop->single_exit = e;
310 	    }
311 	}
312     }
313 
314   for (i = 1; i < loops->num; i++)
315     {
316       loop = loops->parray[i];
317       if (!loop)
318 	continue;
319 
320       if (loop->single_exit == single_succ_edge (ENTRY_BLOCK_PTR))
321 	loop->single_exit = NULL;
322     }
323 
324   loops->state |= LOOPS_HAVE_MARKED_SINGLE_EXITS;
325 }
326 
327 static void
establish_preds(struct loop * loop)328 establish_preds (struct loop *loop)
329 {
330   struct loop *ploop, *father = loop->outer;
331 
332   loop->depth = father->depth + 1;
333 
334   /* Remember the current loop depth if it is the largest seen so far.  */
335   cfun->max_loop_depth = MAX (cfun->max_loop_depth, loop->depth);
336 
337   if (loop->pred)
338     free (loop->pred);
339   loop->pred = XNEWVEC (struct loop *, loop->depth);
340   memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
341   loop->pred[father->depth] = father;
342 
343   for (ploop = loop->inner; ploop; ploop = ploop->next)
344     establish_preds (ploop);
345 }
346 
347 /* Add LOOP to the loop hierarchy tree where FATHER is father of the
348    added loop.  If LOOP has some children, take care of that their
349    pred field will be initialized correctly.  */
350 
351 void
flow_loop_tree_node_add(struct loop * father,struct loop * loop)352 flow_loop_tree_node_add (struct loop *father, struct loop *loop)
353 {
354   loop->next = father->inner;
355   father->inner = loop;
356   loop->outer = father;
357 
358   establish_preds (loop);
359 }
360 
361 /* Remove LOOP from the loop hierarchy tree.  */
362 
363 void
flow_loop_tree_node_remove(struct loop * loop)364 flow_loop_tree_node_remove (struct loop *loop)
365 {
366   struct loop *prev, *father;
367 
368   father = loop->outer;
369   loop->outer = NULL;
370 
371   /* Remove loop from the list of sons.  */
372   if (father->inner == loop)
373     father->inner = loop->next;
374   else
375     {
376       for (prev = father->inner; prev->next != loop; prev = prev->next);
377       prev->next = loop->next;
378     }
379 
380   loop->depth = -1;
381   free (loop->pred);
382   loop->pred = NULL;
383 }
384 
385 /* Helper function to compute loop nesting depth and enclosed loop level
386    for the natural loop specified by LOOP.  Returns the loop level.  */
387 
388 static int
flow_loop_level_compute(struct loop * loop)389 flow_loop_level_compute (struct loop *loop)
390 {
391   struct loop *inner;
392   int level = 1;
393 
394   if (! loop)
395     return 0;
396 
397   /* Traverse loop tree assigning depth and computing level as the
398      maximum level of all the inner loops of this loop.  The loop
399      level is equivalent to the height of the loop in the loop tree
400      and corresponds to the number of enclosed loop levels (including
401      itself).  */
402   for (inner = loop->inner; inner; inner = inner->next)
403     {
404       int ilevel = flow_loop_level_compute (inner) + 1;
405 
406       if (ilevel > level)
407 	level = ilevel;
408     }
409 
410   loop->level = level;
411   return level;
412 }
413 
414 /* Compute the loop nesting depth and enclosed loop level for the loop
415    hierarchy tree specified by LOOPS.  Return the maximum enclosed loop
416    level.  */
417 
418 static void
flow_loops_level_compute(struct loops * loops)419 flow_loops_level_compute (struct loops *loops)
420 {
421   flow_loop_level_compute (loops->tree_root);
422 }
423 
424 /* A callback to update latch and header info for basic block JUMP created
425    by redirecting an edge.  */
426 
427 static void
update_latch_info(basic_block jump)428 update_latch_info (basic_block jump)
429 {
430   alloc_aux_for_block (jump, sizeof (int));
431   HEADER_BLOCK (jump) = 0;
432   alloc_aux_for_edge (single_pred_edge (jump), sizeof (int));
433   LATCH_EDGE (single_pred_edge (jump)) = 0;
434   set_immediate_dominator (CDI_DOMINATORS, jump, single_pred (jump));
435 }
436 
437 /* A callback for make_forwarder block, to redirect all edges except for
438    MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
439    whether to redirect it.  */
440 
441 static edge mfb_kj_edge;
442 static bool
mfb_keep_just(edge e)443 mfb_keep_just (edge e)
444 {
445   return e != mfb_kj_edge;
446 }
447 
448 /* A callback for make_forwarder block, to redirect the latch edges into an
449    entry part.  E is the edge for that we should decide whether to redirect
450    it.  */
451 
452 static bool
mfb_keep_nonlatch(edge e)453 mfb_keep_nonlatch (edge e)
454 {
455   return LATCH_EDGE (e);
456 }
457 
458 /* Takes care of merging natural loops with shared headers.  */
459 
460 static void
canonicalize_loop_headers(void)461 canonicalize_loop_headers (void)
462 {
463   basic_block header;
464   edge e;
465 
466   alloc_aux_for_blocks (sizeof (int));
467   alloc_aux_for_edges (sizeof (int));
468 
469   /* Split blocks so that each loop has only single latch.  */
470   FOR_EACH_BB (header)
471     {
472       edge_iterator ei;
473       int num_latches = 0;
474       int have_abnormal_edge = 0;
475 
476       FOR_EACH_EDGE (e, ei, header->preds)
477 	{
478 	  basic_block latch = e->src;
479 
480 	  if (e->flags & EDGE_ABNORMAL)
481 	    have_abnormal_edge = 1;
482 
483 	  if (latch != ENTRY_BLOCK_PTR
484 	      && dominated_by_p (CDI_DOMINATORS, latch, header))
485 	    {
486 	      num_latches++;
487 	      LATCH_EDGE (e) = 1;
488 	    }
489 	}
490       if (have_abnormal_edge)
491 	HEADER_BLOCK (header) = 0;
492       else
493 	HEADER_BLOCK (header) = num_latches;
494     }
495 
496   if (HEADER_BLOCK (single_succ (ENTRY_BLOCK_PTR)))
497     {
498       basic_block bb;
499 
500       /* We could not redirect edges freely here. On the other hand,
501 	 we can simply split the edge from entry block.  */
502       bb = split_edge (single_succ_edge (ENTRY_BLOCK_PTR));
503 
504       alloc_aux_for_edge (single_succ_edge (bb), sizeof (int));
505       LATCH_EDGE (single_succ_edge (bb)) = 0;
506       alloc_aux_for_block (bb, sizeof (int));
507       HEADER_BLOCK (bb) = 0;
508     }
509 
510   FOR_EACH_BB (header)
511     {
512       int max_freq, is_heavy;
513       edge heavy, tmp_edge;
514       edge_iterator ei;
515 
516       if (HEADER_BLOCK (header) <= 1)
517 	continue;
518 
519       /* Find a heavy edge.  */
520       is_heavy = 1;
521       heavy = NULL;
522       max_freq = 0;
523       FOR_EACH_EDGE (e, ei, header->preds)
524 	if (LATCH_EDGE (e) &&
525 	    EDGE_FREQUENCY (e) > max_freq)
526 	  max_freq = EDGE_FREQUENCY (e);
527       FOR_EACH_EDGE (e, ei, header->preds)
528 	if (LATCH_EDGE (e) &&
529 	    EDGE_FREQUENCY (e) >= max_freq / HEAVY_EDGE_RATIO)
530 	  {
531 	    if (heavy)
532 	      {
533 		is_heavy = 0;
534 		break;
535 	      }
536 	    else
537 	      heavy = e;
538 	  }
539 
540       if (is_heavy)
541 	{
542 	  /* Split out the heavy edge, and create inner loop for it.  */
543 	  mfb_kj_edge = heavy;
544 	  tmp_edge = make_forwarder_block (header, mfb_keep_just,
545 					   update_latch_info);
546 	  alloc_aux_for_block (tmp_edge->dest, sizeof (int));
547 	  HEADER_BLOCK (tmp_edge->dest) = 1;
548 	  alloc_aux_for_edge (tmp_edge, sizeof (int));
549 	  LATCH_EDGE (tmp_edge) = 0;
550 	  HEADER_BLOCK (header)--;
551 	}
552 
553       if (HEADER_BLOCK (header) > 1)
554 	{
555 	  /* Create a new latch block.  */
556 	  tmp_edge = make_forwarder_block (header, mfb_keep_nonlatch,
557 					   update_latch_info);
558 	  alloc_aux_for_block (tmp_edge->dest, sizeof (int));
559 	  HEADER_BLOCK (tmp_edge->src) = 0;
560 	  HEADER_BLOCK (tmp_edge->dest) = 1;
561 	  alloc_aux_for_edge (tmp_edge, sizeof (int));
562 	  LATCH_EDGE (tmp_edge) = 1;
563 	}
564     }
565 
566   free_aux_for_blocks ();
567   free_aux_for_edges ();
568 
569 #ifdef ENABLE_CHECKING
570   verify_dominators (CDI_DOMINATORS);
571 #endif
572 }
573 
574 /* Initialize all the parallel_p fields of the loops structure to true.  */
575 
576 static void
initialize_loops_parallel_p(struct loops * loops)577 initialize_loops_parallel_p (struct loops *loops)
578 {
579   unsigned int i;
580 
581   for (i = 0; i < loops->num; i++)
582     {
583       struct loop *loop = loops->parray[i];
584       loop->parallel_p = true;
585     }
586 }
587 
588 /* Find all the natural loops in the function and save in LOOPS structure and
589    recalculate loop_depth information in basic block structures.
590    Return the number of natural loops found.  */
591 
592 int
flow_loops_find(struct loops * loops)593 flow_loops_find (struct loops *loops)
594 {
595   int b;
596   int num_loops;
597   edge e;
598   sbitmap headers;
599   int *dfs_order;
600   int *rc_order;
601   basic_block header;
602   basic_block bb;
603 
604   memset (loops, 0, sizeof *loops);
605 
606   /* We are going to recount the maximum loop depth,
607      so throw away the last count.  */
608   cfun->max_loop_depth = 0;
609 
610   /* Taking care of this degenerate case makes the rest of
611      this code simpler.  */
612   if (n_basic_blocks == NUM_FIXED_BLOCKS)
613     return 0;
614 
615   dfs_order = NULL;
616   rc_order = NULL;
617 
618   /* Ensure that the dominators are computed.  */
619   calculate_dominance_info (CDI_DOMINATORS);
620 
621   /* Join loops with shared headers.  */
622   canonicalize_loop_headers ();
623 
624   /* Count the number of loop headers.  This should be the
625      same as the number of natural loops.  */
626   headers = sbitmap_alloc (last_basic_block);
627   sbitmap_zero (headers);
628 
629   num_loops = 0;
630   FOR_EACH_BB (header)
631     {
632       edge_iterator ei;
633       int more_latches = 0;
634 
635       header->loop_depth = 0;
636 
637       /* If we have an abnormal predecessor, do not consider the
638 	 loop (not worth the problems).  */
639       FOR_EACH_EDGE (e, ei, header->preds)
640 	if (e->flags & EDGE_ABNORMAL)
641 	  break;
642       if (e)
643 	continue;
644 
645       FOR_EACH_EDGE (e, ei, header->preds)
646 	{
647 	  basic_block latch = e->src;
648 
649 	  gcc_assert (!(e->flags & EDGE_ABNORMAL));
650 
651 	  /* Look for back edges where a predecessor is dominated
652 	     by this block.  A natural loop has a single entry
653 	     node (header) that dominates all the nodes in the
654 	     loop.  It also has single back edge to the header
655 	     from a latch node.  */
656 	  if (latch != ENTRY_BLOCK_PTR
657 	      && dominated_by_p (CDI_DOMINATORS, latch, header))
658 	    {
659 	      /* Shared headers should be eliminated by now.  */
660 	      gcc_assert (!more_latches);
661 	      more_latches = 1;
662 	      SET_BIT (headers, header->index);
663 	      num_loops++;
664 	    }
665 	}
666     }
667 
668   /* Allocate loop structures.  */
669   loops->parray = XCNEWVEC (struct loop *, num_loops + 1);
670 
671   /* Dummy loop containing whole function.  */
672   loops->parray[0] = XCNEW (struct loop);
673   loops->parray[0]->next = NULL;
674   loops->parray[0]->inner = NULL;
675   loops->parray[0]->outer = NULL;
676   loops->parray[0]->depth = 0;
677   loops->parray[0]->pred = NULL;
678   loops->parray[0]->num_nodes = n_basic_blocks;
679   loops->parray[0]->latch = EXIT_BLOCK_PTR;
680   loops->parray[0]->header = ENTRY_BLOCK_PTR;
681   ENTRY_BLOCK_PTR->loop_father = loops->parray[0];
682   EXIT_BLOCK_PTR->loop_father = loops->parray[0];
683 
684   loops->tree_root = loops->parray[0];
685 
686   /* Find and record information about all the natural loops
687      in the CFG.  */
688   loops->num = 1;
689   FOR_EACH_BB (bb)
690     bb->loop_father = loops->tree_root;
691 
692   if (num_loops)
693     {
694       /* Compute depth first search order of the CFG so that outer
695 	 natural loops will be found before inner natural loops.  */
696       dfs_order = XNEWVEC (int, n_basic_blocks);
697       rc_order = XNEWVEC (int, n_basic_blocks);
698       pre_and_rev_post_order_compute (dfs_order, rc_order, false);
699 
700       /* Save CFG derived information to avoid recomputing it.  */
701       loops->cfg.dfs_order = dfs_order;
702       loops->cfg.rc_order = rc_order;
703 
704       num_loops = 1;
705 
706       for (b = 0; b < n_basic_blocks - NUM_FIXED_BLOCKS; b++)
707 	{
708 	  struct loop *loop;
709 	  edge_iterator ei;
710 
711 	  /* Search the nodes of the CFG in reverse completion order
712 	     so that we can find outer loops first.  */
713 	  if (!TEST_BIT (headers, rc_order[b]))
714 	    continue;
715 
716 	  header = BASIC_BLOCK (rc_order[b]);
717 
718 	  loop = loops->parray[num_loops] = XCNEW (struct loop);
719 
720 	  loop->header = header;
721 	  loop->num = num_loops;
722 	  num_loops++;
723 
724 	  /* Look for the latch for this header block.  */
725 	  FOR_EACH_EDGE (e, ei, header->preds)
726 	    {
727 	      basic_block latch = e->src;
728 
729 	      if (latch != ENTRY_BLOCK_PTR
730 		  && dominated_by_p (CDI_DOMINATORS, latch, header))
731 		{
732 		  loop->latch = latch;
733 		  break;
734 		}
735 	    }
736 
737 	  flow_loop_tree_node_add (header->loop_father, loop);
738 	  loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
739 	}
740 
741       /* Assign the loop nesting depth and enclosed loop level for each
742 	 loop.  */
743       flow_loops_level_compute (loops);
744 
745       loops->num = num_loops;
746       initialize_loops_parallel_p (loops);
747     }
748 
749   sbitmap_free (headers);
750 
751   loops->state = 0;
752 #ifdef ENABLE_CHECKING
753   verify_flow_info ();
754   verify_loop_structure (loops);
755 #endif
756 
757   return loops->num;
758 }
759 
760 /* Return nonzero if basic block BB belongs to LOOP.  */
761 bool
flow_bb_inside_loop_p(const struct loop * loop,const basic_block bb)762 flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
763 {
764   struct loop *source_loop;
765 
766   if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
767     return 0;
768 
769   source_loop = bb->loop_father;
770   return loop == source_loop || flow_loop_nested_p (loop, source_loop);
771 }
772 
773 /* Enumeration predicate for get_loop_body.  */
774 static bool
glb_enum_p(basic_block bb,void * glb_header)775 glb_enum_p (basic_block bb, void *glb_header)
776 {
777   return bb != (basic_block) glb_header;
778 }
779 
780 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
781    order against direction of edges from latch.  Specially, if
782    header != latch, latch is the 1-st block.  */
783 basic_block *
get_loop_body(const struct loop * loop)784 get_loop_body (const struct loop *loop)
785 {
786   basic_block *tovisit, bb;
787   unsigned tv = 0;
788 
789   gcc_assert (loop->num_nodes);
790 
791   tovisit = XCNEWVEC (basic_block, loop->num_nodes);
792   tovisit[tv++] = loop->header;
793 
794   if (loop->latch == EXIT_BLOCK_PTR)
795     {
796       /* There may be blocks unreachable from EXIT_BLOCK.  */
797       gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks);
798       FOR_EACH_BB (bb)
799 	tovisit[tv++] = bb;
800       tovisit[tv++] = EXIT_BLOCK_PTR;
801     }
802   else if (loop->latch != loop->header)
803     {
804       tv = dfs_enumerate_from (loop->latch, 1, glb_enum_p,
805 			       tovisit + 1, loop->num_nodes - 1,
806 			       loop->header) + 1;
807     }
808 
809   gcc_assert (tv == loop->num_nodes);
810   return tovisit;
811 }
812 
813 /* Fills dominance descendants inside LOOP of the basic block BB into
814    array TOVISIT from index *TV.  */
815 
816 static void
fill_sons_in_loop(const struct loop * loop,basic_block bb,basic_block * tovisit,int * tv)817 fill_sons_in_loop (const struct loop *loop, basic_block bb,
818 		   basic_block *tovisit, int *tv)
819 {
820   basic_block son, postpone = NULL;
821 
822   tovisit[(*tv)++] = bb;
823   for (son = first_dom_son (CDI_DOMINATORS, bb);
824        son;
825        son = next_dom_son (CDI_DOMINATORS, son))
826     {
827       if (!flow_bb_inside_loop_p (loop, son))
828 	continue;
829 
830       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
831 	{
832 	  postpone = son;
833 	  continue;
834 	}
835       fill_sons_in_loop (loop, son, tovisit, tv);
836     }
837 
838   if (postpone)
839     fill_sons_in_loop (loop, postpone, tovisit, tv);
840 }
841 
842 /* Gets body of a LOOP (that must be different from the outermost loop)
843    sorted by dominance relation.  Additionally, if a basic block s dominates
844    the latch, then only blocks dominated by s are be after it.  */
845 
846 basic_block *
get_loop_body_in_dom_order(const struct loop * loop)847 get_loop_body_in_dom_order (const struct loop *loop)
848 {
849   basic_block *tovisit;
850   int tv;
851 
852   gcc_assert (loop->num_nodes);
853 
854   tovisit = XCNEWVEC (basic_block, loop->num_nodes);
855 
856   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
857 
858   tv = 0;
859   fill_sons_in_loop (loop, loop->header, tovisit, &tv);
860 
861   gcc_assert (tv == (int) loop->num_nodes);
862 
863   return tovisit;
864 }
865 
866 /* Get body of a LOOP in breadth first sort order.  */
867 
868 basic_block *
get_loop_body_in_bfs_order(const struct loop * loop)869 get_loop_body_in_bfs_order (const struct loop *loop)
870 {
871   basic_block *blocks;
872   basic_block bb;
873   bitmap visited;
874   unsigned int i = 0;
875   unsigned int vc = 1;
876 
877   gcc_assert (loop->num_nodes);
878   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
879 
880   blocks = XCNEWVEC (basic_block, loop->num_nodes);
881   visited = BITMAP_ALLOC (NULL);
882 
883   bb = loop->header;
884   while (i < loop->num_nodes)
885     {
886       edge e;
887       edge_iterator ei;
888 
889       if (!bitmap_bit_p (visited, bb->index))
890 	{
891 	  /* This basic block is now visited */
892 	  bitmap_set_bit (visited, bb->index);
893 	  blocks[i++] = bb;
894 	}
895 
896       FOR_EACH_EDGE (e, ei, bb->succs)
897 	{
898 	  if (flow_bb_inside_loop_p (loop, e->dest))
899 	    {
900 	      if (!bitmap_bit_p (visited, e->dest->index))
901 		{
902 		  bitmap_set_bit (visited, e->dest->index);
903 		  blocks[i++] = e->dest;
904 		}
905 	    }
906 	}
907 
908       gcc_assert (i >= vc);
909 
910       bb = blocks[vc++];
911     }
912 
913   BITMAP_FREE (visited);
914   return blocks;
915 }
916 
917 /* Gets exit edges of a LOOP, returning their number in N_EDGES.  */
918 edge *
get_loop_exit_edges(const struct loop * loop,unsigned int * num_edges)919 get_loop_exit_edges (const struct loop *loop, unsigned int *num_edges)
920 {
921   edge *edges, e;
922   unsigned i, n;
923   basic_block * body;
924   edge_iterator ei;
925 
926   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
927 
928   body = get_loop_body (loop);
929   n = 0;
930   for (i = 0; i < loop->num_nodes; i++)
931     FOR_EACH_EDGE (e, ei, body[i]->succs)
932       if (!flow_bb_inside_loop_p (loop, e->dest))
933 	n++;
934   edges = XNEWVEC (edge, n);
935   *num_edges = n;
936   n = 0;
937   for (i = 0; i < loop->num_nodes; i++)
938     FOR_EACH_EDGE (e, ei, body[i]->succs)
939       if (!flow_bb_inside_loop_p (loop, e->dest))
940 	edges[n++] = e;
941   free (body);
942 
943   return edges;
944 }
945 
946 /* Counts the number of conditional branches inside LOOP.  */
947 
948 unsigned
num_loop_branches(const struct loop * loop)949 num_loop_branches (const struct loop *loop)
950 {
951   unsigned i, n;
952   basic_block * body;
953 
954   gcc_assert (loop->latch != EXIT_BLOCK_PTR);
955 
956   body = get_loop_body (loop);
957   n = 0;
958   for (i = 0; i < loop->num_nodes; i++)
959     if (EDGE_COUNT (body[i]->succs) >= 2)
960       n++;
961   free (body);
962 
963   return n;
964 }
965 
966 /* Adds basic block BB to LOOP.  */
967 void
add_bb_to_loop(basic_block bb,struct loop * loop)968 add_bb_to_loop (basic_block bb, struct loop *loop)
969 {
970    int i;
971 
972    bb->loop_father = loop;
973    bb->loop_depth = loop->depth;
974    loop->num_nodes++;
975    for (i = 0; i < loop->depth; i++)
976      loop->pred[i]->num_nodes++;
977  }
978 
979 /* Remove basic block BB from loops.  */
980 void
remove_bb_from_loops(basic_block bb)981 remove_bb_from_loops (basic_block bb)
982 {
983    int i;
984    struct loop *loop = bb->loop_father;
985 
986    loop->num_nodes--;
987    for (i = 0; i < loop->depth; i++)
988      loop->pred[i]->num_nodes--;
989    bb->loop_father = NULL;
990    bb->loop_depth = 0;
991 }
992 
993 /* Finds nearest common ancestor in loop tree for given loops.  */
994 struct loop *
find_common_loop(struct loop * loop_s,struct loop * loop_d)995 find_common_loop (struct loop *loop_s, struct loop *loop_d)
996 {
997   if (!loop_s) return loop_d;
998   if (!loop_d) return loop_s;
999 
1000   if (loop_s->depth < loop_d->depth)
1001     loop_d = loop_d->pred[loop_s->depth];
1002   else if (loop_s->depth > loop_d->depth)
1003     loop_s = loop_s->pred[loop_d->depth];
1004 
1005   while (loop_s != loop_d)
1006     {
1007       loop_s = loop_s->outer;
1008       loop_d = loop_d->outer;
1009     }
1010   return loop_s;
1011 }
1012 
1013 /* Cancels the LOOP; it must be innermost one.  */
1014 
1015 static void
cancel_loop(struct loops * loops,struct loop * loop)1016 cancel_loop (struct loops *loops, struct loop *loop)
1017 {
1018   basic_block *bbs;
1019   unsigned i;
1020 
1021   gcc_assert (!loop->inner);
1022 
1023   /* Move blocks up one level (they should be removed as soon as possible).  */
1024   bbs = get_loop_body (loop);
1025   for (i = 0; i < loop->num_nodes; i++)
1026     bbs[i]->loop_father = loop->outer;
1027 
1028   /* Remove the loop from structure.  */
1029   flow_loop_tree_node_remove (loop);
1030 
1031   /* Remove loop from loops array.  */
1032   loops->parray[loop->num] = NULL;
1033 
1034   /* Free loop data.  */
1035   flow_loop_free (loop);
1036 }
1037 
1038 /* Cancels LOOP and all its subloops.  */
1039 void
cancel_loop_tree(struct loops * loops,struct loop * loop)1040 cancel_loop_tree (struct loops *loops, struct loop *loop)
1041 {
1042   while (loop->inner)
1043     cancel_loop_tree (loops, loop->inner);
1044   cancel_loop (loops, loop);
1045 }
1046 
1047 /* Checks that LOOPS are all right:
1048      -- sizes of loops are all right
1049      -- results of get_loop_body really belong to the loop
1050      -- loop header have just single entry edge and single latch edge
1051      -- loop latches have only single successor that is header of their loop
1052      -- irreducible loops are correctly marked
1053   */
1054 void
verify_loop_structure(struct loops * loops)1055 verify_loop_structure (struct loops *loops)
1056 {
1057   unsigned *sizes, i, j;
1058   sbitmap irreds;
1059   basic_block *bbs, bb;
1060   struct loop *loop;
1061   int err = 0;
1062   edge e;
1063 
1064   /* Check sizes.  */
1065   sizes = XCNEWVEC (unsigned, loops->num);
1066   sizes[0] = 2;
1067 
1068   FOR_EACH_BB (bb)
1069     for (loop = bb->loop_father; loop; loop = loop->outer)
1070       sizes[loop->num]++;
1071 
1072   for (i = 0; i < loops->num; i++)
1073     {
1074       if (!loops->parray[i])
1075 	continue;
1076 
1077       if (loops->parray[i]->num_nodes != sizes[i])
1078 	{
1079 	  error ("size of loop %d should be %d, not %d",
1080 		   i, sizes[i], loops->parray[i]->num_nodes);
1081 	  err = 1;
1082 	}
1083     }
1084 
1085   /* Check get_loop_body.  */
1086   for (i = 1; i < loops->num; i++)
1087     {
1088       loop = loops->parray[i];
1089       if (!loop)
1090 	continue;
1091       bbs = get_loop_body (loop);
1092 
1093       for (j = 0; j < loop->num_nodes; j++)
1094 	if (!flow_bb_inside_loop_p (loop, bbs[j]))
1095 	  {
1096 	    error ("bb %d do not belong to loop %d",
1097 		    bbs[j]->index, i);
1098 	    err = 1;
1099 	  }
1100       free (bbs);
1101     }
1102 
1103   /* Check headers and latches.  */
1104   for (i = 1; i < loops->num; i++)
1105     {
1106       loop = loops->parray[i];
1107       if (!loop)
1108 	continue;
1109 
1110       if ((loops->state & LOOPS_HAVE_PREHEADERS)
1111 	  && EDGE_COUNT (loop->header->preds) != 2)
1112 	{
1113 	  error ("loop %d's header does not have exactly 2 entries", i);
1114 	  err = 1;
1115 	}
1116       if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
1117 	{
1118 	  if (!single_succ_p (loop->latch))
1119 	    {
1120 	      error ("loop %d's latch does not have exactly 1 successor", i);
1121 	      err = 1;
1122 	    }
1123 	  if (single_succ (loop->latch) != loop->header)
1124 	    {
1125 	      error ("loop %d's latch does not have header as successor", i);
1126 	      err = 1;
1127 	    }
1128 	  if (loop->latch->loop_father != loop)
1129 	    {
1130 	      error ("loop %d's latch does not belong directly to it", i);
1131 	      err = 1;
1132 	    }
1133 	}
1134       if (loop->header->loop_father != loop)
1135 	{
1136 	  error ("loop %d's header does not belong directly to it", i);
1137 	  err = 1;
1138 	}
1139       if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1140 	  && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
1141 	{
1142 	  error ("loop %d's latch is marked as part of irreducible region", i);
1143 	  err = 1;
1144 	}
1145     }
1146 
1147   /* Check irreducible loops.  */
1148   if (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
1149     {
1150       /* Record old info.  */
1151       irreds = sbitmap_alloc (last_basic_block);
1152       FOR_EACH_BB (bb)
1153 	{
1154 	  edge_iterator ei;
1155 	  if (bb->flags & BB_IRREDUCIBLE_LOOP)
1156 	    SET_BIT (irreds, bb->index);
1157 	  else
1158 	    RESET_BIT (irreds, bb->index);
1159 	  FOR_EACH_EDGE (e, ei, bb->succs)
1160 	    if (e->flags & EDGE_IRREDUCIBLE_LOOP)
1161 	      e->flags |= EDGE_ALL_FLAGS + 1;
1162 	}
1163 
1164       /* Recount it.  */
1165       mark_irreducible_loops (loops);
1166 
1167       /* Compare.  */
1168       FOR_EACH_BB (bb)
1169 	{
1170 	  edge_iterator ei;
1171 
1172 	  if ((bb->flags & BB_IRREDUCIBLE_LOOP)
1173 	      && !TEST_BIT (irreds, bb->index))
1174 	    {
1175 	      error ("basic block %d should be marked irreducible", bb->index);
1176 	      err = 1;
1177 	    }
1178 	  else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
1179 	      && TEST_BIT (irreds, bb->index))
1180 	    {
1181 	      error ("basic block %d should not be marked irreducible", bb->index);
1182 	      err = 1;
1183 	    }
1184 	  FOR_EACH_EDGE (e, ei, bb->succs)
1185 	    {
1186 	      if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
1187 		  && !(e->flags & (EDGE_ALL_FLAGS + 1)))
1188 		{
1189 		  error ("edge from %d to %d should be marked irreducible",
1190 			 e->src->index, e->dest->index);
1191 		  err = 1;
1192 		}
1193 	      else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
1194 		       && (e->flags & (EDGE_ALL_FLAGS + 1)))
1195 		{
1196 		  error ("edge from %d to %d should not be marked irreducible",
1197 			 e->src->index, e->dest->index);
1198 		  err = 1;
1199 		}
1200 	      e->flags &= ~(EDGE_ALL_FLAGS + 1);
1201 	    }
1202 	}
1203       free (irreds);
1204     }
1205 
1206   /* Check the single_exit.  */
1207   if (loops->state & LOOPS_HAVE_MARKED_SINGLE_EXITS)
1208     {
1209       memset (sizes, 0, sizeof (unsigned) * loops->num);
1210       FOR_EACH_BB (bb)
1211 	{
1212 	  edge_iterator ei;
1213 	  if (bb->loop_father == loops->tree_root)
1214 	    continue;
1215 	  FOR_EACH_EDGE (e, ei, bb->succs)
1216 	    {
1217 	      if (e->dest == EXIT_BLOCK_PTR)
1218 		continue;
1219 
1220 	      if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
1221 		continue;
1222 
1223 	      for (loop = bb->loop_father;
1224 		   loop != e->dest->loop_father;
1225 		   loop = loop->outer)
1226 		{
1227 		  sizes[loop->num]++;
1228 		  if (loop->single_exit
1229 		      && loop->single_exit != e)
1230 		    {
1231 		      error ("wrong single exit %d->%d recorded for loop %d",
1232 			     loop->single_exit->src->index,
1233 			     loop->single_exit->dest->index,
1234 			     loop->num);
1235 		      error ("right exit is %d->%d",
1236 			     e->src->index, e->dest->index);
1237 		      err = 1;
1238 		    }
1239 		}
1240 	    }
1241 	}
1242 
1243       for (i = 1; i < loops->num; i++)
1244 	{
1245 	  loop = loops->parray[i];
1246 	  if (!loop)
1247 	    continue;
1248 
1249 	  if (sizes[i] == 1
1250 	      && !loop->single_exit)
1251 	    {
1252 	      error ("single exit not recorded for loop %d", loop->num);
1253 	      err = 1;
1254 	    }
1255 
1256 	  if (sizes[i] != 1
1257 	      && loop->single_exit)
1258 	    {
1259 	      error ("loop %d should not have single exit (%d -> %d)",
1260 		     loop->num,
1261 		     loop->single_exit->src->index,
1262 		     loop->single_exit->dest->index);
1263 	      err = 1;
1264 	    }
1265 	}
1266     }
1267 
1268   gcc_assert (!err);
1269 
1270   free (sizes);
1271 }
1272 
1273 /* Returns latch edge of LOOP.  */
1274 edge
loop_latch_edge(const struct loop * loop)1275 loop_latch_edge (const struct loop *loop)
1276 {
1277   return find_edge (loop->latch, loop->header);
1278 }
1279 
1280 /* Returns preheader edge of LOOP.  */
1281 edge
loop_preheader_edge(const struct loop * loop)1282 loop_preheader_edge (const struct loop *loop)
1283 {
1284   edge e;
1285   edge_iterator ei;
1286 
1287   FOR_EACH_EDGE (e, ei, loop->header->preds)
1288     if (e->src != loop->latch)
1289       break;
1290 
1291   return e;
1292 }
1293 
1294 /* Returns true if E is an exit of LOOP.  */
1295 
1296 bool
loop_exit_edge_p(const struct loop * loop,edge e)1297 loop_exit_edge_p (const struct loop *loop, edge e)
1298 {
1299   return (flow_bb_inside_loop_p (loop, e->src)
1300 	  && !flow_bb_inside_loop_p (loop, e->dest));
1301 }
1302