aix: Fix _STDC_FORMAT_MACROS in inttypes.h [PR97044]
[official-gcc.git] / gcc / predict.c
blob5983889209ffb8e0c6b35e09f4f45ce2c01d055e
1 /* Branch prediction routines for the GNU compiler.
2 Copyright (C) 2000-2020 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
20 /* References:
22 [1] "Branch Prediction for Free"
23 Ball and Larus; PLDI '93.
24 [2] "Static Branch Frequency and Program Profile Analysis"
25 Wu and Larus; MICRO-27.
26 [3] "Corpus-based Static Branch Prediction"
27 Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95. */
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "backend.h"
34 #include "rtl.h"
35 #include "tree.h"
36 #include "gimple.h"
37 #include "cfghooks.h"
38 #include "tree-pass.h"
39 #include "ssa.h"
40 #include "memmodel.h"
41 #include "emit-rtl.h"
42 #include "cgraph.h"
43 #include "coverage.h"
44 #include "diagnostic-core.h"
45 #include "gimple-predict.h"
46 #include "fold-const.h"
47 #include "calls.h"
48 #include "cfganal.h"
49 #include "profile.h"
50 #include "sreal.h"
51 #include "cfgloop.h"
52 #include "gimple-iterator.h"
53 #include "tree-cfg.h"
54 #include "tree-ssa-loop-niter.h"
55 #include "tree-ssa-loop.h"
56 #include "tree-scalar-evolution.h"
57 #include "ipa-utils.h"
58 #include "gimple-pretty-print.h"
59 #include "selftest.h"
60 #include "cfgrtl.h"
61 #include "stringpool.h"
62 #include "attribs.h"
64 /* Enum with reasons why a predictor is ignored. */
66 enum predictor_reason
68 REASON_NONE,
69 REASON_IGNORED,
70 REASON_SINGLE_EDGE_DUPLICATE,
71 REASON_EDGE_PAIR_DUPLICATE
74 /* String messages for the aforementioned enum. */
76 static const char *reason_messages[] = {"", " (ignored)",
77 " (single edge duplicate)", " (edge pair duplicate)"};
80 static void combine_predictions_for_insn (rtx_insn *, basic_block);
81 static void dump_prediction (FILE *, enum br_predictor, int, basic_block,
82 enum predictor_reason, edge);
83 static void predict_paths_leading_to (basic_block, enum br_predictor,
84 enum prediction,
85 class loop *in_loop = NULL);
86 static void predict_paths_leading_to_edge (edge, enum br_predictor,
87 enum prediction,
88 class loop *in_loop = NULL);
89 static bool can_predict_insn_p (const rtx_insn *);
90 static HOST_WIDE_INT get_predictor_value (br_predictor, HOST_WIDE_INT);
91 static void determine_unlikely_bbs ();
93 /* Information we hold about each branch predictor.
94 Filled using information from predict.def. */
96 struct predictor_info
98 const char *const name; /* Name used in the debugging dumps. */
99 const int hitrate; /* Expected hitrate used by
100 predict_insn_def call. */
101 const int flags;
104 /* Use given predictor without Dempster-Shaffer theory if it matches
105 using first_match heuristics. */
106 #define PRED_FLAG_FIRST_MATCH 1
108 /* Recompute hitrate in percent to our representation. */
110 #define HITRATE(VAL) ((int) ((VAL) * REG_BR_PROB_BASE + 50) / 100)
112 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) {NAME, HITRATE, FLAGS},
113 static const struct predictor_info predictor_info[]= {
114 #include "predict.def"
116 /* Upper bound on predictors. */
117 {NULL, 0, 0}
119 #undef DEF_PREDICTOR
121 static gcov_type min_count = -1;
123 /* Determine the threshold for hot BB counts. */
125 gcov_type
126 get_hot_bb_threshold ()
128 if (min_count == -1)
130 const int hot_frac = param_hot_bb_count_fraction;
131 const gcov_type min_hot_count
132 = hot_frac
133 ? profile_info->sum_max / hot_frac
134 : (gcov_type)profile_count::max_count;
135 set_hot_bb_threshold (min_hot_count);
136 if (dump_file)
137 fprintf (dump_file, "Setting hotness threshold to %" PRId64 ".\n",
138 min_hot_count);
140 return min_count;
143 /* Set the threshold for hot BB counts. */
145 void
146 set_hot_bb_threshold (gcov_type min)
148 min_count = min;
151 /* Return TRUE if COUNT is considered to be hot in function FUN. */
153 bool
154 maybe_hot_count_p (struct function *fun, profile_count count)
156 if (!count.initialized_p ())
157 return true;
158 if (count.ipa () == profile_count::zero ())
159 return false;
160 if (!count.ipa_p ())
162 struct cgraph_node *node = cgraph_node::get (fun->decl);
163 if (!profile_info || profile_status_for_fn (fun) != PROFILE_READ)
165 if (node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED)
166 return false;
167 if (node->frequency == NODE_FREQUENCY_HOT)
168 return true;
170 if (profile_status_for_fn (fun) == PROFILE_ABSENT)
171 return true;
172 if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
173 && count < (ENTRY_BLOCK_PTR_FOR_FN (fun)->count.apply_scale (2, 3)))
174 return false;
175 if (count.apply_scale (param_hot_bb_frequency_fraction, 1)
176 < ENTRY_BLOCK_PTR_FOR_FN (fun)->count)
177 return false;
178 return true;
180 /* Code executed at most once is not hot. */
181 if (count <= MAX (profile_info ? profile_info->runs : 1, 1))
182 return false;
183 return (count >= get_hot_bb_threshold ());
186 /* Return true if basic block BB of function FUN can be CPU intensive
187 and should thus be optimized for maximum performance. */
189 bool
190 maybe_hot_bb_p (struct function *fun, const_basic_block bb)
192 gcc_checking_assert (fun);
193 return maybe_hot_count_p (fun, bb->count);
196 /* Return true if edge E can be CPU intensive and should thus be optimized
197 for maximum performance. */
199 bool
200 maybe_hot_edge_p (edge e)
202 return maybe_hot_count_p (cfun, e->count ());
205 /* Return true if COUNT is considered to be never executed in function FUN
206 or if function FUN is considered so in the static profile. */
208 static bool
209 probably_never_executed (struct function *fun, profile_count count)
211 gcc_checking_assert (fun);
212 if (count.ipa () == profile_count::zero ())
213 return true;
214 /* Do not trust adjusted counts. This will make us to drop int cold section
215 code with low execution count as a result of inlining. These low counts
216 are not safe even with read profile and may lead us to dropping
217 code which actually gets executed into cold section of binary that is not
218 desirable. */
219 if (count.precise_p () && profile_status_for_fn (fun) == PROFILE_READ)
221 const int unlikely_frac = param_unlikely_bb_count_fraction;
222 if (count.apply_scale (unlikely_frac, 1) >= profile_info->runs)
223 return false;
224 return true;
226 if ((!profile_info || profile_status_for_fn (fun) != PROFILE_READ)
227 && (cgraph_node::get (fun->decl)->frequency
228 == NODE_FREQUENCY_UNLIKELY_EXECUTED))
229 return true;
230 return false;
233 /* Return true if basic block BB of function FUN is probably never executed. */
235 bool
236 probably_never_executed_bb_p (struct function *fun, const_basic_block bb)
238 return probably_never_executed (fun, bb->count);
241 /* Return true if edge E is unlikely executed for obvious reasons. */
243 static bool
244 unlikely_executed_edge_p (edge e)
246 return (e->count () == profile_count::zero ()
247 || e->probability == profile_probability::never ())
248 || (e->flags & (EDGE_EH | EDGE_FAKE));
251 /* Return true if edge E of function FUN is probably never executed. */
253 bool
254 probably_never_executed_edge_p (struct function *fun, edge e)
256 if (unlikely_executed_edge_p (e))
257 return true;
258 return probably_never_executed (fun, e->count ());
261 /* Return true if function FUN should always be optimized for size. */
263 bool
264 optimize_function_for_size_p (struct function *fun)
266 if (!fun || !fun->decl)
267 return optimize_size;
268 cgraph_node *n = cgraph_node::get (fun->decl);
269 return n && n->optimize_for_size_p ();
272 /* Return true if function FUN should always be optimized for speed. */
274 bool
275 optimize_function_for_speed_p (struct function *fun)
277 return !optimize_function_for_size_p (fun);
280 /* Return the optimization type that should be used for function FUN. */
282 optimization_type
283 function_optimization_type (struct function *fun)
285 return (optimize_function_for_speed_p (fun)
286 ? OPTIMIZE_FOR_SPEED
287 : OPTIMIZE_FOR_SIZE);
290 /* Return TRUE if basic block BB should be optimized for size. */
292 bool
293 optimize_bb_for_size_p (const_basic_block bb)
295 return (optimize_function_for_size_p (cfun)
296 || (bb && !maybe_hot_bb_p (cfun, bb)));
299 /* Return TRUE if basic block BB should be optimized for speed. */
301 bool
302 optimize_bb_for_speed_p (const_basic_block bb)
304 return !optimize_bb_for_size_p (bb);
307 /* Return the optimization type that should be used for basic block BB. */
309 optimization_type
310 bb_optimization_type (const_basic_block bb)
312 return (optimize_bb_for_speed_p (bb)
313 ? OPTIMIZE_FOR_SPEED
314 : OPTIMIZE_FOR_SIZE);
317 /* Return TRUE if edge E should be optimized for size. */
319 bool
320 optimize_edge_for_size_p (edge e)
322 return optimize_function_for_size_p (cfun) || !maybe_hot_edge_p (e);
325 /* Return TRUE if edge E should be optimized for speed. */
327 bool
328 optimize_edge_for_speed_p (edge e)
330 return !optimize_edge_for_size_p (e);
333 /* Return TRUE if the current function is optimized for size. */
335 bool
336 optimize_insn_for_size_p (void)
338 return optimize_function_for_size_p (cfun) || !crtl->maybe_hot_insn_p;
341 /* Return TRUE if the current function is optimized for speed. */
343 bool
344 optimize_insn_for_speed_p (void)
346 return !optimize_insn_for_size_p ();
349 /* Return TRUE if LOOP should be optimized for size. */
351 bool
352 optimize_loop_for_size_p (class loop *loop)
354 return optimize_bb_for_size_p (loop->header);
357 /* Return TRUE if LOOP should be optimized for speed. */
359 bool
360 optimize_loop_for_speed_p (class loop *loop)
362 return optimize_bb_for_speed_p (loop->header);
365 /* Return TRUE if nest rooted at LOOP should be optimized for speed. */
367 bool
368 optimize_loop_nest_for_speed_p (class loop *loop)
370 class loop *l = loop;
371 if (optimize_loop_for_speed_p (loop))
372 return true;
373 l = loop->inner;
374 while (l && l != loop)
376 if (optimize_loop_for_speed_p (l))
377 return true;
378 if (l->inner)
379 l = l->inner;
380 else if (l->next)
381 l = l->next;
382 else
384 while (l != loop && !l->next)
385 l = loop_outer (l);
386 if (l != loop)
387 l = l->next;
390 return false;
393 /* Return TRUE if nest rooted at LOOP should be optimized for size. */
395 bool
396 optimize_loop_nest_for_size_p (class loop *loop)
398 return !optimize_loop_nest_for_speed_p (loop);
401 /* Return true if edge E is likely to be well predictable by branch
402 predictor. */
404 bool
405 predictable_edge_p (edge e)
407 if (!e->probability.initialized_p ())
408 return false;
409 if ((e->probability.to_reg_br_prob_base ()
410 <= param_predictable_branch_outcome * REG_BR_PROB_BASE / 100)
411 || (REG_BR_PROB_BASE - e->probability.to_reg_br_prob_base ()
412 <= param_predictable_branch_outcome * REG_BR_PROB_BASE / 100))
413 return true;
414 return false;
418 /* Set RTL expansion for BB profile. */
420 void
421 rtl_profile_for_bb (basic_block bb)
423 crtl->maybe_hot_insn_p = maybe_hot_bb_p (cfun, bb);
426 /* Set RTL expansion for edge profile. */
428 void
429 rtl_profile_for_edge (edge e)
431 crtl->maybe_hot_insn_p = maybe_hot_edge_p (e);
434 /* Set RTL expansion to default mode (i.e. when profile info is not known). */
435 void
436 default_rtl_profile (void)
438 crtl->maybe_hot_insn_p = true;
441 /* Return true if the one of outgoing edges is already predicted by
442 PREDICTOR. */
444 bool
445 rtl_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
447 rtx note;
448 if (!INSN_P (BB_END (bb)))
449 return false;
450 for (note = REG_NOTES (BB_END (bb)); note; note = XEXP (note, 1))
451 if (REG_NOTE_KIND (note) == REG_BR_PRED
452 && INTVAL (XEXP (XEXP (note, 0), 0)) == (int)predictor)
453 return true;
454 return false;
457 /* Structure representing predictions in tree level. */
459 struct edge_prediction {
460 struct edge_prediction *ep_next;
461 edge ep_edge;
462 enum br_predictor ep_predictor;
463 int ep_probability;
466 /* This map contains for a basic block the list of predictions for the
467 outgoing edges. */
469 static hash_map<const_basic_block, edge_prediction *> *bb_predictions;
471 /* Return true if the one of outgoing edges is already predicted by
472 PREDICTOR. */
474 bool
475 gimple_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
477 struct edge_prediction *i;
478 edge_prediction **preds = bb_predictions->get (bb);
480 if (!preds)
481 return false;
483 for (i = *preds; i; i = i->ep_next)
484 if (i->ep_predictor == predictor)
485 return true;
486 return false;
489 /* Return true if the one of outgoing edges is already predicted by
490 PREDICTOR for edge E predicted as TAKEN. */
492 bool
493 edge_predicted_by_p (edge e, enum br_predictor predictor, bool taken)
495 struct edge_prediction *i;
496 basic_block bb = e->src;
497 edge_prediction **preds = bb_predictions->get (bb);
498 if (!preds)
499 return false;
501 int probability = predictor_info[(int) predictor].hitrate;
503 if (taken != TAKEN)
504 probability = REG_BR_PROB_BASE - probability;
506 for (i = *preds; i; i = i->ep_next)
507 if (i->ep_predictor == predictor
508 && i->ep_edge == e
509 && i->ep_probability == probability)
510 return true;
511 return false;
514 /* Same predicate as above, working on edges. */
515 bool
516 edge_probability_reliable_p (const_edge e)
518 return e->probability.probably_reliable_p ();
521 /* Same predicate as edge_probability_reliable_p, working on notes. */
522 bool
523 br_prob_note_reliable_p (const_rtx note)
525 gcc_assert (REG_NOTE_KIND (note) == REG_BR_PROB);
526 return profile_probability::from_reg_br_prob_note
527 (XINT (note, 0)).probably_reliable_p ();
530 static void
531 predict_insn (rtx_insn *insn, enum br_predictor predictor, int probability)
533 gcc_assert (any_condjump_p (insn));
534 if (!flag_guess_branch_prob)
535 return;
537 add_reg_note (insn, REG_BR_PRED,
538 gen_rtx_CONCAT (VOIDmode,
539 GEN_INT ((int) predictor),
540 GEN_INT ((int) probability)));
543 /* Predict insn by given predictor. */
545 void
546 predict_insn_def (rtx_insn *insn, enum br_predictor predictor,
547 enum prediction taken)
549 int probability = predictor_info[(int) predictor].hitrate;
550 gcc_assert (probability != PROB_UNINITIALIZED);
552 if (taken != TAKEN)
553 probability = REG_BR_PROB_BASE - probability;
555 predict_insn (insn, predictor, probability);
558 /* Predict edge E with given probability if possible. */
560 void
561 rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
563 rtx_insn *last_insn;
564 last_insn = BB_END (e->src);
566 /* We can store the branch prediction information only about
567 conditional jumps. */
568 if (!any_condjump_p (last_insn))
569 return;
571 /* We always store probability of branching. */
572 if (e->flags & EDGE_FALLTHRU)
573 probability = REG_BR_PROB_BASE - probability;
575 predict_insn (last_insn, predictor, probability);
578 /* Predict edge E with the given PROBABILITY. */
579 void
580 gimple_predict_edge (edge e, enum br_predictor predictor, int probability)
582 if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
583 && EDGE_COUNT (e->src->succs) > 1
584 && flag_guess_branch_prob
585 && optimize)
587 struct edge_prediction *i = XNEW (struct edge_prediction);
588 edge_prediction *&preds = bb_predictions->get_or_insert (e->src);
590 i->ep_next = preds;
591 preds = i;
592 i->ep_probability = probability;
593 i->ep_predictor = predictor;
594 i->ep_edge = e;
598 /* Filter edge predictions PREDS by a function FILTER: if FILTER return false
599 the prediction is removed.
600 DATA are passed to the filter function. */
602 static void
603 filter_predictions (edge_prediction **preds,
604 bool (*filter) (edge_prediction *, void *), void *data)
606 if (!bb_predictions)
607 return;
609 if (preds)
611 struct edge_prediction **prediction = preds;
612 struct edge_prediction *next;
614 while (*prediction)
616 if ((*filter) (*prediction, data))
617 prediction = &((*prediction)->ep_next);
618 else
620 next = (*prediction)->ep_next;
621 free (*prediction);
622 *prediction = next;
628 /* Filter function predicate that returns true for a edge predicate P
629 if its edge is equal to DATA. */
631 static bool
632 not_equal_edge_p (edge_prediction *p, void *data)
634 return p->ep_edge != (edge)data;
637 /* Remove all predictions on given basic block that are attached
638 to edge E. */
639 void
640 remove_predictions_associated_with_edge (edge e)
642 if (!bb_predictions)
643 return;
645 edge_prediction **preds = bb_predictions->get (e->src);
646 filter_predictions (preds, not_equal_edge_p, e);
649 /* Clears the list of predictions stored for BB. */
651 static void
652 clear_bb_predictions (basic_block bb)
654 edge_prediction **preds = bb_predictions->get (bb);
655 struct edge_prediction *pred, *next;
657 if (!preds)
658 return;
660 for (pred = *preds; pred; pred = next)
662 next = pred->ep_next;
663 free (pred);
665 *preds = NULL;
668 /* Return true when we can store prediction on insn INSN.
669 At the moment we represent predictions only on conditional
670 jumps, not at computed jump or other complicated cases. */
671 static bool
672 can_predict_insn_p (const rtx_insn *insn)
674 return (JUMP_P (insn)
675 && any_condjump_p (insn)
676 && EDGE_COUNT (BLOCK_FOR_INSN (insn)->succs) >= 2);
679 /* Predict edge E by given predictor if possible. */
681 void
682 predict_edge_def (edge e, enum br_predictor predictor,
683 enum prediction taken)
685 int probability = predictor_info[(int) predictor].hitrate;
687 if (taken != TAKEN)
688 probability = REG_BR_PROB_BASE - probability;
690 predict_edge (e, predictor, probability);
693 /* Invert all branch predictions or probability notes in the INSN. This needs
694 to be done each time we invert the condition used by the jump. */
696 void
697 invert_br_probabilities (rtx insn)
699 rtx note;
701 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
702 if (REG_NOTE_KIND (note) == REG_BR_PROB)
703 XINT (note, 0) = profile_probability::from_reg_br_prob_note
704 (XINT (note, 0)).invert ().to_reg_br_prob_note ();
705 else if (REG_NOTE_KIND (note) == REG_BR_PRED)
706 XEXP (XEXP (note, 0), 1)
707 = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1)));
710 /* Dump information about the branch prediction to the output file. */
712 static void
713 dump_prediction (FILE *file, enum br_predictor predictor, int probability,
714 basic_block bb, enum predictor_reason reason = REASON_NONE,
715 edge ep_edge = NULL)
717 edge e = ep_edge;
718 edge_iterator ei;
720 if (!file)
721 return;
723 if (e == NULL)
724 FOR_EACH_EDGE (e, ei, bb->succs)
725 if (! (e->flags & EDGE_FALLTHRU))
726 break;
728 char edge_info_str[128];
729 if (ep_edge)
730 sprintf (edge_info_str, " of edge %d->%d", ep_edge->src->index,
731 ep_edge->dest->index);
732 else
733 edge_info_str[0] = '\0';
735 fprintf (file, " %s heuristics%s%s: %.2f%%",
736 predictor_info[predictor].name,
737 edge_info_str, reason_messages[reason],
738 probability * 100.0 / REG_BR_PROB_BASE);
740 if (bb->count.initialized_p ())
742 fprintf (file, " exec ");
743 bb->count.dump (file);
744 if (e)
746 fprintf (file, " hit ");
747 e->count ().dump (file);
748 fprintf (file, " (%.1f%%)", e->count ().to_gcov_type() * 100.0
749 / bb->count.to_gcov_type ());
753 fprintf (file, "\n");
755 /* Print output that be easily read by analyze_brprob.py script. We are
756 interested only in counts that are read from GCDA files. */
757 if (dump_file && (dump_flags & TDF_DETAILS)
758 && bb->count.precise_p ()
759 && reason == REASON_NONE)
761 fprintf (file, ";;heuristics;%s;%" PRId64 ";%" PRId64 ";%.1f;\n",
762 predictor_info[predictor].name,
763 bb->count.to_gcov_type (), e->count ().to_gcov_type (),
764 probability * 100.0 / REG_BR_PROB_BASE);
768 /* Return true if STMT is known to be unlikely executed. */
770 static bool
771 unlikely_executed_stmt_p (gimple *stmt)
773 if (!is_gimple_call (stmt))
774 return false;
775 /* NORETURN attribute alone is not strong enough: exit() may be quite
776 likely executed once during program run. */
777 if (gimple_call_fntype (stmt)
778 && lookup_attribute ("cold",
779 TYPE_ATTRIBUTES (gimple_call_fntype (stmt)))
780 && !lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl)))
781 return true;
782 tree decl = gimple_call_fndecl (stmt);
783 if (!decl)
784 return false;
785 if (lookup_attribute ("cold", DECL_ATTRIBUTES (decl))
786 && !lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl)))
787 return true;
789 cgraph_node *n = cgraph_node::get (decl);
790 if (!n)
791 return false;
793 availability avail;
794 n = n->ultimate_alias_target (&avail);
795 if (avail < AVAIL_AVAILABLE)
796 return false;
797 if (!n->analyzed
798 || n->decl == current_function_decl)
799 return false;
800 return n->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED;
803 /* Return true if BB is unlikely executed. */
805 static bool
806 unlikely_executed_bb_p (basic_block bb)
808 if (bb->count == profile_count::zero ())
809 return true;
810 if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun) || bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
811 return false;
812 for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
813 !gsi_end_p (gsi); gsi_next (&gsi))
815 if (unlikely_executed_stmt_p (gsi_stmt (gsi)))
816 return true;
817 if (stmt_can_terminate_bb_p (gsi_stmt (gsi)))
818 return false;
820 return false;
823 /* We cannot predict the probabilities of outgoing edges of bb. Set them
824 evenly and hope for the best. If UNLIKELY_EDGES is not null, distribute
825 even probability for all edges not mentioned in the set. These edges
826 are given PROB_VERY_UNLIKELY probability. Similarly for LIKELY_EDGES,
827 if we have exactly one likely edge, make the other edges predicted
828 as not probable. */
830 static void
831 set_even_probabilities (basic_block bb,
832 hash_set<edge> *unlikely_edges = NULL,
833 hash_set<edge_prediction *> *likely_edges = NULL)
835 unsigned nedges = 0, unlikely_count = 0;
836 edge e = NULL;
837 edge_iterator ei;
838 profile_probability all = profile_probability::always ();
840 FOR_EACH_EDGE (e, ei, bb->succs)
841 if (e->probability.initialized_p ())
842 all -= e->probability;
843 else if (!unlikely_executed_edge_p (e))
845 nedges++;
846 if (unlikely_edges != NULL && unlikely_edges->contains (e))
848 all -= profile_probability::very_unlikely ();
849 unlikely_count++;
853 /* Make the distribution even if all edges are unlikely. */
854 unsigned likely_count = likely_edges ? likely_edges->elements () : 0;
855 if (unlikely_count == nedges)
857 unlikely_edges = NULL;
858 unlikely_count = 0;
861 /* If we have one likely edge, then use its probability and distribute
862 remaining probabilities as even. */
863 if (likely_count == 1)
865 FOR_EACH_EDGE (e, ei, bb->succs)
866 if (e->probability.initialized_p ())
868 else if (!unlikely_executed_edge_p (e))
870 edge_prediction *prediction = *likely_edges->begin ();
871 int p = prediction->ep_probability;
872 profile_probability prob
873 = profile_probability::from_reg_br_prob_base (p);
875 if (prediction->ep_edge == e)
876 e->probability = prob;
877 else if (unlikely_edges != NULL && unlikely_edges->contains (e))
878 e->probability = profile_probability::very_unlikely ();
879 else
881 profile_probability remainder = prob.invert ();
882 remainder -= profile_probability::very_unlikely ()
883 .apply_scale (unlikely_count, 1);
884 int count = nedges - unlikely_count - 1;
885 gcc_assert (count >= 0);
887 e->probability = remainder.apply_scale (1, count);
890 else
891 e->probability = profile_probability::never ();
893 else
895 /* Make all unlikely edges unlikely and the rest will have even
896 probability. */
897 unsigned scale = nedges - unlikely_count;
898 FOR_EACH_EDGE (e, ei, bb->succs)
899 if (e->probability.initialized_p ())
901 else if (!unlikely_executed_edge_p (e))
903 if (unlikely_edges != NULL && unlikely_edges->contains (e))
904 e->probability = profile_probability::very_unlikely ();
905 else
906 e->probability = all.apply_scale (1, scale);
908 else
909 e->probability = profile_probability::never ();
913 /* Add REG_BR_PROB note to JUMP with PROB. */
915 void
916 add_reg_br_prob_note (rtx_insn *jump, profile_probability prob)
918 gcc_checking_assert (JUMP_P (jump) && !find_reg_note (jump, REG_BR_PROB, 0));
919 add_int_reg_note (jump, REG_BR_PROB, prob.to_reg_br_prob_note ());
922 /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB
923 note if not already present. Remove now useless REG_BR_PRED notes. */
925 static void
926 combine_predictions_for_insn (rtx_insn *insn, basic_block bb)
928 rtx prob_note;
929 rtx *pnote;
930 rtx note;
931 int best_probability = PROB_EVEN;
932 enum br_predictor best_predictor = END_PREDICTORS;
933 int combined_probability = REG_BR_PROB_BASE / 2;
934 int d;
935 bool first_match = false;
936 bool found = false;
938 if (!can_predict_insn_p (insn))
940 set_even_probabilities (bb);
941 return;
944 prob_note = find_reg_note (insn, REG_BR_PROB, 0);
945 pnote = &REG_NOTES (insn);
946 if (dump_file)
947 fprintf (dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn),
948 bb->index);
950 /* We implement "first match" heuristics and use probability guessed
951 by predictor with smallest index. */
952 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
953 if (REG_NOTE_KIND (note) == REG_BR_PRED)
955 enum br_predictor predictor = ((enum br_predictor)
956 INTVAL (XEXP (XEXP (note, 0), 0)));
957 int probability = INTVAL (XEXP (XEXP (note, 0), 1));
959 found = true;
960 if (best_predictor > predictor
961 && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
962 best_probability = probability, best_predictor = predictor;
964 d = (combined_probability * probability
965 + (REG_BR_PROB_BASE - combined_probability)
966 * (REG_BR_PROB_BASE - probability));
968 /* Use FP math to avoid overflows of 32bit integers. */
969 if (d == 0)
970 /* If one probability is 0% and one 100%, avoid division by zero. */
971 combined_probability = REG_BR_PROB_BASE / 2;
972 else
973 combined_probability = (((double) combined_probability) * probability
974 * REG_BR_PROB_BASE / d + 0.5);
977 /* Decide which heuristic to use. In case we didn't match anything,
978 use no_prediction heuristic, in case we did match, use either
979 first match or Dempster-Shaffer theory depending on the flags. */
981 if (best_predictor != END_PREDICTORS)
982 first_match = true;
984 if (!found)
985 dump_prediction (dump_file, PRED_NO_PREDICTION,
986 combined_probability, bb);
987 else
989 if (!first_match)
990 dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
991 bb, !first_match ? REASON_NONE : REASON_IGNORED);
992 else
993 dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
994 bb, first_match ? REASON_NONE : REASON_IGNORED);
997 if (first_match)
998 combined_probability = best_probability;
999 dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb);
1001 while (*pnote)
1003 if (REG_NOTE_KIND (*pnote) == REG_BR_PRED)
1005 enum br_predictor predictor = ((enum br_predictor)
1006 INTVAL (XEXP (XEXP (*pnote, 0), 0)));
1007 int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1));
1009 dump_prediction (dump_file, predictor, probability, bb,
1010 (!first_match || best_predictor == predictor)
1011 ? REASON_NONE : REASON_IGNORED);
1012 *pnote = XEXP (*pnote, 1);
1014 else
1015 pnote = &XEXP (*pnote, 1);
1018 if (!prob_note)
1020 profile_probability p
1021 = profile_probability::from_reg_br_prob_base (combined_probability);
1022 add_reg_br_prob_note (insn, p);
1024 /* Save the prediction into CFG in case we are seeing non-degenerated
1025 conditional jump. */
1026 if (!single_succ_p (bb))
1028 BRANCH_EDGE (bb)->probability = p;
1029 FALLTHRU_EDGE (bb)->probability
1030 = BRANCH_EDGE (bb)->probability.invert ();
1033 else if (!single_succ_p (bb))
1035 profile_probability prob = profile_probability::from_reg_br_prob_note
1036 (XINT (prob_note, 0));
1038 BRANCH_EDGE (bb)->probability = prob;
1039 FALLTHRU_EDGE (bb)->probability = prob.invert ();
1041 else
1042 single_succ_edge (bb)->probability = profile_probability::always ();
1045 /* Edge prediction hash traits. */
1047 struct predictor_hash: pointer_hash <edge_prediction>
1050 static inline hashval_t hash (const edge_prediction *);
1051 static inline bool equal (const edge_prediction *, const edge_prediction *);
1054 /* Calculate hash value of an edge prediction P based on predictor and
1055 normalized probability. */
1057 inline hashval_t
1058 predictor_hash::hash (const edge_prediction *p)
1060 inchash::hash hstate;
1061 hstate.add_int (p->ep_predictor);
1063 int prob = p->ep_probability;
1064 if (prob > REG_BR_PROB_BASE / 2)
1065 prob = REG_BR_PROB_BASE - prob;
1067 hstate.add_int (prob);
1069 return hstate.end ();
1072 /* Return true whether edge predictions P1 and P2 use the same predictor and
1073 have equal (or opposed probability). */
1075 inline bool
1076 predictor_hash::equal (const edge_prediction *p1, const edge_prediction *p2)
1078 return (p1->ep_predictor == p2->ep_predictor
1079 && (p1->ep_probability == p2->ep_probability
1080 || p1->ep_probability == REG_BR_PROB_BASE - p2->ep_probability));
1083 struct predictor_hash_traits: predictor_hash,
1084 typed_noop_remove <edge_prediction *> {};
1086 /* Return true if edge prediction P is not in DATA hash set. */
1088 static bool
1089 not_removed_prediction_p (edge_prediction *p, void *data)
1091 hash_set<edge_prediction *> *remove = (hash_set<edge_prediction *> *) data;
1092 return !remove->contains (p);
1095 /* Prune predictions for a basic block BB. Currently we do following
1096 clean-up steps:
1098 1) remove duplicate prediction that is guessed with the same probability
1099 (different than 1/2) to both edge
1100 2) remove duplicates for a prediction that belongs with the same probability
1101 to a single edge
1105 static void
1106 prune_predictions_for_bb (basic_block bb)
1108 edge_prediction **preds = bb_predictions->get (bb);
1110 if (preds)
1112 hash_table <predictor_hash_traits> s (13);
1113 hash_set <edge_prediction *> remove;
1115 /* Step 1: identify predictors that should be removed. */
1116 for (edge_prediction *pred = *preds; pred; pred = pred->ep_next)
1118 edge_prediction *existing = s.find (pred);
1119 if (existing)
1121 if (pred->ep_edge == existing->ep_edge
1122 && pred->ep_probability == existing->ep_probability)
1124 /* Remove a duplicate predictor. */
1125 dump_prediction (dump_file, pred->ep_predictor,
1126 pred->ep_probability, bb,
1127 REASON_SINGLE_EDGE_DUPLICATE, pred->ep_edge);
1129 remove.add (pred);
1131 else if (pred->ep_edge != existing->ep_edge
1132 && pred->ep_probability == existing->ep_probability
1133 && pred->ep_probability != REG_BR_PROB_BASE / 2)
1135 /* Remove both predictors as they predict the same
1136 for both edges. */
1137 dump_prediction (dump_file, existing->ep_predictor,
1138 pred->ep_probability, bb,
1139 REASON_EDGE_PAIR_DUPLICATE,
1140 existing->ep_edge);
1141 dump_prediction (dump_file, pred->ep_predictor,
1142 pred->ep_probability, bb,
1143 REASON_EDGE_PAIR_DUPLICATE,
1144 pred->ep_edge);
1146 remove.add (existing);
1147 remove.add (pred);
1151 edge_prediction **slot2 = s.find_slot (pred, INSERT);
1152 *slot2 = pred;
1155 /* Step 2: Remove predictors. */
1156 filter_predictions (preds, not_removed_prediction_p, &remove);
1160 /* Combine predictions into single probability and store them into CFG.
1161 Remove now useless prediction entries.
1162 If DRY_RUN is set, only produce dumps and do not modify profile. */
1164 static void
1165 combine_predictions_for_bb (basic_block bb, bool dry_run)
1167 int best_probability = PROB_EVEN;
1168 enum br_predictor best_predictor = END_PREDICTORS;
1169 int combined_probability = REG_BR_PROB_BASE / 2;
1170 int d;
1171 bool first_match = false;
1172 bool found = false;
1173 struct edge_prediction *pred;
1174 int nedges = 0;
1175 edge e, first = NULL, second = NULL;
1176 edge_iterator ei;
1177 int nzero = 0;
1178 int nunknown = 0;
1180 FOR_EACH_EDGE (e, ei, bb->succs)
1182 if (!unlikely_executed_edge_p (e))
1184 nedges ++;
1185 if (first && !second)
1186 second = e;
1187 if (!first)
1188 first = e;
1190 else if (!e->probability.initialized_p ())
1191 e->probability = profile_probability::never ();
1192 if (!e->probability.initialized_p ())
1193 nunknown++;
1194 else if (e->probability == profile_probability::never ())
1195 nzero++;
1198 /* When there is no successor or only one choice, prediction is easy.
1200 When we have a basic block with more than 2 successors, the situation
1201 is more complicated as DS theory cannot be used literally.
1202 More precisely, let's assume we predicted edge e1 with probability p1,
1203 thus: m1({b1}) = p1. As we're going to combine more than 2 edges, we
1204 need to find probability of e.g. m1({b2}), which we don't know.
1205 The only approximation is to equally distribute 1-p1 to all edges
1206 different from b1.
1208 According to numbers we've got from SPEC2006 benchark, there's only
1209 one interesting reliable predictor (noreturn call), which can be
1210 handled with a bit easier approach. */
1211 if (nedges != 2)
1213 hash_set<edge> unlikely_edges (4);
1214 hash_set<edge_prediction *> likely_edges (4);
1216 /* Identify all edges that have a probability close to very unlikely.
1217 Doing the approach for very unlikely doesn't worth for doing as
1218 there's no such probability in SPEC2006 benchmark. */
1219 edge_prediction **preds = bb_predictions->get (bb);
1220 if (preds)
1221 for (pred = *preds; pred; pred = pred->ep_next)
1223 if (pred->ep_probability <= PROB_VERY_UNLIKELY
1224 || pred->ep_predictor == PRED_COLD_LABEL)
1225 unlikely_edges.add (pred->ep_edge);
1226 else if (pred->ep_probability >= PROB_VERY_LIKELY
1227 || pred->ep_predictor == PRED_BUILTIN_EXPECT
1228 || pred->ep_predictor == PRED_HOT_LABEL)
1229 likely_edges.add (pred);
1232 /* It can happen that an edge is both in likely_edges and unlikely_edges.
1233 Clear both sets in that situation. */
1234 for (hash_set<edge_prediction *>::iterator it = likely_edges.begin ();
1235 it != likely_edges.end (); ++it)
1236 if (unlikely_edges.contains ((*it)->ep_edge))
1238 likely_edges.empty ();
1239 unlikely_edges.empty ();
1240 break;
1243 if (!dry_run)
1244 set_even_probabilities (bb, &unlikely_edges, &likely_edges);
1245 clear_bb_predictions (bb);
1246 if (dump_file)
1248 fprintf (dump_file, "Predictions for bb %i\n", bb->index);
1249 if (unlikely_edges.is_empty ())
1250 fprintf (dump_file,
1251 "%i edges in bb %i predicted to even probabilities\n",
1252 nedges, bb->index);
1253 else
1255 fprintf (dump_file,
1256 "%i edges in bb %i predicted with some unlikely edges\n",
1257 nedges, bb->index);
1258 FOR_EACH_EDGE (e, ei, bb->succs)
1259 if (!unlikely_executed_edge_p (e))
1260 dump_prediction (dump_file, PRED_COMBINED,
1261 e->probability.to_reg_br_prob_base (), bb, REASON_NONE, e);
1264 return;
1267 if (dump_file)
1268 fprintf (dump_file, "Predictions for bb %i\n", bb->index);
1270 prune_predictions_for_bb (bb);
1272 edge_prediction **preds = bb_predictions->get (bb);
1274 if (preds)
1276 /* We implement "first match" heuristics and use probability guessed
1277 by predictor with smallest index. */
1278 for (pred = *preds; pred; pred = pred->ep_next)
1280 enum br_predictor predictor = pred->ep_predictor;
1281 int probability = pred->ep_probability;
1283 if (pred->ep_edge != first)
1284 probability = REG_BR_PROB_BASE - probability;
1286 found = true;
1287 /* First match heuristics would be widly confused if we predicted
1288 both directions. */
1289 if (best_predictor > predictor
1290 && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
1292 struct edge_prediction *pred2;
1293 int prob = probability;
1295 for (pred2 = (struct edge_prediction *) *preds;
1296 pred2; pred2 = pred2->ep_next)
1297 if (pred2 != pred && pred2->ep_predictor == pred->ep_predictor)
1299 int probability2 = pred2->ep_probability;
1301 if (pred2->ep_edge != first)
1302 probability2 = REG_BR_PROB_BASE - probability2;
1304 if ((probability < REG_BR_PROB_BASE / 2) !=
1305 (probability2 < REG_BR_PROB_BASE / 2))
1306 break;
1308 /* If the same predictor later gave better result, go for it! */
1309 if ((probability >= REG_BR_PROB_BASE / 2 && (probability2 > probability))
1310 || (probability <= REG_BR_PROB_BASE / 2 && (probability2 < probability)))
1311 prob = probability2;
1313 if (!pred2)
1314 best_probability = prob, best_predictor = predictor;
1317 d = (combined_probability * probability
1318 + (REG_BR_PROB_BASE - combined_probability)
1319 * (REG_BR_PROB_BASE - probability));
1321 /* Use FP math to avoid overflows of 32bit integers. */
1322 if (d == 0)
1323 /* If one probability is 0% and one 100%, avoid division by zero. */
1324 combined_probability = REG_BR_PROB_BASE / 2;
1325 else
1326 combined_probability = (((double) combined_probability)
1327 * probability
1328 * REG_BR_PROB_BASE / d + 0.5);
1332 /* Decide which heuristic to use. In case we didn't match anything,
1333 use no_prediction heuristic, in case we did match, use either
1334 first match or Dempster-Shaffer theory depending on the flags. */
1336 if (best_predictor != END_PREDICTORS)
1337 first_match = true;
1339 if (!found)
1340 dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb);
1341 else
1343 if (!first_match)
1344 dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb,
1345 !first_match ? REASON_NONE : REASON_IGNORED);
1346 else
1347 dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb,
1348 first_match ? REASON_NONE : REASON_IGNORED);
1351 if (first_match)
1352 combined_probability = best_probability;
1353 dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb);
1355 if (preds)
1357 for (pred = (struct edge_prediction *) *preds; pred; pred = pred->ep_next)
1359 enum br_predictor predictor = pred->ep_predictor;
1360 int probability = pred->ep_probability;
1362 dump_prediction (dump_file, predictor, probability, bb,
1363 (!first_match || best_predictor == predictor)
1364 ? REASON_NONE : REASON_IGNORED, pred->ep_edge);
1367 clear_bb_predictions (bb);
1370 /* If we have only one successor which is unknown, we can compute missing
1371 probability. */
1372 if (nunknown == 1)
1374 profile_probability prob = profile_probability::always ();
1375 edge missing = NULL;
1377 FOR_EACH_EDGE (e, ei, bb->succs)
1378 if (e->probability.initialized_p ())
1379 prob -= e->probability;
1380 else if (missing == NULL)
1381 missing = e;
1382 else
1383 gcc_unreachable ();
1384 missing->probability = prob;
1386 /* If nothing is unknown, we have nothing to update. */
1387 else if (!nunknown && nzero != (int)EDGE_COUNT (bb->succs))
1389 else if (!dry_run)
1391 first->probability
1392 = profile_probability::from_reg_br_prob_base (combined_probability);
1393 second->probability = first->probability.invert ();
1397 /* Check if T1 and T2 satisfy the IV_COMPARE condition.
1398 Return the SSA_NAME if the condition satisfies, NULL otherwise.
1400 T1 and T2 should be one of the following cases:
1401 1. T1 is SSA_NAME, T2 is NULL
1402 2. T1 is SSA_NAME, T2 is INTEGER_CST between [-4, 4]
1403 3. T2 is SSA_NAME, T1 is INTEGER_CST between [-4, 4] */
1405 static tree
1406 strips_small_constant (tree t1, tree t2)
1408 tree ret = NULL;
1409 int value = 0;
1411 if (!t1)
1412 return NULL;
1413 else if (TREE_CODE (t1) == SSA_NAME)
1414 ret = t1;
1415 else if (tree_fits_shwi_p (t1))
1416 value = tree_to_shwi (t1);
1417 else
1418 return NULL;
1420 if (!t2)
1421 return ret;
1422 else if (tree_fits_shwi_p (t2))
1423 value = tree_to_shwi (t2);
1424 else if (TREE_CODE (t2) == SSA_NAME)
1426 if (ret)
1427 return NULL;
1428 else
1429 ret = t2;
1432 if (value <= 4 && value >= -4)
1433 return ret;
1434 else
1435 return NULL;
1438 /* Return the SSA_NAME in T or T's operands.
1439 Return NULL if SSA_NAME cannot be found. */
1441 static tree
1442 get_base_value (tree t)
1444 if (TREE_CODE (t) == SSA_NAME)
1445 return t;
1447 if (!BINARY_CLASS_P (t))
1448 return NULL;
1450 switch (TREE_OPERAND_LENGTH (t))
1452 case 1:
1453 return strips_small_constant (TREE_OPERAND (t, 0), NULL);
1454 case 2:
1455 return strips_small_constant (TREE_OPERAND (t, 0),
1456 TREE_OPERAND (t, 1));
1457 default:
1458 return NULL;
1462 /* Check the compare STMT in LOOP. If it compares an induction
1463 variable to a loop invariant, return true, and save
1464 LOOP_INVARIANT, COMPARE_CODE and LOOP_STEP.
1465 Otherwise return false and set LOOP_INVAIANT to NULL. */
1467 static bool
1468 is_comparison_with_loop_invariant_p (gcond *stmt, class loop *loop,
1469 tree *loop_invariant,
1470 enum tree_code *compare_code,
1471 tree *loop_step,
1472 tree *loop_iv_base)
1474 tree op0, op1, bound, base;
1475 affine_iv iv0, iv1;
1476 enum tree_code code;
1477 tree step;
1479 code = gimple_cond_code (stmt);
1480 *loop_invariant = NULL;
1482 switch (code)
1484 case GT_EXPR:
1485 case GE_EXPR:
1486 case NE_EXPR:
1487 case LT_EXPR:
1488 case LE_EXPR:
1489 case EQ_EXPR:
1490 break;
1492 default:
1493 return false;
1496 op0 = gimple_cond_lhs (stmt);
1497 op1 = gimple_cond_rhs (stmt);
1499 if ((TREE_CODE (op0) != SSA_NAME && TREE_CODE (op0) != INTEGER_CST)
1500 || (TREE_CODE (op1) != SSA_NAME && TREE_CODE (op1) != INTEGER_CST))
1501 return false;
1502 if (!simple_iv (loop, loop_containing_stmt (stmt), op0, &iv0, true))
1503 return false;
1504 if (!simple_iv (loop, loop_containing_stmt (stmt), op1, &iv1, true))
1505 return false;
1506 if (TREE_CODE (iv0.step) != INTEGER_CST
1507 || TREE_CODE (iv1.step) != INTEGER_CST)
1508 return false;
1509 if ((integer_zerop (iv0.step) && integer_zerop (iv1.step))
1510 || (!integer_zerop (iv0.step) && !integer_zerop (iv1.step)))
1511 return false;
1513 if (integer_zerop (iv0.step))
1515 if (code != NE_EXPR && code != EQ_EXPR)
1516 code = invert_tree_comparison (code, false);
1517 bound = iv0.base;
1518 base = iv1.base;
1519 if (tree_fits_shwi_p (iv1.step))
1520 step = iv1.step;
1521 else
1522 return false;
1524 else
1526 bound = iv1.base;
1527 base = iv0.base;
1528 if (tree_fits_shwi_p (iv0.step))
1529 step = iv0.step;
1530 else
1531 return false;
1534 if (TREE_CODE (bound) != INTEGER_CST)
1535 bound = get_base_value (bound);
1536 if (!bound)
1537 return false;
1538 if (TREE_CODE (base) != INTEGER_CST)
1539 base = get_base_value (base);
1540 if (!base)
1541 return false;
1543 *loop_invariant = bound;
1544 *compare_code = code;
1545 *loop_step = step;
1546 *loop_iv_base = base;
1547 return true;
1550 /* Compare two SSA_NAMEs: returns TRUE if T1 and T2 are value coherent. */
1552 static bool
1553 expr_coherent_p (tree t1, tree t2)
1555 gimple *stmt;
1556 tree ssa_name_1 = NULL;
1557 tree ssa_name_2 = NULL;
1559 gcc_assert (TREE_CODE (t1) == SSA_NAME || TREE_CODE (t1) == INTEGER_CST);
1560 gcc_assert (TREE_CODE (t2) == SSA_NAME || TREE_CODE (t2) == INTEGER_CST);
1562 if (t1 == t2)
1563 return true;
1565 if (TREE_CODE (t1) == INTEGER_CST && TREE_CODE (t2) == INTEGER_CST)
1566 return true;
1567 if (TREE_CODE (t1) == INTEGER_CST || TREE_CODE (t2) == INTEGER_CST)
1568 return false;
1570 /* Check to see if t1 is expressed/defined with t2. */
1571 stmt = SSA_NAME_DEF_STMT (t1);
1572 gcc_assert (stmt != NULL);
1573 if (is_gimple_assign (stmt))
1575 ssa_name_1 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1576 if (ssa_name_1 && ssa_name_1 == t2)
1577 return true;
1580 /* Check to see if t2 is expressed/defined with t1. */
1581 stmt = SSA_NAME_DEF_STMT (t2);
1582 gcc_assert (stmt != NULL);
1583 if (is_gimple_assign (stmt))
1585 ssa_name_2 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1586 if (ssa_name_2 && ssa_name_2 == t1)
1587 return true;
1590 /* Compare if t1 and t2's def_stmts are identical. */
1591 if (ssa_name_2 != NULL && ssa_name_1 == ssa_name_2)
1592 return true;
1593 else
1594 return false;
1597 /* Return true if E is predicted by one of loop heuristics. */
1599 static bool
1600 predicted_by_loop_heuristics_p (basic_block bb)
1602 struct edge_prediction *i;
1603 edge_prediction **preds = bb_predictions->get (bb);
1605 if (!preds)
1606 return false;
1608 for (i = *preds; i; i = i->ep_next)
1609 if (i->ep_predictor == PRED_LOOP_ITERATIONS_GUESSED
1610 || i->ep_predictor == PRED_LOOP_ITERATIONS_MAX
1611 || i->ep_predictor == PRED_LOOP_ITERATIONS
1612 || i->ep_predictor == PRED_LOOP_EXIT
1613 || i->ep_predictor == PRED_LOOP_EXIT_WITH_RECURSION
1614 || i->ep_predictor == PRED_LOOP_EXTRA_EXIT)
1615 return true;
1616 return false;
1619 /* Predict branch probability of BB when BB contains a branch that compares
1620 an induction variable in LOOP with LOOP_IV_BASE_VAR to LOOP_BOUND_VAR. The
1621 loop exit is compared using LOOP_BOUND_CODE, with step of LOOP_BOUND_STEP.
1623 E.g.
1624 for (int i = 0; i < bound; i++) {
1625 if (i < bound - 2)
1626 computation_1();
1627 else
1628 computation_2();
1631 In this loop, we will predict the branch inside the loop to be taken. */
1633 static void
1634 predict_iv_comparison (class loop *loop, basic_block bb,
1635 tree loop_bound_var,
1636 tree loop_iv_base_var,
1637 enum tree_code loop_bound_code,
1638 int loop_bound_step)
1640 gimple *stmt;
1641 tree compare_var, compare_base;
1642 enum tree_code compare_code;
1643 tree compare_step_var;
1644 edge then_edge;
1645 edge_iterator ei;
1647 if (predicted_by_loop_heuristics_p (bb))
1648 return;
1650 stmt = last_stmt (bb);
1651 if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1652 return;
1653 if (!is_comparison_with_loop_invariant_p (as_a <gcond *> (stmt),
1654 loop, &compare_var,
1655 &compare_code,
1656 &compare_step_var,
1657 &compare_base))
1658 return;
1660 /* Find the taken edge. */
1661 FOR_EACH_EDGE (then_edge, ei, bb->succs)
1662 if (then_edge->flags & EDGE_TRUE_VALUE)
1663 break;
1665 /* When comparing an IV to a loop invariant, NE is more likely to be
1666 taken while EQ is more likely to be not-taken. */
1667 if (compare_code == NE_EXPR)
1669 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1670 return;
1672 else if (compare_code == EQ_EXPR)
1674 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1675 return;
1678 if (!expr_coherent_p (loop_iv_base_var, compare_base))
1679 return;
1681 /* If loop bound, base and compare bound are all constants, we can
1682 calculate the probability directly. */
1683 if (tree_fits_shwi_p (loop_bound_var)
1684 && tree_fits_shwi_p (compare_var)
1685 && tree_fits_shwi_p (compare_base))
1687 int probability;
1688 wi::overflow_type overflow;
1689 bool overall_overflow = false;
1690 widest_int compare_count, tem;
1692 /* (loop_bound - base) / compare_step */
1693 tem = wi::sub (wi::to_widest (loop_bound_var),
1694 wi::to_widest (compare_base), SIGNED, &overflow);
1695 overall_overflow |= overflow;
1696 widest_int loop_count = wi::div_trunc (tem,
1697 wi::to_widest (compare_step_var),
1698 SIGNED, &overflow);
1699 overall_overflow |= overflow;
1701 if (!wi::neg_p (wi::to_widest (compare_step_var))
1702 ^ (compare_code == LT_EXPR || compare_code == LE_EXPR))
1704 /* (loop_bound - compare_bound) / compare_step */
1705 tem = wi::sub (wi::to_widest (loop_bound_var),
1706 wi::to_widest (compare_var), SIGNED, &overflow);
1707 overall_overflow |= overflow;
1708 compare_count = wi::div_trunc (tem, wi::to_widest (compare_step_var),
1709 SIGNED, &overflow);
1710 overall_overflow |= overflow;
1712 else
1714 /* (compare_bound - base) / compare_step */
1715 tem = wi::sub (wi::to_widest (compare_var),
1716 wi::to_widest (compare_base), SIGNED, &overflow);
1717 overall_overflow |= overflow;
1718 compare_count = wi::div_trunc (tem, wi::to_widest (compare_step_var),
1719 SIGNED, &overflow);
1720 overall_overflow |= overflow;
1722 if (compare_code == LE_EXPR || compare_code == GE_EXPR)
1723 ++compare_count;
1724 if (loop_bound_code == LE_EXPR || loop_bound_code == GE_EXPR)
1725 ++loop_count;
1726 if (wi::neg_p (compare_count))
1727 compare_count = 0;
1728 if (wi::neg_p (loop_count))
1729 loop_count = 0;
1730 if (loop_count == 0)
1731 probability = 0;
1732 else if (wi::cmps (compare_count, loop_count) == 1)
1733 probability = REG_BR_PROB_BASE;
1734 else
1736 tem = compare_count * REG_BR_PROB_BASE;
1737 tem = wi::udiv_trunc (tem, loop_count);
1738 probability = tem.to_uhwi ();
1741 /* FIXME: The branch prediction seems broken. It has only 20% hitrate. */
1742 if (!overall_overflow)
1743 predict_edge (then_edge, PRED_LOOP_IV_COMPARE, probability);
1745 return;
1748 if (expr_coherent_p (loop_bound_var, compare_var))
1750 if ((loop_bound_code == LT_EXPR || loop_bound_code == LE_EXPR)
1751 && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1752 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1753 else if ((loop_bound_code == GT_EXPR || loop_bound_code == GE_EXPR)
1754 && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1755 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1756 else if (loop_bound_code == NE_EXPR)
1758 /* If the loop backedge condition is "(i != bound)", we do
1759 the comparison based on the step of IV:
1760 * step < 0 : backedge condition is like (i > bound)
1761 * step > 0 : backedge condition is like (i < bound) */
1762 gcc_assert (loop_bound_step != 0);
1763 if (loop_bound_step > 0
1764 && (compare_code == LT_EXPR
1765 || compare_code == LE_EXPR))
1766 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1767 else if (loop_bound_step < 0
1768 && (compare_code == GT_EXPR
1769 || compare_code == GE_EXPR))
1770 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1771 else
1772 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1774 else
1775 /* The branch is predicted not-taken if loop_bound_code is
1776 opposite with compare_code. */
1777 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1779 else if (expr_coherent_p (loop_iv_base_var, compare_var))
1781 /* For cases like:
1782 for (i = s; i < h; i++)
1783 if (i > s + 2) ....
1784 The branch should be predicted taken. */
1785 if (loop_bound_step > 0
1786 && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1787 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1788 else if (loop_bound_step < 0
1789 && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1790 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1791 else
1792 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1796 /* Predict for extra loop exits that will lead to EXIT_EDGE. The extra loop
1797 exits are resulted from short-circuit conditions that will generate an
1798 if_tmp. E.g.:
1800 if (foo() || global > 10)
1801 break;
1803 This will be translated into:
1805 BB3:
1806 loop header...
1807 BB4:
1808 if foo() goto BB6 else goto BB5
1809 BB5:
1810 if global > 10 goto BB6 else goto BB7
1811 BB6:
1812 goto BB7
1813 BB7:
1814 iftmp = (PHI 0(BB5), 1(BB6))
1815 if iftmp == 1 goto BB8 else goto BB3
1816 BB8:
1817 outside of the loop...
1819 The edge BB7->BB8 is loop exit because BB8 is outside of the loop.
1820 From the dataflow, we can infer that BB4->BB6 and BB5->BB6 are also loop
1821 exits. This function takes BB7->BB8 as input, and finds out the extra loop
1822 exits to predict them using PRED_LOOP_EXTRA_EXIT. */
1824 static void
1825 predict_extra_loop_exits (edge exit_edge)
1827 unsigned i;
1828 bool check_value_one;
1829 gimple *lhs_def_stmt;
1830 gphi *phi_stmt;
1831 tree cmp_rhs, cmp_lhs;
1832 gimple *last;
1833 gcond *cmp_stmt;
1835 last = last_stmt (exit_edge->src);
1836 if (!last)
1837 return;
1838 cmp_stmt = dyn_cast <gcond *> (last);
1839 if (!cmp_stmt)
1840 return;
1842 cmp_rhs = gimple_cond_rhs (cmp_stmt);
1843 cmp_lhs = gimple_cond_lhs (cmp_stmt);
1844 if (!TREE_CONSTANT (cmp_rhs)
1845 || !(integer_zerop (cmp_rhs) || integer_onep (cmp_rhs)))
1846 return;
1847 if (TREE_CODE (cmp_lhs) != SSA_NAME)
1848 return;
1850 /* If check_value_one is true, only the phi_args with value '1' will lead
1851 to loop exit. Otherwise, only the phi_args with value '0' will lead to
1852 loop exit. */
1853 check_value_one = (((integer_onep (cmp_rhs))
1854 ^ (gimple_cond_code (cmp_stmt) == EQ_EXPR))
1855 ^ ((exit_edge->flags & EDGE_TRUE_VALUE) != 0));
1857 lhs_def_stmt = SSA_NAME_DEF_STMT (cmp_lhs);
1858 if (!lhs_def_stmt)
1859 return;
1861 phi_stmt = dyn_cast <gphi *> (lhs_def_stmt);
1862 if (!phi_stmt)
1863 return;
1865 for (i = 0; i < gimple_phi_num_args (phi_stmt); i++)
1867 edge e1;
1868 edge_iterator ei;
1869 tree val = gimple_phi_arg_def (phi_stmt, i);
1870 edge e = gimple_phi_arg_edge (phi_stmt, i);
1872 if (!TREE_CONSTANT (val) || !(integer_zerop (val) || integer_onep (val)))
1873 continue;
1874 if ((check_value_one ^ integer_onep (val)) == 1)
1875 continue;
1876 if (EDGE_COUNT (e->src->succs) != 1)
1878 predict_paths_leading_to_edge (e, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
1879 continue;
1882 FOR_EACH_EDGE (e1, ei, e->src->preds)
1883 predict_paths_leading_to_edge (e1, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
1888 /* Predict edge probabilities by exploiting loop structure. */
1890 static void
1891 predict_loops (void)
1893 class loop *loop;
1894 basic_block bb;
1895 hash_set <class loop *> with_recursion(10);
1897 FOR_EACH_BB_FN (bb, cfun)
1899 gimple_stmt_iterator gsi;
1900 tree decl;
1902 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1903 if (is_gimple_call (gsi_stmt (gsi))
1904 && (decl = gimple_call_fndecl (gsi_stmt (gsi))) != NULL
1905 && recursive_call_p (current_function_decl, decl))
1907 loop = bb->loop_father;
1908 while (loop && !with_recursion.add (loop))
1909 loop = loop_outer (loop);
1913 /* Try to predict out blocks in a loop that are not part of a
1914 natural loop. */
1915 FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
1917 basic_block bb, *bbs;
1918 unsigned j, n_exits = 0;
1919 class tree_niter_desc niter_desc;
1920 edge ex;
1921 class nb_iter_bound *nb_iter;
1922 enum tree_code loop_bound_code = ERROR_MARK;
1923 tree loop_bound_step = NULL;
1924 tree loop_bound_var = NULL;
1925 tree loop_iv_base = NULL;
1926 gcond *stmt = NULL;
1927 bool recursion = with_recursion.contains (loop);
1929 auto_vec<edge> exits = get_loop_exit_edges (loop);
1930 FOR_EACH_VEC_ELT (exits, j, ex)
1931 if (!unlikely_executed_edge_p (ex) && !(ex->flags & EDGE_ABNORMAL_CALL))
1932 n_exits ++;
1933 if (!n_exits)
1934 continue;
1936 if (dump_file && (dump_flags & TDF_DETAILS))
1937 fprintf (dump_file, "Predicting loop %i%s with %i exits.\n",
1938 loop->num, recursion ? " (with recursion)":"", n_exits);
1939 if (dump_file && (dump_flags & TDF_DETAILS)
1940 && max_loop_iterations_int (loop) >= 0)
1942 fprintf (dump_file,
1943 "Loop %d iterates at most %i times.\n", loop->num,
1944 (int)max_loop_iterations_int (loop));
1946 if (dump_file && (dump_flags & TDF_DETAILS)
1947 && likely_max_loop_iterations_int (loop) >= 0)
1949 fprintf (dump_file, "Loop %d likely iterates at most %i times.\n",
1950 loop->num, (int)likely_max_loop_iterations_int (loop));
1953 FOR_EACH_VEC_ELT (exits, j, ex)
1955 tree niter = NULL;
1956 HOST_WIDE_INT nitercst;
1957 int max = param_max_predicted_iterations;
1958 int probability;
1959 enum br_predictor predictor;
1960 widest_int nit;
1962 if (unlikely_executed_edge_p (ex)
1963 || (ex->flags & EDGE_ABNORMAL_CALL))
1964 continue;
1965 /* Loop heuristics do not expect exit conditional to be inside
1966 inner loop. We predict from innermost to outermost loop. */
1967 if (predicted_by_loop_heuristics_p (ex->src))
1969 if (dump_file && (dump_flags & TDF_DETAILS))
1970 fprintf (dump_file, "Skipping exit %i->%i because "
1971 "it is already predicted.\n",
1972 ex->src->index, ex->dest->index);
1973 continue;
1975 predict_extra_loop_exits (ex);
1977 if (number_of_iterations_exit (loop, ex, &niter_desc, false, false))
1978 niter = niter_desc.niter;
1979 if (!niter || TREE_CODE (niter_desc.niter) != INTEGER_CST)
1980 niter = loop_niter_by_eval (loop, ex);
1981 if (dump_file && (dump_flags & TDF_DETAILS)
1982 && TREE_CODE (niter) == INTEGER_CST)
1984 fprintf (dump_file, "Exit %i->%i %d iterates ",
1985 ex->src->index, ex->dest->index,
1986 loop->num);
1987 print_generic_expr (dump_file, niter, TDF_SLIM);
1988 fprintf (dump_file, " times.\n");
1991 if (TREE_CODE (niter) == INTEGER_CST)
1993 if (tree_fits_uhwi_p (niter)
1994 && max
1995 && compare_tree_int (niter, max - 1) == -1)
1996 nitercst = tree_to_uhwi (niter) + 1;
1997 else
1998 nitercst = max;
1999 predictor = PRED_LOOP_ITERATIONS;
2001 /* If we have just one exit and we can derive some information about
2002 the number of iterations of the loop from the statements inside
2003 the loop, use it to predict this exit. */
2004 else if (n_exits == 1
2005 && estimated_stmt_executions (loop, &nit))
2007 if (wi::gtu_p (nit, max))
2008 nitercst = max;
2009 else
2010 nitercst = nit.to_shwi ();
2011 predictor = PRED_LOOP_ITERATIONS_GUESSED;
2013 /* If we have likely upper bound, trust it for very small iteration
2014 counts. Such loops would otherwise get mispredicted by standard
2015 LOOP_EXIT heuristics. */
2016 else if (n_exits == 1
2017 && likely_max_stmt_executions (loop, &nit)
2018 && wi::ltu_p (nit,
2019 RDIV (REG_BR_PROB_BASE,
2020 REG_BR_PROB_BASE
2021 - predictor_info
2022 [recursion
2023 ? PRED_LOOP_EXIT_WITH_RECURSION
2024 : PRED_LOOP_EXIT].hitrate)))
2026 nitercst = nit.to_shwi ();
2027 predictor = PRED_LOOP_ITERATIONS_MAX;
2029 else
2031 if (dump_file && (dump_flags & TDF_DETAILS))
2032 fprintf (dump_file, "Nothing known about exit %i->%i.\n",
2033 ex->src->index, ex->dest->index);
2034 continue;
2037 if (dump_file && (dump_flags & TDF_DETAILS))
2038 fprintf (dump_file, "Recording prediction to %i iterations by %s.\n",
2039 (int)nitercst, predictor_info[predictor].name);
2040 /* If the prediction for number of iterations is zero, do not
2041 predict the exit edges. */
2042 if (nitercst == 0)
2043 continue;
2045 probability = RDIV (REG_BR_PROB_BASE, nitercst);
2046 predict_edge (ex, predictor, probability);
2049 /* Find information about loop bound variables. */
2050 for (nb_iter = loop->bounds; nb_iter;
2051 nb_iter = nb_iter->next)
2052 if (nb_iter->stmt
2053 && gimple_code (nb_iter->stmt) == GIMPLE_COND)
2055 stmt = as_a <gcond *> (nb_iter->stmt);
2056 break;
2058 if (!stmt && last_stmt (loop->header)
2059 && gimple_code (last_stmt (loop->header)) == GIMPLE_COND)
2060 stmt = as_a <gcond *> (last_stmt (loop->header));
2061 if (stmt)
2062 is_comparison_with_loop_invariant_p (stmt, loop,
2063 &loop_bound_var,
2064 &loop_bound_code,
2065 &loop_bound_step,
2066 &loop_iv_base);
2068 bbs = get_loop_body (loop);
2070 for (j = 0; j < loop->num_nodes; j++)
2072 edge e;
2073 edge_iterator ei;
2075 bb = bbs[j];
2077 /* Bypass loop heuristics on continue statement. These
2078 statements construct loops via "non-loop" constructs
2079 in the source language and are better to be handled
2080 separately. */
2081 if (predicted_by_p (bb, PRED_CONTINUE))
2083 if (dump_file && (dump_flags & TDF_DETAILS))
2084 fprintf (dump_file, "BB %i predicted by continue.\n",
2085 bb->index);
2086 continue;
2089 /* If we already used more reliable loop exit predictors, do not
2090 bother with PRED_LOOP_EXIT. */
2091 if (!predicted_by_loop_heuristics_p (bb))
2093 /* For loop with many exits we don't want to predict all exits
2094 with the pretty large probability, because if all exits are
2095 considered in row, the loop would be predicted to iterate
2096 almost never. The code to divide probability by number of
2097 exits is very rough. It should compute the number of exits
2098 taken in each patch through function (not the overall number
2099 of exits that might be a lot higher for loops with wide switch
2100 statements in them) and compute n-th square root.
2102 We limit the minimal probability by 2% to avoid
2103 EDGE_PROBABILITY_RELIABLE from trusting the branch prediction
2104 as this was causing regression in perl benchmark containing such
2105 a wide loop. */
2107 int probability = ((REG_BR_PROB_BASE
2108 - predictor_info
2109 [recursion
2110 ? PRED_LOOP_EXIT_WITH_RECURSION
2111 : PRED_LOOP_EXIT].hitrate)
2112 / n_exits);
2113 if (probability < HITRATE (2))
2114 probability = HITRATE (2);
2115 FOR_EACH_EDGE (e, ei, bb->succs)
2116 if (e->dest->index < NUM_FIXED_BLOCKS
2117 || !flow_bb_inside_loop_p (loop, e->dest))
2119 if (dump_file && (dump_flags & TDF_DETAILS))
2120 fprintf (dump_file,
2121 "Predicting exit %i->%i with prob %i.\n",
2122 e->src->index, e->dest->index, probability);
2123 predict_edge (e,
2124 recursion ? PRED_LOOP_EXIT_WITH_RECURSION
2125 : PRED_LOOP_EXIT, probability);
2128 if (loop_bound_var)
2129 predict_iv_comparison (loop, bb, loop_bound_var, loop_iv_base,
2130 loop_bound_code,
2131 tree_to_shwi (loop_bound_step));
2134 /* In the following code
2135 for (loop1)
2136 if (cond)
2137 for (loop2)
2138 body;
2139 guess that cond is unlikely. */
2140 if (loop_outer (loop)->num)
2142 basic_block bb = NULL;
2143 edge preheader_edge = loop_preheader_edge (loop);
2145 if (single_pred_p (preheader_edge->src)
2146 && single_succ_p (preheader_edge->src))
2147 preheader_edge = single_pred_edge (preheader_edge->src);
2149 gimple *stmt = last_stmt (preheader_edge->src);
2150 /* Pattern match fortran loop preheader:
2151 _16 = BUILTIN_EXPECT (_15, 1, PRED_FORTRAN_LOOP_PREHEADER);
2152 _17 = (logical(kind=4)) _16;
2153 if (_17 != 0)
2154 goto <bb 11>;
2155 else
2156 goto <bb 13>;
2158 Loop guard branch prediction says nothing about duplicated loop
2159 headers produced by fortran frontend and in this case we want
2160 to predict paths leading to this preheader. */
2162 if (stmt
2163 && gimple_code (stmt) == GIMPLE_COND
2164 && gimple_cond_code (stmt) == NE_EXPR
2165 && TREE_CODE (gimple_cond_lhs (stmt)) == SSA_NAME
2166 && integer_zerop (gimple_cond_rhs (stmt)))
2168 gimple *call_stmt = SSA_NAME_DEF_STMT (gimple_cond_lhs (stmt));
2169 if (gimple_code (call_stmt) == GIMPLE_ASSIGN
2170 && gimple_expr_code (call_stmt) == NOP_EXPR
2171 && TREE_CODE (gimple_assign_rhs1 (call_stmt)) == SSA_NAME)
2172 call_stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (call_stmt));
2173 if (gimple_call_internal_p (call_stmt, IFN_BUILTIN_EXPECT)
2174 && TREE_CODE (gimple_call_arg (call_stmt, 2)) == INTEGER_CST
2175 && tree_fits_uhwi_p (gimple_call_arg (call_stmt, 2))
2176 && tree_to_uhwi (gimple_call_arg (call_stmt, 2))
2177 == PRED_FORTRAN_LOOP_PREHEADER)
2178 bb = preheader_edge->src;
2180 if (!bb)
2182 if (!dominated_by_p (CDI_DOMINATORS,
2183 loop_outer (loop)->latch, loop->header))
2184 predict_paths_leading_to_edge (loop_preheader_edge (loop),
2185 recursion
2186 ? PRED_LOOP_GUARD_WITH_RECURSION
2187 : PRED_LOOP_GUARD,
2188 NOT_TAKEN,
2189 loop_outer (loop));
2191 else
2193 if (!dominated_by_p (CDI_DOMINATORS,
2194 loop_outer (loop)->latch, bb))
2195 predict_paths_leading_to (bb,
2196 recursion
2197 ? PRED_LOOP_GUARD_WITH_RECURSION
2198 : PRED_LOOP_GUARD,
2199 NOT_TAKEN,
2200 loop_outer (loop));
2204 /* Free basic blocks from get_loop_body. */
2205 free (bbs);
2209 /* Attempt to predict probabilities of BB outgoing edges using local
2210 properties. */
2211 static void
2212 bb_estimate_probability_locally (basic_block bb)
2214 rtx_insn *last_insn = BB_END (bb);
2215 rtx cond;
2217 if (! can_predict_insn_p (last_insn))
2218 return;
2219 cond = get_condition (last_insn, NULL, false, false);
2220 if (! cond)
2221 return;
2223 /* Try "pointer heuristic."
2224 A comparison ptr == 0 is predicted as false.
2225 Similarly, a comparison ptr1 == ptr2 is predicted as false. */
2226 if (COMPARISON_P (cond)
2227 && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0)))
2228 || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1)))))
2230 if (GET_CODE (cond) == EQ)
2231 predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
2232 else if (GET_CODE (cond) == NE)
2233 predict_insn_def (last_insn, PRED_POINTER, TAKEN);
2235 else
2237 /* Try "opcode heuristic."
2238 EQ tests are usually false and NE tests are usually true. Also,
2239 most quantities are positive, so we can make the appropriate guesses
2240 about signed comparisons against zero. */
2241 switch (GET_CODE (cond))
2243 case CONST_INT:
2244 /* Unconditional branch. */
2245 predict_insn_def (last_insn, PRED_UNCONDITIONAL,
2246 cond == const0_rtx ? NOT_TAKEN : TAKEN);
2247 break;
2249 case EQ:
2250 case UNEQ:
2251 /* Floating point comparisons appears to behave in a very
2252 unpredictable way because of special role of = tests in
2253 FP code. */
2254 if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
2256 /* Comparisons with 0 are often used for booleans and there is
2257 nothing useful to predict about them. */
2258 else if (XEXP (cond, 1) == const0_rtx
2259 || XEXP (cond, 0) == const0_rtx)
2261 else
2262 predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
2263 break;
2265 case NE:
2266 case LTGT:
2267 /* Floating point comparisons appears to behave in a very
2268 unpredictable way because of special role of = tests in
2269 FP code. */
2270 if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
2272 /* Comparisons with 0 are often used for booleans and there is
2273 nothing useful to predict about them. */
2274 else if (XEXP (cond, 1) == const0_rtx
2275 || XEXP (cond, 0) == const0_rtx)
2277 else
2278 predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
2279 break;
2281 case ORDERED:
2282 predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
2283 break;
2285 case UNORDERED:
2286 predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
2287 break;
2289 case LE:
2290 case LT:
2291 if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
2292 || XEXP (cond, 1) == constm1_rtx)
2293 predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
2294 break;
2296 case GE:
2297 case GT:
2298 if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
2299 || XEXP (cond, 1) == constm1_rtx)
2300 predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
2301 break;
2303 default:
2304 break;
2308 /* Set edge->probability for each successor edge of BB. */
2309 void
2310 guess_outgoing_edge_probabilities (basic_block bb)
2312 bb_estimate_probability_locally (bb);
2313 combine_predictions_for_insn (BB_END (bb), bb);
2316 static tree expr_expected_value (tree, bitmap, enum br_predictor *predictor,
2317 HOST_WIDE_INT *probability);
2319 /* Helper function for expr_expected_value. */
2321 static tree
2322 expr_expected_value_1 (tree type, tree op0, enum tree_code code,
2323 tree op1, bitmap visited, enum br_predictor *predictor,
2324 HOST_WIDE_INT *probability)
2326 gimple *def;
2328 /* Reset returned probability value. */
2329 *probability = -1;
2330 *predictor = PRED_UNCONDITIONAL;
2332 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
2334 if (TREE_CONSTANT (op0))
2335 return op0;
2337 if (code == IMAGPART_EXPR)
2339 if (TREE_CODE (TREE_OPERAND (op0, 0)) == SSA_NAME)
2341 def = SSA_NAME_DEF_STMT (TREE_OPERAND (op0, 0));
2342 if (is_gimple_call (def)
2343 && gimple_call_internal_p (def)
2344 && (gimple_call_internal_fn (def)
2345 == IFN_ATOMIC_COMPARE_EXCHANGE))
2347 /* Assume that any given atomic operation has low contention,
2348 and thus the compare-and-swap operation succeeds. */
2349 *predictor = PRED_COMPARE_AND_SWAP;
2350 return build_one_cst (TREE_TYPE (op0));
2355 if (code != SSA_NAME)
2356 return NULL_TREE;
2358 def = SSA_NAME_DEF_STMT (op0);
2360 /* If we were already here, break the infinite cycle. */
2361 if (!bitmap_set_bit (visited, SSA_NAME_VERSION (op0)))
2362 return NULL;
2364 if (gimple_code (def) == GIMPLE_PHI)
2366 /* All the arguments of the PHI node must have the same constant
2367 length. */
2368 int i, n = gimple_phi_num_args (def);
2369 tree val = NULL, new_val;
2371 for (i = 0; i < n; i++)
2373 tree arg = PHI_ARG_DEF (def, i);
2374 enum br_predictor predictor2;
2376 /* If this PHI has itself as an argument, we cannot
2377 determine the string length of this argument. However,
2378 if we can find an expected constant value for the other
2379 PHI args then we can still be sure that this is
2380 likely a constant. So be optimistic and just
2381 continue with the next argument. */
2382 if (arg == PHI_RESULT (def))
2383 continue;
2385 HOST_WIDE_INT probability2;
2386 new_val = expr_expected_value (arg, visited, &predictor2,
2387 &probability2);
2389 /* It is difficult to combine value predictors. Simply assume
2390 that later predictor is weaker and take its prediction. */
2391 if (*predictor < predictor2)
2393 *predictor = predictor2;
2394 *probability = probability2;
2396 if (!new_val)
2397 return NULL;
2398 if (!val)
2399 val = new_val;
2400 else if (!operand_equal_p (val, new_val, false))
2401 return NULL;
2403 return val;
2405 if (is_gimple_assign (def))
2407 if (gimple_assign_lhs (def) != op0)
2408 return NULL;
2410 return expr_expected_value_1 (TREE_TYPE (gimple_assign_lhs (def)),
2411 gimple_assign_rhs1 (def),
2412 gimple_assign_rhs_code (def),
2413 gimple_assign_rhs2 (def),
2414 visited, predictor, probability);
2417 if (is_gimple_call (def))
2419 tree decl = gimple_call_fndecl (def);
2420 if (!decl)
2422 if (gimple_call_internal_p (def)
2423 && gimple_call_internal_fn (def) == IFN_BUILTIN_EXPECT)
2425 gcc_assert (gimple_call_num_args (def) == 3);
2426 tree val = gimple_call_arg (def, 0);
2427 if (TREE_CONSTANT (val))
2428 return val;
2429 tree val2 = gimple_call_arg (def, 2);
2430 gcc_assert (TREE_CODE (val2) == INTEGER_CST
2431 && tree_fits_uhwi_p (val2)
2432 && tree_to_uhwi (val2) < END_PREDICTORS);
2433 *predictor = (enum br_predictor) tree_to_uhwi (val2);
2434 if (*predictor == PRED_BUILTIN_EXPECT)
2435 *probability
2436 = HITRATE (param_builtin_expect_probability);
2437 return gimple_call_arg (def, 1);
2439 return NULL;
2442 if (DECL_IS_MALLOC (decl) || DECL_IS_OPERATOR_NEW_P (decl))
2444 if (predictor)
2445 *predictor = PRED_MALLOC_NONNULL;
2446 return boolean_true_node;
2449 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
2450 switch (DECL_FUNCTION_CODE (decl))
2452 case BUILT_IN_EXPECT:
2454 tree val;
2455 if (gimple_call_num_args (def) != 2)
2456 return NULL;
2457 val = gimple_call_arg (def, 0);
2458 if (TREE_CONSTANT (val))
2459 return val;
2460 *predictor = PRED_BUILTIN_EXPECT;
2461 *probability
2462 = HITRATE (param_builtin_expect_probability);
2463 return gimple_call_arg (def, 1);
2465 case BUILT_IN_EXPECT_WITH_PROBABILITY:
2467 tree val;
2468 if (gimple_call_num_args (def) != 3)
2469 return NULL;
2470 val = gimple_call_arg (def, 0);
2471 if (TREE_CONSTANT (val))
2472 return val;
2473 /* Compute final probability as:
2474 probability * REG_BR_PROB_BASE. */
2475 tree prob = gimple_call_arg (def, 2);
2476 tree t = TREE_TYPE (prob);
2477 tree base = build_int_cst (integer_type_node,
2478 REG_BR_PROB_BASE);
2479 base = build_real_from_int_cst (t, base);
2480 tree r = fold_build2_initializer_loc (UNKNOWN_LOCATION,
2481 MULT_EXPR, t, prob, base);
2482 if (TREE_CODE (r) != REAL_CST)
2484 error_at (gimple_location (def),
2485 "probability %qE must be "
2486 "constant floating-point expression", prob);
2487 return NULL;
2489 HOST_WIDE_INT probi
2490 = real_to_integer (TREE_REAL_CST_PTR (r));
2491 if (probi >= 0 && probi <= REG_BR_PROB_BASE)
2493 *predictor = PRED_BUILTIN_EXPECT_WITH_PROBABILITY;
2494 *probability = probi;
2496 else
2497 error_at (gimple_location (def),
2498 "probability %qE is outside "
2499 "the range [0.0, 1.0]", prob);
2501 return gimple_call_arg (def, 1);
2504 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N:
2505 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
2506 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
2507 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
2508 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
2509 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
2510 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE:
2511 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N:
2512 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
2513 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
2514 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
2515 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
2516 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
2517 /* Assume that any given atomic operation has low contention,
2518 and thus the compare-and-swap operation succeeds. */
2519 *predictor = PRED_COMPARE_AND_SWAP;
2520 return boolean_true_node;
2521 case BUILT_IN_REALLOC:
2522 if (predictor)
2523 *predictor = PRED_MALLOC_NONNULL;
2524 return boolean_true_node;
2525 default:
2526 break;
2530 return NULL;
2533 if (get_gimple_rhs_class (code) == GIMPLE_BINARY_RHS)
2535 tree res;
2536 enum br_predictor predictor2;
2537 HOST_WIDE_INT probability2;
2538 op0 = expr_expected_value (op0, visited, predictor, probability);
2539 if (!op0)
2540 return NULL;
2541 op1 = expr_expected_value (op1, visited, &predictor2, &probability2);
2542 if (!op1)
2543 return NULL;
2544 res = fold_build2 (code, type, op0, op1);
2545 if (TREE_CODE (res) == INTEGER_CST
2546 && TREE_CODE (op0) == INTEGER_CST
2547 && TREE_CODE (op1) == INTEGER_CST)
2549 /* Combine binary predictions. */
2550 if (*probability != -1 || probability2 != -1)
2552 HOST_WIDE_INT p1 = get_predictor_value (*predictor, *probability);
2553 HOST_WIDE_INT p2 = get_predictor_value (predictor2, probability2);
2554 *probability = RDIV (p1 * p2, REG_BR_PROB_BASE);
2557 if (*predictor < predictor2)
2558 *predictor = predictor2;
2560 return res;
2562 return NULL;
2564 if (get_gimple_rhs_class (code) == GIMPLE_UNARY_RHS)
2566 tree res;
2567 op0 = expr_expected_value (op0, visited, predictor, probability);
2568 if (!op0)
2569 return NULL;
2570 res = fold_build1 (code, type, op0);
2571 if (TREE_CONSTANT (res))
2572 return res;
2573 return NULL;
2575 return NULL;
2578 /* Return constant EXPR will likely have at execution time, NULL if unknown.
2579 The function is used by builtin_expect branch predictor so the evidence
2580 must come from this construct and additional possible constant folding.
2582 We may want to implement more involved value guess (such as value range
2583 propagation based prediction), but such tricks shall go to new
2584 implementation. */
2586 static tree
2587 expr_expected_value (tree expr, bitmap visited,
2588 enum br_predictor *predictor,
2589 HOST_WIDE_INT *probability)
2591 enum tree_code code;
2592 tree op0, op1;
2594 if (TREE_CONSTANT (expr))
2596 *predictor = PRED_UNCONDITIONAL;
2597 *probability = -1;
2598 return expr;
2601 extract_ops_from_tree (expr, &code, &op0, &op1);
2602 return expr_expected_value_1 (TREE_TYPE (expr),
2603 op0, code, op1, visited, predictor,
2604 probability);
2608 /* Return probability of a PREDICTOR. If the predictor has variable
2609 probability return passed PROBABILITY. */
2611 static HOST_WIDE_INT
2612 get_predictor_value (br_predictor predictor, HOST_WIDE_INT probability)
2614 switch (predictor)
2616 case PRED_BUILTIN_EXPECT:
2617 case PRED_BUILTIN_EXPECT_WITH_PROBABILITY:
2618 gcc_assert (probability != -1);
2619 return probability;
2620 default:
2621 gcc_assert (probability == -1);
2622 return predictor_info[(int) predictor].hitrate;
2626 /* Predict using opcode of the last statement in basic block. */
2627 static void
2628 tree_predict_by_opcode (basic_block bb)
2630 gimple *stmt = last_stmt (bb);
2631 edge then_edge;
2632 tree op0, op1;
2633 tree type;
2634 tree val;
2635 enum tree_code cmp;
2636 edge_iterator ei;
2637 enum br_predictor predictor;
2638 HOST_WIDE_INT probability;
2640 if (!stmt)
2641 return;
2643 if (gswitch *sw = dyn_cast <gswitch *> (stmt))
2645 tree index = gimple_switch_index (sw);
2646 tree val = expr_expected_value (index, auto_bitmap (),
2647 &predictor, &probability);
2648 if (val && TREE_CODE (val) == INTEGER_CST)
2650 edge e = find_taken_edge_switch_expr (sw, val);
2651 if (predictor == PRED_BUILTIN_EXPECT)
2653 int percent = param_builtin_expect_probability;
2654 gcc_assert (percent >= 0 && percent <= 100);
2655 predict_edge (e, PRED_BUILTIN_EXPECT,
2656 HITRATE (percent));
2658 else
2659 predict_edge_def (e, predictor, TAKEN);
2663 if (gimple_code (stmt) != GIMPLE_COND)
2664 return;
2665 FOR_EACH_EDGE (then_edge, ei, bb->succs)
2666 if (then_edge->flags & EDGE_TRUE_VALUE)
2667 break;
2668 op0 = gimple_cond_lhs (stmt);
2669 op1 = gimple_cond_rhs (stmt);
2670 cmp = gimple_cond_code (stmt);
2671 type = TREE_TYPE (op0);
2672 val = expr_expected_value_1 (boolean_type_node, op0, cmp, op1, auto_bitmap (),
2673 &predictor, &probability);
2674 if (val && TREE_CODE (val) == INTEGER_CST)
2676 HOST_WIDE_INT prob = get_predictor_value (predictor, probability);
2677 if (integer_zerop (val))
2678 prob = REG_BR_PROB_BASE - prob;
2679 predict_edge (then_edge, predictor, prob);
2681 /* Try "pointer heuristic."
2682 A comparison ptr == 0 is predicted as false.
2683 Similarly, a comparison ptr1 == ptr2 is predicted as false. */
2684 if (POINTER_TYPE_P (type))
2686 if (cmp == EQ_EXPR)
2687 predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
2688 else if (cmp == NE_EXPR)
2689 predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
2691 else
2693 /* Try "opcode heuristic."
2694 EQ tests are usually false and NE tests are usually true. Also,
2695 most quantities are positive, so we can make the appropriate guesses
2696 about signed comparisons against zero. */
2697 switch (cmp)
2699 case EQ_EXPR:
2700 case UNEQ_EXPR:
2701 /* Floating point comparisons appears to behave in a very
2702 unpredictable way because of special role of = tests in
2703 FP code. */
2704 if (FLOAT_TYPE_P (type))
2706 /* Comparisons with 0 are often used for booleans and there is
2707 nothing useful to predict about them. */
2708 else if (integer_zerop (op0) || integer_zerop (op1))
2710 else
2711 predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
2712 break;
2714 case NE_EXPR:
2715 case LTGT_EXPR:
2716 /* Floating point comparisons appears to behave in a very
2717 unpredictable way because of special role of = tests in
2718 FP code. */
2719 if (FLOAT_TYPE_P (type))
2721 /* Comparisons with 0 are often used for booleans and there is
2722 nothing useful to predict about them. */
2723 else if (integer_zerop (op0)
2724 || integer_zerop (op1))
2726 else
2727 predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
2728 break;
2730 case ORDERED_EXPR:
2731 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
2732 break;
2734 case UNORDERED_EXPR:
2735 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
2736 break;
2738 case LE_EXPR:
2739 case LT_EXPR:
2740 if (integer_zerop (op1)
2741 || integer_onep (op1)
2742 || integer_all_onesp (op1)
2743 || real_zerop (op1)
2744 || real_onep (op1)
2745 || real_minus_onep (op1))
2746 predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
2747 break;
2749 case GE_EXPR:
2750 case GT_EXPR:
2751 if (integer_zerop (op1)
2752 || integer_onep (op1)
2753 || integer_all_onesp (op1)
2754 || real_zerop (op1)
2755 || real_onep (op1)
2756 || real_minus_onep (op1))
2757 predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
2758 break;
2760 default:
2761 break;
2765 /* Returns TRUE if the STMT is exit(0) like statement. */
2767 static bool
2768 is_exit_with_zero_arg (const gimple *stmt)
2770 /* This is not exit, _exit or _Exit. */
2771 if (!gimple_call_builtin_p (stmt, BUILT_IN_EXIT)
2772 && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT)
2773 && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT2))
2774 return false;
2776 /* Argument is an interger zero. */
2777 return integer_zerop (gimple_call_arg (stmt, 0));
2780 /* Try to guess whether the value of return means error code. */
2782 static enum br_predictor
2783 return_prediction (tree val, enum prediction *prediction)
2785 /* VOID. */
2786 if (!val)
2787 return PRED_NO_PREDICTION;
2788 /* Different heuristics for pointers and scalars. */
2789 if (POINTER_TYPE_P (TREE_TYPE (val)))
2791 /* NULL is usually not returned. */
2792 if (integer_zerop (val))
2794 *prediction = NOT_TAKEN;
2795 return PRED_NULL_RETURN;
2798 else if (INTEGRAL_TYPE_P (TREE_TYPE (val)))
2800 /* Negative return values are often used to indicate
2801 errors. */
2802 if (TREE_CODE (val) == INTEGER_CST
2803 && tree_int_cst_sgn (val) < 0)
2805 *prediction = NOT_TAKEN;
2806 return PRED_NEGATIVE_RETURN;
2808 /* Constant return values seems to be commonly taken.
2809 Zero/one often represent booleans so exclude them from the
2810 heuristics. */
2811 if (TREE_CONSTANT (val)
2812 && (!integer_zerop (val) && !integer_onep (val)))
2814 *prediction = NOT_TAKEN;
2815 return PRED_CONST_RETURN;
2818 return PRED_NO_PREDICTION;
2821 /* Return zero if phi result could have values other than -1, 0 or 1,
2822 otherwise return a bitmask, with bits 0, 1 and 2 set if -1, 0 and 1
2823 values are used or likely. */
2825 static int
2826 zero_one_minusone (gphi *phi, int limit)
2828 int phi_num_args = gimple_phi_num_args (phi);
2829 int ret = 0;
2830 for (int i = 0; i < phi_num_args; i++)
2832 tree t = PHI_ARG_DEF (phi, i);
2833 if (TREE_CODE (t) != INTEGER_CST)
2834 continue;
2835 wide_int w = wi::to_wide (t);
2836 if (w == -1)
2837 ret |= 1;
2838 else if (w == 0)
2839 ret |= 2;
2840 else if (w == 1)
2841 ret |= 4;
2842 else
2843 return 0;
2845 for (int i = 0; i < phi_num_args; i++)
2847 tree t = PHI_ARG_DEF (phi, i);
2848 if (TREE_CODE (t) == INTEGER_CST)
2849 continue;
2850 if (TREE_CODE (t) != SSA_NAME)
2851 return 0;
2852 gimple *g = SSA_NAME_DEF_STMT (t);
2853 if (gimple_code (g) == GIMPLE_PHI && limit > 0)
2854 if (int r = zero_one_minusone (as_a <gphi *> (g), limit - 1))
2856 ret |= r;
2857 continue;
2859 if (!is_gimple_assign (g))
2860 return 0;
2861 if (gimple_assign_cast_p (g))
2863 tree rhs1 = gimple_assign_rhs1 (g);
2864 if (TREE_CODE (rhs1) != SSA_NAME
2865 || !INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
2866 || TYPE_PRECISION (TREE_TYPE (rhs1)) != 1
2867 || !TYPE_UNSIGNED (TREE_TYPE (rhs1)))
2868 return 0;
2869 ret |= (2 | 4);
2870 continue;
2872 if (TREE_CODE_CLASS (gimple_assign_rhs_code (g)) != tcc_comparison)
2873 return 0;
2874 ret |= (2 | 4);
2876 return ret;
2879 /* Find the basic block with return expression and look up for possible
2880 return value trying to apply RETURN_PREDICTION heuristics. */
2881 static void
2882 apply_return_prediction (void)
2884 greturn *return_stmt = NULL;
2885 tree return_val;
2886 edge e;
2887 gphi *phi;
2888 int phi_num_args, i;
2889 enum br_predictor pred;
2890 enum prediction direction;
2891 edge_iterator ei;
2893 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
2895 gimple *last = last_stmt (e->src);
2896 if (last
2897 && gimple_code (last) == GIMPLE_RETURN)
2899 return_stmt = as_a <greturn *> (last);
2900 break;
2903 if (!e)
2904 return;
2905 return_val = gimple_return_retval (return_stmt);
2906 if (!return_val)
2907 return;
2908 if (TREE_CODE (return_val) != SSA_NAME
2909 || !SSA_NAME_DEF_STMT (return_val)
2910 || gimple_code (SSA_NAME_DEF_STMT (return_val)) != GIMPLE_PHI)
2911 return;
2912 phi = as_a <gphi *> (SSA_NAME_DEF_STMT (return_val));
2913 phi_num_args = gimple_phi_num_args (phi);
2914 pred = return_prediction (PHI_ARG_DEF (phi, 0), &direction);
2916 /* Avoid the case where the function returns -1, 0 and 1 values and
2917 nothing else. Those could be qsort etc. comparison functions
2918 where the negative return isn't less probable than positive.
2919 For this require that the function returns at least -1 or 1
2920 or -1 and a boolean value or comparison result, so that functions
2921 returning just -1 and 0 are treated as if -1 represents error value. */
2922 if (INTEGRAL_TYPE_P (TREE_TYPE (return_val))
2923 && !TYPE_UNSIGNED (TREE_TYPE (return_val))
2924 && TYPE_PRECISION (TREE_TYPE (return_val)) > 1)
2925 if (int r = zero_one_minusone (phi, 3))
2926 if ((r & (1 | 4)) == (1 | 4))
2927 return;
2929 /* Avoid the degenerate case where all return values form the function
2930 belongs to same category (ie they are all positive constants)
2931 so we can hardly say something about them. */
2932 for (i = 1; i < phi_num_args; i++)
2933 if (pred != return_prediction (PHI_ARG_DEF (phi, i), &direction))
2934 break;
2935 if (i != phi_num_args)
2936 for (i = 0; i < phi_num_args; i++)
2938 pred = return_prediction (PHI_ARG_DEF (phi, i), &direction);
2939 if (pred != PRED_NO_PREDICTION)
2940 predict_paths_leading_to_edge (gimple_phi_arg_edge (phi, i), pred,
2941 direction);
2945 /* Look for basic block that contains unlikely to happen events
2946 (such as noreturn calls) and mark all paths leading to execution
2947 of this basic blocks as unlikely. */
2949 static void
2950 tree_bb_level_predictions (void)
2952 basic_block bb;
2953 bool has_return_edges = false;
2954 edge e;
2955 edge_iterator ei;
2957 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
2958 if (!unlikely_executed_edge_p (e) && !(e->flags & EDGE_ABNORMAL_CALL))
2960 has_return_edges = true;
2961 break;
2964 apply_return_prediction ();
2966 FOR_EACH_BB_FN (bb, cfun)
2968 gimple_stmt_iterator gsi;
2970 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
2972 gimple *stmt = gsi_stmt (gsi);
2973 tree decl;
2975 if (is_gimple_call (stmt))
2977 if (gimple_call_noreturn_p (stmt)
2978 && has_return_edges
2979 && !is_exit_with_zero_arg (stmt))
2980 predict_paths_leading_to (bb, PRED_NORETURN,
2981 NOT_TAKEN);
2982 decl = gimple_call_fndecl (stmt);
2983 if (decl
2984 && lookup_attribute ("cold",
2985 DECL_ATTRIBUTES (decl)))
2986 predict_paths_leading_to (bb, PRED_COLD_FUNCTION,
2987 NOT_TAKEN);
2988 if (decl && recursive_call_p (current_function_decl, decl))
2989 predict_paths_leading_to (bb, PRED_RECURSIVE_CALL,
2990 NOT_TAKEN);
2992 else if (gimple_code (stmt) == GIMPLE_PREDICT)
2994 predict_paths_leading_to (bb, gimple_predict_predictor (stmt),
2995 gimple_predict_outcome (stmt));
2996 /* Keep GIMPLE_PREDICT around so early inlining will propagate
2997 hints to callers. */
3003 /* Callback for hash_map::traverse, asserts that the pointer map is
3004 empty. */
3006 bool
3007 assert_is_empty (const_basic_block const &, edge_prediction *const &value,
3008 void *)
3010 gcc_assert (!value);
3011 return false;
3014 /* Predict branch probabilities and estimate profile for basic block BB.
3015 When LOCAL_ONLY is set do not use any global properties of CFG. */
3017 static void
3018 tree_estimate_probability_bb (basic_block bb, bool local_only)
3020 edge e;
3021 edge_iterator ei;
3023 FOR_EACH_EDGE (e, ei, bb->succs)
3025 /* Look for block we are guarding (ie we dominate it,
3026 but it doesn't postdominate us). */
3027 if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) && e->dest != bb
3028 && !local_only
3029 && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
3030 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
3032 gimple_stmt_iterator bi;
3034 /* The call heuristic claims that a guarded function call
3035 is improbable. This is because such calls are often used
3036 to signal exceptional situations such as printing error
3037 messages. */
3038 for (bi = gsi_start_bb (e->dest); !gsi_end_p (bi);
3039 gsi_next (&bi))
3041 gimple *stmt = gsi_stmt (bi);
3042 if (is_gimple_call (stmt)
3043 && !gimple_inexpensive_call_p (as_a <gcall *> (stmt))
3044 /* Constant and pure calls are hardly used to signalize
3045 something exceptional. */
3046 && gimple_has_side_effects (stmt))
3048 if (gimple_call_fndecl (stmt))
3049 predict_edge_def (e, PRED_CALL, NOT_TAKEN);
3050 else if (virtual_method_call_p (gimple_call_fn (stmt)))
3051 predict_edge_def (e, PRED_POLYMORPHIC_CALL, NOT_TAKEN);
3052 else
3053 predict_edge_def (e, PRED_INDIR_CALL, TAKEN);
3054 break;
3059 tree_predict_by_opcode (bb);
3062 /* Predict branch probabilities and estimate profile of the tree CFG.
3063 This function can be called from the loop optimizers to recompute
3064 the profile information.
3065 If DRY_RUN is set, do not modify CFG and only produce dump files. */
3067 void
3068 tree_estimate_probability (bool dry_run)
3070 basic_block bb;
3072 add_noreturn_fake_exit_edges ();
3073 connect_infinite_loops_to_exit ();
3074 /* We use loop_niter_by_eval, which requires that the loops have
3075 preheaders. */
3076 create_preheaders (CP_SIMPLE_PREHEADERS);
3077 calculate_dominance_info (CDI_POST_DOMINATORS);
3078 /* Decide which edges are known to be unlikely. This improves later
3079 branch prediction. */
3080 determine_unlikely_bbs ();
3082 bb_predictions = new hash_map<const_basic_block, edge_prediction *>;
3083 tree_bb_level_predictions ();
3084 record_loop_exits ();
3086 if (number_of_loops (cfun) > 1)
3087 predict_loops ();
3089 FOR_EACH_BB_FN (bb, cfun)
3090 tree_estimate_probability_bb (bb, false);
3092 FOR_EACH_BB_FN (bb, cfun)
3093 combine_predictions_for_bb (bb, dry_run);
3095 if (flag_checking)
3096 bb_predictions->traverse<void *, assert_is_empty> (NULL);
3098 delete bb_predictions;
3099 bb_predictions = NULL;
3101 if (!dry_run)
3102 estimate_bb_frequencies (false);
3103 free_dominance_info (CDI_POST_DOMINATORS);
3104 remove_fake_exit_edges ();
3107 /* Set edge->probability for each successor edge of BB. */
3108 void
3109 tree_guess_outgoing_edge_probabilities (basic_block bb)
3111 bb_predictions = new hash_map<const_basic_block, edge_prediction *>;
3112 tree_estimate_probability_bb (bb, true);
3113 combine_predictions_for_bb (bb, false);
3114 if (flag_checking)
3115 bb_predictions->traverse<void *, assert_is_empty> (NULL);
3116 delete bb_predictions;
3117 bb_predictions = NULL;
3120 /* Filter function predicate that returns true for a edge predicate P
3121 if its edge is equal to DATA. */
3123 static bool
3124 not_loop_guard_equal_edge_p (edge_prediction *p, void *data)
3126 return p->ep_edge != (edge)data || p->ep_predictor != PRED_LOOP_GUARD;
3129 /* Predict edge E with PRED unless it is already predicted by some predictor
3130 considered equivalent. */
3132 static void
3133 maybe_predict_edge (edge e, enum br_predictor pred, enum prediction taken)
3135 if (edge_predicted_by_p (e, pred, taken))
3136 return;
3137 if (pred == PRED_LOOP_GUARD
3138 && edge_predicted_by_p (e, PRED_LOOP_GUARD_WITH_RECURSION, taken))
3139 return;
3140 /* Consider PRED_LOOP_GUARD_WITH_RECURSION superrior to LOOP_GUARD. */
3141 if (pred == PRED_LOOP_GUARD_WITH_RECURSION)
3143 edge_prediction **preds = bb_predictions->get (e->src);
3144 if (preds)
3145 filter_predictions (preds, not_loop_guard_equal_edge_p, e);
3147 predict_edge_def (e, pred, taken);
3149 /* Predict edges to successors of CUR whose sources are not postdominated by
3150 BB by PRED and recurse to all postdominators. */
3152 static void
3153 predict_paths_for_bb (basic_block cur, basic_block bb,
3154 enum br_predictor pred,
3155 enum prediction taken,
3156 bitmap visited, class loop *in_loop = NULL)
3158 edge e;
3159 edge_iterator ei;
3160 basic_block son;
3162 /* If we exited the loop or CUR is unconditional in the loop, there is
3163 nothing to do. */
3164 if (in_loop
3165 && (!flow_bb_inside_loop_p (in_loop, cur)
3166 || dominated_by_p (CDI_DOMINATORS, in_loop->latch, cur)))
3167 return;
3169 /* We are looking for all edges forming edge cut induced by
3170 set of all blocks postdominated by BB. */
3171 FOR_EACH_EDGE (e, ei, cur->preds)
3172 if (e->src->index >= NUM_FIXED_BLOCKS
3173 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, bb))
3175 edge e2;
3176 edge_iterator ei2;
3177 bool found = false;
3179 /* Ignore fake edges and eh, we predict them as not taken anyway. */
3180 if (unlikely_executed_edge_p (e))
3181 continue;
3182 gcc_assert (bb == cur || dominated_by_p (CDI_POST_DOMINATORS, cur, bb));
3184 /* See if there is an edge from e->src that is not abnormal
3185 and does not lead to BB and does not exit the loop. */
3186 FOR_EACH_EDGE (e2, ei2, e->src->succs)
3187 if (e2 != e
3188 && !unlikely_executed_edge_p (e2)
3189 && !dominated_by_p (CDI_POST_DOMINATORS, e2->dest, bb)
3190 && (!in_loop || !loop_exit_edge_p (in_loop, e2)))
3192 found = true;
3193 break;
3196 /* If there is non-abnormal path leaving e->src, predict edge
3197 using predictor. Otherwise we need to look for paths
3198 leading to e->src.
3200 The second may lead to infinite loop in the case we are predicitng
3201 regions that are only reachable by abnormal edges. We simply
3202 prevent visiting given BB twice. */
3203 if (found)
3204 maybe_predict_edge (e, pred, taken);
3205 else if (bitmap_set_bit (visited, e->src->index))
3206 predict_paths_for_bb (e->src, e->src, pred, taken, visited, in_loop);
3208 for (son = first_dom_son (CDI_POST_DOMINATORS, cur);
3209 son;
3210 son = next_dom_son (CDI_POST_DOMINATORS, son))
3211 predict_paths_for_bb (son, bb, pred, taken, visited, in_loop);
3214 /* Sets branch probabilities according to PREDiction and
3215 FLAGS. */
3217 static void
3218 predict_paths_leading_to (basic_block bb, enum br_predictor pred,
3219 enum prediction taken, class loop *in_loop)
3221 predict_paths_for_bb (bb, bb, pred, taken, auto_bitmap (), in_loop);
3224 /* Like predict_paths_leading_to but take edge instead of basic block. */
3226 static void
3227 predict_paths_leading_to_edge (edge e, enum br_predictor pred,
3228 enum prediction taken, class loop *in_loop)
3230 bool has_nonloop_edge = false;
3231 edge_iterator ei;
3232 edge e2;
3234 basic_block bb = e->src;
3235 FOR_EACH_EDGE (e2, ei, bb->succs)
3236 if (e2->dest != e->src && e2->dest != e->dest
3237 && !unlikely_executed_edge_p (e2)
3238 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e2->dest))
3240 has_nonloop_edge = true;
3241 break;
3244 if (!has_nonloop_edge)
3245 predict_paths_for_bb (bb, bb, pred, taken, auto_bitmap (), in_loop);
3246 else
3247 maybe_predict_edge (e, pred, taken);
3250 /* This is used to carry information about basic blocks. It is
3251 attached to the AUX field of the standard CFG block. */
3253 class block_info
3255 public:
3256 /* Estimated frequency of execution of basic_block. */
3257 sreal frequency;
3259 /* To keep queue of basic blocks to process. */
3260 basic_block next;
3262 /* Number of predecessors we need to visit first. */
3263 int npredecessors;
3266 /* Similar information for edges. */
3267 class edge_prob_info
3269 public:
3270 /* In case edge is a loopback edge, the probability edge will be reached
3271 in case header is. Estimated number of iterations of the loop can be
3272 then computed as 1 / (1 - back_edge_prob). */
3273 sreal back_edge_prob;
3274 /* True if the edge is a loopback edge in the natural loop. */
3275 unsigned int back_edge:1;
3278 #define BLOCK_INFO(B) ((block_info *) (B)->aux)
3279 #undef EDGE_INFO
3280 #define EDGE_INFO(E) ((edge_prob_info *) (E)->aux)
3282 /* Helper function for estimate_bb_frequencies.
3283 Propagate the frequencies in blocks marked in
3284 TOVISIT, starting in HEAD. */
3286 static void
3287 propagate_freq (basic_block head, bitmap tovisit,
3288 sreal max_cyclic_prob)
3290 basic_block bb;
3291 basic_block last;
3292 unsigned i;
3293 edge e;
3294 basic_block nextbb;
3295 bitmap_iterator bi;
3297 /* For each basic block we need to visit count number of his predecessors
3298 we need to visit first. */
3299 EXECUTE_IF_SET_IN_BITMAP (tovisit, 0, i, bi)
3301 edge_iterator ei;
3302 int count = 0;
3304 bb = BASIC_BLOCK_FOR_FN (cfun, i);
3306 FOR_EACH_EDGE (e, ei, bb->preds)
3308 bool visit = bitmap_bit_p (tovisit, e->src->index);
3310 if (visit && !(e->flags & EDGE_DFS_BACK))
3311 count++;
3312 else if (visit && dump_file && !EDGE_INFO (e)->back_edge)
3313 fprintf (dump_file,
3314 "Irreducible region hit, ignoring edge to %i->%i\n",
3315 e->src->index, bb->index);
3317 BLOCK_INFO (bb)->npredecessors = count;
3318 /* When function never returns, we will never process exit block. */
3319 if (!count && bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
3320 bb->count = profile_count::zero ();
3323 BLOCK_INFO (head)->frequency = 1;
3324 last = head;
3325 for (bb = head; bb; bb = nextbb)
3327 edge_iterator ei;
3328 sreal cyclic_probability = 0;
3329 sreal frequency = 0;
3331 nextbb = BLOCK_INFO (bb)->next;
3332 BLOCK_INFO (bb)->next = NULL;
3334 /* Compute frequency of basic block. */
3335 if (bb != head)
3337 if (flag_checking)
3338 FOR_EACH_EDGE (e, ei, bb->preds)
3339 gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
3340 || (e->flags & EDGE_DFS_BACK));
3342 FOR_EACH_EDGE (e, ei, bb->preds)
3343 if (EDGE_INFO (e)->back_edge)
3344 cyclic_probability += EDGE_INFO (e)->back_edge_prob;
3345 else if (!(e->flags & EDGE_DFS_BACK))
3347 /* FIXME: Graphite is producing edges with no profile. Once
3348 this is fixed, drop this. */
3349 sreal tmp = e->probability.initialized_p () ?
3350 e->probability.to_sreal () : 0;
3351 frequency += tmp * BLOCK_INFO (e->src)->frequency;
3354 if (cyclic_probability == 0)
3356 BLOCK_INFO (bb)->frequency = frequency;
3358 else
3360 if (cyclic_probability > max_cyclic_prob)
3362 if (dump_file)
3363 fprintf (dump_file,
3364 "cyclic probability of bb %i is %f (capped to %f)"
3365 "; turning freq %f",
3366 bb->index, cyclic_probability.to_double (),
3367 max_cyclic_prob.to_double (),
3368 frequency.to_double ());
3370 cyclic_probability = max_cyclic_prob;
3372 else if (dump_file)
3373 fprintf (dump_file,
3374 "cyclic probability of bb %i is %f; turning freq %f",
3375 bb->index, cyclic_probability.to_double (),
3376 frequency.to_double ());
3378 BLOCK_INFO (bb)->frequency = frequency
3379 / (sreal (1) - cyclic_probability);
3380 if (dump_file)
3381 fprintf (dump_file, " to %f\n",
3382 BLOCK_INFO (bb)->frequency.to_double ());
3386 bitmap_clear_bit (tovisit, bb->index);
3388 e = find_edge (bb, head);
3389 if (e)
3391 /* FIXME: Graphite is producing edges with no profile. Once
3392 this is fixed, drop this. */
3393 sreal tmp = e->probability.initialized_p () ?
3394 e->probability.to_sreal () : 0;
3395 EDGE_INFO (e)->back_edge_prob = tmp * BLOCK_INFO (bb)->frequency;
3398 /* Propagate to successor blocks. */
3399 FOR_EACH_EDGE (e, ei, bb->succs)
3400 if (!(e->flags & EDGE_DFS_BACK)
3401 && BLOCK_INFO (e->dest)->npredecessors)
3403 BLOCK_INFO (e->dest)->npredecessors--;
3404 if (!BLOCK_INFO (e->dest)->npredecessors)
3406 if (!nextbb)
3407 nextbb = e->dest;
3408 else
3409 BLOCK_INFO (last)->next = e->dest;
3411 last = e->dest;
3417 /* Estimate frequencies in loops at same nest level. */
3419 static void
3420 estimate_loops_at_level (class loop *first_loop, sreal max_cyclic_prob)
3422 class loop *loop;
3424 for (loop = first_loop; loop; loop = loop->next)
3426 edge e;
3427 basic_block *bbs;
3428 unsigned i;
3429 auto_bitmap tovisit;
3431 estimate_loops_at_level (loop->inner, max_cyclic_prob);
3433 /* Find current loop back edge and mark it. */
3434 e = loop_latch_edge (loop);
3435 EDGE_INFO (e)->back_edge = 1;
3437 bbs = get_loop_body (loop);
3438 for (i = 0; i < loop->num_nodes; i++)
3439 bitmap_set_bit (tovisit, bbs[i]->index);
3440 free (bbs);
3441 propagate_freq (loop->header, tovisit, max_cyclic_prob);
3445 /* Propagates frequencies through structure of loops. */
3447 static void
3448 estimate_loops (void)
3450 auto_bitmap tovisit;
3451 basic_block bb;
3452 sreal max_cyclic_prob = (sreal)1
3453 - (sreal)1 / (param_max_predicted_iterations + 1);
3455 /* Start by estimating the frequencies in the loops. */
3456 if (number_of_loops (cfun) > 1)
3457 estimate_loops_at_level (current_loops->tree_root->inner, max_cyclic_prob);
3459 /* Now propagate the frequencies through all the blocks. */
3460 FOR_ALL_BB_FN (bb, cfun)
3462 bitmap_set_bit (tovisit, bb->index);
3464 propagate_freq (ENTRY_BLOCK_PTR_FOR_FN (cfun), tovisit, max_cyclic_prob);
3467 /* Drop the profile for NODE to guessed, and update its frequency based on
3468 whether it is expected to be hot given the CALL_COUNT. */
3470 static void
3471 drop_profile (struct cgraph_node *node, profile_count call_count)
3473 struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
3474 /* In the case where this was called by another function with a
3475 dropped profile, call_count will be 0. Since there are no
3476 non-zero call counts to this function, we don't know for sure
3477 whether it is hot, and therefore it will be marked normal below. */
3478 bool hot = maybe_hot_count_p (NULL, call_count);
3480 if (dump_file)
3481 fprintf (dump_file,
3482 "Dropping 0 profile for %s. %s based on calls.\n",
3483 node->dump_name (),
3484 hot ? "Function is hot" : "Function is normal");
3485 /* We only expect to miss profiles for functions that are reached
3486 via non-zero call edges in cases where the function may have
3487 been linked from another module or library (COMDATs and extern
3488 templates). See the comments below for handle_missing_profiles.
3489 Also, only warn in cases where the missing counts exceed the
3490 number of training runs. In certain cases with an execv followed
3491 by a no-return call the profile for the no-return call is not
3492 dumped and there can be a mismatch. */
3493 if (!DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl)
3494 && call_count > profile_info->runs)
3496 if (flag_profile_correction)
3498 if (dump_file)
3499 fprintf (dump_file,
3500 "Missing counts for called function %s\n",
3501 node->dump_name ());
3503 else
3504 warning (0, "Missing counts for called function %s",
3505 node->dump_name ());
3508 basic_block bb;
3509 if (opt_for_fn (node->decl, flag_guess_branch_prob))
3511 bool clear_zeros
3512 = !ENTRY_BLOCK_PTR_FOR_FN (fn)->count.nonzero_p ();
3513 FOR_ALL_BB_FN (bb, fn)
3514 if (clear_zeros || !(bb->count == profile_count::zero ()))
3515 bb->count = bb->count.guessed_local ();
3516 fn->cfg->count_max = fn->cfg->count_max.guessed_local ();
3518 else
3520 FOR_ALL_BB_FN (bb, fn)
3521 bb->count = profile_count::uninitialized ();
3522 fn->cfg->count_max = profile_count::uninitialized ();
3525 struct cgraph_edge *e;
3526 for (e = node->callees; e; e = e->next_callee)
3527 e->count = gimple_bb (e->call_stmt)->count;
3528 for (e = node->indirect_calls; e; e = e->next_callee)
3529 e->count = gimple_bb (e->call_stmt)->count;
3530 node->count = ENTRY_BLOCK_PTR_FOR_FN (fn)->count;
3532 profile_status_for_fn (fn)
3533 = (flag_guess_branch_prob ? PROFILE_GUESSED : PROFILE_ABSENT);
3534 node->frequency
3535 = hot ? NODE_FREQUENCY_HOT : NODE_FREQUENCY_NORMAL;
3538 /* In the case of COMDAT routines, multiple object files will contain the same
3539 function and the linker will select one for the binary. In that case
3540 all the other copies from the profile instrument binary will be missing
3541 profile counts. Look for cases where this happened, due to non-zero
3542 call counts going to 0-count functions, and drop the profile to guessed
3543 so that we can use the estimated probabilities and avoid optimizing only
3544 for size.
3546 The other case where the profile may be missing is when the routine
3547 is not going to be emitted to the object file, e.g. for "extern template"
3548 class methods. Those will be marked DECL_EXTERNAL. Emit a warning in
3549 all other cases of non-zero calls to 0-count functions. */
3551 void
3552 handle_missing_profiles (void)
3554 const int unlikely_frac = param_unlikely_bb_count_fraction;
3555 struct cgraph_node *node;
3556 auto_vec<struct cgraph_node *, 64> worklist;
3558 /* See if 0 count function has non-0 count callers. In this case we
3559 lost some profile. Drop its function profile to PROFILE_GUESSED. */
3560 FOR_EACH_DEFINED_FUNCTION (node)
3562 struct cgraph_edge *e;
3563 profile_count call_count = profile_count::zero ();
3564 gcov_type max_tp_first_run = 0;
3565 struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
3567 if (node->count.ipa ().nonzero_p ())
3568 continue;
3569 for (e = node->callers; e; e = e->next_caller)
3570 if (e->count.ipa ().initialized_p () && e->count.ipa () > 0)
3572 call_count = call_count + e->count.ipa ();
3574 if (e->caller->tp_first_run > max_tp_first_run)
3575 max_tp_first_run = e->caller->tp_first_run;
3578 /* If time profile is missing, let assign the maximum that comes from
3579 caller functions. */
3580 if (!node->tp_first_run && max_tp_first_run)
3581 node->tp_first_run = max_tp_first_run + 1;
3583 if (call_count > 0
3584 && fn && fn->cfg
3585 && call_count.apply_scale (unlikely_frac, 1) >= profile_info->runs)
3587 drop_profile (node, call_count);
3588 worklist.safe_push (node);
3592 /* Propagate the profile dropping to other 0-count COMDATs that are
3593 potentially called by COMDATs we already dropped the profile on. */
3594 while (worklist.length () > 0)
3596 struct cgraph_edge *e;
3598 node = worklist.pop ();
3599 for (e = node->callees; e; e = e->next_caller)
3601 struct cgraph_node *callee = e->callee;
3602 struct function *fn = DECL_STRUCT_FUNCTION (callee->decl);
3604 if (!(e->count.ipa () == profile_count::zero ())
3605 && callee->count.ipa ().nonzero_p ())
3606 continue;
3607 if ((DECL_COMDAT (callee->decl) || DECL_EXTERNAL (callee->decl))
3608 && fn && fn->cfg
3609 && profile_status_for_fn (fn) == PROFILE_READ)
3611 drop_profile (node, profile_count::zero ());
3612 worklist.safe_push (callee);
3618 /* Convert counts measured by profile driven feedback to frequencies.
3619 Return nonzero iff there was any nonzero execution count. */
3621 bool
3622 update_max_bb_count (void)
3624 profile_count true_count_max = profile_count::uninitialized ();
3625 basic_block bb;
3627 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3628 true_count_max = true_count_max.max (bb->count);
3630 cfun->cfg->count_max = true_count_max;
3632 return true_count_max.ipa ().nonzero_p ();
3635 /* Return true if function is likely to be expensive, so there is no point to
3636 optimize performance of prologue, epilogue or do inlining at the expense
3637 of code size growth. THRESHOLD is the limit of number of instructions
3638 function can execute at average to be still considered not expensive. */
3640 bool
3641 expensive_function_p (int threshold)
3643 basic_block bb;
3645 /* If profile was scaled in a way entry block has count 0, then the function
3646 is deifnitly taking a lot of time. */
3647 if (!ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.nonzero_p ())
3648 return true;
3650 profile_count limit = ENTRY_BLOCK_PTR_FOR_FN
3651 (cfun)->count.apply_scale (threshold, 1);
3652 profile_count sum = profile_count::zero ();
3653 FOR_EACH_BB_FN (bb, cfun)
3655 rtx_insn *insn;
3657 if (!bb->count.initialized_p ())
3659 if (dump_file)
3660 fprintf (dump_file, "Function is considered expensive because"
3661 " count of bb %i is not initialized\n", bb->index);
3662 return true;
3665 FOR_BB_INSNS (bb, insn)
3666 if (active_insn_p (insn))
3668 sum += bb->count;
3669 if (sum > limit)
3670 return true;
3674 return false;
3677 /* All basic blocks that are reachable only from unlikely basic blocks are
3678 unlikely. */
3680 void
3681 propagate_unlikely_bbs_forward (void)
3683 auto_vec<basic_block, 64> worklist;
3684 basic_block bb;
3685 edge_iterator ei;
3686 edge e;
3688 if (!(ENTRY_BLOCK_PTR_FOR_FN (cfun)->count == profile_count::zero ()))
3690 ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux = (void *)(size_t) 1;
3691 worklist.safe_push (ENTRY_BLOCK_PTR_FOR_FN (cfun));
3693 while (worklist.length () > 0)
3695 bb = worklist.pop ();
3696 FOR_EACH_EDGE (e, ei, bb->succs)
3697 if (!(e->count () == profile_count::zero ())
3698 && !(e->dest->count == profile_count::zero ())
3699 && !e->dest->aux)
3701 e->dest->aux = (void *)(size_t) 1;
3702 worklist.safe_push (e->dest);
3707 FOR_ALL_BB_FN (bb, cfun)
3709 if (!bb->aux)
3711 if (!(bb->count == profile_count::zero ())
3712 && (dump_file && (dump_flags & TDF_DETAILS)))
3713 fprintf (dump_file,
3714 "Basic block %i is marked unlikely by forward prop\n",
3715 bb->index);
3716 bb->count = profile_count::zero ();
3718 else
3719 bb->aux = NULL;
3723 /* Determine basic blocks/edges that are known to be unlikely executed and set
3724 their counters to zero.
3725 This is done with first identifying obviously unlikely BBs/edges and then
3726 propagating in both directions. */
3728 static void
3729 determine_unlikely_bbs ()
3731 basic_block bb;
3732 auto_vec<basic_block, 64> worklist;
3733 edge_iterator ei;
3734 edge e;
3736 FOR_EACH_BB_FN (bb, cfun)
3738 if (!(bb->count == profile_count::zero ())
3739 && unlikely_executed_bb_p (bb))
3741 if (dump_file && (dump_flags & TDF_DETAILS))
3742 fprintf (dump_file, "Basic block %i is locally unlikely\n",
3743 bb->index);
3744 bb->count = profile_count::zero ();
3747 FOR_EACH_EDGE (e, ei, bb->succs)
3748 if (!(e->probability == profile_probability::never ())
3749 && unlikely_executed_edge_p (e))
3751 if (dump_file && (dump_flags & TDF_DETAILS))
3752 fprintf (dump_file, "Edge %i->%i is locally unlikely\n",
3753 bb->index, e->dest->index);
3754 e->probability = profile_probability::never ();
3757 gcc_checking_assert (!bb->aux);
3759 propagate_unlikely_bbs_forward ();
3761 auto_vec<int, 64> nsuccs;
3762 nsuccs.safe_grow_cleared (last_basic_block_for_fn (cfun), true);
3763 FOR_ALL_BB_FN (bb, cfun)
3764 if (!(bb->count == profile_count::zero ())
3765 && bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
3767 nsuccs[bb->index] = 0;
3768 FOR_EACH_EDGE (e, ei, bb->succs)
3769 if (!(e->probability == profile_probability::never ())
3770 && !(e->dest->count == profile_count::zero ()))
3771 nsuccs[bb->index]++;
3772 if (!nsuccs[bb->index])
3773 worklist.safe_push (bb);
3775 while (worklist.length () > 0)
3777 bb = worklist.pop ();
3778 if (bb->count == profile_count::zero ())
3779 continue;
3780 if (bb != ENTRY_BLOCK_PTR_FOR_FN (cfun))
3782 bool found = false;
3783 for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
3784 !gsi_end_p (gsi); gsi_next (&gsi))
3785 if (stmt_can_terminate_bb_p (gsi_stmt (gsi))
3786 /* stmt_can_terminate_bb_p special cases noreturns because it
3787 assumes that fake edges are created. We want to know that
3788 noreturn alone does not imply BB to be unlikely. */
3789 || (is_gimple_call (gsi_stmt (gsi))
3790 && (gimple_call_flags (gsi_stmt (gsi)) & ECF_NORETURN)))
3792 found = true;
3793 break;
3795 if (found)
3796 continue;
3798 if (dump_file && (dump_flags & TDF_DETAILS))
3799 fprintf (dump_file,
3800 "Basic block %i is marked unlikely by backward prop\n",
3801 bb->index);
3802 bb->count = profile_count::zero ();
3803 FOR_EACH_EDGE (e, ei, bb->preds)
3804 if (!(e->probability == profile_probability::never ()))
3806 if (!(e->src->count == profile_count::zero ()))
3808 gcc_checking_assert (nsuccs[e->src->index] > 0);
3809 nsuccs[e->src->index]--;
3810 if (!nsuccs[e->src->index])
3811 worklist.safe_push (e->src);
3815 /* Finally all edges from non-0 regions to 0 are unlikely. */
3816 FOR_ALL_BB_FN (bb, cfun)
3818 if (!(bb->count == profile_count::zero ()))
3819 FOR_EACH_EDGE (e, ei, bb->succs)
3820 if (!(e->probability == profile_probability::never ())
3821 && e->dest->count == profile_count::zero ())
3823 if (dump_file && (dump_flags & TDF_DETAILS))
3824 fprintf (dump_file, "Edge %i->%i is unlikely because "
3825 "it enters unlikely block\n",
3826 bb->index, e->dest->index);
3827 e->probability = profile_probability::never ();
3830 edge other = NULL;
3832 FOR_EACH_EDGE (e, ei, bb->succs)
3833 if (e->probability == profile_probability::never ())
3835 else if (other)
3837 other = NULL;
3838 break;
3840 else
3841 other = e;
3842 if (other
3843 && !(other->probability == profile_probability::always ()))
3845 if (dump_file && (dump_flags & TDF_DETAILS))
3846 fprintf (dump_file, "Edge %i->%i is locally likely\n",
3847 bb->index, other->dest->index);
3848 other->probability = profile_probability::always ();
3851 if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count == profile_count::zero ())
3852 cgraph_node::get (current_function_decl)->count = profile_count::zero ();
3855 /* Estimate and propagate basic block frequencies using the given branch
3856 probabilities. If FORCE is true, the frequencies are used to estimate
3857 the counts even when there are already non-zero profile counts. */
3859 void
3860 estimate_bb_frequencies (bool force)
3862 basic_block bb;
3863 sreal freq_max;
3865 determine_unlikely_bbs ();
3867 if (force || profile_status_for_fn (cfun) != PROFILE_READ
3868 || !update_max_bb_count ())
3871 mark_dfs_back_edges ();
3873 single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun))->probability =
3874 profile_probability::always ();
3876 /* Set up block info for each basic block. */
3877 alloc_aux_for_blocks (sizeof (block_info));
3878 alloc_aux_for_edges (sizeof (edge_prob_info));
3879 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3881 edge e;
3882 edge_iterator ei;
3884 FOR_EACH_EDGE (e, ei, bb->succs)
3886 /* FIXME: Graphite is producing edges with no profile. Once
3887 this is fixed, drop this. */
3888 if (e->probability.initialized_p ())
3889 EDGE_INFO (e)->back_edge_prob
3890 = e->probability.to_sreal ();
3891 else
3892 /* back_edge_prob = 0.5 */
3893 EDGE_INFO (e)->back_edge_prob = sreal (1, -1);
3897 /* First compute frequencies locally for each loop from innermost
3898 to outermost to examine frequencies for back edges. */
3899 estimate_loops ();
3901 freq_max = 0;
3902 FOR_EACH_BB_FN (bb, cfun)
3903 if (freq_max < BLOCK_INFO (bb)->frequency)
3904 freq_max = BLOCK_INFO (bb)->frequency;
3906 /* Scaling frequencies up to maximal profile count may result in
3907 frequent overflows especially when inlining loops.
3908 Small scalling results in unnecesary precision loss. Stay in
3909 the half of the (exponential) range. */
3910 freq_max = (sreal (1) << (profile_count::n_bits / 2)) / freq_max;
3911 if (freq_max < 16)
3912 freq_max = 16;
3913 profile_count ipa_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa ();
3914 cfun->cfg->count_max = profile_count::uninitialized ();
3915 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3917 sreal tmp = BLOCK_INFO (bb)->frequency;
3918 if (tmp >= 1)
3920 gimple_stmt_iterator gsi;
3921 tree decl;
3923 /* Self recursive calls can not have frequency greater than 1
3924 or program will never terminate. This will result in an
3925 inconsistent bb profile but it is better than greatly confusing
3926 IPA cost metrics. */
3927 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
3928 if (is_gimple_call (gsi_stmt (gsi))
3929 && (decl = gimple_call_fndecl (gsi_stmt (gsi))) != NULL
3930 && recursive_call_p (current_function_decl, decl))
3932 if (dump_file)
3933 fprintf (dump_file, "Dropping frequency of recursive call"
3934 " in bb %i from %f\n", bb->index,
3935 tmp.to_double ());
3936 tmp = (sreal)9 / (sreal)10;
3937 break;
3940 tmp = tmp * freq_max + sreal (1, -1);
3941 profile_count count = profile_count::from_gcov_type (tmp.to_int ());
3943 /* If we have profile feedback in which this function was never
3944 executed, then preserve this info. */
3945 if (!(bb->count == profile_count::zero ()))
3946 bb->count = count.guessed_local ().combine_with_ipa_count (ipa_count);
3947 cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
3950 free_aux_for_blocks ();
3951 free_aux_for_edges ();
3953 compute_function_frequency ();
3956 /* Decide whether function is hot, cold or unlikely executed. */
3957 void
3958 compute_function_frequency (void)
3960 basic_block bb;
3961 struct cgraph_node *node = cgraph_node::get (current_function_decl);
3963 if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
3964 || MAIN_NAME_P (DECL_NAME (current_function_decl)))
3965 node->only_called_at_startup = true;
3966 if (DECL_STATIC_DESTRUCTOR (current_function_decl))
3967 node->only_called_at_exit = true;
3969 if (!ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa_p ())
3971 int flags = flags_from_decl_or_type (current_function_decl);
3972 if (lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl))
3973 != NULL)
3974 node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
3975 else if (lookup_attribute ("hot", DECL_ATTRIBUTES (current_function_decl))
3976 != NULL)
3977 node->frequency = NODE_FREQUENCY_HOT;
3978 else if (flags & ECF_NORETURN)
3979 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3980 else if (MAIN_NAME_P (DECL_NAME (current_function_decl)))
3981 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3982 else if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
3983 || DECL_STATIC_DESTRUCTOR (current_function_decl))
3984 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3985 return;
3988 node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
3989 warn_function_cold (current_function_decl);
3990 if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa() == profile_count::zero ())
3991 return;
3992 FOR_EACH_BB_FN (bb, cfun)
3994 if (maybe_hot_bb_p (cfun, bb))
3996 node->frequency = NODE_FREQUENCY_HOT;
3997 return;
3999 if (!probably_never_executed_bb_p (cfun, bb))
4000 node->frequency = NODE_FREQUENCY_NORMAL;
4004 /* Build PREDICT_EXPR. */
4005 tree
4006 build_predict_expr (enum br_predictor predictor, enum prediction taken)
4008 tree t = build1 (PREDICT_EXPR, void_type_node,
4009 build_int_cst (integer_type_node, predictor));
4010 SET_PREDICT_EXPR_OUTCOME (t, taken);
4011 return t;
4014 const char *
4015 predictor_name (enum br_predictor predictor)
4017 return predictor_info[predictor].name;
4020 /* Predict branch probabilities and estimate profile of the tree CFG. */
4022 namespace {
4024 const pass_data pass_data_profile =
4026 GIMPLE_PASS, /* type */
4027 "profile_estimate", /* name */
4028 OPTGROUP_NONE, /* optinfo_flags */
4029 TV_BRANCH_PROB, /* tv_id */
4030 PROP_cfg, /* properties_required */
4031 0, /* properties_provided */
4032 0, /* properties_destroyed */
4033 0, /* todo_flags_start */
4034 0, /* todo_flags_finish */
4037 class pass_profile : public gimple_opt_pass
4039 public:
4040 pass_profile (gcc::context *ctxt)
4041 : gimple_opt_pass (pass_data_profile, ctxt)
4044 /* opt_pass methods: */
4045 virtual bool gate (function *) { return flag_guess_branch_prob; }
4046 virtual unsigned int execute (function *);
4048 }; // class pass_profile
4050 unsigned int
4051 pass_profile::execute (function *fun)
4053 unsigned nb_loops;
4055 if (profile_status_for_fn (cfun) == PROFILE_GUESSED)
4056 return 0;
4058 loop_optimizer_init (LOOPS_NORMAL);
4059 if (dump_file && (dump_flags & TDF_DETAILS))
4060 flow_loops_dump (dump_file, NULL, 0);
4062 mark_irreducible_loops ();
4064 nb_loops = number_of_loops (fun);
4065 if (nb_loops > 1)
4066 scev_initialize ();
4068 tree_estimate_probability (false);
4070 if (nb_loops > 1)
4071 scev_finalize ();
4073 loop_optimizer_finalize ();
4074 if (dump_file && (dump_flags & TDF_DETAILS))
4075 gimple_dump_cfg (dump_file, dump_flags);
4076 if (profile_status_for_fn (fun) == PROFILE_ABSENT)
4077 profile_status_for_fn (fun) = PROFILE_GUESSED;
4078 if (dump_file && (dump_flags & TDF_DETAILS))
4080 class loop *loop;
4081 FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
4082 if (loop->header->count.initialized_p ())
4083 fprintf (dump_file, "Loop got predicted %d to iterate %i times.\n",
4084 loop->num,
4085 (int)expected_loop_iterations_unbounded (loop));
4087 return 0;
4090 } // anon namespace
4092 gimple_opt_pass *
4093 make_pass_profile (gcc::context *ctxt)
4095 return new pass_profile (ctxt);
4098 /* Return true when PRED predictor should be removed after early
4099 tree passes. Most of the predictors are beneficial to survive
4100 as early inlining can also distribute then into caller's bodies. */
4102 static bool
4103 strip_predictor_early (enum br_predictor pred)
4105 switch (pred)
4107 case PRED_TREE_EARLY_RETURN:
4108 return true;
4109 default:
4110 return false;
4114 /* Get rid of all builtin_expect calls and GIMPLE_PREDICT statements
4115 we no longer need. EARLY is set to true when called from early
4116 optimizations. */
4118 unsigned int
4119 strip_predict_hints (function *fun, bool early)
4121 basic_block bb;
4122 gimple *ass_stmt;
4123 tree var;
4124 bool changed = false;
4126 FOR_EACH_BB_FN (bb, fun)
4128 gimple_stmt_iterator bi;
4129 for (bi = gsi_start_bb (bb); !gsi_end_p (bi);)
4131 gimple *stmt = gsi_stmt (bi);
4133 if (gimple_code (stmt) == GIMPLE_PREDICT)
4135 if (!early
4136 || strip_predictor_early (gimple_predict_predictor (stmt)))
4138 gsi_remove (&bi, true);
4139 changed = true;
4140 continue;
4143 else if (is_gimple_call (stmt))
4145 tree fndecl = gimple_call_fndecl (stmt);
4147 if (!early
4148 && ((fndecl != NULL_TREE
4149 && fndecl_built_in_p (fndecl, BUILT_IN_EXPECT)
4150 && gimple_call_num_args (stmt) == 2)
4151 || (fndecl != NULL_TREE
4152 && fndecl_built_in_p (fndecl,
4153 BUILT_IN_EXPECT_WITH_PROBABILITY)
4154 && gimple_call_num_args (stmt) == 3)
4155 || (gimple_call_internal_p (stmt)
4156 && gimple_call_internal_fn (stmt) == IFN_BUILTIN_EXPECT)))
4158 var = gimple_call_lhs (stmt);
4159 changed = true;
4160 if (var)
4162 ass_stmt
4163 = gimple_build_assign (var, gimple_call_arg (stmt, 0));
4164 gsi_replace (&bi, ass_stmt, true);
4166 else
4168 gsi_remove (&bi, true);
4169 continue;
4173 gsi_next (&bi);
4176 return changed ? TODO_cleanup_cfg : 0;
4179 namespace {
4181 const pass_data pass_data_strip_predict_hints =
4183 GIMPLE_PASS, /* type */
4184 "*strip_predict_hints", /* name */
4185 OPTGROUP_NONE, /* optinfo_flags */
4186 TV_BRANCH_PROB, /* tv_id */
4187 PROP_cfg, /* properties_required */
4188 0, /* properties_provided */
4189 0, /* properties_destroyed */
4190 0, /* todo_flags_start */
4191 0, /* todo_flags_finish */
4194 class pass_strip_predict_hints : public gimple_opt_pass
4196 public:
4197 pass_strip_predict_hints (gcc::context *ctxt)
4198 : gimple_opt_pass (pass_data_strip_predict_hints, ctxt)
4201 /* opt_pass methods: */
4202 opt_pass * clone () { return new pass_strip_predict_hints (m_ctxt); }
4203 void set_pass_param (unsigned int n, bool param)
4205 gcc_assert (n == 0);
4206 early_p = param;
4209 virtual unsigned int execute (function *);
4211 private:
4212 bool early_p;
4214 }; // class pass_strip_predict_hints
4216 unsigned int
4217 pass_strip_predict_hints::execute (function *fun)
4219 return strip_predict_hints (fun, early_p);
4222 } // anon namespace
4224 gimple_opt_pass *
4225 make_pass_strip_predict_hints (gcc::context *ctxt)
4227 return new pass_strip_predict_hints (ctxt);
4230 /* Rebuild function frequencies. Passes are in general expected to
4231 maintain profile by hand, however in some cases this is not possible:
4232 for example when inlining several functions with loops freuqencies might run
4233 out of scale and thus needs to be recomputed. */
4235 void
4236 rebuild_frequencies (void)
4238 timevar_push (TV_REBUILD_FREQUENCIES);
4240 /* When the max bb count in the function is small, there is a higher
4241 chance that there were truncation errors in the integer scaling
4242 of counts by inlining and other optimizations. This could lead
4243 to incorrect classification of code as being cold when it isn't.
4244 In that case, force the estimation of bb counts/frequencies from the
4245 branch probabilities, rather than computing frequencies from counts,
4246 which may also lead to frequencies incorrectly reduced to 0. There
4247 is less precision in the probabilities, so we only do this for small
4248 max counts. */
4249 cfun->cfg->count_max = profile_count::uninitialized ();
4250 basic_block bb;
4251 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
4252 cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
4254 if (profile_status_for_fn (cfun) == PROFILE_GUESSED)
4256 loop_optimizer_init (0);
4257 add_noreturn_fake_exit_edges ();
4258 mark_irreducible_loops ();
4259 connect_infinite_loops_to_exit ();
4260 estimate_bb_frequencies (true);
4261 remove_fake_exit_edges ();
4262 loop_optimizer_finalize ();
4264 else if (profile_status_for_fn (cfun) == PROFILE_READ)
4265 update_max_bb_count ();
4266 else if (profile_status_for_fn (cfun) == PROFILE_ABSENT
4267 && !flag_guess_branch_prob)
4269 else
4270 gcc_unreachable ();
4271 timevar_pop (TV_REBUILD_FREQUENCIES);
4274 /* Perform a dry run of the branch prediction pass and report comparsion of
4275 the predicted and real profile into the dump file. */
4277 void
4278 report_predictor_hitrates (void)
4280 unsigned nb_loops;
4282 loop_optimizer_init (LOOPS_NORMAL);
4283 if (dump_file && (dump_flags & TDF_DETAILS))
4284 flow_loops_dump (dump_file, NULL, 0);
4286 mark_irreducible_loops ();
4288 nb_loops = number_of_loops (cfun);
4289 if (nb_loops > 1)
4290 scev_initialize ();
4292 tree_estimate_probability (true);
4294 if (nb_loops > 1)
4295 scev_finalize ();
4297 loop_optimizer_finalize ();
4300 /* Force edge E to be cold.
4301 If IMPOSSIBLE is true, for edge to have count and probability 0 otherwise
4302 keep low probability to represent possible error in a guess. This is used
4303 i.e. in case we predict loop to likely iterate given number of times but
4304 we are not 100% sure.
4306 This function locally updates profile without attempt to keep global
4307 consistency which cannot be reached in full generality without full profile
4308 rebuild from probabilities alone. Doing so is not necessarily a good idea
4309 because frequencies and counts may be more realistic then probabilities.
4311 In some cases (such as for elimination of early exits during full loop
4312 unrolling) the caller can ensure that profile will get consistent
4313 afterwards. */
4315 void
4316 force_edge_cold (edge e, bool impossible)
4318 profile_count count_sum = profile_count::zero ();
4319 profile_probability prob_sum = profile_probability::never ();
4320 edge_iterator ei;
4321 edge e2;
4322 bool uninitialized_exit = false;
4324 /* When branch probability guesses are not known, then do nothing. */
4325 if (!impossible && !e->count ().initialized_p ())
4326 return;
4328 profile_probability goal = (impossible ? profile_probability::never ()
4329 : profile_probability::very_unlikely ());
4331 /* If edge is already improbably or cold, just return. */
4332 if (e->probability <= goal
4333 && (!impossible || e->count () == profile_count::zero ()))
4334 return;
4335 FOR_EACH_EDGE (e2, ei, e->src->succs)
4336 if (e2 != e)
4338 if (e->flags & EDGE_FAKE)
4339 continue;
4340 if (e2->count ().initialized_p ())
4341 count_sum += e2->count ();
4342 if (e2->probability.initialized_p ())
4343 prob_sum += e2->probability;
4344 else
4345 uninitialized_exit = true;
4348 /* If we are not guessing profiles but have some other edges out,
4349 just assume the control flow goes elsewhere. */
4350 if (uninitialized_exit)
4351 e->probability = goal;
4352 /* If there are other edges out of e->src, redistribute probabilitity
4353 there. */
4354 else if (prob_sum > profile_probability::never ())
4356 if (!(e->probability < goal))
4357 e->probability = goal;
4359 profile_probability prob_comp = prob_sum / e->probability.invert ();
4361 if (dump_file && (dump_flags & TDF_DETAILS))
4362 fprintf (dump_file, "Making edge %i->%i %s by redistributing "
4363 "probability to other edges.\n",
4364 e->src->index, e->dest->index,
4365 impossible ? "impossible" : "cold");
4366 FOR_EACH_EDGE (e2, ei, e->src->succs)
4367 if (e2 != e)
4369 e2->probability /= prob_comp;
4371 if (current_ir_type () != IR_GIMPLE
4372 && e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun))
4373 update_br_prob_note (e->src);
4375 /* If all edges out of e->src are unlikely, the basic block itself
4376 is unlikely. */
4377 else
4379 if (prob_sum == profile_probability::never ())
4380 e->probability = profile_probability::always ();
4381 else
4383 if (impossible)
4384 e->probability = profile_probability::never ();
4385 /* If BB has some edges out that are not impossible, we cannot
4386 assume that BB itself is. */
4387 impossible = false;
4389 if (current_ir_type () != IR_GIMPLE
4390 && e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun))
4391 update_br_prob_note (e->src);
4392 if (e->src->count == profile_count::zero ())
4393 return;
4394 if (count_sum == profile_count::zero () && impossible)
4396 bool found = false;
4397 if (e->src == ENTRY_BLOCK_PTR_FOR_FN (cfun))
4399 else if (current_ir_type () == IR_GIMPLE)
4400 for (gimple_stmt_iterator gsi = gsi_start_bb (e->src);
4401 !gsi_end_p (gsi); gsi_next (&gsi))
4403 if (stmt_can_terminate_bb_p (gsi_stmt (gsi)))
4405 found = true;
4406 break;
4409 /* FIXME: Implement RTL path. */
4410 else
4411 found = true;
4412 if (!found)
4414 if (dump_file && (dump_flags & TDF_DETAILS))
4415 fprintf (dump_file,
4416 "Making bb %i impossible and dropping count to 0.\n",
4417 e->src->index);
4418 e->src->count = profile_count::zero ();
4419 FOR_EACH_EDGE (e2, ei, e->src->preds)
4420 force_edge_cold (e2, impossible);
4421 return;
4425 /* If we did not adjusting, the source basic block has no likely edeges
4426 leaving other direction. In that case force that bb cold, too.
4427 This in general is difficult task to do, but handle special case when
4428 BB has only one predecestor. This is common case when we are updating
4429 after loop transforms. */
4430 if (!(prob_sum > profile_probability::never ())
4431 && count_sum == profile_count::zero ()
4432 && single_pred_p (e->src) && e->src->count.to_frequency (cfun)
4433 > (impossible ? 0 : 1))
4435 int old_frequency = e->src->count.to_frequency (cfun);
4436 if (dump_file && (dump_flags & TDF_DETAILS))
4437 fprintf (dump_file, "Making bb %i %s.\n", e->src->index,
4438 impossible ? "impossible" : "cold");
4439 int new_frequency = MIN (e->src->count.to_frequency (cfun),
4440 impossible ? 0 : 1);
4441 if (impossible)
4442 e->src->count = profile_count::zero ();
4443 else
4444 e->src->count = e->count ().apply_scale (new_frequency,
4445 old_frequency);
4446 force_edge_cold (single_pred_edge (e->src), impossible);
4448 else if (dump_file && (dump_flags & TDF_DETAILS)
4449 && maybe_hot_bb_p (cfun, e->src))
4450 fprintf (dump_file, "Giving up on making bb %i %s.\n", e->src->index,
4451 impossible ? "impossible" : "cold");
4455 #if CHECKING_P
4457 namespace selftest {
4459 /* Test that value range of predictor values defined in predict.def is
4460 within range (50, 100]. */
4462 struct branch_predictor
4464 const char *name;
4465 int probability;
4468 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) { NAME, HITRATE },
4470 static void
4471 test_prediction_value_range ()
4473 branch_predictor predictors[] = {
4474 #include "predict.def"
4475 { NULL, PROB_UNINITIALIZED }
4478 for (unsigned i = 0; predictors[i].name != NULL; i++)
4480 if (predictors[i].probability == PROB_UNINITIALIZED)
4481 continue;
4483 unsigned p = 100 * predictors[i].probability / REG_BR_PROB_BASE;
4484 ASSERT_TRUE (p >= 50 && p <= 100);
4488 #undef DEF_PREDICTOR
4490 /* Run all of the selfests within this file. */
4492 void
4493 predict_c_tests ()
4495 test_prediction_value_range ();
4498 } // namespace selftest
4499 #endif /* CHECKING_P. */