xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cfg.c (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /* Control flow graph manipulation code for GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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 low level functions to manipulate the CFG and
23    analyze it.  All other modules should not transform the data structure
24    directly and use abstraction instead.  The file is supposed to be
25    ordered bottom-up and should not contain any code dependent on a
26    particular intermediate language (RTL or trees).
27 
28    Available functionality:
29      - Initialization/deallocation
30 	 init_flow, clear_edges
31      - Low level basic block manipulation
32 	 alloc_block, expunge_block
33      - Edge manipulation
34 	 make_edge, make_single_succ_edge, cached_make_edge, remove_edge
35 	 - Low level edge redirection (without updating instruction chain)
36 	     redirect_edge_succ, redirect_edge_succ_nodup, redirect_edge_pred
37      - Dumping and debugging
38 	 dump_flow_info, debug_flow_info, dump_edge_info
39      - Allocation of AUX fields for basic blocks
40 	 alloc_aux_for_blocks, free_aux_for_blocks, alloc_aux_for_block
41      - clear_bb_flags
42      - Consistency checking
43 	 verify_flow_info
44      - Dumping and debugging
45 	 print_rtl_with_bb, dump_bb, debug_bb, debug_bb_n
46  */
47 
48 #include "config.h"
49 #include "system.h"
50 #include "coretypes.h"
51 #include "tm.h"
52 #include "tree.h"
53 #include "rtl.h"
54 #include "hard-reg-set.h"
55 #include "regs.h"
56 #include "flags.h"
57 #include "output.h"
58 #include "function.h"
59 #include "except.h"
60 #include "toplev.h"
61 #include "tm_p.h"
62 #include "obstack.h"
63 #include "timevar.h"
64 #include "tree-pass.h"
65 #include "ggc.h"
66 #include "hashtab.h"
67 #include "alloc-pool.h"
68 #include "df.h"
69 #include "cfgloop.h"
70 #include "tree-flow.h"
71 
72 /* The obstack on which the flow graph components are allocated.  */
73 
74 struct bitmap_obstack reg_obstack;
75 
76 void debug_flow_info (void);
77 static void free_edge (edge);
78 
79 #define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
80 
81 /* Called once at initialization time.  */
82 
83 void
84 init_flow (struct function *the_fun)
85 {
86   if (!the_fun->cfg)
87     the_fun->cfg = GGC_CNEW (struct control_flow_graph);
88   n_edges_for_function (the_fun) = 0;
89   ENTRY_BLOCK_PTR_FOR_FUNCTION (the_fun)
90     = GGC_CNEW (struct basic_block_def);
91   ENTRY_BLOCK_PTR_FOR_FUNCTION (the_fun)->index = ENTRY_BLOCK;
92   EXIT_BLOCK_PTR_FOR_FUNCTION (the_fun)
93     = GGC_CNEW (struct basic_block_def);
94   EXIT_BLOCK_PTR_FOR_FUNCTION (the_fun)->index = EXIT_BLOCK;
95   ENTRY_BLOCK_PTR_FOR_FUNCTION (the_fun)->next_bb
96     = EXIT_BLOCK_PTR_FOR_FUNCTION (the_fun);
97   EXIT_BLOCK_PTR_FOR_FUNCTION (the_fun)->prev_bb
98     = ENTRY_BLOCK_PTR_FOR_FUNCTION (the_fun);
99 }
100 
101 /* Helper function for remove_edge and clear_edges.  Frees edge structure
102    without actually unlinking it from the pred/succ lists.  */
103 
104 static void
105 free_edge (edge e ATTRIBUTE_UNUSED)
106 {
107   n_edges--;
108   ggc_free (e);
109 }
110 
111 /* Free the memory associated with the edge structures.  */
112 
113 void
114 clear_edges (void)
115 {
116   basic_block bb;
117   edge e;
118   edge_iterator ei;
119 
120   FOR_EACH_BB (bb)
121     {
122       FOR_EACH_EDGE (e, ei, bb->succs)
123 	free_edge (e);
124       VEC_truncate (edge, bb->succs, 0);
125       VEC_truncate (edge, bb->preds, 0);
126     }
127 
128   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
129     free_edge (e);
130   VEC_truncate (edge, EXIT_BLOCK_PTR->preds, 0);
131   VEC_truncate (edge, ENTRY_BLOCK_PTR->succs, 0);
132 
133   gcc_assert (!n_edges);
134 }
135 
136 /* Allocate memory for basic_block.  */
137 
138 basic_block
139 alloc_block (void)
140 {
141   basic_block bb;
142   bb = GGC_CNEW (struct basic_block_def);
143   return bb;
144 }
145 
146 /* Link block B to chain after AFTER.  */
147 void
148 link_block (basic_block b, basic_block after)
149 {
150   b->next_bb = after->next_bb;
151   b->prev_bb = after;
152   after->next_bb = b;
153   b->next_bb->prev_bb = b;
154 }
155 
156 /* Unlink block B from chain.  */
157 void
158 unlink_block (basic_block b)
159 {
160   b->next_bb->prev_bb = b->prev_bb;
161   b->prev_bb->next_bb = b->next_bb;
162   b->prev_bb = NULL;
163   b->next_bb = NULL;
164 }
165 
166 /* Sequentially order blocks and compact the arrays.  */
167 void
168 compact_blocks (void)
169 {
170   int i;
171 
172   SET_BASIC_BLOCK (ENTRY_BLOCK, ENTRY_BLOCK_PTR);
173   SET_BASIC_BLOCK (EXIT_BLOCK, EXIT_BLOCK_PTR);
174 
175   if (df)
176     df_compact_blocks ();
177   else
178     {
179       basic_block bb;
180 
181       i = NUM_FIXED_BLOCKS;
182       FOR_EACH_BB (bb)
183 	{
184 	  SET_BASIC_BLOCK (i, bb);
185 	  bb->index = i;
186 	  i++;
187 	}
188       gcc_assert (i == n_basic_blocks);
189 
190       for (; i < last_basic_block; i++)
191 	SET_BASIC_BLOCK (i, NULL);
192     }
193   last_basic_block = n_basic_blocks;
194 }
195 
196 /* Remove block B from the basic block array.  */
197 
198 void
199 expunge_block (basic_block b)
200 {
201   unlink_block (b);
202   SET_BASIC_BLOCK (b->index, NULL);
203   n_basic_blocks--;
204   /* We should be able to ggc_free here, but we are not.
205      The dead SSA_NAMES are left pointing to dead statements that are pointing
206      to dead basic blocks making garbage collector to die.
207      We should be able to release all dead SSA_NAMES and at the same time we should
208      clear out BB pointer of dead statements consistently.  */
209 }
210 
211 /* Connect E to E->src.  */
212 
213 static inline void
214 connect_src (edge e)
215 {
216   VEC_safe_push (edge, gc, e->src->succs, e);
217   df_mark_solutions_dirty ();
218 }
219 
220 /* Connect E to E->dest.  */
221 
222 static inline void
223 connect_dest (edge e)
224 {
225   basic_block dest = e->dest;
226   VEC_safe_push (edge, gc, dest->preds, e);
227   e->dest_idx = EDGE_COUNT (dest->preds) - 1;
228   df_mark_solutions_dirty ();
229 }
230 
231 /* Disconnect edge E from E->src.  */
232 
233 static inline void
234 disconnect_src (edge e)
235 {
236   basic_block src = e->src;
237   edge_iterator ei;
238   edge tmp;
239 
240   for (ei = ei_start (src->succs); (tmp = ei_safe_edge (ei)); )
241     {
242       if (tmp == e)
243 	{
244 	  VEC_unordered_remove (edge, src->succs, ei.index);
245 	  return;
246 	}
247       else
248 	ei_next (&ei);
249     }
250 
251   df_mark_solutions_dirty ();
252   gcc_unreachable ();
253 }
254 
255 /* Disconnect edge E from E->dest.  */
256 
257 static inline void
258 disconnect_dest (edge e)
259 {
260   basic_block dest = e->dest;
261   unsigned int dest_idx = e->dest_idx;
262 
263   VEC_unordered_remove (edge, dest->preds, dest_idx);
264 
265   /* If we removed an edge in the middle of the edge vector, we need
266      to update dest_idx of the edge that moved into the "hole".  */
267   if (dest_idx < EDGE_COUNT (dest->preds))
268     EDGE_PRED (dest, dest_idx)->dest_idx = dest_idx;
269   df_mark_solutions_dirty ();
270 }
271 
272 /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
273    created edge.  Use this only if you are sure that this edge can't
274    possibly already exist.  */
275 
276 edge
277 unchecked_make_edge (basic_block src, basic_block dst, int flags)
278 {
279   edge e;
280   e = GGC_CNEW (struct edge_def);
281   n_edges++;
282 
283   e->src = src;
284   e->dest = dst;
285   e->flags = flags;
286 
287   connect_src (e);
288   connect_dest (e);
289 
290   execute_on_growing_pred (e);
291   return e;
292 }
293 
294 /* Create an edge connecting SRC and DST with FLAGS optionally using
295    edge cache CACHE.  Return the new edge, NULL if already exist.  */
296 
297 edge
298 cached_make_edge (sbitmap edge_cache, basic_block src, basic_block dst, int flags)
299 {
300   if (edge_cache == NULL
301       || src == ENTRY_BLOCK_PTR
302       || dst == EXIT_BLOCK_PTR)
303     return make_edge (src, dst, flags);
304 
305   /* Does the requested edge already exist?  */
306   if (! TEST_BIT (edge_cache, dst->index))
307     {
308       /* The edge does not exist.  Create one and update the
309 	 cache.  */
310       SET_BIT (edge_cache, dst->index);
311       return unchecked_make_edge (src, dst, flags);
312     }
313 
314   /* At this point, we know that the requested edge exists.  Adjust
315      flags if necessary.  */
316   if (flags)
317     {
318       edge e = find_edge (src, dst);
319       e->flags |= flags;
320     }
321 
322   return NULL;
323 }
324 
325 /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
326    created edge or NULL if already exist.  */
327 
328 edge
329 make_edge (basic_block src, basic_block dest, int flags)
330 {
331   edge e = find_edge (src, dest);
332 
333   /* Make sure we don't add duplicate edges.  */
334   if (e)
335     {
336       e->flags |= flags;
337       return NULL;
338     }
339 
340   return unchecked_make_edge (src, dest, flags);
341 }
342 
343 /* Create an edge connecting SRC to DEST and set probability by knowing
344    that it is the single edge leaving SRC.  */
345 
346 edge
347 make_single_succ_edge (basic_block src, basic_block dest, int flags)
348 {
349   edge e = make_edge (src, dest, flags);
350 
351   e->probability = REG_BR_PROB_BASE;
352   e->count = src->count;
353   return e;
354 }
355 
356 /* This function will remove an edge from the flow graph.  */
357 
358 void
359 remove_edge_raw (edge e)
360 {
361   remove_predictions_associated_with_edge (e);
362   execute_on_shrinking_pred (e);
363 
364   disconnect_src (e);
365   disconnect_dest (e);
366 
367   /* This is probably not needed, but it doesn't hurt.  */
368   redirect_edge_var_map_clear (e);
369 
370   free_edge (e);
371 }
372 
373 /* Redirect an edge's successor from one block to another.  */
374 
375 void
376 redirect_edge_succ (edge e, basic_block new_succ)
377 {
378   execute_on_shrinking_pred (e);
379 
380   disconnect_dest (e);
381 
382   e->dest = new_succ;
383 
384   /* Reconnect the edge to the new successor block.  */
385   connect_dest (e);
386 
387   execute_on_growing_pred (e);
388 }
389 
390 /* Like previous but avoid possible duplicate edge.  */
391 
392 edge
393 redirect_edge_succ_nodup (edge e, basic_block new_succ)
394 {
395   edge s;
396 
397   s = find_edge (e->src, new_succ);
398   if (s && s != e)
399     {
400       s->flags |= e->flags;
401       s->probability += e->probability;
402       if (s->probability > REG_BR_PROB_BASE)
403 	s->probability = REG_BR_PROB_BASE;
404       s->count += e->count;
405       remove_edge (e);
406       redirect_edge_var_map_dup (s, e);
407       e = s;
408     }
409   else
410     redirect_edge_succ (e, new_succ);
411 
412   return e;
413 }
414 
415 /* Redirect an edge's predecessor from one block to another.  */
416 
417 void
418 redirect_edge_pred (edge e, basic_block new_pred)
419 {
420   disconnect_src (e);
421 
422   e->src = new_pred;
423 
424   /* Reconnect the edge to the new predecessor block.  */
425   connect_src (e);
426 }
427 
428 /* Clear all basic block flags, with the exception of partitioning and
429    setjmp_target.  */
430 void
431 clear_bb_flags (void)
432 {
433   basic_block bb;
434 
435   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
436     bb->flags = (BB_PARTITION (bb)
437 		 | (bb->flags & (BB_DISABLE_SCHEDULE + BB_RTL + BB_NON_LOCAL_GOTO_TARGET)));
438 }
439 
440 /* Check the consistency of profile information.  We can't do that
441    in verify_flow_info, as the counts may get invalid for incompletely
442    solved graphs, later eliminating of conditionals or roundoff errors.
443    It is still practical to have them reported for debugging of simple
444    testcases.  */
445 void
446 check_bb_profile (basic_block bb, FILE * file)
447 {
448   edge e;
449   int sum = 0;
450   gcov_type lsum;
451   edge_iterator ei;
452 
453   if (profile_status == PROFILE_ABSENT)
454     return;
455 
456   if (bb != EXIT_BLOCK_PTR)
457     {
458       FOR_EACH_EDGE (e, ei, bb->succs)
459 	sum += e->probability;
460       if (EDGE_COUNT (bb->succs) && abs (sum - REG_BR_PROB_BASE) > 100)
461 	fprintf (file, "Invalid sum of outgoing probabilities %.1f%%\n",
462 		 sum * 100.0 / REG_BR_PROB_BASE);
463       lsum = 0;
464       FOR_EACH_EDGE (e, ei, bb->succs)
465 	lsum += e->count;
466       if (EDGE_COUNT (bb->succs)
467 	  && (lsum - bb->count > 100 || lsum - bb->count < -100))
468 	fprintf (file, "Invalid sum of outgoing counts %i, should be %i\n",
469 		 (int) lsum, (int) bb->count);
470     }
471   if (bb != ENTRY_BLOCK_PTR)
472     {
473       sum = 0;
474       FOR_EACH_EDGE (e, ei, bb->preds)
475 	sum += EDGE_FREQUENCY (e);
476       if (abs (sum - bb->frequency) > 100)
477 	fprintf (file,
478 		 "Invalid sum of incoming frequencies %i, should be %i\n",
479 		 sum, bb->frequency);
480       lsum = 0;
481       FOR_EACH_EDGE (e, ei, bb->preds)
482 	lsum += e->count;
483       if (lsum - bb->count > 100 || lsum - bb->count < -100)
484 	fprintf (file, "Invalid sum of incoming counts %i, should be %i\n",
485 		 (int) lsum, (int) bb->count);
486     }
487 }
488 
489 /* Write information about registers and basic blocks into FILE.
490    This is part of making a debugging dump.  */
491 
492 void
493 dump_regset (regset r, FILE *outf)
494 {
495   unsigned i;
496   reg_set_iterator rsi;
497 
498   if (r == NULL)
499     {
500       fputs (" (nil)", outf);
501       return;
502     }
503 
504   EXECUTE_IF_SET_IN_REG_SET (r, 0, i, rsi)
505     {
506       fprintf (outf, " %d", i);
507       if (i < FIRST_PSEUDO_REGISTER)
508 	fprintf (outf, " [%s]",
509 		 reg_names[i]);
510     }
511 }
512 
513 /* Print a human-readable representation of R on the standard error
514    stream.  This function is designed to be used from within the
515    debugger.  */
516 
517 void
518 debug_regset (regset r)
519 {
520   dump_regset (r, stderr);
521   putc ('\n', stderr);
522 }
523 
524 /* Emit basic block information for BB.  HEADER is true if the user wants
525    the generic information and the predecessors, FOOTER is true if they want
526    the successors.  FLAGS is the dump flags of interest; TDF_DETAILS emit
527    global register liveness information.  PREFIX is put in front of every
528    line.  The output is emitted to FILE.  */
529 void
530 dump_bb_info (basic_block bb, bool header, bool footer, int flags,
531 	      const char *prefix, FILE *file)
532 {
533   edge e;
534   edge_iterator ei;
535 
536   if (header)
537     {
538       fprintf (file, "\n%sBasic block %d ", prefix, bb->index);
539       if (bb->prev_bb)
540         fprintf (file, ", prev %d", bb->prev_bb->index);
541       if (bb->next_bb)
542         fprintf (file, ", next %d", bb->next_bb->index);
543       fprintf (file, ", loop_depth %d, count ", bb->loop_depth);
544       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, bb->count);
545       fprintf (file, ", freq %i", bb->frequency);
546       /* Both maybe_hot_bb_p & probably_never_executed_bb_p functions
547 	 crash without cfun. */
548       if (cfun && maybe_hot_bb_p (bb))
549 	fputs (", maybe hot", file);
550       if (cfun && probably_never_executed_bb_p (bb))
551 	fputs (", probably never executed", file);
552       fputs (".\n", file);
553 
554       fprintf (file, "%sPredecessors: ", prefix);
555       FOR_EACH_EDGE (e, ei, bb->preds)
556 	dump_edge_info (file, e, 0);
557 
558       if ((flags & TDF_DETAILS)
559 	  && (bb->flags & BB_RTL)
560 	  && df)
561 	{
562 	  putc ('\n', file);
563 	  df_dump_top (bb, file);
564 	}
565    }
566 
567   if (footer)
568     {
569       fprintf (file, "\n%sSuccessors: ", prefix);
570       FOR_EACH_EDGE (e, ei, bb->succs)
571 	dump_edge_info (file, e, 1);
572 
573       if ((flags & TDF_DETAILS)
574 	  && (bb->flags & BB_RTL)
575 	  && df)
576 	{
577 	  putc ('\n', file);
578 	  df_dump_bottom (bb, file);
579 	}
580    }
581 
582   putc ('\n', file);
583 }
584 
585 /* Dump the register info to FILE.  */
586 
587 void
588 dump_reg_info (FILE *file)
589 {
590   unsigned int i, max = max_reg_num ();
591   if (reload_completed)
592     return;
593 
594   if (reg_info_p_size < max)
595     max = reg_info_p_size;
596 
597   fprintf (file, "%d registers.\n", max);
598   for (i = FIRST_PSEUDO_REGISTER; i < max; i++)
599     {
600       enum reg_class rclass, altclass;
601 
602       if (regstat_n_sets_and_refs)
603 	fprintf (file, "\nRegister %d used %d times across %d insns",
604 		 i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
605       else if (df)
606 	fprintf (file, "\nRegister %d used %d times across %d insns",
607 		 i, DF_REG_USE_COUNT (i) + DF_REG_DEF_COUNT (i), REG_LIVE_LENGTH (i));
608 
609       if (REG_BASIC_BLOCK (i) >= NUM_FIXED_BLOCKS)
610 	fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
611       if (regstat_n_sets_and_refs)
612 	fprintf (file, "; set %d time%s", REG_N_SETS (i),
613 		 (REG_N_SETS (i) == 1) ? "" : "s");
614       else if (df)
615 	fprintf (file, "; set %d time%s", DF_REG_DEF_COUNT (i),
616 		 (DF_REG_DEF_COUNT (i) == 1) ? "" : "s");
617       if (regno_reg_rtx[i] != NULL && REG_USERVAR_P (regno_reg_rtx[i]))
618 	fputs ("; user var", file);
619       if (REG_N_DEATHS (i) != 1)
620 	fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
621       if (REG_N_CALLS_CROSSED (i) == 1)
622 	fputs ("; crosses 1 call", file);
623       else if (REG_N_CALLS_CROSSED (i))
624 	fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
625       if (REG_FREQ_CALLS_CROSSED (i))
626 	fprintf (file, "; crosses call with %d frequency", REG_FREQ_CALLS_CROSSED (i));
627       if (regno_reg_rtx[i] != NULL
628 	  && PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
629 	fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
630 
631       rclass = reg_preferred_class (i);
632       altclass = reg_alternate_class (i);
633       if (rclass != GENERAL_REGS || altclass != ALL_REGS)
634 	{
635 	  if (altclass == ALL_REGS || rclass == ALL_REGS)
636 	    fprintf (file, "; pref %s", reg_class_names[(int) rclass]);
637 	  else if (altclass == NO_REGS)
638 	    fprintf (file, "; %s or none", reg_class_names[(int) rclass]);
639 	  else
640 	    fprintf (file, "; pref %s, else %s",
641 		     reg_class_names[(int) rclass],
642 		     reg_class_names[(int) altclass]);
643 	}
644 
645       if (regno_reg_rtx[i] != NULL && REG_POINTER (regno_reg_rtx[i]))
646 	fputs ("; pointer", file);
647       fputs (".\n", file);
648     }
649 }
650 
651 
652 void
653 dump_flow_info (FILE *file, int flags)
654 {
655   basic_block bb;
656 
657   /* There are no pseudo registers after reload.  Don't dump them.  */
658   if (reg_info_p_size && (flags & TDF_DETAILS) != 0)
659     dump_reg_info (file);
660 
661   fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
662   FOR_ALL_BB (bb)
663     {
664       dump_bb_info (bb, true, true, flags, "", file);
665       check_bb_profile (bb, file);
666     }
667 
668   putc ('\n', file);
669 }
670 
671 void
672 debug_flow_info (void)
673 {
674   dump_flow_info (stderr, TDF_DETAILS);
675 }
676 
677 void
678 dump_edge_info (FILE *file, edge e, int do_succ)
679 {
680   basic_block side = (do_succ ? e->dest : e->src);
681   /* both ENTRY_BLOCK_PTR & EXIT_BLOCK_PTR depend upon cfun. */
682   if (cfun && side == ENTRY_BLOCK_PTR)
683     fputs (" ENTRY", file);
684   else if (cfun && side == EXIT_BLOCK_PTR)
685     fputs (" EXIT", file);
686   else
687     fprintf (file, " %d", side->index);
688 
689   if (e->probability)
690     fprintf (file, " [%.1f%%] ", e->probability * 100.0 / REG_BR_PROB_BASE);
691 
692   if (e->count)
693     {
694       fputs (" count:", file);
695       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, e->count);
696     }
697 
698   if (e->flags)
699     {
700       static const char * const bitnames[] = {
701 	"fallthru", "ab", "abcall", "eh", "fake", "dfs_back",
702 	"can_fallthru", "irreducible", "sibcall", "loop_exit",
703 	"true", "false", "exec"
704       };
705       int comma = 0;
706       int i, flags = e->flags;
707 
708       fputs (" (", file);
709       for (i = 0; flags; i++)
710 	if (flags & (1 << i))
711 	  {
712 	    flags &= ~(1 << i);
713 
714 	    if (comma)
715 	      fputc (',', file);
716 	    if (i < (int) ARRAY_SIZE (bitnames))
717 	      fputs (bitnames[i], file);
718 	    else
719 	      fprintf (file, "%d", i);
720 	    comma = 1;
721 	  }
722 
723       fputc (')', file);
724     }
725 }
726 
727 /* Simple routines to easily allocate AUX fields of basic blocks.  */
728 
729 static struct obstack block_aux_obstack;
730 static void *first_block_aux_obj = 0;
731 static struct obstack edge_aux_obstack;
732 static void *first_edge_aux_obj = 0;
733 
734 /* Allocate a memory block of SIZE as BB->aux.  The obstack must
735    be first initialized by alloc_aux_for_blocks.  */
736 
737 void
738 alloc_aux_for_block (basic_block bb, int size)
739 {
740   /* Verify that aux field is clear.  */
741   gcc_assert (!bb->aux && first_block_aux_obj);
742   bb->aux = obstack_alloc (&block_aux_obstack, size);
743   memset (bb->aux, 0, size);
744 }
745 
746 /* Initialize the block_aux_obstack and if SIZE is nonzero, call
747    alloc_aux_for_block for each basic block.  */
748 
749 void
750 alloc_aux_for_blocks (int size)
751 {
752   static int initialized;
753 
754   if (!initialized)
755     {
756       gcc_obstack_init (&block_aux_obstack);
757       initialized = 1;
758     }
759   else
760     /* Check whether AUX data are still allocated.  */
761     gcc_assert (!first_block_aux_obj);
762 
763   first_block_aux_obj = obstack_alloc (&block_aux_obstack, 0);
764   if (size)
765     {
766       basic_block bb;
767 
768       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
769 	alloc_aux_for_block (bb, size);
770     }
771 }
772 
773 /* Clear AUX pointers of all blocks.  */
774 
775 void
776 clear_aux_for_blocks (void)
777 {
778   basic_block bb;
779 
780   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
781     bb->aux = NULL;
782 }
783 
784 /* Free data allocated in block_aux_obstack and clear AUX pointers
785    of all blocks.  */
786 
787 void
788 free_aux_for_blocks (void)
789 {
790   gcc_assert (first_block_aux_obj);
791   obstack_free (&block_aux_obstack, first_block_aux_obj);
792   first_block_aux_obj = NULL;
793 
794   clear_aux_for_blocks ();
795 }
796 
797 /* Allocate a memory edge of SIZE as BB->aux.  The obstack must
798    be first initialized by alloc_aux_for_edges.  */
799 
800 void
801 alloc_aux_for_edge (edge e, int size)
802 {
803   /* Verify that aux field is clear.  */
804   gcc_assert (!e->aux && first_edge_aux_obj);
805   e->aux = obstack_alloc (&edge_aux_obstack, size);
806   memset (e->aux, 0, size);
807 }
808 
809 /* Initialize the edge_aux_obstack and if SIZE is nonzero, call
810    alloc_aux_for_edge for each basic edge.  */
811 
812 void
813 alloc_aux_for_edges (int size)
814 {
815   static int initialized;
816 
817   if (!initialized)
818     {
819       gcc_obstack_init (&edge_aux_obstack);
820       initialized = 1;
821     }
822   else
823     /* Check whether AUX data are still allocated.  */
824     gcc_assert (!first_edge_aux_obj);
825 
826   first_edge_aux_obj = obstack_alloc (&edge_aux_obstack, 0);
827   if (size)
828     {
829       basic_block bb;
830 
831       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
832 	{
833 	  edge e;
834 	  edge_iterator ei;
835 
836 	  FOR_EACH_EDGE (e, ei, bb->succs)
837 	    alloc_aux_for_edge (e, size);
838 	}
839     }
840 }
841 
842 /* Clear AUX pointers of all edges.  */
843 
844 void
845 clear_aux_for_edges (void)
846 {
847   basic_block bb;
848   edge e;
849 
850   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
851     {
852       edge_iterator ei;
853       FOR_EACH_EDGE (e, ei, bb->succs)
854 	e->aux = NULL;
855     }
856 }
857 
858 /* Free data allocated in edge_aux_obstack and clear AUX pointers
859    of all edges.  */
860 
861 void
862 free_aux_for_edges (void)
863 {
864   gcc_assert (first_edge_aux_obj);
865   obstack_free (&edge_aux_obstack, first_edge_aux_obj);
866   first_edge_aux_obj = NULL;
867 
868   clear_aux_for_edges ();
869 }
870 
871 void
872 debug_bb (basic_block bb)
873 {
874   dump_bb (bb, stderr, 0);
875 }
876 
877 basic_block
878 debug_bb_n (int n)
879 {
880   basic_block bb = BASIC_BLOCK (n);
881   dump_bb (bb, stderr, 0);
882   return bb;
883 }
884 
885 /* Dumps cfg related information about basic block BB to FILE.  */
886 
887 static void
888 dump_cfg_bb_info (FILE *file, basic_block bb)
889 {
890   unsigned i;
891   edge_iterator ei;
892   bool first = true;
893   static const char * const bb_bitnames[] =
894     {
895       "new", "reachable", "irreducible_loop", "superblock",
896       "nosched", "hot", "cold", "dup", "xlabel", "rtl",
897       "fwdr", "nothrd"
898     };
899   const unsigned n_bitnames = sizeof (bb_bitnames) / sizeof (char *);
900   edge e;
901 
902   fprintf (file, "Basic block %d", bb->index);
903   for (i = 0; i < n_bitnames; i++)
904     if (bb->flags & (1 << i))
905       {
906 	if (first)
907 	  fputs (" (", file);
908 	else
909 	  fputs (", ", file);
910 	first = false;
911 	fputs (bb_bitnames[i], file);
912       }
913   if (!first)
914     putc (')', file);
915   putc ('\n', file);
916 
917   fputs ("Predecessors: ", file);
918   FOR_EACH_EDGE (e, ei, bb->preds)
919     dump_edge_info (file, e, 0);
920 
921   fprintf (file, "\nSuccessors: ");
922   FOR_EACH_EDGE (e, ei, bb->succs)
923     dump_edge_info (file, e, 1);
924   fputs ("\n\n", file);
925 }
926 
927 /* Dumps a brief description of cfg to FILE.  */
928 
929 void
930 brief_dump_cfg (FILE *file)
931 {
932   basic_block bb;
933 
934   FOR_EACH_BB (bb)
935     {
936       dump_cfg_bb_info (file, bb);
937     }
938 }
939 
940 /* An edge originally destinating BB of FREQUENCY and COUNT has been proved to
941    leave the block by TAKEN_EDGE.  Update profile of BB such that edge E can be
942    redirected to destination of TAKEN_EDGE.
943 
944    This function may leave the profile inconsistent in the case TAKEN_EDGE
945    frequency or count is believed to be lower than FREQUENCY or COUNT
946    respectively.  */
947 void
948 update_bb_profile_for_threading (basic_block bb, int edge_frequency,
949 				 gcov_type count, edge taken_edge)
950 {
951   edge c;
952   int prob;
953   edge_iterator ei;
954 
955   bb->count -= count;
956   if (bb->count < 0)
957     {
958       if (dump_file)
959 	fprintf (dump_file, "bb %i count became negative after threading",
960 		 bb->index);
961       bb->count = 0;
962     }
963 
964   /* Compute the probability of TAKEN_EDGE being reached via threaded edge.
965      Watch for overflows.  */
966   if (bb->frequency)
967     prob = edge_frequency * REG_BR_PROB_BASE / bb->frequency;
968   else
969     prob = 0;
970   if (prob > taken_edge->probability)
971     {
972       if (dump_file)
973 	fprintf (dump_file, "Jump threading proved probability of edge "
974 		 "%i->%i too small (it is %i, should be %i).\n",
975 		 taken_edge->src->index, taken_edge->dest->index,
976 		 taken_edge->probability, prob);
977       prob = taken_edge->probability;
978     }
979 
980   /* Now rescale the probabilities.  */
981   taken_edge->probability -= prob;
982   prob = REG_BR_PROB_BASE - prob;
983   bb->frequency -= edge_frequency;
984   if (bb->frequency < 0)
985     bb->frequency = 0;
986   if (prob <= 0)
987     {
988       if (dump_file)
989 	fprintf (dump_file, "Edge frequencies of bb %i has been reset, "
990 		 "frequency of block should end up being 0, it is %i\n",
991 		 bb->index, bb->frequency);
992       EDGE_SUCC (bb, 0)->probability = REG_BR_PROB_BASE;
993       ei = ei_start (bb->succs);
994       ei_next (&ei);
995       for (; (c = ei_safe_edge (ei)); ei_next (&ei))
996 	c->probability = 0;
997     }
998   else if (prob != REG_BR_PROB_BASE)
999     {
1000       int scale = RDIV (65536 * REG_BR_PROB_BASE, prob);
1001 
1002       FOR_EACH_EDGE (c, ei, bb->succs)
1003 	{
1004 	  /* Protect from overflow due to additional scaling.  */
1005 	  if (c->probability > prob)
1006 	    c->probability = REG_BR_PROB_BASE;
1007 	  else
1008 	    {
1009 	      c->probability = RDIV (c->probability * scale, 65536);
1010 	      if (c->probability > REG_BR_PROB_BASE)
1011 		c->probability = REG_BR_PROB_BASE;
1012 	    }
1013 	}
1014     }
1015 
1016   gcc_assert (bb == taken_edge->src);
1017   taken_edge->count -= count;
1018   if (taken_edge->count < 0)
1019     {
1020       if (dump_file)
1021 	fprintf (dump_file, "edge %i->%i count became negative after threading",
1022 		 taken_edge->src->index, taken_edge->dest->index);
1023       taken_edge->count = 0;
1024     }
1025 }
1026 
1027 /* Multiply all frequencies of basic blocks in array BBS of length NBBS
1028    by NUM/DEN, in int arithmetic.  May lose some accuracy.  */
1029 void
1030 scale_bbs_frequencies_int (basic_block *bbs, int nbbs, int num, int den)
1031 {
1032   int i;
1033   edge e;
1034   if (num < 0)
1035     num = 0;
1036 
1037   /* Scale NUM and DEN to avoid overflows.  Frequencies are in order of
1038      10^4, if we make DEN <= 10^3, we can afford to upscale by 100
1039      and still safely fit in int during calculations.  */
1040   if (den > 1000)
1041     {
1042       if (num > 1000000)
1043 	return;
1044 
1045       num = RDIV (1000 * num, den);
1046       den = 1000;
1047     }
1048   if (num > 100 * den)
1049     return;
1050 
1051   for (i = 0; i < nbbs; i++)
1052     {
1053       edge_iterator ei;
1054       bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
1055       /* Make sure the frequencies do not grow over BB_FREQ_MAX.  */
1056       if (bbs[i]->frequency > BB_FREQ_MAX)
1057 	bbs[i]->frequency = BB_FREQ_MAX;
1058       bbs[i]->count = RDIV (bbs[i]->count * num, den);
1059       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
1060 	e->count = RDIV (e->count * num, den);
1061     }
1062 }
1063 
1064 /* numbers smaller than this value are safe to multiply without getting
1065    64bit overflow.  */
1066 #define MAX_SAFE_MULTIPLIER (1 << (sizeof (HOST_WIDEST_INT) * 4 - 1))
1067 
1068 /* Multiply all frequencies of basic blocks in array BBS of length NBBS
1069    by NUM/DEN, in gcov_type arithmetic.  More accurate than previous
1070    function but considerably slower.  */
1071 void
1072 scale_bbs_frequencies_gcov_type (basic_block *bbs, int nbbs, gcov_type num,
1073 				 gcov_type den)
1074 {
1075   int i;
1076   edge e;
1077   gcov_type fraction = RDIV (num * 65536, den);
1078 
1079   gcc_assert (fraction >= 0);
1080 
1081   if (num < MAX_SAFE_MULTIPLIER)
1082     for (i = 0; i < nbbs; i++)
1083       {
1084 	edge_iterator ei;
1085 	bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
1086 	if (bbs[i]->count <= MAX_SAFE_MULTIPLIER)
1087 	  bbs[i]->count = RDIV (bbs[i]->count * num, den);
1088 	else
1089 	  bbs[i]->count = RDIV (bbs[i]->count * fraction, 65536);
1090 	FOR_EACH_EDGE (e, ei, bbs[i]->succs)
1091 	  if (bbs[i]->count <= MAX_SAFE_MULTIPLIER)
1092 	    e->count = RDIV (e->count * num, den);
1093 	  else
1094 	    e->count = RDIV (e->count * fraction, 65536);
1095       }
1096    else
1097     for (i = 0; i < nbbs; i++)
1098       {
1099 	edge_iterator ei;
1100 	if (sizeof (gcov_type) > sizeof (int))
1101 	  bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
1102 	else
1103 	  bbs[i]->frequency = RDIV (bbs[i]->frequency * fraction, 65536);
1104 	bbs[i]->count = RDIV (bbs[i]->count * fraction, 65536);
1105 	FOR_EACH_EDGE (e, ei, bbs[i]->succs)
1106 	  e->count = RDIV (e->count * fraction, 65536);
1107       }
1108 }
1109 
1110 /* Data structures used to maintain mapping between basic blocks and
1111    copies.  */
1112 static htab_t bb_original;
1113 static htab_t bb_copy;
1114 
1115 /* And between loops and copies.  */
1116 static htab_t loop_copy;
1117 static alloc_pool original_copy_bb_pool;
1118 
1119 struct htab_bb_copy_original_entry
1120 {
1121   /* Block we are attaching info to.  */
1122   int index1;
1123   /* Index of original or copy (depending on the hashtable) */
1124   int index2;
1125 };
1126 
1127 static hashval_t
1128 bb_copy_original_hash (const void *p)
1129 {
1130   const struct htab_bb_copy_original_entry *data
1131     = ((const struct htab_bb_copy_original_entry *)p);
1132 
1133   return data->index1;
1134 }
1135 static int
1136 bb_copy_original_eq (const void *p, const void *q)
1137 {
1138   const struct htab_bb_copy_original_entry *data
1139     = ((const struct htab_bb_copy_original_entry *)p);
1140   const struct htab_bb_copy_original_entry *data2
1141     = ((const struct htab_bb_copy_original_entry *)q);
1142 
1143   return data->index1 == data2->index1;
1144 }
1145 
1146 /* Initialize the data structures to maintain mapping between blocks
1147    and its copies.  */
1148 void
1149 initialize_original_copy_tables (void)
1150 {
1151   gcc_assert (!original_copy_bb_pool);
1152   original_copy_bb_pool
1153     = create_alloc_pool ("original_copy",
1154 			 sizeof (struct htab_bb_copy_original_entry), 10);
1155   bb_original = htab_create (10, bb_copy_original_hash,
1156 			     bb_copy_original_eq, NULL);
1157   bb_copy = htab_create (10, bb_copy_original_hash, bb_copy_original_eq, NULL);
1158   loop_copy = htab_create (10, bb_copy_original_hash, bb_copy_original_eq, NULL);
1159 }
1160 
1161 /* Free the data structures to maintain mapping between blocks and
1162    its copies.  */
1163 void
1164 free_original_copy_tables (void)
1165 {
1166   gcc_assert (original_copy_bb_pool);
1167   htab_delete (bb_copy);
1168   htab_delete (bb_original);
1169   htab_delete (loop_copy);
1170   free_alloc_pool (original_copy_bb_pool);
1171   bb_copy = NULL;
1172   bb_original = NULL;
1173   loop_copy = NULL;
1174   original_copy_bb_pool = NULL;
1175 }
1176 
1177 /* Removes the value associated with OBJ from table TAB.  */
1178 
1179 static void
1180 copy_original_table_clear (htab_t tab, unsigned obj)
1181 {
1182   void **slot;
1183   struct htab_bb_copy_original_entry key, *elt;
1184 
1185   if (!original_copy_bb_pool)
1186     return;
1187 
1188   key.index1 = obj;
1189   slot = htab_find_slot (tab, &key, NO_INSERT);
1190   if (!slot)
1191     return;
1192 
1193   elt = (struct htab_bb_copy_original_entry *) *slot;
1194   htab_clear_slot (tab, slot);
1195   pool_free (original_copy_bb_pool, elt);
1196 }
1197 
1198 /* Sets the value associated with OBJ in table TAB to VAL.
1199    Do nothing when data structures are not initialized.  */
1200 
1201 static void
1202 copy_original_table_set (htab_t tab, unsigned obj, unsigned val)
1203 {
1204   struct htab_bb_copy_original_entry **slot;
1205   struct htab_bb_copy_original_entry key;
1206 
1207   if (!original_copy_bb_pool)
1208     return;
1209 
1210   key.index1 = obj;
1211   slot = (struct htab_bb_copy_original_entry **)
1212 		htab_find_slot (tab, &key, INSERT);
1213   if (!*slot)
1214     {
1215       *slot = (struct htab_bb_copy_original_entry *)
1216 		pool_alloc (original_copy_bb_pool);
1217       (*slot)->index1 = obj;
1218     }
1219   (*slot)->index2 = val;
1220 }
1221 
1222 /* Set original for basic block.  Do nothing when data structures are not
1223    initialized so passes not needing this don't need to care.  */
1224 void
1225 set_bb_original (basic_block bb, basic_block original)
1226 {
1227   copy_original_table_set (bb_original, bb->index, original->index);
1228 }
1229 
1230 /* Get the original basic block.  */
1231 basic_block
1232 get_bb_original (basic_block bb)
1233 {
1234   struct htab_bb_copy_original_entry *entry;
1235   struct htab_bb_copy_original_entry key;
1236 
1237   gcc_assert (original_copy_bb_pool);
1238 
1239   key.index1 = bb->index;
1240   entry = (struct htab_bb_copy_original_entry *) htab_find (bb_original, &key);
1241   if (entry)
1242     return BASIC_BLOCK (entry->index2);
1243   else
1244     return NULL;
1245 }
1246 
1247 /* Set copy for basic block.  Do nothing when data structures are not
1248    initialized so passes not needing this don't need to care.  */
1249 void
1250 set_bb_copy (basic_block bb, basic_block copy)
1251 {
1252   copy_original_table_set (bb_copy, bb->index, copy->index);
1253 }
1254 
1255 /* Get the copy of basic block.  */
1256 basic_block
1257 get_bb_copy (basic_block bb)
1258 {
1259   struct htab_bb_copy_original_entry *entry;
1260   struct htab_bb_copy_original_entry key;
1261 
1262   gcc_assert (original_copy_bb_pool);
1263 
1264   key.index1 = bb->index;
1265   entry = (struct htab_bb_copy_original_entry *) htab_find (bb_copy, &key);
1266   if (entry)
1267     return BASIC_BLOCK (entry->index2);
1268   else
1269     return NULL;
1270 }
1271 
1272 /* Set copy for LOOP to COPY.  Do nothing when data structures are not
1273    initialized so passes not needing this don't need to care.  */
1274 
1275 void
1276 set_loop_copy (struct loop *loop, struct loop *copy)
1277 {
1278   if (!copy)
1279     copy_original_table_clear (loop_copy, loop->num);
1280   else
1281     copy_original_table_set (loop_copy, loop->num, copy->num);
1282 }
1283 
1284 /* Get the copy of LOOP.  */
1285 
1286 struct loop *
1287 get_loop_copy (struct loop *loop)
1288 {
1289   struct htab_bb_copy_original_entry *entry;
1290   struct htab_bb_copy_original_entry key;
1291 
1292   gcc_assert (original_copy_bb_pool);
1293 
1294   key.index1 = loop->num;
1295   entry = (struct htab_bb_copy_original_entry *) htab_find (loop_copy, &key);
1296   if (entry)
1297     return get_loop (entry->index2);
1298   else
1299     return NULL;
1300 }
1301