xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cfganal.c (revision 413d532bcc3f62d122e56d92e13ac64825a40baf)
1 /* Control flow graph analysis code for GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008
4    Free Software Foundation, Inc.
5 
6 This file is part of GCC.
7 
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12 
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21 
22 /* This file contains various simple utilities to analyze the CFG.  */
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "rtl.h"
28 #include "obstack.h"
29 #include "hard-reg-set.h"
30 #include "basic-block.h"
31 #include "insn-config.h"
32 #include "recog.h"
33 #include "toplev.h"
34 #include "tm_p.h"
35 #include "vec.h"
36 #include "vecprim.h"
37 #include "timevar.h"
38 
39 /* Store the data structures necessary for depth-first search.  */
40 struct depth_first_search_dsS {
41   /* stack for backtracking during the algorithm */
42   basic_block *stack;
43 
44   /* number of edges in the stack.  That is, positions 0, ..., sp-1
45      have edges.  */
46   unsigned int sp;
47 
48   /* record of basic blocks already seen by depth-first search */
49   sbitmap visited_blocks;
50 };
51 typedef struct depth_first_search_dsS *depth_first_search_ds;
52 
53 static void flow_dfs_compute_reverse_init (depth_first_search_ds);
54 static void flow_dfs_compute_reverse_add_bb (depth_first_search_ds,
55 					     basic_block);
56 static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds,
57 						     basic_block);
58 static void flow_dfs_compute_reverse_finish (depth_first_search_ds);
59 static bool flow_active_insn_p (const_rtx);
60 
61 /* Like active_insn_p, except keep the return value clobber around
62    even after reload.  */
63 
64 static bool
65 flow_active_insn_p (const_rtx insn)
66 {
67   if (active_insn_p (insn))
68     return true;
69 
70   /* A clobber of the function return value exists for buggy
71      programs that fail to return a value.  Its effect is to
72      keep the return value from being live across the entire
73      function.  If we allow it to be skipped, we introduce the
74      possibility for register lifetime confusion.  */
75   if (GET_CODE (PATTERN (insn)) == CLOBBER
76       && REG_P (XEXP (PATTERN (insn), 0))
77       && REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))
78     return true;
79 
80   return false;
81 }
82 
83 /* Return true if the block has no effect and only forwards control flow to
84    its single destination.  */
85 
86 bool
87 forwarder_block_p (const_basic_block bb)
88 {
89   rtx insn;
90 
91   if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR
92       || !single_succ_p (bb))
93     return false;
94 
95   for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))
96     if (INSN_P (insn) && flow_active_insn_p (insn))
97       return false;
98 
99   return (!INSN_P (insn)
100 	  || (JUMP_P (insn) && simplejump_p (insn))
101 	  || !flow_active_insn_p (insn));
102 }
103 
104 /* Return nonzero if we can reach target from src by falling through.  */
105 
106 bool
107 can_fallthru (basic_block src, basic_block target)
108 {
109   rtx insn = BB_END (src);
110   rtx insn2;
111   edge e;
112   edge_iterator ei;
113 
114   if (target == EXIT_BLOCK_PTR)
115     return true;
116   if (src->next_bb != target)
117     return 0;
118   FOR_EACH_EDGE (e, ei, src->succs)
119     if (e->dest == EXIT_BLOCK_PTR
120 	&& e->flags & EDGE_FALLTHRU)
121       return 0;
122 
123   insn2 = BB_HEAD (target);
124   if (insn2 && !active_insn_p (insn2))
125     insn2 = next_active_insn (insn2);
126 
127   /* ??? Later we may add code to move jump tables offline.  */
128   return next_active_insn (insn) == insn2;
129 }
130 
131 /* Return nonzero if we could reach target from src by falling through,
132    if the target was made adjacent.  If we already have a fall-through
133    edge to the exit block, we can't do that.  */
134 bool
135 could_fall_through (basic_block src, basic_block target)
136 {
137   edge e;
138   edge_iterator ei;
139 
140   if (target == EXIT_BLOCK_PTR)
141     return true;
142   FOR_EACH_EDGE (e, ei, src->succs)
143     if (e->dest == EXIT_BLOCK_PTR
144 	&& e->flags & EDGE_FALLTHRU)
145       return 0;
146   return true;
147 }
148 
149 /* Mark the back edges in DFS traversal.
150    Return nonzero if a loop (natural or otherwise) is present.
151    Inspired by Depth_First_Search_PP described in:
152 
153      Advanced Compiler Design and Implementation
154      Steven Muchnick
155      Morgan Kaufmann, 1997
156 
157    and heavily borrowed from pre_and_rev_post_order_compute.  */
158 
159 bool
160 mark_dfs_back_edges (void)
161 {
162   edge_iterator *stack;
163   int *pre;
164   int *post;
165   int sp;
166   int prenum = 1;
167   int postnum = 1;
168   sbitmap visited;
169   bool found = false;
170 
171   /* Allocate the preorder and postorder number arrays.  */
172   pre = XCNEWVEC (int, last_basic_block);
173   post = XCNEWVEC (int, last_basic_block);
174 
175   /* Allocate stack for back-tracking up CFG.  */
176   stack = XNEWVEC (edge_iterator, n_basic_blocks + 1);
177   sp = 0;
178 
179   /* Allocate bitmap to track nodes that have been visited.  */
180   visited = sbitmap_alloc (last_basic_block);
181 
182   /* None of the nodes in the CFG have been visited yet.  */
183   sbitmap_zero (visited);
184 
185   /* Push the first edge on to the stack.  */
186   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
187 
188   while (sp)
189     {
190       edge_iterator ei;
191       basic_block src;
192       basic_block dest;
193 
194       /* Look at the edge on the top of the stack.  */
195       ei = stack[sp - 1];
196       src = ei_edge (ei)->src;
197       dest = ei_edge (ei)->dest;
198       ei_edge (ei)->flags &= ~EDGE_DFS_BACK;
199 
200       /* Check if the edge destination has been visited yet.  */
201       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
202 	{
203 	  /* Mark that we have visited the destination.  */
204 	  SET_BIT (visited, dest->index);
205 
206 	  pre[dest->index] = prenum++;
207 	  if (EDGE_COUNT (dest->succs) > 0)
208 	    {
209 	      /* Since the DEST node has been visited for the first
210 		 time, check its successors.  */
211 	      stack[sp++] = ei_start (dest->succs);
212 	    }
213 	  else
214 	    post[dest->index] = postnum++;
215 	}
216       else
217 	{
218 	  if (dest != EXIT_BLOCK_PTR && src != ENTRY_BLOCK_PTR
219 	      && pre[src->index] >= pre[dest->index]
220 	      && post[dest->index] == 0)
221 	    ei_edge (ei)->flags |= EDGE_DFS_BACK, found = true;
222 
223 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR)
224 	    post[src->index] = postnum++;
225 
226 	  if (!ei_one_before_end_p (ei))
227 	    ei_next (&stack[sp - 1]);
228 	  else
229 	    sp--;
230 	}
231     }
232 
233   free (pre);
234   free (post);
235   free (stack);
236   sbitmap_free (visited);
237 
238   return found;
239 }
240 
241 /* Set the flag EDGE_CAN_FALLTHRU for edges that can be fallthru.  */
242 
243 void
244 set_edge_can_fallthru_flag (void)
245 {
246   basic_block bb;
247 
248   FOR_EACH_BB (bb)
249     {
250       edge e;
251       edge_iterator ei;
252 
253       FOR_EACH_EDGE (e, ei, bb->succs)
254 	{
255 	  e->flags &= ~EDGE_CAN_FALLTHRU;
256 
257 	  /* The FALLTHRU edge is also CAN_FALLTHRU edge.  */
258 	  if (e->flags & EDGE_FALLTHRU)
259 	    e->flags |= EDGE_CAN_FALLTHRU;
260 	}
261 
262       /* If the BB ends with an invertible condjump all (2) edges are
263 	 CAN_FALLTHRU edges.  */
264       if (EDGE_COUNT (bb->succs) != 2)
265 	continue;
266       if (!any_condjump_p (BB_END (bb)))
267 	continue;
268       if (!invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0))
269 	continue;
270       invert_jump (BB_END (bb), JUMP_LABEL (BB_END (bb)), 0);
271       EDGE_SUCC (bb, 0)->flags |= EDGE_CAN_FALLTHRU;
272       EDGE_SUCC (bb, 1)->flags |= EDGE_CAN_FALLTHRU;
273     }
274 }
275 
276 /* Find unreachable blocks.  An unreachable block will have 0 in
277    the reachable bit in block->flags.  A nonzero value indicates the
278    block is reachable.  */
279 
280 void
281 find_unreachable_blocks (void)
282 {
283   edge e;
284   edge_iterator ei;
285   basic_block *tos, *worklist, bb;
286 
287   tos = worklist = XNEWVEC (basic_block, n_basic_blocks);
288 
289   /* Clear all the reachability flags.  */
290 
291   FOR_EACH_BB (bb)
292     bb->flags &= ~BB_REACHABLE;
293 
294   /* Add our starting points to the worklist.  Almost always there will
295      be only one.  It isn't inconceivable that we might one day directly
296      support Fortran alternate entry points.  */
297 
298   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
299     {
300       *tos++ = e->dest;
301 
302       /* Mark the block reachable.  */
303       e->dest->flags |= BB_REACHABLE;
304     }
305 
306   /* Iterate: find everything reachable from what we've already seen.  */
307 
308   while (tos != worklist)
309     {
310       basic_block b = *--tos;
311 
312       FOR_EACH_EDGE (e, ei, b->succs)
313 	{
314 	  basic_block dest = e->dest;
315 
316 	  if (!(dest->flags & BB_REACHABLE))
317 	    {
318 	      *tos++ = dest;
319 	      dest->flags |= BB_REACHABLE;
320 	    }
321 	}
322     }
323 
324   free (worklist);
325 }
326 
327 /* Functions to access an edge list with a vector representation.
328    Enough data is kept such that given an index number, the
329    pred and succ that edge represents can be determined, or
330    given a pred and a succ, its index number can be returned.
331    This allows algorithms which consume a lot of memory to
332    represent the normally full matrix of edge (pred,succ) with a
333    single indexed vector,  edge (EDGE_INDEX (pred, succ)), with no
334    wasted space in the client code due to sparse flow graphs.  */
335 
336 /* This functions initializes the edge list. Basically the entire
337    flowgraph is processed, and all edges are assigned a number,
338    and the data structure is filled in.  */
339 
340 struct edge_list *
341 create_edge_list (void)
342 {
343   struct edge_list *elist;
344   edge e;
345   int num_edges;
346   int block_count;
347   basic_block bb;
348   edge_iterator ei;
349 
350   block_count = n_basic_blocks; /* Include the entry and exit blocks.  */
351 
352   num_edges = 0;
353 
354   /* Determine the number of edges in the flow graph by counting successor
355      edges on each basic block.  */
356   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
357     {
358       num_edges += EDGE_COUNT (bb->succs);
359     }
360 
361   elist = XNEW (struct edge_list);
362   elist->num_blocks = block_count;
363   elist->num_edges = num_edges;
364   elist->index_to_edge = XNEWVEC (edge, num_edges);
365 
366   num_edges = 0;
367 
368   /* Follow successors of blocks, and register these edges.  */
369   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
370     FOR_EACH_EDGE (e, ei, bb->succs)
371       elist->index_to_edge[num_edges++] = e;
372 
373   return elist;
374 }
375 
376 /* This function free's memory associated with an edge list.  */
377 
378 void
379 free_edge_list (struct edge_list *elist)
380 {
381   if (elist)
382     {
383       free (elist->index_to_edge);
384       free (elist);
385     }
386 }
387 
388 /* This function provides debug output showing an edge list.  */
389 
390 void
391 print_edge_list (FILE *f, struct edge_list *elist)
392 {
393   int x;
394 
395   fprintf (f, "Compressed edge list, %d BBs + entry & exit, and %d edges\n",
396 	   elist->num_blocks, elist->num_edges);
397 
398   for (x = 0; x < elist->num_edges; x++)
399     {
400       fprintf (f, " %-4d - edge(", x);
401       if (INDEX_EDGE_PRED_BB (elist, x) == ENTRY_BLOCK_PTR)
402 	fprintf (f, "entry,");
403       else
404 	fprintf (f, "%d,", INDEX_EDGE_PRED_BB (elist, x)->index);
405 
406       if (INDEX_EDGE_SUCC_BB (elist, x) == EXIT_BLOCK_PTR)
407 	fprintf (f, "exit)\n");
408       else
409 	fprintf (f, "%d)\n", INDEX_EDGE_SUCC_BB (elist, x)->index);
410     }
411 }
412 
413 /* This function provides an internal consistency check of an edge list,
414    verifying that all edges are present, and that there are no
415    extra edges.  */
416 
417 void
418 verify_edge_list (FILE *f, struct edge_list *elist)
419 {
420   int pred, succ, index;
421   edge e;
422   basic_block bb, p, s;
423   edge_iterator ei;
424 
425   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
426     {
427       FOR_EACH_EDGE (e, ei, bb->succs)
428 	{
429 	  pred = e->src->index;
430 	  succ = e->dest->index;
431 	  index = EDGE_INDEX (elist, e->src, e->dest);
432 	  if (index == EDGE_INDEX_NO_EDGE)
433 	    {
434 	      fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ);
435 	      continue;
436 	    }
437 
438 	  if (INDEX_EDGE_PRED_BB (elist, index)->index != pred)
439 	    fprintf (f, "*p* Pred for index %d should be %d not %d\n",
440 		     index, pred, INDEX_EDGE_PRED_BB (elist, index)->index);
441 	  if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ)
442 	    fprintf (f, "*p* Succ for index %d should be %d not %d\n",
443 		     index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index);
444 	}
445     }
446 
447   /* We've verified that all the edges are in the list, now lets make sure
448      there are no spurious edges in the list.  */
449 
450   FOR_BB_BETWEEN (p, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
451     FOR_BB_BETWEEN (s, ENTRY_BLOCK_PTR->next_bb, NULL, next_bb)
452       {
453 	int found_edge = 0;
454 
455 	FOR_EACH_EDGE (e, ei, p->succs)
456 	  if (e->dest == s)
457 	    {
458 	      found_edge = 1;
459 	      break;
460 	    }
461 
462 	FOR_EACH_EDGE (e, ei, s->preds)
463 	  if (e->src == p)
464 	    {
465 	      found_edge = 1;
466 	      break;
467 	    }
468 
469 	if (EDGE_INDEX (elist, p, s)
470 	    == EDGE_INDEX_NO_EDGE && found_edge != 0)
471 	  fprintf (f, "*** Edge (%d, %d) appears to not have an index\n",
472 		   p->index, s->index);
473 	if (EDGE_INDEX (elist, p, s)
474 	    != EDGE_INDEX_NO_EDGE && found_edge == 0)
475 	  fprintf (f, "*** Edge (%d, %d) has index %d, but there is no edge\n",
476 		   p->index, s->index, EDGE_INDEX (elist, p, s));
477       }
478 }
479 
480 /* Given PRED and SUCC blocks, return the edge which connects the blocks.
481    If no such edge exists, return NULL.  */
482 
483 edge
484 find_edge (basic_block pred, basic_block succ)
485 {
486   edge e;
487   edge_iterator ei;
488 
489   if (EDGE_COUNT (pred->succs) <= EDGE_COUNT (succ->preds))
490     {
491       FOR_EACH_EDGE (e, ei, pred->succs)
492 	if (e->dest == succ)
493 	  return e;
494     }
495   else
496     {
497       FOR_EACH_EDGE (e, ei, succ->preds)
498 	if (e->src == pred)
499 	  return e;
500     }
501 
502   return NULL;
503 }
504 
505 /* This routine will determine what, if any, edge there is between
506    a specified predecessor and successor.  */
507 
508 int
509 find_edge_index (struct edge_list *edge_list, basic_block pred, basic_block succ)
510 {
511   int x;
512 
513   for (x = 0; x < NUM_EDGES (edge_list); x++)
514     if (INDEX_EDGE_PRED_BB (edge_list, x) == pred
515 	&& INDEX_EDGE_SUCC_BB (edge_list, x) == succ)
516       return x;
517 
518   return (EDGE_INDEX_NO_EDGE);
519 }
520 
521 /* Dump the list of basic blocks in the bitmap NODES.  */
522 
523 void
524 flow_nodes_print (const char *str, const_sbitmap nodes, FILE *file)
525 {
526   unsigned int node = 0;
527   sbitmap_iterator sbi;
528 
529   if (! nodes)
530     return;
531 
532   fprintf (file, "%s { ", str);
533   EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, sbi)
534     fprintf (file, "%d ", node);
535   fputs ("}\n", file);
536 }
537 
538 /* Dump the list of edges in the array EDGE_LIST.  */
539 
540 void
541 flow_edge_list_print (const char *str, const edge *edge_list, int num_edges, FILE *file)
542 {
543   int i;
544 
545   if (! edge_list)
546     return;
547 
548   fprintf (file, "%s { ", str);
549   for (i = 0; i < num_edges; i++)
550     fprintf (file, "%d->%d ", edge_list[i]->src->index,
551 	     edge_list[i]->dest->index);
552 
553   fputs ("}\n", file);
554 }
555 
556 
557 /* This routine will remove any fake predecessor edges for a basic block.
558    When the edge is removed, it is also removed from whatever successor
559    list it is in.  */
560 
561 static void
562 remove_fake_predecessors (basic_block bb)
563 {
564   edge e;
565   edge_iterator ei;
566 
567   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
568     {
569       if ((e->flags & EDGE_FAKE) == EDGE_FAKE)
570 	remove_edge (e);
571       else
572 	ei_next (&ei);
573     }
574 }
575 
576 /* This routine will remove all fake edges from the flow graph.  If
577    we remove all fake successors, it will automatically remove all
578    fake predecessors.  */
579 
580 void
581 remove_fake_edges (void)
582 {
583   basic_block bb;
584 
585   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, NULL, next_bb)
586     remove_fake_predecessors (bb);
587 }
588 
589 /* This routine will remove all fake edges to the EXIT_BLOCK.  */
590 
591 void
592 remove_fake_exit_edges (void)
593 {
594   remove_fake_predecessors (EXIT_BLOCK_PTR);
595 }
596 
597 
598 /* This function will add a fake edge between any block which has no
599    successors, and the exit block. Some data flow equations require these
600    edges to exist.  */
601 
602 void
603 add_noreturn_fake_exit_edges (void)
604 {
605   basic_block bb;
606 
607   FOR_EACH_BB (bb)
608     if (EDGE_COUNT (bb->succs) == 0)
609       make_single_succ_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE);
610 }
611 
612 /* This function adds a fake edge between any infinite loops to the
613    exit block.  Some optimizations require a path from each node to
614    the exit node.
615 
616    See also Morgan, Figure 3.10, pp. 82-83.
617 
618    The current implementation is ugly, not attempting to minimize the
619    number of inserted fake edges.  To reduce the number of fake edges
620    to insert, add fake edges from _innermost_ loops containing only
621    nodes not reachable from the exit block.  */
622 
623 void
624 connect_infinite_loops_to_exit (void)
625 {
626   basic_block unvisited_block = EXIT_BLOCK_PTR;
627   struct depth_first_search_dsS dfs_ds;
628 
629   /* Perform depth-first search in the reverse graph to find nodes
630      reachable from the exit block.  */
631   flow_dfs_compute_reverse_init (&dfs_ds);
632   flow_dfs_compute_reverse_add_bb (&dfs_ds, EXIT_BLOCK_PTR);
633 
634   /* Repeatedly add fake edges, updating the unreachable nodes.  */
635   while (1)
636     {
637       unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds,
638 							  unvisited_block);
639       if (!unvisited_block)
640 	break;
641 
642       make_edge (unvisited_block, EXIT_BLOCK_PTR, EDGE_FAKE);
643       flow_dfs_compute_reverse_add_bb (&dfs_ds, unvisited_block);
644     }
645 
646   flow_dfs_compute_reverse_finish (&dfs_ds);
647   return;
648 }
649 
650 /* Compute reverse top sort order.  This is computing a post order
651    numbering of the graph.  If INCLUDE_ENTRY_EXIT is true, then then
652    ENTRY_BLOCK and EXIT_BLOCK are included.  If DELETE_UNREACHABLE is
653    true, unreachable blocks are deleted.  */
654 
655 int
656 post_order_compute (int *post_order, bool include_entry_exit,
657 		    bool delete_unreachable)
658 {
659   edge_iterator *stack;
660   int sp;
661   int post_order_num = 0;
662   sbitmap visited;
663   int count;
664 
665   if (include_entry_exit)
666     post_order[post_order_num++] = EXIT_BLOCK;
667 
668   /* Allocate stack for back-tracking up CFG.  */
669   stack = XNEWVEC (edge_iterator, n_basic_blocks + 1);
670   sp = 0;
671 
672   /* Allocate bitmap to track nodes that have been visited.  */
673   visited = sbitmap_alloc (last_basic_block);
674 
675   /* None of the nodes in the CFG have been visited yet.  */
676   sbitmap_zero (visited);
677 
678   /* Push the first edge on to the stack.  */
679   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
680 
681   while (sp)
682     {
683       edge_iterator ei;
684       basic_block src;
685       basic_block dest;
686 
687       /* Look at the edge on the top of the stack.  */
688       ei = stack[sp - 1];
689       src = ei_edge (ei)->src;
690       dest = ei_edge (ei)->dest;
691 
692       /* Check if the edge destination has been visited yet.  */
693       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
694 	{
695 	  /* Mark that we have visited the destination.  */
696 	  SET_BIT (visited, dest->index);
697 
698 	  if (EDGE_COUNT (dest->succs) > 0)
699 	    /* Since the DEST node has been visited for the first
700 	       time, check its successors.  */
701 	    stack[sp++] = ei_start (dest->succs);
702 	  else
703 	    post_order[post_order_num++] = dest->index;
704 	}
705       else
706 	{
707 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR)
708 	    post_order[post_order_num++] = src->index;
709 
710 	  if (!ei_one_before_end_p (ei))
711 	    ei_next (&stack[sp - 1]);
712 	  else
713 	    sp--;
714 	}
715     }
716 
717   if (include_entry_exit)
718     {
719       post_order[post_order_num++] = ENTRY_BLOCK;
720       count = post_order_num;
721     }
722   else
723     count = post_order_num + 2;
724 
725   /* Delete the unreachable blocks if some were found and we are
726      supposed to do it.  */
727   if (delete_unreachable && (count != n_basic_blocks))
728     {
729       basic_block b;
730       basic_block next_bb;
731       for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = next_bb)
732 	{
733 	  next_bb = b->next_bb;
734 
735 	  if (!(TEST_BIT (visited, b->index)))
736 	    delete_basic_block (b);
737 	}
738 
739       tidy_fallthru_edges ();
740     }
741 
742   free (stack);
743   sbitmap_free (visited);
744   return post_order_num;
745 }
746 
747 
748 /* Helper routine for inverted_post_order_compute.
749    BB has to belong to a region of CFG
750    unreachable by inverted traversal from the exit.
751    i.e. there's no control flow path from ENTRY to EXIT
752    that contains this BB.
753    This can happen in two cases - if there's an infinite loop
754    or if there's a block that has no successor
755    (call to a function with no return).
756    Some RTL passes deal with this condition by
757    calling connect_infinite_loops_to_exit () and/or
758    add_noreturn_fake_exit_edges ().
759    However, those methods involve modifying the CFG itself
760    which may not be desirable.
761    Hence, we deal with the infinite loop/no return cases
762    by identifying a unique basic block that can reach all blocks
763    in such a region by inverted traversal.
764    This function returns a basic block that guarantees
765    that all blocks in the region are reachable
766    by starting an inverted traversal from the returned block.  */
767 
768 static basic_block
769 dfs_find_deadend (basic_block bb)
770 {
771   sbitmap visited = sbitmap_alloc (last_basic_block);
772   sbitmap_zero (visited);
773 
774   for (;;)
775     {
776       SET_BIT (visited, bb->index);
777       if (EDGE_COUNT (bb->succs) == 0
778           || TEST_BIT (visited, EDGE_SUCC (bb, 0)->dest->index))
779         {
780           sbitmap_free (visited);
781           return bb;
782         }
783 
784       bb = EDGE_SUCC (bb, 0)->dest;
785     }
786 
787   gcc_unreachable ();
788 }
789 
790 
791 /* Compute the reverse top sort order of the inverted CFG
792    i.e. starting from the exit block and following the edges backward
793    (from successors to predecessors).
794    This ordering can be used for forward dataflow problems among others.
795 
796    This function assumes that all blocks in the CFG are reachable
797    from the ENTRY (but not necessarily from EXIT).
798 
799    If there's an infinite loop,
800    a simple inverted traversal starting from the blocks
801    with no successors can't visit all blocks.
802    To solve this problem, we first do inverted traversal
803    starting from the blocks with no successor.
804    And if there's any block left that's not visited by the regular
805    inverted traversal from EXIT,
806    those blocks are in such problematic region.
807    Among those, we find one block that has
808    any visited predecessor (which is an entry into such a region),
809    and start looking for a "dead end" from that block
810    and do another inverted traversal from that block.  */
811 
812 int
813 inverted_post_order_compute (int *post_order)
814 {
815   basic_block bb;
816   edge_iterator *stack;
817   int sp;
818   int post_order_num = 0;
819   sbitmap visited;
820 
821   /* Allocate stack for back-tracking up CFG.  */
822   stack = XNEWVEC (edge_iterator, n_basic_blocks + 1);
823   sp = 0;
824 
825   /* Allocate bitmap to track nodes that have been visited.  */
826   visited = sbitmap_alloc (last_basic_block);
827 
828   /* None of the nodes in the CFG have been visited yet.  */
829   sbitmap_zero (visited);
830 
831   /* Put all blocks that have no successor into the initial work list.  */
832   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
833     if (EDGE_COUNT (bb->succs) == 0)
834       {
835         /* Push the initial edge on to the stack.  */
836         if (EDGE_COUNT (bb->preds) > 0)
837           {
838             stack[sp++] = ei_start (bb->preds);
839             SET_BIT (visited, bb->index);
840           }
841       }
842 
843   do
844     {
845       bool has_unvisited_bb = false;
846 
847       /* The inverted traversal loop. */
848       while (sp)
849         {
850           edge_iterator ei;
851           basic_block pred;
852 
853           /* Look at the edge on the top of the stack.  */
854           ei = stack[sp - 1];
855           bb = ei_edge (ei)->dest;
856           pred = ei_edge (ei)->src;
857 
858           /* Check if the predecessor has been visited yet.  */
859           if (! TEST_BIT (visited, pred->index))
860             {
861               /* Mark that we have visited the destination.  */
862               SET_BIT (visited, pred->index);
863 
864               if (EDGE_COUNT (pred->preds) > 0)
865                 /* Since the predecessor node has been visited for the first
866                    time, check its predecessors.  */
867                 stack[sp++] = ei_start (pred->preds);
868               else
869                 post_order[post_order_num++] = pred->index;
870             }
871           else
872             {
873               if (bb != EXIT_BLOCK_PTR && ei_one_before_end_p (ei))
874                 post_order[post_order_num++] = bb->index;
875 
876               if (!ei_one_before_end_p (ei))
877                 ei_next (&stack[sp - 1]);
878               else
879                 sp--;
880             }
881         }
882 
883       /* Detect any infinite loop and activate the kludge.
884          Note that this doesn't check EXIT_BLOCK itself
885          since EXIT_BLOCK is always added after the outer do-while loop.  */
886       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
887         if (!TEST_BIT (visited, bb->index))
888           {
889             has_unvisited_bb = true;
890 
891             if (EDGE_COUNT (bb->preds) > 0)
892               {
893                 edge_iterator ei;
894                 edge e;
895                 basic_block visited_pred = NULL;
896 
897                 /* Find an already visited predecessor.  */
898                 FOR_EACH_EDGE (e, ei, bb->preds)
899                   {
900                     if (TEST_BIT (visited, e->src->index))
901                       visited_pred = e->src;
902                   }
903 
904                 if (visited_pred)
905                   {
906                     basic_block be = dfs_find_deadend (bb);
907                     gcc_assert (be != NULL);
908                     SET_BIT (visited, be->index);
909                     stack[sp++] = ei_start (be->preds);
910                     break;
911                   }
912               }
913           }
914 
915       if (has_unvisited_bb && sp == 0)
916         {
917           /* No blocks are reachable from EXIT at all.
918              Find a dead-end from the ENTRY, and restart the iteration. */
919           basic_block be = dfs_find_deadend (ENTRY_BLOCK_PTR);
920           gcc_assert (be != NULL);
921           SET_BIT (visited, be->index);
922           stack[sp++] = ei_start (be->preds);
923         }
924 
925       /* The only case the below while fires is
926          when there's an infinite loop.  */
927     }
928   while (sp);
929 
930   /* EXIT_BLOCK is always included.  */
931   post_order[post_order_num++] = EXIT_BLOCK;
932 
933   free (stack);
934   sbitmap_free (visited);
935   return post_order_num;
936 }
937 
938 /* Compute the depth first search order and store in the array
939   PRE_ORDER if nonzero, marking the nodes visited in VISITED.  If
940   REV_POST_ORDER is nonzero, return the reverse completion number for each
941   node.  Returns the number of nodes visited.  A depth first search
942   tries to get as far away from the starting point as quickly as
943   possible.
944 
945   pre_order is a really a preorder numbering of the graph.
946   rev_post_order is really a reverse postorder numbering of the graph.
947  */
948 
949 int
950 pre_and_rev_post_order_compute (int *pre_order, int *rev_post_order,
951 				bool include_entry_exit)
952 {
953   edge_iterator *stack;
954   int sp;
955   int pre_order_num = 0;
956   int rev_post_order_num = n_basic_blocks - 1;
957   sbitmap visited;
958 
959   /* Allocate stack for back-tracking up CFG.  */
960   stack = XNEWVEC (edge_iterator, n_basic_blocks + 1);
961   sp = 0;
962 
963   if (include_entry_exit)
964     {
965       if (pre_order)
966 	pre_order[pre_order_num] = ENTRY_BLOCK;
967       pre_order_num++;
968       if (rev_post_order)
969 	rev_post_order[rev_post_order_num--] = ENTRY_BLOCK;
970     }
971   else
972     rev_post_order_num -= NUM_FIXED_BLOCKS;
973 
974   /* Allocate bitmap to track nodes that have been visited.  */
975   visited = sbitmap_alloc (last_basic_block);
976 
977   /* None of the nodes in the CFG have been visited yet.  */
978   sbitmap_zero (visited);
979 
980   /* Push the first edge on to the stack.  */
981   stack[sp++] = ei_start (ENTRY_BLOCK_PTR->succs);
982 
983   while (sp)
984     {
985       edge_iterator ei;
986       basic_block src;
987       basic_block dest;
988 
989       /* Look at the edge on the top of the stack.  */
990       ei = stack[sp - 1];
991       src = ei_edge (ei)->src;
992       dest = ei_edge (ei)->dest;
993 
994       /* Check if the edge destination has been visited yet.  */
995       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
996 	{
997 	  /* Mark that we have visited the destination.  */
998 	  SET_BIT (visited, dest->index);
999 
1000 	  if (pre_order)
1001 	    pre_order[pre_order_num] = dest->index;
1002 
1003 	  pre_order_num++;
1004 
1005 	  if (EDGE_COUNT (dest->succs) > 0)
1006 	    /* Since the DEST node has been visited for the first
1007 	       time, check its successors.  */
1008 	    stack[sp++] = ei_start (dest->succs);
1009 	  else if (rev_post_order)
1010 	    /* There are no successors for the DEST node so assign
1011 	       its reverse completion number.  */
1012 	    rev_post_order[rev_post_order_num--] = dest->index;
1013 	}
1014       else
1015 	{
1016 	  if (ei_one_before_end_p (ei) && src != ENTRY_BLOCK_PTR
1017 	      && rev_post_order)
1018 	    /* There are no more successors for the SRC node
1019 	       so assign its reverse completion number.  */
1020 	    rev_post_order[rev_post_order_num--] = src->index;
1021 
1022 	  if (!ei_one_before_end_p (ei))
1023 	    ei_next (&stack[sp - 1]);
1024 	  else
1025 	    sp--;
1026 	}
1027     }
1028 
1029   free (stack);
1030   sbitmap_free (visited);
1031 
1032   if (include_entry_exit)
1033     {
1034       if (pre_order)
1035 	pre_order[pre_order_num] = EXIT_BLOCK;
1036       pre_order_num++;
1037       if (rev_post_order)
1038 	rev_post_order[rev_post_order_num--] = EXIT_BLOCK;
1039       /* The number of nodes visited should be the number of blocks.  */
1040       gcc_assert (pre_order_num == n_basic_blocks);
1041     }
1042   else
1043     /* The number of nodes visited should be the number of blocks minus
1044        the entry and exit blocks which are not visited here.  */
1045     gcc_assert (pre_order_num == n_basic_blocks - NUM_FIXED_BLOCKS);
1046 
1047   return pre_order_num;
1048 }
1049 
1050 /* Compute the depth first search order on the _reverse_ graph and
1051    store in the array DFS_ORDER, marking the nodes visited in VISITED.
1052    Returns the number of nodes visited.
1053 
1054    The computation is split into three pieces:
1055 
1056    flow_dfs_compute_reverse_init () creates the necessary data
1057    structures.
1058 
1059    flow_dfs_compute_reverse_add_bb () adds a basic block to the data
1060    structures.  The block will start the search.
1061 
1062    flow_dfs_compute_reverse_execute () continues (or starts) the
1063    search using the block on the top of the stack, stopping when the
1064    stack is empty.
1065 
1066    flow_dfs_compute_reverse_finish () destroys the necessary data
1067    structures.
1068 
1069    Thus, the user will probably call ..._init(), call ..._add_bb() to
1070    add a beginning basic block to the stack, call ..._execute(),
1071    possibly add another bb to the stack and again call ..._execute(),
1072    ..., and finally call _finish().  */
1073 
1074 /* Initialize the data structures used for depth-first search on the
1075    reverse graph.  If INITIALIZE_STACK is nonzero, the exit block is
1076    added to the basic block stack.  DATA is the current depth-first
1077    search context.  If INITIALIZE_STACK is nonzero, there is an
1078    element on the stack.  */
1079 
1080 static void
1081 flow_dfs_compute_reverse_init (depth_first_search_ds data)
1082 {
1083   /* Allocate stack for back-tracking up CFG.  */
1084   data->stack = XNEWVEC (basic_block, n_basic_blocks);
1085   data->sp = 0;
1086 
1087   /* Allocate bitmap to track nodes that have been visited.  */
1088   data->visited_blocks = sbitmap_alloc (last_basic_block);
1089 
1090   /* None of the nodes in the CFG have been visited yet.  */
1091   sbitmap_zero (data->visited_blocks);
1092 
1093   return;
1094 }
1095 
1096 /* Add the specified basic block to the top of the dfs data
1097    structures.  When the search continues, it will start at the
1098    block.  */
1099 
1100 static void
1101 flow_dfs_compute_reverse_add_bb (depth_first_search_ds data, basic_block bb)
1102 {
1103   data->stack[data->sp++] = bb;
1104   SET_BIT (data->visited_blocks, bb->index);
1105 }
1106 
1107 /* Continue the depth-first search through the reverse graph starting with the
1108    block at the stack's top and ending when the stack is empty.  Visited nodes
1109    are marked.  Returns an unvisited basic block, or NULL if there is none
1110    available.  */
1111 
1112 static basic_block
1113 flow_dfs_compute_reverse_execute (depth_first_search_ds data,
1114 				  basic_block last_unvisited)
1115 {
1116   basic_block bb;
1117   edge e;
1118   edge_iterator ei;
1119 
1120   while (data->sp > 0)
1121     {
1122       bb = data->stack[--data->sp];
1123 
1124       /* Perform depth-first search on adjacent vertices.  */
1125       FOR_EACH_EDGE (e, ei, bb->preds)
1126 	if (!TEST_BIT (data->visited_blocks, e->src->index))
1127 	  flow_dfs_compute_reverse_add_bb (data, e->src);
1128     }
1129 
1130   /* Determine if there are unvisited basic blocks.  */
1131   FOR_BB_BETWEEN (bb, last_unvisited, NULL, prev_bb)
1132     if (!TEST_BIT (data->visited_blocks, bb->index))
1133       return bb;
1134 
1135   return NULL;
1136 }
1137 
1138 /* Destroy the data structures needed for depth-first search on the
1139    reverse graph.  */
1140 
1141 static void
1142 flow_dfs_compute_reverse_finish (depth_first_search_ds data)
1143 {
1144   free (data->stack);
1145   sbitmap_free (data->visited_blocks);
1146 }
1147 
1148 /* Performs dfs search from BB over vertices satisfying PREDICATE;
1149    if REVERSE, go against direction of edges.  Returns number of blocks
1150    found and their list in RSLT.  RSLT can contain at most RSLT_MAX items.  */
1151 int
1152 dfs_enumerate_from (basic_block bb, int reverse,
1153 		    bool (*predicate) (const_basic_block, const void *),
1154 		    basic_block *rslt, int rslt_max, const void *data)
1155 {
1156   basic_block *st, lbb;
1157   int sp = 0, tv = 0;
1158   unsigned size;
1159 
1160   /* A bitmap to keep track of visited blocks.  Allocating it each time
1161      this function is called is not possible, since dfs_enumerate_from
1162      is often used on small (almost) disjoint parts of cfg (bodies of
1163      loops), and allocating a large sbitmap would lead to quadratic
1164      behavior.  */
1165   static sbitmap visited;
1166   static unsigned v_size;
1167 
1168 #define MARK_VISITED(BB) (SET_BIT (visited, (BB)->index))
1169 #define UNMARK_VISITED(BB) (RESET_BIT (visited, (BB)->index))
1170 #define VISITED_P(BB) (TEST_BIT (visited, (BB)->index))
1171 
1172   /* Resize the VISITED sbitmap if necessary.  */
1173   size = last_basic_block;
1174   if (size < 10)
1175     size = 10;
1176 
1177   if (!visited)
1178     {
1179 
1180       visited = sbitmap_alloc (size);
1181       sbitmap_zero (visited);
1182       v_size = size;
1183     }
1184   else if (v_size < size)
1185     {
1186       /* Ensure that we increase the size of the sbitmap exponentially.  */
1187       if (2 * v_size > size)
1188 	size = 2 * v_size;
1189 
1190       visited = sbitmap_resize (visited, size, 0);
1191       v_size = size;
1192     }
1193 
1194   st = XCNEWVEC (basic_block, rslt_max);
1195   rslt[tv++] = st[sp++] = bb;
1196   MARK_VISITED (bb);
1197   while (sp)
1198     {
1199       edge e;
1200       edge_iterator ei;
1201       lbb = st[--sp];
1202       if (reverse)
1203 	{
1204 	  FOR_EACH_EDGE (e, ei, lbb->preds)
1205 	    if (!VISITED_P (e->src) && predicate (e->src, data))
1206 	      {
1207 		gcc_assert (tv != rslt_max);
1208 		rslt[tv++] = st[sp++] = e->src;
1209 		MARK_VISITED (e->src);
1210 	      }
1211 	}
1212       else
1213 	{
1214 	  FOR_EACH_EDGE (e, ei, lbb->succs)
1215 	    if (!VISITED_P (e->dest) && predicate (e->dest, data))
1216 	      {
1217 		gcc_assert (tv != rslt_max);
1218 		rslt[tv++] = st[sp++] = e->dest;
1219 		MARK_VISITED (e->dest);
1220 	      }
1221 	}
1222     }
1223   free (st);
1224   for (sp = 0; sp < tv; sp++)
1225     UNMARK_VISITED (rslt[sp]);
1226   return tv;
1227 #undef MARK_VISITED
1228 #undef UNMARK_VISITED
1229 #undef VISITED_P
1230 }
1231 
1232 
1233 /* Compute dominance frontiers, ala Harvey, Ferrante, et al.
1234 
1235    This algorithm can be found in Timothy Harvey's PhD thesis, at
1236    http://www.cs.rice.edu/~harv/dissertation.pdf in the section on iterative
1237    dominance algorithms.
1238 
1239    First, we identify each join point, j (any node with more than one
1240    incoming edge is a join point).
1241 
1242    We then examine each predecessor, p, of j and walk up the dominator tree
1243    starting at p.
1244 
1245    We stop the walk when we reach j's immediate dominator - j is in the
1246    dominance frontier of each of  the nodes in the walk, except for j's
1247    immediate dominator. Intuitively, all of the rest of j's dominators are
1248    shared by j's predecessors as well.
1249    Since they dominate j, they will not have j in their dominance frontiers.
1250 
1251    The number of nodes touched by this algorithm is equal to the size
1252    of the dominance frontiers, no more, no less.
1253 */
1254 
1255 
1256 static void
1257 compute_dominance_frontiers_1 (bitmap *frontiers)
1258 {
1259   edge p;
1260   edge_iterator ei;
1261   basic_block b;
1262   FOR_EACH_BB (b)
1263     {
1264       if (EDGE_COUNT (b->preds) >= 2)
1265 	{
1266 	  FOR_EACH_EDGE (p, ei, b->preds)
1267 	    {
1268 	      basic_block runner = p->src;
1269 	      basic_block domsb;
1270 	      if (runner == ENTRY_BLOCK_PTR)
1271 		continue;
1272 
1273 	      domsb = get_immediate_dominator (CDI_DOMINATORS, b);
1274 	      while (runner != domsb)
1275 		{
1276 		  if (bitmap_bit_p (frontiers[runner->index], b->index))
1277 		    break;
1278 		  bitmap_set_bit (frontiers[runner->index],
1279 				  b->index);
1280 		  runner = get_immediate_dominator (CDI_DOMINATORS,
1281 						    runner);
1282 		}
1283 	    }
1284 	}
1285     }
1286 }
1287 
1288 
1289 void
1290 compute_dominance_frontiers (bitmap *frontiers)
1291 {
1292   timevar_push (TV_DOM_FRONTIERS);
1293 
1294   compute_dominance_frontiers_1 (frontiers);
1295 
1296   timevar_pop (TV_DOM_FRONTIERS);
1297 }
1298 
1299 /* Given a set of blocks with variable definitions (DEF_BLOCKS),
1300    return a bitmap with all the blocks in the iterated dominance
1301    frontier of the blocks in DEF_BLOCKS.  DFS contains dominance
1302    frontier information as returned by compute_dominance_frontiers.
1303 
1304    The resulting set of blocks are the potential sites where PHI nodes
1305    are needed.  The caller is responsible for freeing the memory
1306    allocated for the return value.  */
1307 
1308 bitmap
1309 compute_idf (bitmap def_blocks, bitmap *dfs)
1310 {
1311   bitmap_iterator bi;
1312   unsigned bb_index, i;
1313   VEC(int,heap) *work_stack;
1314   bitmap phi_insertion_points;
1315 
1316   work_stack = VEC_alloc (int, heap, n_basic_blocks);
1317   phi_insertion_points = BITMAP_ALLOC (NULL);
1318 
1319   /* Seed the work list with all the blocks in DEF_BLOCKS.  We use
1320      VEC_quick_push here for speed.  This is safe because we know that
1321      the number of definition blocks is no greater than the number of
1322      basic blocks, which is the initial capacity of WORK_STACK.  */
1323   EXECUTE_IF_SET_IN_BITMAP (def_blocks, 0, bb_index, bi)
1324     VEC_quick_push (int, work_stack, bb_index);
1325 
1326   /* Pop a block off the worklist, add every block that appears in
1327      the original block's DF that we have not already processed to
1328      the worklist.  Iterate until the worklist is empty.   Blocks
1329      which are added to the worklist are potential sites for
1330      PHI nodes.  */
1331   while (VEC_length (int, work_stack) > 0)
1332     {
1333       bb_index = VEC_pop (int, work_stack);
1334 
1335       /* Since the registration of NEW -> OLD name mappings is done
1336 	 separately from the call to update_ssa, when updating the SSA
1337 	 form, the basic blocks where new and/or old names are defined
1338 	 may have disappeared by CFG cleanup calls.  In this case,
1339 	 we may pull a non-existing block from the work stack.  */
1340       gcc_assert (bb_index < (unsigned) last_basic_block);
1341 
1342       EXECUTE_IF_AND_COMPL_IN_BITMAP (dfs[bb_index], phi_insertion_points,
1343 	                              0, i, bi)
1344 	{
1345 	  /* Use a safe push because if there is a definition of VAR
1346 	     in every basic block, then WORK_STACK may eventually have
1347 	     more than N_BASIC_BLOCK entries.  */
1348 	  VEC_safe_push (int, heap, work_stack, i);
1349 	  bitmap_set_bit (phi_insertion_points, i);
1350 	}
1351     }
1352 
1353   VEC_free (int, heap, work_stack);
1354 
1355   return phi_insertion_points;
1356 }
1357 
1358 
1359