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