4c4531a7cd3cf9f01c13ee7d817efc3358b2650a
[platform/upstream/gcc.git] / gcc / cfg.c
1 /* Control flow graph manipulation code for GNU compiler.
2    Copyright (C) 1987-2015 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 /* This file contains low level functions to manipulate the CFG and
21    analyze it.  All other modules should not transform the data structure
22    directly and use abstraction instead.  The file is supposed to be
23    ordered bottom-up and should not contain any code dependent on a
24    particular intermediate language (RTL or trees).
25
26    Available functionality:
27      - Initialization/deallocation
28          init_flow, clear_edges
29      - Low level basic block manipulation
30          alloc_block, expunge_block
31      - Edge manipulation
32          make_edge, make_single_succ_edge, cached_make_edge, remove_edge
33          - Low level edge redirection (without updating instruction chain)
34              redirect_edge_succ, redirect_edge_succ_nodup, redirect_edge_pred
35      - Dumping and debugging
36          dump_flow_info, debug_flow_info, dump_edge_info
37      - Allocation of AUX fields for basic blocks
38          alloc_aux_for_blocks, free_aux_for_blocks, alloc_aux_for_block
39      - clear_bb_flags
40      - Consistency checking
41          verify_flow_info
42      - Dumping and debugging
43          print_rtl_with_bb, dump_bb, debug_bb, debug_bb_n
44
45    TODO: Document these "Available functionality" functions in the files
46    that implement them.
47  */
48 \f
49 #include "config.h"
50 #include "system.h"
51 #include "coretypes.h"
52 #include "backend.h"
53 #include "alloc-pool.h"
54 #include "alias.h"
55 #include "cfghooks.h"
56 #include "tree.h"
57 #include "hard-reg-set.h"
58 #include "df.h"
59 #include "options.h"
60 #include "cfganal.h"
61 #include "cfgloop.h" /* FIXME: For struct loop.  */
62 #include "dumpfile.h"
63
64 \f
65 #define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
66
67 /* Called once at initialization time.  */
68
69 void
70 init_flow (struct function *the_fun)
71 {
72   if (!the_fun->cfg)
73     the_fun->cfg = ggc_cleared_alloc<control_flow_graph> ();
74   n_edges_for_fn (the_fun) = 0;
75   ENTRY_BLOCK_PTR_FOR_FN (the_fun)
76     = ggc_cleared_alloc<basic_block_def> ();
77   ENTRY_BLOCK_PTR_FOR_FN (the_fun)->index = ENTRY_BLOCK;
78   EXIT_BLOCK_PTR_FOR_FN (the_fun)
79     = ggc_cleared_alloc<basic_block_def> ();
80   EXIT_BLOCK_PTR_FOR_FN (the_fun)->index = EXIT_BLOCK;
81   ENTRY_BLOCK_PTR_FOR_FN (the_fun)->next_bb
82     = EXIT_BLOCK_PTR_FOR_FN (the_fun);
83   EXIT_BLOCK_PTR_FOR_FN (the_fun)->prev_bb
84     = ENTRY_BLOCK_PTR_FOR_FN (the_fun);
85 }
86 \f
87 /* Helper function for remove_edge and clear_edges.  Frees edge structure
88    without actually removing it from the pred/succ arrays.  */
89
90 static void
91 free_edge (function *fn, edge e)
92 {
93   n_edges_for_fn (fn)--;
94   ggc_free (e);
95 }
96
97 /* Free the memory associated with the edge structures.  */
98
99 void
100 clear_edges (struct function *fn)
101 {
102   basic_block bb;
103   edge e;
104   edge_iterator ei;
105
106   FOR_EACH_BB_FN (bb, fn)
107     {
108       FOR_EACH_EDGE (e, ei, bb->succs)
109         free_edge (fn, e);
110       vec_safe_truncate (bb->succs, 0);
111       vec_safe_truncate (bb->preds, 0);
112     }
113
114   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (fn)->succs)
115     free_edge (fn, e);
116   vec_safe_truncate (EXIT_BLOCK_PTR_FOR_FN (fn)->preds, 0);
117   vec_safe_truncate (ENTRY_BLOCK_PTR_FOR_FN (fn)->succs, 0);
118
119   gcc_assert (!n_edges_for_fn (fn));
120 }
121 \f
122 /* Allocate memory for basic_block.  */
123
124 basic_block
125 alloc_block (void)
126 {
127   basic_block bb;
128   bb = ggc_cleared_alloc<basic_block_def> ();
129   return bb;
130 }
131
132 /* Link block B to chain after AFTER.  */
133 void
134 link_block (basic_block b, basic_block after)
135 {
136   b->next_bb = after->next_bb;
137   b->prev_bb = after;
138   after->next_bb = b;
139   b->next_bb->prev_bb = b;
140 }
141
142 /* Unlink block B from chain.  */
143 void
144 unlink_block (basic_block b)
145 {
146   b->next_bb->prev_bb = b->prev_bb;
147   b->prev_bb->next_bb = b->next_bb;
148   b->prev_bb = NULL;
149   b->next_bb = NULL;
150 }
151
152 /* Sequentially order blocks and compact the arrays.  */
153 void
154 compact_blocks (void)
155 {
156   int i;
157
158   SET_BASIC_BLOCK_FOR_FN (cfun, ENTRY_BLOCK, ENTRY_BLOCK_PTR_FOR_FN (cfun));
159   SET_BASIC_BLOCK_FOR_FN (cfun, EXIT_BLOCK, EXIT_BLOCK_PTR_FOR_FN (cfun));
160
161   if (df)
162     df_compact_blocks ();
163   else
164     {
165       basic_block bb;
166
167       i = NUM_FIXED_BLOCKS;
168       FOR_EACH_BB_FN (bb, cfun)
169         {
170           SET_BASIC_BLOCK_FOR_FN (cfun, i, bb);
171           bb->index = i;
172           i++;
173         }
174       gcc_assert (i == n_basic_blocks_for_fn (cfun));
175
176       for (; i < last_basic_block_for_fn (cfun); i++)
177         SET_BASIC_BLOCK_FOR_FN (cfun, i, NULL);
178     }
179   last_basic_block_for_fn (cfun) = n_basic_blocks_for_fn (cfun);
180 }
181
182 /* Remove block B from the basic block array.  */
183
184 void
185 expunge_block (basic_block b)
186 {
187   unlink_block (b);
188   SET_BASIC_BLOCK_FOR_FN (cfun, b->index, NULL);
189   n_basic_blocks_for_fn (cfun)--;
190   /* We should be able to ggc_free here, but we are not.
191      The dead SSA_NAMES are left pointing to dead statements that are pointing
192      to dead basic blocks making garbage collector to die.
193      We should be able to release all dead SSA_NAMES and at the same time we should
194      clear out BB pointer of dead statements consistently.  */
195 }
196 \f
197 /* Connect E to E->src.  */
198
199 static inline void
200 connect_src (edge e)
201 {
202   vec_safe_push (e->src->succs, e);
203   df_mark_solutions_dirty ();
204 }
205
206 /* Connect E to E->dest.  */
207
208 static inline void
209 connect_dest (edge e)
210 {
211   basic_block dest = e->dest;
212   vec_safe_push (dest->preds, e);
213   e->dest_idx = EDGE_COUNT (dest->preds) - 1;
214   df_mark_solutions_dirty ();
215 }
216
217 /* Disconnect edge E from E->src.  */
218
219 static inline void
220 disconnect_src (edge e)
221 {
222   basic_block src = e->src;
223   edge_iterator ei;
224   edge tmp;
225
226   for (ei = ei_start (src->succs); (tmp = ei_safe_edge (ei)); )
227     {
228       if (tmp == e)
229         {
230           src->succs->unordered_remove (ei.index);
231           df_mark_solutions_dirty ();
232           return;
233         }
234       else
235         ei_next (&ei);
236     }
237
238   gcc_unreachable ();
239 }
240
241 /* Disconnect edge E from E->dest.  */
242
243 static inline void
244 disconnect_dest (edge e)
245 {
246   basic_block dest = e->dest;
247   unsigned int dest_idx = e->dest_idx;
248
249   dest->preds->unordered_remove (dest_idx);
250
251   /* If we removed an edge in the middle of the edge vector, we need
252      to update dest_idx of the edge that moved into the "hole".  */
253   if (dest_idx < EDGE_COUNT (dest->preds))
254     EDGE_PRED (dest, dest_idx)->dest_idx = dest_idx;
255   df_mark_solutions_dirty ();
256 }
257
258 /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
259    created edge.  Use this only if you are sure that this edge can't
260    possibly already exist.  */
261
262 edge
263 unchecked_make_edge (basic_block src, basic_block dst, int flags)
264 {
265   edge e;
266   e = ggc_cleared_alloc<edge_def> ();
267   n_edges_for_fn (cfun)++;
268
269   e->src = src;
270   e->dest = dst;
271   e->flags = flags;
272
273   connect_src (e);
274   connect_dest (e);
275
276   execute_on_growing_pred (e);
277   return e;
278 }
279
280 /* Create an edge connecting SRC and DST with FLAGS optionally using
281    edge cache CACHE.  Return the new edge, NULL if already exist.  */
282
283 edge
284 cached_make_edge (sbitmap edge_cache, basic_block src, basic_block dst, int flags)
285 {
286   if (edge_cache == NULL
287       || src == ENTRY_BLOCK_PTR_FOR_FN (cfun)
288       || dst == EXIT_BLOCK_PTR_FOR_FN (cfun))
289     return make_edge (src, dst, flags);
290
291   /* Does the requested edge already exist?  */
292   if (! bitmap_bit_p (edge_cache, dst->index))
293     {
294       /* The edge does not exist.  Create one and update the
295          cache.  */
296       bitmap_set_bit (edge_cache, dst->index);
297       return unchecked_make_edge (src, dst, flags);
298     }
299
300   /* At this point, we know that the requested edge exists.  Adjust
301      flags if necessary.  */
302   if (flags)
303     {
304       edge e = find_edge (src, dst);
305       e->flags |= flags;
306     }
307
308   return NULL;
309 }
310
311 /* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
312    created edge or NULL if already exist.  */
313
314 edge
315 make_edge (basic_block src, basic_block dest, int flags)
316 {
317   edge e = find_edge (src, dest);
318
319   /* Make sure we don't add duplicate edges.  */
320   if (e)
321     {
322       e->flags |= flags;
323       return NULL;
324     }
325
326   return unchecked_make_edge (src, dest, flags);
327 }
328
329 /* Create an edge connecting SRC to DEST and set probability by knowing
330    that it is the single edge leaving SRC.  */
331
332 edge
333 make_single_succ_edge (basic_block src, basic_block dest, int flags)
334 {
335   edge e = make_edge (src, dest, flags);
336
337   e->probability = REG_BR_PROB_BASE;
338   e->count = src->count;
339   return e;
340 }
341
342 /* This function will remove an edge from the flow graph.  */
343
344 void
345 remove_edge_raw (edge e)
346 {
347   remove_predictions_associated_with_edge (e);
348   execute_on_shrinking_pred (e);
349
350   disconnect_src (e);
351   disconnect_dest (e);
352
353   free_edge (cfun, e);
354 }
355
356 /* Redirect an edge's successor from one block to another.  */
357
358 void
359 redirect_edge_succ (edge e, basic_block new_succ)
360 {
361   execute_on_shrinking_pred (e);
362
363   disconnect_dest (e);
364
365   e->dest = new_succ;
366
367   /* Reconnect the edge to the new successor block.  */
368   connect_dest (e);
369
370   execute_on_growing_pred (e);
371 }
372
373 /* Redirect an edge's predecessor from one block to another.  */
374
375 void
376 redirect_edge_pred (edge e, basic_block new_pred)
377 {
378   disconnect_src (e);
379
380   e->src = new_pred;
381
382   /* Reconnect the edge to the new predecessor block.  */
383   connect_src (e);
384 }
385
386 /* Clear all basic block flags that do not have to be preserved.  */
387 void
388 clear_bb_flags (void)
389 {
390   basic_block bb;
391
392   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
393     bb->flags &= BB_FLAGS_TO_PRESERVE;
394 }
395 \f
396 /* Check the consistency of profile information.  We can't do that
397    in verify_flow_info, as the counts may get invalid for incompletely
398    solved graphs, later eliminating of conditionals or roundoff errors.
399    It is still practical to have them reported for debugging of simple
400    testcases.  */
401 static void
402 check_bb_profile (basic_block bb, FILE * file, int indent, int flags)
403 {
404   edge e;
405   int sum = 0;
406   gcov_type lsum;
407   edge_iterator ei;
408   struct function *fun = DECL_STRUCT_FUNCTION (current_function_decl);
409   char *s_indent = (char *) alloca ((size_t) indent + 1);
410   memset ((void *) s_indent, ' ', (size_t) indent);
411   s_indent[indent] = '\0';
412
413   if (profile_status_for_fn (fun) == PROFILE_ABSENT)
414     return;
415
416   if (bb != EXIT_BLOCK_PTR_FOR_FN (fun))
417     {
418       FOR_EACH_EDGE (e, ei, bb->succs)
419         sum += e->probability;
420       if (EDGE_COUNT (bb->succs) && abs (sum - REG_BR_PROB_BASE) > 100)
421         fprintf (file, "%s%sInvalid sum of outgoing probabilities %.1f%%\n",
422                  (flags & TDF_COMMENT) ? ";; " : "", s_indent,
423                  sum * 100.0 / REG_BR_PROB_BASE);
424       lsum = 0;
425       FOR_EACH_EDGE (e, ei, bb->succs)
426         lsum += e->count;
427       if (EDGE_COUNT (bb->succs)
428           && (lsum - bb->count > 100 || lsum - bb->count < -100))
429         fprintf (file, "%s%sInvalid sum of outgoing counts %i, should be %i\n",
430                  (flags & TDF_COMMENT) ? ";; " : "", s_indent,
431                  (int) lsum, (int) bb->count);
432     }
433     if (bb != ENTRY_BLOCK_PTR_FOR_FN (fun))
434     {
435       sum = 0;
436       FOR_EACH_EDGE (e, ei, bb->preds)
437         sum += EDGE_FREQUENCY (e);
438       if (abs (sum - bb->frequency) > 100)
439         fprintf (file,
440                  "%s%sInvalid sum of incoming frequencies %i, should be %i\n",
441                  (flags & TDF_COMMENT) ? ";; " : "", s_indent,
442                  sum, bb->frequency);
443       lsum = 0;
444       FOR_EACH_EDGE (e, ei, bb->preds)
445         lsum += e->count;
446       if (lsum - bb->count > 100 || lsum - bb->count < -100)
447         fprintf (file, "%s%sInvalid sum of incoming counts %i, should be %i\n",
448                  (flags & TDF_COMMENT) ? ";; " : "", s_indent,
449                  (int) lsum, (int) bb->count);
450     }
451   if (BB_PARTITION (bb) == BB_COLD_PARTITION)
452     {
453       /* Warn about inconsistencies in the partitioning that are
454          currently caused by profile insanities created via optimization.  */
455       if (!probably_never_executed_bb_p (fun, bb))
456         fprintf (file, "%s%sBlock in cold partition with hot count\n",
457                  (flags & TDF_COMMENT) ? ";; " : "", s_indent);
458       FOR_EACH_EDGE (e, ei, bb->preds)
459         {
460           if (!probably_never_executed_edge_p (fun, e))
461             fprintf (file,
462                      "%s%sBlock in cold partition with incoming hot edge\n",
463                      (flags & TDF_COMMENT) ? ";; " : "", s_indent);
464         }
465     }
466 }
467 \f
468 void
469 dump_edge_info (FILE *file, edge e, int flags, int do_succ)
470 {
471   basic_block side = (do_succ ? e->dest : e->src);
472   bool do_details = false;
473   
474   if ((flags & TDF_DETAILS) != 0
475       && (flags & TDF_SLIM) == 0)
476     do_details = true;
477
478   if (side->index == ENTRY_BLOCK)
479     fputs (" ENTRY", file);
480   else if (side->index == EXIT_BLOCK)
481     fputs (" EXIT", file);
482   else
483     fprintf (file, " %d", side->index);
484
485   if (e->probability && do_details)
486     fprintf (file, " [%.1f%%] ", e->probability * 100.0 / REG_BR_PROB_BASE);
487
488   if (e->count && do_details)
489     {
490       fputs (" count:", file);
491       fprintf (file, "%" PRId64, e->count);
492     }
493
494   if (e->flags && do_details)
495     {
496       static const char * const bitnames[] =
497         {
498 #define DEF_EDGE_FLAG(NAME,IDX) #NAME ,
499 #include "cfg-flags.def"
500           NULL
501 #undef DEF_EDGE_FLAG
502         };
503       bool comma = false;
504       int i, flags = e->flags;
505
506       gcc_assert (e->flags <= EDGE_ALL_FLAGS);
507       fputs (" (", file);
508       for (i = 0; flags; i++)
509         if (flags & (1 << i))
510           {
511             flags &= ~(1 << i);
512
513             if (comma)
514               fputc (',', file);
515             fputs (bitnames[i], file);
516             comma = true;
517           }
518
519       fputc (')', file);
520     }
521 }
522
523 DEBUG_FUNCTION void
524 debug (edge_def &ref)
525 {
526   /* FIXME (crowl): Is this desireable?  */
527   dump_edge_info (stderr, &ref, 0, false);
528   dump_edge_info (stderr, &ref, 0, true);
529 }
530
531 DEBUG_FUNCTION void
532 debug (edge_def *ptr)
533 {
534   if (ptr)
535     debug (*ptr);
536   else
537     fprintf (stderr, "<nil>\n");
538 }
539 \f
540 /* Simple routines to easily allocate AUX fields of basic blocks.  */
541
542 static struct obstack block_aux_obstack;
543 static void *first_block_aux_obj = 0;
544 static struct obstack edge_aux_obstack;
545 static void *first_edge_aux_obj = 0;
546
547 /* Allocate a memory block of SIZE as BB->aux.  The obstack must
548    be first initialized by alloc_aux_for_blocks.  */
549
550 static void
551 alloc_aux_for_block (basic_block bb, int size)
552 {
553   /* Verify that aux field is clear.  */
554   gcc_assert (!bb->aux && first_block_aux_obj);
555   bb->aux = obstack_alloc (&block_aux_obstack, size);
556   memset (bb->aux, 0, size);
557 }
558
559 /* Initialize the block_aux_obstack and if SIZE is nonzero, call
560    alloc_aux_for_block for each basic block.  */
561
562 void
563 alloc_aux_for_blocks (int size)
564 {
565   static int initialized;
566
567   if (!initialized)
568     {
569       gcc_obstack_init (&block_aux_obstack);
570       initialized = 1;
571     }
572   else
573     /* Check whether AUX data are still allocated.  */
574     gcc_assert (!first_block_aux_obj);
575
576   first_block_aux_obj = obstack_alloc (&block_aux_obstack, 0);
577   if (size)
578     {
579       basic_block bb;
580
581       FOR_ALL_BB_FN (bb, cfun)
582         alloc_aux_for_block (bb, size);
583     }
584 }
585
586 /* Clear AUX pointers of all blocks.  */
587
588 void
589 clear_aux_for_blocks (void)
590 {
591   basic_block bb;
592
593   FOR_ALL_BB_FN (bb, cfun)
594     bb->aux = NULL;
595 }
596
597 /* Free data allocated in block_aux_obstack and clear AUX pointers
598    of all blocks.  */
599
600 void
601 free_aux_for_blocks (void)
602 {
603   gcc_assert (first_block_aux_obj);
604   obstack_free (&block_aux_obstack, first_block_aux_obj);
605   first_block_aux_obj = NULL;
606
607   clear_aux_for_blocks ();
608 }
609
610 /* Allocate a memory edge of SIZE as E->aux.  The obstack must
611    be first initialized by alloc_aux_for_edges.  */
612
613 void
614 alloc_aux_for_edge (edge e, int size)
615 {
616   /* Verify that aux field is clear.  */
617   gcc_assert (!e->aux && first_edge_aux_obj);
618   e->aux = obstack_alloc (&edge_aux_obstack, size);
619   memset (e->aux, 0, size);
620 }
621
622 /* Initialize the edge_aux_obstack and if SIZE is nonzero, call
623    alloc_aux_for_edge for each basic edge.  */
624
625 void
626 alloc_aux_for_edges (int size)
627 {
628   static int initialized;
629
630   if (!initialized)
631     {
632       gcc_obstack_init (&edge_aux_obstack);
633       initialized = 1;
634     }
635   else
636     /* Check whether AUX data are still allocated.  */
637     gcc_assert (!first_edge_aux_obj);
638
639   first_edge_aux_obj = obstack_alloc (&edge_aux_obstack, 0);
640   if (size)
641     {
642       basic_block bb;
643
644       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun),
645                       EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
646         {
647           edge e;
648           edge_iterator ei;
649
650           FOR_EACH_EDGE (e, ei, bb->succs)
651             alloc_aux_for_edge (e, size);
652         }
653     }
654 }
655
656 /* Clear AUX pointers of all edges.  */
657
658 void
659 clear_aux_for_edges (void)
660 {
661   basic_block bb;
662   edge e;
663
664   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun),
665                   EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
666     {
667       edge_iterator ei;
668       FOR_EACH_EDGE (e, ei, bb->succs)
669         e->aux = NULL;
670     }
671 }
672
673 /* Free data allocated in edge_aux_obstack and clear AUX pointers
674    of all edges.  */
675
676 void
677 free_aux_for_edges (void)
678 {
679   gcc_assert (first_edge_aux_obj);
680   obstack_free (&edge_aux_obstack, first_edge_aux_obj);
681   first_edge_aux_obj = NULL;
682
683   clear_aux_for_edges ();
684 }
685
686 DEBUG_FUNCTION void
687 debug_bb (basic_block bb)
688 {
689   dump_bb (stderr, bb, 0, dump_flags);
690 }
691
692 DEBUG_FUNCTION basic_block
693 debug_bb_n (int n)
694 {
695   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, n);
696   debug_bb (bb);
697   return bb;
698 }
699
700 /* Dumps cfg related information about basic block BB to OUTF.
701    If HEADER is true, dump things that appear before the instructions
702    contained in BB.  If FOOTER is true, dump things that appear after.
703    Flags are the TDF_* masks as documented in dumpfile.h.
704    NB: With TDF_DETAILS, it is assumed that cfun is available, so
705    that maybe_hot_bb_p and probably_never_executed_bb_p don't ICE.  */
706
707 void
708 dump_bb_info (FILE *outf, basic_block bb, int indent, int flags,
709               bool do_header, bool do_footer)
710 {
711   edge_iterator ei;
712   edge e;
713   static const char * const bb_bitnames[] =
714     {
715 #define DEF_BASIC_BLOCK_FLAG(NAME,IDX) #NAME ,
716 #include "cfg-flags.def"
717       NULL
718 #undef DEF_BASIC_BLOCK_FLAG
719     };
720   const unsigned n_bitnames = sizeof (bb_bitnames) / sizeof (char *);
721   bool first;
722   char *s_indent = (char *) alloca ((size_t) indent + 1);
723   memset ((void *) s_indent, ' ', (size_t) indent);
724   s_indent[indent] = '\0';
725
726   gcc_assert (bb->flags <= BB_ALL_FLAGS);
727
728   if (do_header)
729     {
730       unsigned i;
731
732       if (flags & TDF_COMMENT)
733         fputs (";; ", outf);
734       fprintf (outf, "%sbasic block %d, loop depth %d",
735                s_indent, bb->index, bb_loop_depth (bb));
736       if (flags & TDF_DETAILS)
737         {
738           struct function *fun = DECL_STRUCT_FUNCTION (current_function_decl);
739           fprintf (outf, ", count " "%" PRId64,
740                    (int64_t) bb->count);
741           fprintf (outf, ", freq %i", bb->frequency);
742           if (maybe_hot_bb_p (fun, bb))
743             fputs (", maybe hot", outf);
744           if (probably_never_executed_bb_p (fun, bb))
745             fputs (", probably never executed", outf);
746         }
747       fputc ('\n', outf);
748
749       if (flags & TDF_DETAILS)
750         {
751           check_bb_profile (bb, outf, indent, flags);
752           if (flags & TDF_COMMENT)
753             fputs (";; ", outf);
754           fprintf (outf, "%s prev block ", s_indent);
755           if (bb->prev_bb)
756             fprintf (outf, "%d", bb->prev_bb->index);
757           else
758             fprintf (outf, "(nil)");
759           fprintf (outf, ", next block ");
760           if (bb->next_bb)
761             fprintf (outf, "%d", bb->next_bb->index);
762           else
763             fprintf (outf, "(nil)");
764
765           fputs (", flags:", outf);
766           first = true;
767           for (i = 0; i < n_bitnames; i++)
768             if (bb->flags & (1 << i))
769               {
770                 if (first)
771                   fputs (" (", outf);
772                 else
773                   fputs (", ", outf);
774                 first = false;
775                 fputs (bb_bitnames[i], outf);
776               }
777           if (!first)
778             fputc (')', outf);
779           fputc ('\n', outf);
780         }
781
782       if (flags & TDF_COMMENT)
783         fputs (";; ", outf);
784       fprintf (outf, "%s pred:      ", s_indent);
785       first = true;
786       FOR_EACH_EDGE (e, ei, bb->preds)
787         {
788           if (! first)
789             {
790               if (flags & TDF_COMMENT)
791                 fputs (";; ", outf);
792               fprintf (outf, "%s            ", s_indent);
793             }
794           first = false;
795           dump_edge_info (outf, e, flags, 0);
796           fputc ('\n', outf);
797         }
798       if (first)
799         fputc ('\n', outf);
800     }
801
802   if (do_footer)
803     {
804       if (flags & TDF_COMMENT)
805         fputs (";; ", outf);
806       fprintf (outf, "%s succ:      ", s_indent);
807       first = true;
808       FOR_EACH_EDGE (e, ei, bb->succs)
809         {
810           if (! first)
811             {
812               if (flags & TDF_COMMENT)
813                 fputs (";; ", outf);
814               fprintf (outf, "%s            ", s_indent);
815             }
816           first = false;
817           dump_edge_info (outf, e, flags, 1);
818           fputc ('\n', outf);
819         }
820       if (first)
821         fputc ('\n', outf);
822     }
823 }
824
825 /* Dumps a brief description of cfg to FILE.  */
826
827 void
828 brief_dump_cfg (FILE *file, int flags)
829 {
830   basic_block bb;
831
832   FOR_EACH_BB_FN (bb, cfun)
833     {
834       dump_bb_info (file, bb, 0,
835                     flags & (TDF_COMMENT | TDF_DETAILS),
836                     true, true);
837     }
838 }
839
840 /* An edge originally destinating BB of FREQUENCY and COUNT has been proved to
841    leave the block by TAKEN_EDGE.  Update profile of BB such that edge E can be
842    redirected to destination of TAKEN_EDGE.
843
844    This function may leave the profile inconsistent in the case TAKEN_EDGE
845    frequency or count is believed to be lower than FREQUENCY or COUNT
846    respectively.  */
847 void
848 update_bb_profile_for_threading (basic_block bb, int edge_frequency,
849                                  gcov_type count, edge taken_edge)
850 {
851   edge c;
852   int prob;
853   edge_iterator ei;
854
855   bb->count -= count;
856   if (bb->count < 0)
857     {
858       if (dump_file)
859         fprintf (dump_file, "bb %i count became negative after threading",
860                  bb->index);
861       bb->count = 0;
862     }
863
864   /* Compute the probability of TAKEN_EDGE being reached via threaded edge.
865      Watch for overflows.  */
866   if (bb->frequency)
867     prob = GCOV_COMPUTE_SCALE (edge_frequency, bb->frequency);
868   else
869     prob = 0;
870   if (prob > taken_edge->probability)
871     {
872       if (dump_file)
873         fprintf (dump_file, "Jump threading proved probability of edge "
874                  "%i->%i too small (it is %i, should be %i).\n",
875                  taken_edge->src->index, taken_edge->dest->index,
876                  taken_edge->probability, prob);
877       prob = taken_edge->probability;
878     }
879
880   /* Now rescale the probabilities.  */
881   taken_edge->probability -= prob;
882   prob = REG_BR_PROB_BASE - prob;
883   bb->frequency -= edge_frequency;
884   if (bb->frequency < 0)
885     bb->frequency = 0;
886   if (prob <= 0)
887     {
888       if (dump_file)
889         fprintf (dump_file, "Edge frequencies of bb %i has been reset, "
890                  "frequency of block should end up being 0, it is %i\n",
891                  bb->index, bb->frequency);
892       EDGE_SUCC (bb, 0)->probability = REG_BR_PROB_BASE;
893       ei = ei_start (bb->succs);
894       ei_next (&ei);
895       for (; (c = ei_safe_edge (ei)); ei_next (&ei))
896         c->probability = 0;
897     }
898   else if (prob != REG_BR_PROB_BASE)
899     {
900       int scale = RDIV (65536 * REG_BR_PROB_BASE, prob);
901
902       FOR_EACH_EDGE (c, ei, bb->succs)
903         {
904           /* Protect from overflow due to additional scaling.  */
905           if (c->probability > prob)
906             c->probability = REG_BR_PROB_BASE;
907           else
908             {
909               c->probability = RDIV (c->probability * scale, 65536);
910               if (c->probability > REG_BR_PROB_BASE)
911                 c->probability = REG_BR_PROB_BASE;
912             }
913         }
914     }
915
916   gcc_assert (bb == taken_edge->src);
917   taken_edge->count -= count;
918   if (taken_edge->count < 0)
919     {
920       if (dump_file)
921         fprintf (dump_file, "edge %i->%i count became negative after threading",
922                  taken_edge->src->index, taken_edge->dest->index);
923       taken_edge->count = 0;
924     }
925 }
926
927 /* Multiply all frequencies of basic blocks in array BBS of length NBBS
928    by NUM/DEN, in int arithmetic.  May lose some accuracy.  */
929 void
930 scale_bbs_frequencies_int (basic_block *bbs, int nbbs, int num, int den)
931 {
932   int i;
933   edge e;
934   if (num < 0)
935     num = 0;
936
937   /* Scale NUM and DEN to avoid overflows.  Frequencies are in order of
938      10^4, if we make DEN <= 10^3, we can afford to upscale by 100
939      and still safely fit in int during calculations.  */
940   if (den > 1000)
941     {
942       if (num > 1000000)
943         return;
944
945       num = RDIV (1000 * num, den);
946       den = 1000;
947     }
948   if (num > 100 * den)
949     return;
950
951   for (i = 0; i < nbbs; i++)
952     {
953       edge_iterator ei;
954       bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
955       /* Make sure the frequencies do not grow over BB_FREQ_MAX.  */
956       if (bbs[i]->frequency > BB_FREQ_MAX)
957         bbs[i]->frequency = BB_FREQ_MAX;
958       bbs[i]->count = RDIV (bbs[i]->count * num, den);
959       FOR_EACH_EDGE (e, ei, bbs[i]->succs)
960         e->count = RDIV (e->count * num, den);
961     }
962 }
963
964 /* numbers smaller than this value are safe to multiply without getting
965    64bit overflow.  */
966 #define MAX_SAFE_MULTIPLIER (1 << (sizeof (int64_t) * 4 - 1))
967
968 /* Multiply all frequencies of basic blocks in array BBS of length NBBS
969    by NUM/DEN, in gcov_type arithmetic.  More accurate than previous
970    function but considerably slower.  */
971 void
972 scale_bbs_frequencies_gcov_type (basic_block *bbs, int nbbs, gcov_type num,
973                                  gcov_type den)
974 {
975   int i;
976   edge e;
977   gcov_type fraction = RDIV (num * 65536, den);
978
979   gcc_assert (fraction >= 0);
980
981   if (num < MAX_SAFE_MULTIPLIER)
982     for (i = 0; i < nbbs; i++)
983       {
984         edge_iterator ei;
985         bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
986         if (bbs[i]->count <= MAX_SAFE_MULTIPLIER)
987           bbs[i]->count = RDIV (bbs[i]->count * num, den);
988         else
989           bbs[i]->count = RDIV (bbs[i]->count * fraction, 65536);
990         FOR_EACH_EDGE (e, ei, bbs[i]->succs)
991           if (bbs[i]->count <= MAX_SAFE_MULTIPLIER)
992             e->count = RDIV (e->count * num, den);
993           else
994             e->count = RDIV (e->count * fraction, 65536);
995       }
996    else
997     for (i = 0; i < nbbs; i++)
998       {
999         edge_iterator ei;
1000         if (sizeof (gcov_type) > sizeof (int))
1001           bbs[i]->frequency = RDIV (bbs[i]->frequency * num, den);
1002         else
1003           bbs[i]->frequency = RDIV (bbs[i]->frequency * fraction, 65536);
1004         bbs[i]->count = RDIV (bbs[i]->count * fraction, 65536);
1005         FOR_EACH_EDGE (e, ei, bbs[i]->succs)
1006           e->count = RDIV (e->count * fraction, 65536);
1007       }
1008 }
1009
1010 /* Helper types for hash tables.  */
1011
1012 struct htab_bb_copy_original_entry
1013 {
1014   /* Block we are attaching info to.  */
1015   int index1;
1016   /* Index of original or copy (depending on the hashtable) */
1017   int index2;
1018 };
1019
1020 struct bb_copy_hasher : nofree_ptr_hash <htab_bb_copy_original_entry>
1021 {
1022   static inline hashval_t hash (const htab_bb_copy_original_entry *);
1023   static inline bool equal (const htab_bb_copy_original_entry *existing,
1024                             const htab_bb_copy_original_entry * candidate);
1025 };
1026
1027 inline hashval_t
1028 bb_copy_hasher::hash (const htab_bb_copy_original_entry *data)
1029 {
1030   return data->index1;
1031 }
1032
1033 inline bool
1034 bb_copy_hasher::equal (const htab_bb_copy_original_entry *data,
1035                        const htab_bb_copy_original_entry *data2)
1036 {
1037   return data->index1 == data2->index1;
1038 }
1039
1040 /* Data structures used to maintain mapping between basic blocks and
1041    copies.  */
1042 static hash_table<bb_copy_hasher> *bb_original;
1043 static hash_table<bb_copy_hasher> *bb_copy;
1044
1045 /* And between loops and copies.  */
1046 static hash_table<bb_copy_hasher> *loop_copy;
1047 static object_allocator<htab_bb_copy_original_entry> *original_copy_bb_pool;
1048
1049 /* Initialize the data structures to maintain mapping between blocks
1050    and its copies.  */
1051 void
1052 initialize_original_copy_tables (void)
1053 {
1054   original_copy_bb_pool = new object_allocator<htab_bb_copy_original_entry>
1055     ("original_copy");
1056   bb_original = new hash_table<bb_copy_hasher> (10);
1057   bb_copy = new hash_table<bb_copy_hasher> (10);
1058   loop_copy = new hash_table<bb_copy_hasher> (10);
1059 }
1060
1061 /* Free the data structures to maintain mapping between blocks and
1062    its copies.  */
1063 void
1064 free_original_copy_tables (void)
1065 {
1066   gcc_assert (original_copy_bb_pool);
1067   delete bb_copy;
1068   bb_copy = NULL;
1069   delete bb_original;
1070   bb_copy = NULL;
1071   delete loop_copy;
1072   loop_copy = NULL;
1073   delete original_copy_bb_pool;
1074   original_copy_bb_pool = NULL;
1075 }
1076
1077 /* Removes the value associated with OBJ from table TAB.  */
1078
1079 static void
1080 copy_original_table_clear (hash_table<bb_copy_hasher> *tab, unsigned obj)
1081 {
1082   htab_bb_copy_original_entry **slot;
1083   struct htab_bb_copy_original_entry key, *elt;
1084
1085   if (!original_copy_bb_pool)
1086     return;
1087
1088   key.index1 = obj;
1089   slot = tab->find_slot (&key, NO_INSERT);
1090   if (!slot)
1091     return;
1092
1093   elt = *slot;
1094   tab->clear_slot (slot);
1095   original_copy_bb_pool->remove (elt);
1096 }
1097
1098 /* Sets the value associated with OBJ in table TAB to VAL.
1099    Do nothing when data structures are not initialized.  */
1100
1101 static void
1102 copy_original_table_set (hash_table<bb_copy_hasher> *tab,
1103                          unsigned obj, unsigned val)
1104 {
1105   struct htab_bb_copy_original_entry **slot;
1106   struct htab_bb_copy_original_entry key;
1107
1108   if (!original_copy_bb_pool)
1109     return;
1110
1111   key.index1 = obj;
1112   slot = tab->find_slot (&key, INSERT);
1113   if (!*slot)
1114     {
1115       *slot = original_copy_bb_pool->allocate ();
1116       (*slot)->index1 = obj;
1117     }
1118   (*slot)->index2 = val;
1119 }
1120
1121 /* Set original for basic block.  Do nothing when data structures are not
1122    initialized so passes not needing this don't need to care.  */
1123 void
1124 set_bb_original (basic_block bb, basic_block original)
1125 {
1126   copy_original_table_set (bb_original, bb->index, original->index);
1127 }
1128
1129 /* Get the original basic block.  */
1130 basic_block
1131 get_bb_original (basic_block bb)
1132 {
1133   struct htab_bb_copy_original_entry *entry;
1134   struct htab_bb_copy_original_entry key;
1135
1136   gcc_assert (original_copy_bb_pool);
1137
1138   key.index1 = bb->index;
1139   entry = bb_original->find (&key);
1140   if (entry)
1141     return BASIC_BLOCK_FOR_FN (cfun, entry->index2);
1142   else
1143     return NULL;
1144 }
1145
1146 /* Set copy for basic block.  Do nothing when data structures are not
1147    initialized so passes not needing this don't need to care.  */
1148 void
1149 set_bb_copy (basic_block bb, basic_block copy)
1150 {
1151   copy_original_table_set (bb_copy, bb->index, copy->index);
1152 }
1153
1154 /* Get the copy of basic block.  */
1155 basic_block
1156 get_bb_copy (basic_block bb)
1157 {
1158   struct htab_bb_copy_original_entry *entry;
1159   struct htab_bb_copy_original_entry key;
1160
1161   gcc_assert (original_copy_bb_pool);
1162
1163   key.index1 = bb->index;
1164   entry = bb_copy->find (&key);
1165   if (entry)
1166     return BASIC_BLOCK_FOR_FN (cfun, entry->index2);
1167   else
1168     return NULL;
1169 }
1170
1171 /* Set copy for LOOP to COPY.  Do nothing when data structures are not
1172    initialized so passes not needing this don't need to care.  */
1173
1174 void
1175 set_loop_copy (struct loop *loop, struct loop *copy)
1176 {
1177   if (!copy)
1178     copy_original_table_clear (loop_copy, loop->num);
1179   else
1180     copy_original_table_set (loop_copy, loop->num, copy->num);
1181 }
1182
1183 /* Get the copy of LOOP.  */
1184
1185 struct loop *
1186 get_loop_copy (struct loop *loop)
1187 {
1188   struct htab_bb_copy_original_entry *entry;
1189   struct htab_bb_copy_original_entry key;
1190
1191   gcc_assert (original_copy_bb_pool);
1192
1193   key.index1 = loop->num;
1194   entry = loop_copy->find (&key);
1195   if (entry)
1196     return get_loop (cfun, entry->index2);
1197   else
1198     return NULL;
1199 }