Daily bump.
[gcc.git] / gcc / predict.c
1 /* Branch prediction routines for the GNU compiler.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
3 2011, 2012 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 /* References:
22
23 [1] "Branch Prediction for Free"
24 Ball and Larus; PLDI '93.
25 [2] "Static Branch Frequency and Program Profile Analysis"
26 Wu and Larus; MICRO-27.
27 [3] "Corpus-based Static Branch Prediction"
28 Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95. */
29
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "tm_p.h"
38 #include "hard-reg-set.h"
39 #include "basic-block.h"
40 #include "insn-config.h"
41 #include "regs.h"
42 #include "flags.h"
43 #include "function.h"
44 #include "except.h"
45 #include "diagnostic-core.h"
46 #include "recog.h"
47 #include "expr.h"
48 #include "predict.h"
49 #include "coverage.h"
50 #include "sreal.h"
51 #include "params.h"
52 #include "target.h"
53 #include "cfgloop.h"
54 #include "tree-flow.h"
55 #include "ggc.h"
56 #include "tree-pass.h"
57 #include "tree-scalar-evolution.h"
58 #include "cfgloop.h"
59 #include "pointer-set.h"
60
61 /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE,
62 1/REG_BR_PROB_BASE, 0.5, BB_FREQ_MAX. */
63 static sreal real_zero, real_one, real_almost_one, real_br_prob_base,
64 real_inv_br_prob_base, real_one_half, real_bb_freq_max;
65
66 /* Random guesstimation given names.
67 PROV_VERY_UNLIKELY should be small enough so basic block predicted
68 by it gets bellow HOT_BB_FREQUENCY_FRANCTION. */
69 #define PROB_VERY_UNLIKELY (REG_BR_PROB_BASE / 2000 - 1)
70 #define PROB_EVEN (REG_BR_PROB_BASE / 2)
71 #define PROB_VERY_LIKELY (REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
72 #define PROB_ALWAYS (REG_BR_PROB_BASE)
73
74 static void combine_predictions_for_insn (rtx, basic_block);
75 static void dump_prediction (FILE *, enum br_predictor, int, basic_block, int);
76 static void predict_paths_leading_to (basic_block, enum br_predictor, enum prediction);
77 static void predict_paths_leading_to_edge (edge, enum br_predictor, enum prediction);
78 static bool can_predict_insn_p (const_rtx);
79
80 /* Information we hold about each branch predictor.
81 Filled using information from predict.def. */
82
83 struct predictor_info
84 {
85 const char *const name; /* Name used in the debugging dumps. */
86 const int hitrate; /* Expected hitrate used by
87 predict_insn_def call. */
88 const int flags;
89 };
90
91 /* Use given predictor without Dempster-Shaffer theory if it matches
92 using first_match heuristics. */
93 #define PRED_FLAG_FIRST_MATCH 1
94
95 /* Recompute hitrate in percent to our representation. */
96
97 #define HITRATE(VAL) ((int) ((VAL) * REG_BR_PROB_BASE + 50) / 100)
98
99 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) {NAME, HITRATE, FLAGS},
100 static const struct predictor_info predictor_info[]= {
101 #include "predict.def"
102
103 /* Upper bound on predictors. */
104 {NULL, 0, 0}
105 };
106 #undef DEF_PREDICTOR
107
108 /* Return TRUE if frequency FREQ is considered to be hot. */
109
110 static inline bool
111 maybe_hot_frequency_p (struct function *fun, int freq)
112 {
113 struct cgraph_node *node = cgraph_get_node (fun->decl);
114 if (!profile_info || !flag_branch_probabilities)
115 {
116 if (node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED)
117 return false;
118 if (node->frequency == NODE_FREQUENCY_HOT)
119 return true;
120 }
121 if (profile_status_for_function (fun) == PROFILE_ABSENT)
122 return true;
123 if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
124 && freq < (ENTRY_BLOCK_PTR_FOR_FUNCTION (fun)->frequency * 2 / 3))
125 return false;
126 if (freq < (ENTRY_BLOCK_PTR_FOR_FUNCTION (fun)->frequency
127 / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)))
128 return false;
129 return true;
130 }
131
132 /* Return TRUE if frequency FREQ is considered to be hot. */
133
134 static inline bool
135 maybe_hot_count_p (struct function *fun, gcov_type count)
136 {
137 gcov_working_set_t *ws;
138 static gcov_type min_count = -1;
139 if (fun && profile_status_for_function (fun) != PROFILE_READ)
140 return true;
141 /* Code executed at most once is not hot. */
142 if (profile_info->runs >= count)
143 return false;
144 if (min_count == -1)
145 {
146 ws = find_working_set (PARAM_VALUE (HOT_BB_COUNT_WS_PERMILLE));
147 gcc_assert (ws);
148 min_count = ws->min_counter;
149 }
150 return (count >= min_count);
151 }
152
153 /* Return true in case BB can be CPU intensive and should be optimized
154 for maximal performance. */
155
156 bool
157 maybe_hot_bb_p (struct function *fun, const_basic_block bb)
158 {
159 gcc_checking_assert (fun);
160 if (profile_status_for_function (fun) == PROFILE_READ)
161 return maybe_hot_count_p (fun, bb->count);
162 return maybe_hot_frequency_p (fun, bb->frequency);
163 }
164
165 /* Return true if the call can be hot. */
166
167 bool
168 cgraph_maybe_hot_edge_p (struct cgraph_edge *edge)
169 {
170 if (profile_info && flag_branch_probabilities
171 && !maybe_hot_count_p (NULL,
172 edge->count))
173 return false;
174 if (edge->caller->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
175 || (edge->callee
176 && edge->callee->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED))
177 return false;
178 if (edge->caller->frequency > NODE_FREQUENCY_UNLIKELY_EXECUTED
179 && (edge->callee
180 && edge->callee->frequency <= NODE_FREQUENCY_EXECUTED_ONCE))
181 return false;
182 if (optimize_size)
183 return false;
184 if (edge->caller->frequency == NODE_FREQUENCY_HOT)
185 return true;
186 if (edge->caller->frequency == NODE_FREQUENCY_EXECUTED_ONCE
187 && edge->frequency < CGRAPH_FREQ_BASE * 3 / 2)
188 return false;
189 if (flag_guess_branch_prob
190 && edge->frequency <= (CGRAPH_FREQ_BASE
191 / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)))
192 return false;
193 return true;
194 }
195
196 /* Return true in case BB can be CPU intensive and should be optimized
197 for maximal performance. */
198
199 bool
200 maybe_hot_edge_p (edge e)
201 {
202 if (profile_status == PROFILE_READ)
203 return maybe_hot_count_p (cfun, e->count);
204 return maybe_hot_frequency_p (cfun, EDGE_FREQUENCY (e));
205 }
206
207
208 /* Return true in case BB is probably never executed. */
209
210 bool
211 probably_never_executed_bb_p (struct function *fun, const_basic_block bb)
212 {
213 gcc_checking_assert (fun);
214 if (profile_info && flag_branch_probabilities)
215 return ((bb->count + profile_info->runs / 2) / profile_info->runs) == 0;
216 if ((!profile_info || !flag_branch_probabilities)
217 && (cgraph_get_node (fun->decl)->frequency
218 == NODE_FREQUENCY_UNLIKELY_EXECUTED))
219 return true;
220 return false;
221 }
222
223 /* Return true if NODE should be optimized for size. */
224
225 bool
226 cgraph_optimize_for_size_p (struct cgraph_node *node)
227 {
228 if (optimize_size)
229 return true;
230 if (node && (node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED))
231 return true;
232 else
233 return false;
234 }
235
236 /* Return true when current function should always be optimized for size. */
237
238 bool
239 optimize_function_for_size_p (struct function *fun)
240 {
241 if (optimize_size)
242 return true;
243 if (!fun || !fun->decl)
244 return false;
245 return cgraph_optimize_for_size_p (cgraph_get_node (fun->decl));
246 }
247
248 /* Return true when current function should always be optimized for speed. */
249
250 bool
251 optimize_function_for_speed_p (struct function *fun)
252 {
253 return !optimize_function_for_size_p (fun);
254 }
255
256 /* Return TRUE when BB should be optimized for size. */
257
258 bool
259 optimize_bb_for_size_p (const_basic_block bb)
260 {
261 return optimize_function_for_size_p (cfun) || !maybe_hot_bb_p (cfun, bb);
262 }
263
264 /* Return TRUE when BB should be optimized for speed. */
265
266 bool
267 optimize_bb_for_speed_p (const_basic_block bb)
268 {
269 return !optimize_bb_for_size_p (bb);
270 }
271
272 /* Return TRUE when BB should be optimized for size. */
273
274 bool
275 optimize_edge_for_size_p (edge e)
276 {
277 return optimize_function_for_size_p (cfun) || !maybe_hot_edge_p (e);
278 }
279
280 /* Return TRUE when BB should be optimized for speed. */
281
282 bool
283 optimize_edge_for_speed_p (edge e)
284 {
285 return !optimize_edge_for_size_p (e);
286 }
287
288 /* Return TRUE when BB should be optimized for size. */
289
290 bool
291 optimize_insn_for_size_p (void)
292 {
293 return optimize_function_for_size_p (cfun) || !crtl->maybe_hot_insn_p;
294 }
295
296 /* Return TRUE when BB should be optimized for speed. */
297
298 bool
299 optimize_insn_for_speed_p (void)
300 {
301 return !optimize_insn_for_size_p ();
302 }
303
304 /* Return TRUE when LOOP should be optimized for size. */
305
306 bool
307 optimize_loop_for_size_p (struct loop *loop)
308 {
309 return optimize_bb_for_size_p (loop->header);
310 }
311
312 /* Return TRUE when LOOP should be optimized for speed. */
313
314 bool
315 optimize_loop_for_speed_p (struct loop *loop)
316 {
317 return optimize_bb_for_speed_p (loop->header);
318 }
319
320 /* Return TRUE when LOOP nest should be optimized for speed. */
321
322 bool
323 optimize_loop_nest_for_speed_p (struct loop *loop)
324 {
325 struct loop *l = loop;
326 if (optimize_loop_for_speed_p (loop))
327 return true;
328 l = loop->inner;
329 while (l && l != loop)
330 {
331 if (optimize_loop_for_speed_p (l))
332 return true;
333 if (l->inner)
334 l = l->inner;
335 else if (l->next)
336 l = l->next;
337 else
338 {
339 while (l != loop && !l->next)
340 l = loop_outer (l);
341 if (l != loop)
342 l = l->next;
343 }
344 }
345 return false;
346 }
347
348 /* Return TRUE when LOOP nest should be optimized for size. */
349
350 bool
351 optimize_loop_nest_for_size_p (struct loop *loop)
352 {
353 return !optimize_loop_nest_for_speed_p (loop);
354 }
355
356 /* Return true when edge E is likely to be well predictable by branch
357 predictor. */
358
359 bool
360 predictable_edge_p (edge e)
361 {
362 if (profile_status == PROFILE_ABSENT)
363 return false;
364 if ((e->probability
365 <= PARAM_VALUE (PARAM_PREDICTABLE_BRANCH_OUTCOME) * REG_BR_PROB_BASE / 100)
366 || (REG_BR_PROB_BASE - e->probability
367 <= PARAM_VALUE (PARAM_PREDICTABLE_BRANCH_OUTCOME) * REG_BR_PROB_BASE / 100))
368 return true;
369 return false;
370 }
371
372
373 /* Set RTL expansion for BB profile. */
374
375 void
376 rtl_profile_for_bb (basic_block bb)
377 {
378 crtl->maybe_hot_insn_p = maybe_hot_bb_p (cfun, bb);
379 }
380
381 /* Set RTL expansion for edge profile. */
382
383 void
384 rtl_profile_for_edge (edge e)
385 {
386 crtl->maybe_hot_insn_p = maybe_hot_edge_p (e);
387 }
388
389 /* Set RTL expansion to default mode (i.e. when profile info is not known). */
390 void
391 default_rtl_profile (void)
392 {
393 crtl->maybe_hot_insn_p = true;
394 }
395
396 /* Return true if the one of outgoing edges is already predicted by
397 PREDICTOR. */
398
399 bool
400 rtl_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
401 {
402 rtx note;
403 if (!INSN_P (BB_END (bb)))
404 return false;
405 for (note = REG_NOTES (BB_END (bb)); note; note = XEXP (note, 1))
406 if (REG_NOTE_KIND (note) == REG_BR_PRED
407 && INTVAL (XEXP (XEXP (note, 0), 0)) == (int)predictor)
408 return true;
409 return false;
410 }
411
412 /* This map contains for a basic block the list of predictions for the
413 outgoing edges. */
414
415 static struct pointer_map_t *bb_predictions;
416
417 /* Structure representing predictions in tree level. */
418
419 struct edge_prediction {
420 struct edge_prediction *ep_next;
421 edge ep_edge;
422 enum br_predictor ep_predictor;
423 int ep_probability;
424 };
425
426 /* Return true if the one of outgoing edges is already predicted by
427 PREDICTOR. */
428
429 bool
430 gimple_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
431 {
432 struct edge_prediction *i;
433 void **preds = pointer_map_contains (bb_predictions, bb);
434
435 if (!preds)
436 return false;
437
438 for (i = (struct edge_prediction *) *preds; i; i = i->ep_next)
439 if (i->ep_predictor == predictor)
440 return true;
441 return false;
442 }
443
444 /* Return true when the probability of edge is reliable.
445
446 The profile guessing code is good at predicting branch outcome (ie.
447 taken/not taken), that is predicted right slightly over 75% of time.
448 It is however notoriously poor on predicting the probability itself.
449 In general the profile appear a lot flatter (with probabilities closer
450 to 50%) than the reality so it is bad idea to use it to drive optimization
451 such as those disabling dynamic branch prediction for well predictable
452 branches.
453
454 There are two exceptions - edges leading to noreturn edges and edges
455 predicted by number of iterations heuristics are predicted well. This macro
456 should be able to distinguish those, but at the moment it simply check for
457 noreturn heuristic that is only one giving probability over 99% or bellow
458 1%. In future we might want to propagate reliability information across the
459 CFG if we find this information useful on multiple places. */
460 static bool
461 probability_reliable_p (int prob)
462 {
463 return (profile_status == PROFILE_READ
464 || (profile_status == PROFILE_GUESSED
465 && (prob <= HITRATE (1) || prob >= HITRATE (99))));
466 }
467
468 /* Same predicate as above, working on edges. */
469 bool
470 edge_probability_reliable_p (const_edge e)
471 {
472 return probability_reliable_p (e->probability);
473 }
474
475 /* Same predicate as edge_probability_reliable_p, working on notes. */
476 bool
477 br_prob_note_reliable_p (const_rtx note)
478 {
479 gcc_assert (REG_NOTE_KIND (note) == REG_BR_PROB);
480 return probability_reliable_p (INTVAL (XEXP (note, 0)));
481 }
482
483 static void
484 predict_insn (rtx insn, enum br_predictor predictor, int probability)
485 {
486 gcc_assert (any_condjump_p (insn));
487 if (!flag_guess_branch_prob)
488 return;
489
490 add_reg_note (insn, REG_BR_PRED,
491 gen_rtx_CONCAT (VOIDmode,
492 GEN_INT ((int) predictor),
493 GEN_INT ((int) probability)));
494 }
495
496 /* Predict insn by given predictor. */
497
498 void
499 predict_insn_def (rtx insn, enum br_predictor predictor,
500 enum prediction taken)
501 {
502 int probability = predictor_info[(int) predictor].hitrate;
503
504 if (taken != TAKEN)
505 probability = REG_BR_PROB_BASE - probability;
506
507 predict_insn (insn, predictor, probability);
508 }
509
510 /* Predict edge E with given probability if possible. */
511
512 void
513 rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
514 {
515 rtx last_insn;
516 last_insn = BB_END (e->src);
517
518 /* We can store the branch prediction information only about
519 conditional jumps. */
520 if (!any_condjump_p (last_insn))
521 return;
522
523 /* We always store probability of branching. */
524 if (e->flags & EDGE_FALLTHRU)
525 probability = REG_BR_PROB_BASE - probability;
526
527 predict_insn (last_insn, predictor, probability);
528 }
529
530 /* Predict edge E with the given PROBABILITY. */
531 void
532 gimple_predict_edge (edge e, enum br_predictor predictor, int probability)
533 {
534 gcc_assert (profile_status != PROFILE_GUESSED);
535 if ((e->src != ENTRY_BLOCK_PTR && EDGE_COUNT (e->src->succs) > 1)
536 && flag_guess_branch_prob && optimize)
537 {
538 struct edge_prediction *i = XNEW (struct edge_prediction);
539 void **preds = pointer_map_insert (bb_predictions, e->src);
540
541 i->ep_next = (struct edge_prediction *) *preds;
542 *preds = i;
543 i->ep_probability = probability;
544 i->ep_predictor = predictor;
545 i->ep_edge = e;
546 }
547 }
548
549 /* Remove all predictions on given basic block that are attached
550 to edge E. */
551 void
552 remove_predictions_associated_with_edge (edge e)
553 {
554 void **preds;
555
556 if (!bb_predictions)
557 return;
558
559 preds = pointer_map_contains (bb_predictions, e->src);
560
561 if (preds)
562 {
563 struct edge_prediction **prediction = (struct edge_prediction **) preds;
564 struct edge_prediction *next;
565
566 while (*prediction)
567 {
568 if ((*prediction)->ep_edge == e)
569 {
570 next = (*prediction)->ep_next;
571 free (*prediction);
572 *prediction = next;
573 }
574 else
575 prediction = &((*prediction)->ep_next);
576 }
577 }
578 }
579
580 /* Clears the list of predictions stored for BB. */
581
582 static void
583 clear_bb_predictions (basic_block bb)
584 {
585 void **preds = pointer_map_contains (bb_predictions, bb);
586 struct edge_prediction *pred, *next;
587
588 if (!preds)
589 return;
590
591 for (pred = (struct edge_prediction *) *preds; pred; pred = next)
592 {
593 next = pred->ep_next;
594 free (pred);
595 }
596 *preds = NULL;
597 }
598
599 /* Return true when we can store prediction on insn INSN.
600 At the moment we represent predictions only on conditional
601 jumps, not at computed jump or other complicated cases. */
602 static bool
603 can_predict_insn_p (const_rtx insn)
604 {
605 return (JUMP_P (insn)
606 && any_condjump_p (insn)
607 && EDGE_COUNT (BLOCK_FOR_INSN (insn)->succs) >= 2);
608 }
609
610 /* Predict edge E by given predictor if possible. */
611
612 void
613 predict_edge_def (edge e, enum br_predictor predictor,
614 enum prediction taken)
615 {
616 int probability = predictor_info[(int) predictor].hitrate;
617
618 if (taken != TAKEN)
619 probability = REG_BR_PROB_BASE - probability;
620
621 predict_edge (e, predictor, probability);
622 }
623
624 /* Invert all branch predictions or probability notes in the INSN. This needs
625 to be done each time we invert the condition used by the jump. */
626
627 void
628 invert_br_probabilities (rtx insn)
629 {
630 rtx note;
631
632 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
633 if (REG_NOTE_KIND (note) == REG_BR_PROB)
634 XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0)));
635 else if (REG_NOTE_KIND (note) == REG_BR_PRED)
636 XEXP (XEXP (note, 0), 1)
637 = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1)));
638 }
639
640 /* Dump information about the branch prediction to the output file. */
641
642 static void
643 dump_prediction (FILE *file, enum br_predictor predictor, int probability,
644 basic_block bb, int used)
645 {
646 edge e;
647 edge_iterator ei;
648
649 if (!file)
650 return;
651
652 FOR_EACH_EDGE (e, ei, bb->succs)
653 if (! (e->flags & EDGE_FALLTHRU))
654 break;
655
656 fprintf (file, " %s heuristics%s: %.1f%%",
657 predictor_info[predictor].name,
658 used ? "" : " (ignored)", probability * 100.0 / REG_BR_PROB_BASE);
659
660 if (bb->count)
661 {
662 fprintf (file, " exec ");
663 fprintf (file, HOST_WIDEST_INT_PRINT_DEC, bb->count);
664 if (e)
665 {
666 fprintf (file, " hit ");
667 fprintf (file, HOST_WIDEST_INT_PRINT_DEC, e->count);
668 fprintf (file, " (%.1f%%)", e->count * 100.0 / bb->count);
669 }
670 }
671
672 fprintf (file, "\n");
673 }
674
675 /* We can not predict the probabilities of outgoing edges of bb. Set them
676 evenly and hope for the best. */
677 static void
678 set_even_probabilities (basic_block bb)
679 {
680 int nedges = 0;
681 edge e;
682 edge_iterator ei;
683
684 FOR_EACH_EDGE (e, ei, bb->succs)
685 if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
686 nedges ++;
687 FOR_EACH_EDGE (e, ei, bb->succs)
688 if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
689 e->probability = (REG_BR_PROB_BASE + nedges / 2) / nedges;
690 else
691 e->probability = 0;
692 }
693
694 /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB
695 note if not already present. Remove now useless REG_BR_PRED notes. */
696
697 static void
698 combine_predictions_for_insn (rtx insn, basic_block bb)
699 {
700 rtx prob_note;
701 rtx *pnote;
702 rtx note;
703 int best_probability = PROB_EVEN;
704 enum br_predictor best_predictor = END_PREDICTORS;
705 int combined_probability = REG_BR_PROB_BASE / 2;
706 int d;
707 bool first_match = false;
708 bool found = false;
709
710 if (!can_predict_insn_p (insn))
711 {
712 set_even_probabilities (bb);
713 return;
714 }
715
716 prob_note = find_reg_note (insn, REG_BR_PROB, 0);
717 pnote = &REG_NOTES (insn);
718 if (dump_file)
719 fprintf (dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn),
720 bb->index);
721
722 /* We implement "first match" heuristics and use probability guessed
723 by predictor with smallest index. */
724 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
725 if (REG_NOTE_KIND (note) == REG_BR_PRED)
726 {
727 enum br_predictor predictor = ((enum br_predictor)
728 INTVAL (XEXP (XEXP (note, 0), 0)));
729 int probability = INTVAL (XEXP (XEXP (note, 0), 1));
730
731 found = true;
732 if (best_predictor > predictor)
733 best_probability = probability, best_predictor = predictor;
734
735 d = (combined_probability * probability
736 + (REG_BR_PROB_BASE - combined_probability)
737 * (REG_BR_PROB_BASE - probability));
738
739 /* Use FP math to avoid overflows of 32bit integers. */
740 if (d == 0)
741 /* If one probability is 0% and one 100%, avoid division by zero. */
742 combined_probability = REG_BR_PROB_BASE / 2;
743 else
744 combined_probability = (((double) combined_probability) * probability
745 * REG_BR_PROB_BASE / d + 0.5);
746 }
747
748 /* Decide which heuristic to use. In case we didn't match anything,
749 use no_prediction heuristic, in case we did match, use either
750 first match or Dempster-Shaffer theory depending on the flags. */
751
752 if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
753 first_match = true;
754
755 if (!found)
756 dump_prediction (dump_file, PRED_NO_PREDICTION,
757 combined_probability, bb, true);
758 else
759 {
760 dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
761 bb, !first_match);
762 dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
763 bb, first_match);
764 }
765
766 if (first_match)
767 combined_probability = best_probability;
768 dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, true);
769
770 while (*pnote)
771 {
772 if (REG_NOTE_KIND (*pnote) == REG_BR_PRED)
773 {
774 enum br_predictor predictor = ((enum br_predictor)
775 INTVAL (XEXP (XEXP (*pnote, 0), 0)));
776 int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1));
777
778 dump_prediction (dump_file, predictor, probability, bb,
779 !first_match || best_predictor == predictor);
780 *pnote = XEXP (*pnote, 1);
781 }
782 else
783 pnote = &XEXP (*pnote, 1);
784 }
785
786 if (!prob_note)
787 {
788 add_reg_note (insn, REG_BR_PROB, GEN_INT (combined_probability));
789
790 /* Save the prediction into CFG in case we are seeing non-degenerated
791 conditional jump. */
792 if (!single_succ_p (bb))
793 {
794 BRANCH_EDGE (bb)->probability = combined_probability;
795 FALLTHRU_EDGE (bb)->probability
796 = REG_BR_PROB_BASE - combined_probability;
797 }
798 }
799 else if (!single_succ_p (bb))
800 {
801 int prob = INTVAL (XEXP (prob_note, 0));
802
803 BRANCH_EDGE (bb)->probability = prob;
804 FALLTHRU_EDGE (bb)->probability = REG_BR_PROB_BASE - prob;
805 }
806 else
807 single_succ_edge (bb)->probability = REG_BR_PROB_BASE;
808 }
809
810 /* Combine predictions into single probability and store them into CFG.
811 Remove now useless prediction entries. */
812
813 static void
814 combine_predictions_for_bb (basic_block bb)
815 {
816 int best_probability = PROB_EVEN;
817 enum br_predictor best_predictor = END_PREDICTORS;
818 int combined_probability = REG_BR_PROB_BASE / 2;
819 int d;
820 bool first_match = false;
821 bool found = false;
822 struct edge_prediction *pred;
823 int nedges = 0;
824 edge e, first = NULL, second = NULL;
825 edge_iterator ei;
826 void **preds;
827
828 FOR_EACH_EDGE (e, ei, bb->succs)
829 if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
830 {
831 nedges ++;
832 if (first && !second)
833 second = e;
834 if (!first)
835 first = e;
836 }
837
838 /* When there is no successor or only one choice, prediction is easy.
839
840 We are lazy for now and predict only basic blocks with two outgoing
841 edges. It is possible to predict generic case too, but we have to
842 ignore first match heuristics and do more involved combining. Implement
843 this later. */
844 if (nedges != 2)
845 {
846 if (!bb->count)
847 set_even_probabilities (bb);
848 clear_bb_predictions (bb);
849 if (dump_file)
850 fprintf (dump_file, "%i edges in bb %i predicted to even probabilities\n",
851 nedges, bb->index);
852 return;
853 }
854
855 if (dump_file)
856 fprintf (dump_file, "Predictions for bb %i\n", bb->index);
857
858 preds = pointer_map_contains (bb_predictions, bb);
859 if (preds)
860 {
861 /* We implement "first match" heuristics and use probability guessed
862 by predictor with smallest index. */
863 for (pred = (struct edge_prediction *) *preds; pred; pred = pred->ep_next)
864 {
865 enum br_predictor predictor = pred->ep_predictor;
866 int probability = pred->ep_probability;
867
868 if (pred->ep_edge != first)
869 probability = REG_BR_PROB_BASE - probability;
870
871 found = true;
872 /* First match heuristics would be widly confused if we predicted
873 both directions. */
874 if (best_predictor > predictor)
875 {
876 struct edge_prediction *pred2;
877 int prob = probability;
878
879 for (pred2 = (struct edge_prediction *) *preds; pred2; pred2 = pred2->ep_next)
880 if (pred2 != pred && pred2->ep_predictor == pred->ep_predictor)
881 {
882 int probability2 = pred->ep_probability;
883
884 if (pred2->ep_edge != first)
885 probability2 = REG_BR_PROB_BASE - probability2;
886
887 if ((probability < REG_BR_PROB_BASE / 2) !=
888 (probability2 < REG_BR_PROB_BASE / 2))
889 break;
890
891 /* If the same predictor later gave better result, go for it! */
892 if ((probability >= REG_BR_PROB_BASE / 2 && (probability2 > probability))
893 || (probability <= REG_BR_PROB_BASE / 2 && (probability2 < probability)))
894 prob = probability2;
895 }
896 if (!pred2)
897 best_probability = prob, best_predictor = predictor;
898 }
899
900 d = (combined_probability * probability
901 + (REG_BR_PROB_BASE - combined_probability)
902 * (REG_BR_PROB_BASE - probability));
903
904 /* Use FP math to avoid overflows of 32bit integers. */
905 if (d == 0)
906 /* If one probability is 0% and one 100%, avoid division by zero. */
907 combined_probability = REG_BR_PROB_BASE / 2;
908 else
909 combined_probability = (((double) combined_probability)
910 * probability
911 * REG_BR_PROB_BASE / d + 0.5);
912 }
913 }
914
915 /* Decide which heuristic to use. In case we didn't match anything,
916 use no_prediction heuristic, in case we did match, use either
917 first match or Dempster-Shaffer theory depending on the flags. */
918
919 if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
920 first_match = true;
921
922 if (!found)
923 dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb, true);
924 else
925 {
926 dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb,
927 !first_match);
928 dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb,
929 first_match);
930 }
931
932 if (first_match)
933 combined_probability = best_probability;
934 dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, true);
935
936 if (preds)
937 {
938 for (pred = (struct edge_prediction *) *preds; pred; pred = pred->ep_next)
939 {
940 enum br_predictor predictor = pred->ep_predictor;
941 int probability = pred->ep_probability;
942
943 if (pred->ep_edge != EDGE_SUCC (bb, 0))
944 probability = REG_BR_PROB_BASE - probability;
945 dump_prediction (dump_file, predictor, probability, bb,
946 !first_match || best_predictor == predictor);
947 }
948 }
949 clear_bb_predictions (bb);
950
951 if (!bb->count)
952 {
953 first->probability = combined_probability;
954 second->probability = REG_BR_PROB_BASE - combined_probability;
955 }
956 }
957
958 /* Check if T1 and T2 satisfy the IV_COMPARE condition.
959 Return the SSA_NAME if the condition satisfies, NULL otherwise.
960
961 T1 and T2 should be one of the following cases:
962 1. T1 is SSA_NAME, T2 is NULL
963 2. T1 is SSA_NAME, T2 is INTEGER_CST between [-4, 4]
964 3. T2 is SSA_NAME, T1 is INTEGER_CST between [-4, 4] */
965
966 static tree
967 strips_small_constant (tree t1, tree t2)
968 {
969 tree ret = NULL;
970 int value = 0;
971
972 if (!t1)
973 return NULL;
974 else if (TREE_CODE (t1) == SSA_NAME)
975 ret = t1;
976 else if (host_integerp (t1, 0))
977 value = tree_low_cst (t1, 0);
978 else
979 return NULL;
980
981 if (!t2)
982 return ret;
983 else if (host_integerp (t2, 0))
984 value = tree_low_cst (t2, 0);
985 else if (TREE_CODE (t2) == SSA_NAME)
986 {
987 if (ret)
988 return NULL;
989 else
990 ret = t2;
991 }
992
993 if (value <= 4 && value >= -4)
994 return ret;
995 else
996 return NULL;
997 }
998
999 /* Return the SSA_NAME in T or T's operands.
1000 Return NULL if SSA_NAME cannot be found. */
1001
1002 static tree
1003 get_base_value (tree t)
1004 {
1005 if (TREE_CODE (t) == SSA_NAME)
1006 return t;
1007
1008 if (!BINARY_CLASS_P (t))
1009 return NULL;
1010
1011 switch (TREE_OPERAND_LENGTH (t))
1012 {
1013 case 1:
1014 return strips_small_constant (TREE_OPERAND (t, 0), NULL);
1015 case 2:
1016 return strips_small_constant (TREE_OPERAND (t, 0),
1017 TREE_OPERAND (t, 1));
1018 default:
1019 return NULL;
1020 }
1021 }
1022
1023 /* Check the compare STMT in LOOP. If it compares an induction
1024 variable to a loop invariant, return true, and save
1025 LOOP_INVARIANT, COMPARE_CODE and LOOP_STEP.
1026 Otherwise return false and set LOOP_INVAIANT to NULL. */
1027
1028 static bool
1029 is_comparison_with_loop_invariant_p (gimple stmt, struct loop *loop,
1030 tree *loop_invariant,
1031 enum tree_code *compare_code,
1032 int *loop_step,
1033 tree *loop_iv_base)
1034 {
1035 tree op0, op1, bound, base;
1036 affine_iv iv0, iv1;
1037 enum tree_code code;
1038 int step;
1039
1040 code = gimple_cond_code (stmt);
1041 *loop_invariant = NULL;
1042
1043 switch (code)
1044 {
1045 case GT_EXPR:
1046 case GE_EXPR:
1047 case NE_EXPR:
1048 case LT_EXPR:
1049 case LE_EXPR:
1050 case EQ_EXPR:
1051 break;
1052
1053 default:
1054 return false;
1055 }
1056
1057 op0 = gimple_cond_lhs (stmt);
1058 op1 = gimple_cond_rhs (stmt);
1059
1060 if ((TREE_CODE (op0) != SSA_NAME && TREE_CODE (op0) != INTEGER_CST)
1061 || (TREE_CODE (op1) != SSA_NAME && TREE_CODE (op1) != INTEGER_CST))
1062 return false;
1063 if (!simple_iv (loop, loop_containing_stmt (stmt), op0, &iv0, true))
1064 return false;
1065 if (!simple_iv (loop, loop_containing_stmt (stmt), op1, &iv1, true))
1066 return false;
1067 if (TREE_CODE (iv0.step) != INTEGER_CST
1068 || TREE_CODE (iv1.step) != INTEGER_CST)
1069 return false;
1070 if ((integer_zerop (iv0.step) && integer_zerop (iv1.step))
1071 || (!integer_zerop (iv0.step) && !integer_zerop (iv1.step)))
1072 return false;
1073
1074 if (integer_zerop (iv0.step))
1075 {
1076 if (code != NE_EXPR && code != EQ_EXPR)
1077 code = invert_tree_comparison (code, false);
1078 bound = iv0.base;
1079 base = iv1.base;
1080 if (host_integerp (iv1.step, 0))
1081 step = tree_low_cst (iv1.step, 0);
1082 else
1083 return false;
1084 }
1085 else
1086 {
1087 bound = iv1.base;
1088 base = iv0.base;
1089 if (host_integerp (iv0.step, 0))
1090 step = tree_low_cst (iv0.step, 0);
1091 else
1092 return false;
1093 }
1094
1095 if (TREE_CODE (bound) != INTEGER_CST)
1096 bound = get_base_value (bound);
1097 if (!bound)
1098 return false;
1099 if (TREE_CODE (base) != INTEGER_CST)
1100 base = get_base_value (base);
1101 if (!base)
1102 return false;
1103
1104 *loop_invariant = bound;
1105 *compare_code = code;
1106 *loop_step = step;
1107 *loop_iv_base = base;
1108 return true;
1109 }
1110
1111 /* Compare two SSA_NAMEs: returns TRUE if T1 and T2 are value coherent. */
1112
1113 static bool
1114 expr_coherent_p (tree t1, tree t2)
1115 {
1116 gimple stmt;
1117 tree ssa_name_1 = NULL;
1118 tree ssa_name_2 = NULL;
1119
1120 gcc_assert (TREE_CODE (t1) == SSA_NAME || TREE_CODE (t1) == INTEGER_CST);
1121 gcc_assert (TREE_CODE (t2) == SSA_NAME || TREE_CODE (t2) == INTEGER_CST);
1122
1123 if (t1 == t2)
1124 return true;
1125
1126 if (TREE_CODE (t1) == INTEGER_CST && TREE_CODE (t2) == INTEGER_CST)
1127 return true;
1128 if (TREE_CODE (t1) == INTEGER_CST || TREE_CODE (t2) == INTEGER_CST)
1129 return false;
1130
1131 /* Check to see if t1 is expressed/defined with t2. */
1132 stmt = SSA_NAME_DEF_STMT (t1);
1133 gcc_assert (stmt != NULL);
1134 if (is_gimple_assign (stmt))
1135 {
1136 ssa_name_1 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1137 if (ssa_name_1 && ssa_name_1 == t2)
1138 return true;
1139 }
1140
1141 /* Check to see if t2 is expressed/defined with t1. */
1142 stmt = SSA_NAME_DEF_STMT (t2);
1143 gcc_assert (stmt != NULL);
1144 if (is_gimple_assign (stmt))
1145 {
1146 ssa_name_2 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1147 if (ssa_name_2 && ssa_name_2 == t1)
1148 return true;
1149 }
1150
1151 /* Compare if t1 and t2's def_stmts are identical. */
1152 if (ssa_name_2 != NULL && ssa_name_1 == ssa_name_2)
1153 return true;
1154 else
1155 return false;
1156 }
1157
1158 /* Predict branch probability of BB when BB contains a branch that compares
1159 an induction variable in LOOP with LOOP_IV_BASE_VAR to LOOP_BOUND_VAR. The
1160 loop exit is compared using LOOP_BOUND_CODE, with step of LOOP_BOUND_STEP.
1161
1162 E.g.
1163 for (int i = 0; i < bound; i++) {
1164 if (i < bound - 2)
1165 computation_1();
1166 else
1167 computation_2();
1168 }
1169
1170 In this loop, we will predict the branch inside the loop to be taken. */
1171
1172 static void
1173 predict_iv_comparison (struct loop *loop, basic_block bb,
1174 tree loop_bound_var,
1175 tree loop_iv_base_var,
1176 enum tree_code loop_bound_code,
1177 int loop_bound_step)
1178 {
1179 gimple stmt;
1180 tree compare_var, compare_base;
1181 enum tree_code compare_code;
1182 int compare_step;
1183 edge then_edge;
1184 edge_iterator ei;
1185
1186 if (predicted_by_p (bb, PRED_LOOP_ITERATIONS_GUESSED)
1187 || predicted_by_p (bb, PRED_LOOP_ITERATIONS)
1188 || predicted_by_p (bb, PRED_LOOP_EXIT))
1189 return;
1190
1191 stmt = last_stmt (bb);
1192 if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1193 return;
1194 if (!is_comparison_with_loop_invariant_p (stmt, loop, &compare_var,
1195 &compare_code,
1196 &compare_step,
1197 &compare_base))
1198 return;
1199
1200 /* Find the taken edge. */
1201 FOR_EACH_EDGE (then_edge, ei, bb->succs)
1202 if (then_edge->flags & EDGE_TRUE_VALUE)
1203 break;
1204
1205 /* When comparing an IV to a loop invariant, NE is more likely to be
1206 taken while EQ is more likely to be not-taken. */
1207 if (compare_code == NE_EXPR)
1208 {
1209 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1210 return;
1211 }
1212 else if (compare_code == EQ_EXPR)
1213 {
1214 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1215 return;
1216 }
1217
1218 if (!expr_coherent_p (loop_iv_base_var, compare_base))
1219 return;
1220
1221 /* If loop bound, base and compare bound are all constants, we can
1222 calculate the probability directly. */
1223 if (host_integerp (loop_bound_var, 0)
1224 && host_integerp (compare_var, 0)
1225 && host_integerp (compare_base, 0))
1226 {
1227 int probability;
1228 HOST_WIDE_INT compare_count;
1229 HOST_WIDE_INT loop_bound = tree_low_cst (loop_bound_var, 0);
1230 HOST_WIDE_INT compare_bound = tree_low_cst (compare_var, 0);
1231 HOST_WIDE_INT base = tree_low_cst (compare_base, 0);
1232 HOST_WIDE_INT loop_count = (loop_bound - base) / compare_step;
1233
1234 if ((compare_step > 0)
1235 ^ (compare_code == LT_EXPR || compare_code == LE_EXPR))
1236 compare_count = (loop_bound - compare_bound) / compare_step;
1237 else
1238 compare_count = (compare_bound - base) / compare_step;
1239
1240 if (compare_code == LE_EXPR || compare_code == GE_EXPR)
1241 compare_count ++;
1242 if (loop_bound_code == LE_EXPR || loop_bound_code == GE_EXPR)
1243 loop_count ++;
1244 if (compare_count < 0)
1245 compare_count = 0;
1246 if (loop_count < 0)
1247 loop_count = 0;
1248
1249 if (loop_count == 0)
1250 probability = 0;
1251 else if (compare_count > loop_count)
1252 probability = REG_BR_PROB_BASE;
1253 else
1254 probability = (double) REG_BR_PROB_BASE * compare_count / loop_count;
1255 predict_edge (then_edge, PRED_LOOP_IV_COMPARE, probability);
1256 return;
1257 }
1258
1259 if (expr_coherent_p (loop_bound_var, compare_var))
1260 {
1261 if ((loop_bound_code == LT_EXPR || loop_bound_code == LE_EXPR)
1262 && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1263 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1264 else if ((loop_bound_code == GT_EXPR || loop_bound_code == GE_EXPR)
1265 && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1266 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1267 else if (loop_bound_code == NE_EXPR)
1268 {
1269 /* If the loop backedge condition is "(i != bound)", we do
1270 the comparison based on the step of IV:
1271 * step < 0 : backedge condition is like (i > bound)
1272 * step > 0 : backedge condition is like (i < bound) */
1273 gcc_assert (loop_bound_step != 0);
1274 if (loop_bound_step > 0
1275 && (compare_code == LT_EXPR
1276 || compare_code == LE_EXPR))
1277 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1278 else if (loop_bound_step < 0
1279 && (compare_code == GT_EXPR
1280 || compare_code == GE_EXPR))
1281 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1282 else
1283 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1284 }
1285 else
1286 /* The branch is predicted not-taken if loop_bound_code is
1287 opposite with compare_code. */
1288 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1289 }
1290 else if (expr_coherent_p (loop_iv_base_var, compare_var))
1291 {
1292 /* For cases like:
1293 for (i = s; i < h; i++)
1294 if (i > s + 2) ....
1295 The branch should be predicted taken. */
1296 if (loop_bound_step > 0
1297 && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1298 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1299 else if (loop_bound_step < 0
1300 && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1301 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1302 else
1303 predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1304 }
1305 }
1306
1307 /* Predict for extra loop exits that will lead to EXIT_EDGE. The extra loop
1308 exits are resulted from short-circuit conditions that will generate an
1309 if_tmp. E.g.:
1310
1311 if (foo() || global > 10)
1312 break;
1313
1314 This will be translated into:
1315
1316 BB3:
1317 loop header...
1318 BB4:
1319 if foo() goto BB6 else goto BB5
1320 BB5:
1321 if global > 10 goto BB6 else goto BB7
1322 BB6:
1323 goto BB7
1324 BB7:
1325 iftmp = (PHI 0(BB5), 1(BB6))
1326 if iftmp == 1 goto BB8 else goto BB3
1327 BB8:
1328 outside of the loop...
1329
1330 The edge BB7->BB8 is loop exit because BB8 is outside of the loop.
1331 From the dataflow, we can infer that BB4->BB6 and BB5->BB6 are also loop
1332 exits. This function takes BB7->BB8 as input, and finds out the extra loop
1333 exits to predict them using PRED_LOOP_EXIT. */
1334
1335 static void
1336 predict_extra_loop_exits (edge exit_edge)
1337 {
1338 unsigned i;
1339 bool check_value_one;
1340 gimple phi_stmt;
1341 tree cmp_rhs, cmp_lhs;
1342 gimple cmp_stmt = last_stmt (exit_edge->src);
1343
1344 if (!cmp_stmt || gimple_code (cmp_stmt) != GIMPLE_COND)
1345 return;
1346 cmp_rhs = gimple_cond_rhs (cmp_stmt);
1347 cmp_lhs = gimple_cond_lhs (cmp_stmt);
1348 if (!TREE_CONSTANT (cmp_rhs)
1349 || !(integer_zerop (cmp_rhs) || integer_onep (cmp_rhs)))
1350 return;
1351 if (TREE_CODE (cmp_lhs) != SSA_NAME)
1352 return;
1353
1354 /* If check_value_one is true, only the phi_args with value '1' will lead
1355 to loop exit. Otherwise, only the phi_args with value '0' will lead to
1356 loop exit. */
1357 check_value_one = (((integer_onep (cmp_rhs))
1358 ^ (gimple_cond_code (cmp_stmt) == EQ_EXPR))
1359 ^ ((exit_edge->flags & EDGE_TRUE_VALUE) != 0));
1360
1361 phi_stmt = SSA_NAME_DEF_STMT (cmp_lhs);
1362 if (!phi_stmt || gimple_code (phi_stmt) != GIMPLE_PHI)
1363 return;
1364
1365 for (i = 0; i < gimple_phi_num_args (phi_stmt); i++)
1366 {
1367 edge e1;
1368 edge_iterator ei;
1369 tree val = gimple_phi_arg_def (phi_stmt, i);
1370 edge e = gimple_phi_arg_edge (phi_stmt, i);
1371
1372 if (!TREE_CONSTANT (val) || !(integer_zerop (val) || integer_onep (val)))
1373 continue;
1374 if ((check_value_one ^ integer_onep (val)) == 1)
1375 continue;
1376 if (EDGE_COUNT (e->src->succs) != 1)
1377 {
1378 predict_paths_leading_to_edge (e, PRED_LOOP_EXIT, NOT_TAKEN);
1379 continue;
1380 }
1381
1382 FOR_EACH_EDGE (e1, ei, e->src->preds)
1383 predict_paths_leading_to_edge (e1, PRED_LOOP_EXIT, NOT_TAKEN);
1384 }
1385 }
1386
1387 /* Predict edge probabilities by exploiting loop structure. */
1388
1389 static void
1390 predict_loops (void)
1391 {
1392 loop_iterator li;
1393 struct loop *loop;
1394
1395 /* Try to predict out blocks in a loop that are not part of a
1396 natural loop. */
1397 FOR_EACH_LOOP (li, loop, 0)
1398 {
1399 basic_block bb, *bbs;
1400 unsigned j, n_exits;
1401 vec<edge> exits;
1402 struct tree_niter_desc niter_desc;
1403 edge ex;
1404 struct nb_iter_bound *nb_iter;
1405 enum tree_code loop_bound_code = ERROR_MARK;
1406 int loop_bound_step = 0;
1407 tree loop_bound_var = NULL;
1408 tree loop_iv_base = NULL;
1409 gimple stmt = NULL;
1410
1411 exits = get_loop_exit_edges (loop);
1412 n_exits = exits.length ();
1413 if (!n_exits)
1414 {
1415 exits.release ();
1416 continue;
1417 }
1418
1419 FOR_EACH_VEC_ELT (exits, j, ex)
1420 {
1421 tree niter = NULL;
1422 HOST_WIDE_INT nitercst;
1423 int max = PARAM_VALUE (PARAM_MAX_PREDICTED_ITERATIONS);
1424 int probability;
1425 enum br_predictor predictor;
1426
1427 predict_extra_loop_exits (ex);
1428
1429 if (number_of_iterations_exit (loop, ex, &niter_desc, false, false))
1430 niter = niter_desc.niter;
1431 if (!niter || TREE_CODE (niter_desc.niter) != INTEGER_CST)
1432 niter = loop_niter_by_eval (loop, ex);
1433
1434 if (TREE_CODE (niter) == INTEGER_CST)
1435 {
1436 if (host_integerp (niter, 1)
1437 && compare_tree_int (niter, max-1) == -1)
1438 nitercst = tree_low_cst (niter, 1) + 1;
1439 else
1440 nitercst = max;
1441 predictor = PRED_LOOP_ITERATIONS;
1442 }
1443 /* If we have just one exit and we can derive some information about
1444 the number of iterations of the loop from the statements inside
1445 the loop, use it to predict this exit. */
1446 else if (n_exits == 1)
1447 {
1448 nitercst = estimated_stmt_executions_int (loop);
1449 if (nitercst < 0)
1450 continue;
1451 if (nitercst > max)
1452 nitercst = max;
1453
1454 predictor = PRED_LOOP_ITERATIONS_GUESSED;
1455 }
1456 else
1457 continue;
1458
1459 probability = ((REG_BR_PROB_BASE + nitercst / 2) / nitercst);
1460 predict_edge (ex, predictor, probability);
1461 }
1462 exits.release ();
1463
1464 /* Find information about loop bound variables. */
1465 for (nb_iter = loop->bounds; nb_iter;
1466 nb_iter = nb_iter->next)
1467 if (nb_iter->stmt
1468 && gimple_code (nb_iter->stmt) == GIMPLE_COND)
1469 {
1470 stmt = nb_iter->stmt;
1471 break;
1472 }
1473 if (!stmt && last_stmt (loop->header)
1474 && gimple_code (last_stmt (loop->header)) == GIMPLE_COND)
1475 stmt = last_stmt (loop->header);
1476 if (stmt)
1477 is_comparison_with_loop_invariant_p (stmt, loop,
1478 &loop_bound_var,
1479 &loop_bound_code,
1480 &loop_bound_step,
1481 &loop_iv_base);
1482
1483 bbs = get_loop_body (loop);
1484
1485 for (j = 0; j < loop->num_nodes; j++)
1486 {
1487 int header_found = 0;
1488 edge e;
1489 edge_iterator ei;
1490
1491 bb = bbs[j];
1492
1493 /* Bypass loop heuristics on continue statement. These
1494 statements construct loops via "non-loop" constructs
1495 in the source language and are better to be handled
1496 separately. */
1497 if (predicted_by_p (bb, PRED_CONTINUE))
1498 continue;
1499
1500 /* Loop branch heuristics - predict an edge back to a
1501 loop's head as taken. */
1502 if (bb == loop->latch)
1503 {
1504 e = find_edge (loop->latch, loop->header);
1505 if (e)
1506 {
1507 header_found = 1;
1508 predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN);
1509 }
1510 }
1511
1512 /* Loop exit heuristics - predict an edge exiting the loop if the
1513 conditional has no loop header successors as not taken. */
1514 if (!header_found
1515 /* If we already used more reliable loop exit predictors, do not
1516 bother with PRED_LOOP_EXIT. */
1517 && !predicted_by_p (bb, PRED_LOOP_ITERATIONS_GUESSED)
1518 && !predicted_by_p (bb, PRED_LOOP_ITERATIONS))
1519 {
1520 /* For loop with many exits we don't want to predict all exits
1521 with the pretty large probability, because if all exits are
1522 considered in row, the loop would be predicted to iterate
1523 almost never. The code to divide probability by number of
1524 exits is very rough. It should compute the number of exits
1525 taken in each patch through function (not the overall number
1526 of exits that might be a lot higher for loops with wide switch
1527 statements in them) and compute n-th square root.
1528
1529 We limit the minimal probability by 2% to avoid
1530 EDGE_PROBABILITY_RELIABLE from trusting the branch prediction
1531 as this was causing regression in perl benchmark containing such
1532 a wide loop. */
1533
1534 int probability = ((REG_BR_PROB_BASE
1535 - predictor_info [(int) PRED_LOOP_EXIT].hitrate)
1536 / n_exits);
1537 if (probability < HITRATE (2))
1538 probability = HITRATE (2);
1539 FOR_EACH_EDGE (e, ei, bb->succs)
1540 if (e->dest->index < NUM_FIXED_BLOCKS
1541 || !flow_bb_inside_loop_p (loop, e->dest))
1542 predict_edge (e, PRED_LOOP_EXIT, probability);
1543 }
1544 if (loop_bound_var)
1545 predict_iv_comparison (loop, bb, loop_bound_var, loop_iv_base,
1546 loop_bound_code,
1547 loop_bound_step);
1548 }
1549
1550 /* Free basic blocks from get_loop_body. */
1551 free (bbs);
1552 }
1553 }
1554
1555 /* Attempt to predict probabilities of BB outgoing edges using local
1556 properties. */
1557 static void
1558 bb_estimate_probability_locally (basic_block bb)
1559 {
1560 rtx last_insn = BB_END (bb);
1561 rtx cond;
1562
1563 if (! can_predict_insn_p (last_insn))
1564 return;
1565 cond = get_condition (last_insn, NULL, false, false);
1566 if (! cond)
1567 return;
1568
1569 /* Try "pointer heuristic."
1570 A comparison ptr == 0 is predicted as false.
1571 Similarly, a comparison ptr1 == ptr2 is predicted as false. */
1572 if (COMPARISON_P (cond)
1573 && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0)))
1574 || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1)))))
1575 {
1576 if (GET_CODE (cond) == EQ)
1577 predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
1578 else if (GET_CODE (cond) == NE)
1579 predict_insn_def (last_insn, PRED_POINTER, TAKEN);
1580 }
1581 else
1582
1583 /* Try "opcode heuristic."
1584 EQ tests are usually false and NE tests are usually true. Also,
1585 most quantities are positive, so we can make the appropriate guesses
1586 about signed comparisons against zero. */
1587 switch (GET_CODE (cond))
1588 {
1589 case CONST_INT:
1590 /* Unconditional branch. */
1591 predict_insn_def (last_insn, PRED_UNCONDITIONAL,
1592 cond == const0_rtx ? NOT_TAKEN : TAKEN);
1593 break;
1594
1595 case EQ:
1596 case UNEQ:
1597 /* Floating point comparisons appears to behave in a very
1598 unpredictable way because of special role of = tests in
1599 FP code. */
1600 if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
1601 ;
1602 /* Comparisons with 0 are often used for booleans and there is
1603 nothing useful to predict about them. */
1604 else if (XEXP (cond, 1) == const0_rtx
1605 || XEXP (cond, 0) == const0_rtx)
1606 ;
1607 else
1608 predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
1609 break;
1610
1611 case NE:
1612 case LTGT:
1613 /* Floating point comparisons appears to behave in a very
1614 unpredictable way because of special role of = tests in
1615 FP code. */
1616 if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
1617 ;
1618 /* Comparisons with 0 are often used for booleans and there is
1619 nothing useful to predict about them. */
1620 else if (XEXP (cond, 1) == const0_rtx
1621 || XEXP (cond, 0) == const0_rtx)
1622 ;
1623 else
1624 predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
1625 break;
1626
1627 case ORDERED:
1628 predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
1629 break;
1630
1631 case UNORDERED:
1632 predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
1633 break;
1634
1635 case LE:
1636 case LT:
1637 if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
1638 || XEXP (cond, 1) == constm1_rtx)
1639 predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
1640 break;
1641
1642 case GE:
1643 case GT:
1644 if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
1645 || XEXP (cond, 1) == constm1_rtx)
1646 predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
1647 break;
1648
1649 default:
1650 break;
1651 }
1652 }
1653
1654 /* Set edge->probability for each successor edge of BB. */
1655 void
1656 guess_outgoing_edge_probabilities (basic_block bb)
1657 {
1658 bb_estimate_probability_locally (bb);
1659 combine_predictions_for_insn (BB_END (bb), bb);
1660 }
1661 \f
1662 static tree expr_expected_value (tree, bitmap);
1663
1664 /* Helper function for expr_expected_value. */
1665
1666 static tree
1667 expr_expected_value_1 (tree type, tree op0, enum tree_code code,
1668 tree op1, bitmap visited)
1669 {
1670 gimple def;
1671
1672 if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
1673 {
1674 if (TREE_CONSTANT (op0))
1675 return op0;
1676
1677 if (code != SSA_NAME)
1678 return NULL_TREE;
1679
1680 def = SSA_NAME_DEF_STMT (op0);
1681
1682 /* If we were already here, break the infinite cycle. */
1683 if (!bitmap_set_bit (visited, SSA_NAME_VERSION (op0)))
1684 return NULL;
1685
1686 if (gimple_code (def) == GIMPLE_PHI)
1687 {
1688 /* All the arguments of the PHI node must have the same constant
1689 length. */
1690 int i, n = gimple_phi_num_args (def);
1691 tree val = NULL, new_val;
1692
1693 for (i = 0; i < n; i++)
1694 {
1695 tree arg = PHI_ARG_DEF (def, i);
1696
1697 /* If this PHI has itself as an argument, we cannot
1698 determine the string length of this argument. However,
1699 if we can find an expected constant value for the other
1700 PHI args then we can still be sure that this is
1701 likely a constant. So be optimistic and just
1702 continue with the next argument. */
1703 if (arg == PHI_RESULT (def))
1704 continue;
1705
1706 new_val = expr_expected_value (arg, visited);
1707 if (!new_val)
1708 return NULL;
1709 if (!val)
1710 val = new_val;
1711 else if (!operand_equal_p (val, new_val, false))
1712 return NULL;
1713 }
1714 return val;
1715 }
1716 if (is_gimple_assign (def))
1717 {
1718 if (gimple_assign_lhs (def) != op0)
1719 return NULL;
1720
1721 return expr_expected_value_1 (TREE_TYPE (gimple_assign_lhs (def)),
1722 gimple_assign_rhs1 (def),
1723 gimple_assign_rhs_code (def),
1724 gimple_assign_rhs2 (def),
1725 visited);
1726 }
1727
1728 if (is_gimple_call (def))
1729 {
1730 tree decl = gimple_call_fndecl (def);
1731 if (!decl)
1732 return NULL;
1733 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
1734 switch (DECL_FUNCTION_CODE (decl))
1735 {
1736 case BUILT_IN_EXPECT:
1737 {
1738 tree val;
1739 if (gimple_call_num_args (def) != 2)
1740 return NULL;
1741 val = gimple_call_arg (def, 0);
1742 if (TREE_CONSTANT (val))
1743 return val;
1744 return gimple_call_arg (def, 1);
1745 }
1746
1747 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N:
1748 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
1749 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
1750 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
1751 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
1752 case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
1753 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE:
1754 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N:
1755 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
1756 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
1757 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
1758 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
1759 case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
1760 /* Assume that any given atomic operation has low contention,
1761 and thus the compare-and-swap operation succeeds. */
1762 return boolean_true_node;
1763 }
1764 }
1765
1766 return NULL;
1767 }
1768
1769 if (get_gimple_rhs_class (code) == GIMPLE_BINARY_RHS)
1770 {
1771 tree res;
1772 op0 = expr_expected_value (op0, visited);
1773 if (!op0)
1774 return NULL;
1775 op1 = expr_expected_value (op1, visited);
1776 if (!op1)
1777 return NULL;
1778 res = fold_build2 (code, type, op0, op1);
1779 if (TREE_CONSTANT (res))
1780 return res;
1781 return NULL;
1782 }
1783 if (get_gimple_rhs_class (code) == GIMPLE_UNARY_RHS)
1784 {
1785 tree res;
1786 op0 = expr_expected_value (op0, visited);
1787 if (!op0)
1788 return NULL;
1789 res = fold_build1 (code, type, op0);
1790 if (TREE_CONSTANT (res))
1791 return res;
1792 return NULL;
1793 }
1794 return NULL;
1795 }
1796
1797 /* Return constant EXPR will likely have at execution time, NULL if unknown.
1798 The function is used by builtin_expect branch predictor so the evidence
1799 must come from this construct and additional possible constant folding.
1800
1801 We may want to implement more involved value guess (such as value range
1802 propagation based prediction), but such tricks shall go to new
1803 implementation. */
1804
1805 static tree
1806 expr_expected_value (tree expr, bitmap visited)
1807 {
1808 enum tree_code code;
1809 tree op0, op1;
1810
1811 if (TREE_CONSTANT (expr))
1812 return expr;
1813
1814 extract_ops_from_tree (expr, &code, &op0, &op1);
1815 return expr_expected_value_1 (TREE_TYPE (expr),
1816 op0, code, op1, visited);
1817 }
1818
1819 \f
1820 /* Get rid of all builtin_expect calls and GIMPLE_PREDICT statements
1821 we no longer need. */
1822 static unsigned int
1823 strip_predict_hints (void)
1824 {
1825 basic_block bb;
1826 gimple ass_stmt;
1827 tree var;
1828
1829 FOR_EACH_BB (bb)
1830 {
1831 gimple_stmt_iterator bi;
1832 for (bi = gsi_start_bb (bb); !gsi_end_p (bi);)
1833 {
1834 gimple stmt = gsi_stmt (bi);
1835
1836 if (gimple_code (stmt) == GIMPLE_PREDICT)
1837 {
1838 gsi_remove (&bi, true);
1839 continue;
1840 }
1841 else if (gimple_code (stmt) == GIMPLE_CALL)
1842 {
1843 tree fndecl = gimple_call_fndecl (stmt);
1844
1845 if (fndecl
1846 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
1847 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_EXPECT
1848 && gimple_call_num_args (stmt) == 2)
1849 {
1850 var = gimple_call_lhs (stmt);
1851 if (var)
1852 {
1853 ass_stmt
1854 = gimple_build_assign (var, gimple_call_arg (stmt, 0));
1855 gsi_replace (&bi, ass_stmt, true);
1856 }
1857 else
1858 {
1859 gsi_remove (&bi, true);
1860 continue;
1861 }
1862 }
1863 }
1864 gsi_next (&bi);
1865 }
1866 }
1867 return 0;
1868 }
1869 \f
1870 /* Predict using opcode of the last statement in basic block. */
1871 static void
1872 tree_predict_by_opcode (basic_block bb)
1873 {
1874 gimple stmt = last_stmt (bb);
1875 edge then_edge;
1876 tree op0, op1;
1877 tree type;
1878 tree val;
1879 enum tree_code cmp;
1880 bitmap visited;
1881 edge_iterator ei;
1882
1883 if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1884 return;
1885 FOR_EACH_EDGE (then_edge, ei, bb->succs)
1886 if (then_edge->flags & EDGE_TRUE_VALUE)
1887 break;
1888 op0 = gimple_cond_lhs (stmt);
1889 op1 = gimple_cond_rhs (stmt);
1890 cmp = gimple_cond_code (stmt);
1891 type = TREE_TYPE (op0);
1892 visited = BITMAP_ALLOC (NULL);
1893 val = expr_expected_value_1 (boolean_type_node, op0, cmp, op1, visited);
1894 BITMAP_FREE (visited);
1895 if (val)
1896 {
1897 if (integer_zerop (val))
1898 predict_edge_def (then_edge, PRED_BUILTIN_EXPECT, NOT_TAKEN);
1899 else
1900 predict_edge_def (then_edge, PRED_BUILTIN_EXPECT, TAKEN);
1901 return;
1902 }
1903 /* Try "pointer heuristic."
1904 A comparison ptr == 0 is predicted as false.
1905 Similarly, a comparison ptr1 == ptr2 is predicted as false. */
1906 if (POINTER_TYPE_P (type))
1907 {
1908 if (cmp == EQ_EXPR)
1909 predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
1910 else if (cmp == NE_EXPR)
1911 predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
1912 }
1913 else
1914
1915 /* Try "opcode heuristic."
1916 EQ tests are usually false and NE tests are usually true. Also,
1917 most quantities are positive, so we can make the appropriate guesses
1918 about signed comparisons against zero. */
1919 switch (cmp)
1920 {
1921 case EQ_EXPR:
1922 case UNEQ_EXPR:
1923 /* Floating point comparisons appears to behave in a very
1924 unpredictable way because of special role of = tests in
1925 FP code. */
1926 if (FLOAT_TYPE_P (type))
1927 ;
1928 /* Comparisons with 0 are often used for booleans and there is
1929 nothing useful to predict about them. */
1930 else if (integer_zerop (op0) || integer_zerop (op1))
1931 ;
1932 else
1933 predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
1934 break;
1935
1936 case NE_EXPR:
1937 case LTGT_EXPR:
1938 /* Floating point comparisons appears to behave in a very
1939 unpredictable way because of special role of = tests in
1940 FP code. */
1941 if (FLOAT_TYPE_P (type))
1942 ;
1943 /* Comparisons with 0 are often used for booleans and there is
1944 nothing useful to predict about them. */
1945 else if (integer_zerop (op0)
1946 || integer_zerop (op1))
1947 ;
1948 else
1949 predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
1950 break;
1951
1952 case ORDERED_EXPR:
1953 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
1954 break;
1955
1956 case UNORDERED_EXPR:
1957 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
1958 break;
1959
1960 case LE_EXPR:
1961 case LT_EXPR:
1962 if (integer_zerop (op1)
1963 || integer_onep (op1)
1964 || integer_all_onesp (op1)
1965 || real_zerop (op1)
1966 || real_onep (op1)
1967 || real_minus_onep (op1))
1968 predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
1969 break;
1970
1971 case GE_EXPR:
1972 case GT_EXPR:
1973 if (integer_zerop (op1)
1974 || integer_onep (op1)
1975 || integer_all_onesp (op1)
1976 || real_zerop (op1)
1977 || real_onep (op1)
1978 || real_minus_onep (op1))
1979 predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
1980 break;
1981
1982 default:
1983 break;
1984 }
1985 }
1986
1987 /* Try to guess whether the value of return means error code. */
1988
1989 static enum br_predictor
1990 return_prediction (tree val, enum prediction *prediction)
1991 {
1992 /* VOID. */
1993 if (!val)
1994 return PRED_NO_PREDICTION;
1995 /* Different heuristics for pointers and scalars. */
1996 if (POINTER_TYPE_P (TREE_TYPE (val)))
1997 {
1998 /* NULL is usually not returned. */
1999 if (integer_zerop (val))
2000 {
2001 *prediction = NOT_TAKEN;
2002 return PRED_NULL_RETURN;
2003 }
2004 }
2005 else if (INTEGRAL_TYPE_P (TREE_TYPE (val)))
2006 {
2007 /* Negative return values are often used to indicate
2008 errors. */
2009 if (TREE_CODE (val) == INTEGER_CST
2010 && tree_int_cst_sgn (val) < 0)
2011 {
2012 *prediction = NOT_TAKEN;
2013 return PRED_NEGATIVE_RETURN;
2014 }
2015 /* Constant return values seems to be commonly taken.
2016 Zero/one often represent booleans so exclude them from the
2017 heuristics. */
2018 if (TREE_CONSTANT (val)
2019 && (!integer_zerop (val) && !integer_onep (val)))
2020 {
2021 *prediction = TAKEN;
2022 return PRED_CONST_RETURN;
2023 }
2024 }
2025 return PRED_NO_PREDICTION;
2026 }
2027
2028 /* Find the basic block with return expression and look up for possible
2029 return value trying to apply RETURN_PREDICTION heuristics. */
2030 static void
2031 apply_return_prediction (void)
2032 {
2033 gimple return_stmt = NULL;
2034 tree return_val;
2035 edge e;
2036 gimple phi;
2037 int phi_num_args, i;
2038 enum br_predictor pred;
2039 enum prediction direction;
2040 edge_iterator ei;
2041
2042 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
2043 {
2044 return_stmt = last_stmt (e->src);
2045 if (return_stmt
2046 && gimple_code (return_stmt) == GIMPLE_RETURN)
2047 break;
2048 }
2049 if (!e)
2050 return;
2051 return_val = gimple_return_retval (return_stmt);
2052 if (!return_val)
2053 return;
2054 if (TREE_CODE (return_val) != SSA_NAME
2055 || !SSA_NAME_DEF_STMT (return_val)
2056 || gimple_code (SSA_NAME_DEF_STMT (return_val)) != GIMPLE_PHI)
2057 return;
2058 phi = SSA_NAME_DEF_STMT (return_val);
2059 phi_num_args = gimple_phi_num_args (phi);
2060 pred = return_prediction (PHI_ARG_DEF (phi, 0), &direction);
2061
2062 /* Avoid the degenerate case where all return values form the function
2063 belongs to same category (ie they are all positive constants)
2064 so we can hardly say something about them. */
2065 for (i = 1; i < phi_num_args; i++)
2066 if (pred != return_prediction (PHI_ARG_DEF (phi, i), &direction))
2067 break;
2068 if (i != phi_num_args)
2069 for (i = 0; i < phi_num_args; i++)
2070 {
2071 pred = return_prediction (PHI_ARG_DEF (phi, i), &direction);
2072 if (pred != PRED_NO_PREDICTION)
2073 predict_paths_leading_to_edge (gimple_phi_arg_edge (phi, i), pred,
2074 direction);
2075 }
2076 }
2077
2078 /* Look for basic block that contains unlikely to happen events
2079 (such as noreturn calls) and mark all paths leading to execution
2080 of this basic blocks as unlikely. */
2081
2082 static void
2083 tree_bb_level_predictions (void)
2084 {
2085 basic_block bb;
2086 bool has_return_edges = false;
2087 edge e;
2088 edge_iterator ei;
2089
2090 FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
2091 if (!(e->flags & (EDGE_ABNORMAL | EDGE_FAKE | EDGE_EH)))
2092 {
2093 has_return_edges = true;
2094 break;
2095 }
2096
2097 apply_return_prediction ();
2098
2099 FOR_EACH_BB (bb)
2100 {
2101 gimple_stmt_iterator gsi;
2102
2103 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
2104 {
2105 gimple stmt = gsi_stmt (gsi);
2106 tree decl;
2107
2108 if (is_gimple_call (stmt))
2109 {
2110 if ((gimple_call_flags (stmt) & ECF_NORETURN)
2111 && has_return_edges)
2112 predict_paths_leading_to (bb, PRED_NORETURN,
2113 NOT_TAKEN);
2114 decl = gimple_call_fndecl (stmt);
2115 if (decl
2116 && lookup_attribute ("cold",
2117 DECL_ATTRIBUTES (decl)))
2118 predict_paths_leading_to (bb, PRED_COLD_FUNCTION,
2119 NOT_TAKEN);
2120 }
2121 else if (gimple_code (stmt) == GIMPLE_PREDICT)
2122 {
2123 predict_paths_leading_to (bb, gimple_predict_predictor (stmt),
2124 gimple_predict_outcome (stmt));
2125 /* Keep GIMPLE_PREDICT around so early inlining will propagate
2126 hints to callers. */
2127 }
2128 }
2129 }
2130 }
2131
2132 #ifdef ENABLE_CHECKING
2133
2134 /* Callback for pointer_map_traverse, asserts that the pointer map is
2135 empty. */
2136
2137 static bool
2138 assert_is_empty (const void *key ATTRIBUTE_UNUSED, void **value,
2139 void *data ATTRIBUTE_UNUSED)
2140 {
2141 gcc_assert (!*value);
2142 return false;
2143 }
2144 #endif
2145
2146 /* Predict branch probabilities and estimate profile for basic block BB. */
2147
2148 static void
2149 tree_estimate_probability_bb (basic_block bb)
2150 {
2151 edge e;
2152 edge_iterator ei;
2153 gimple last;
2154
2155 FOR_EACH_EDGE (e, ei, bb->succs)
2156 {
2157 /* Predict edges to user labels with attributes. */
2158 if (e->dest != EXIT_BLOCK_PTR)
2159 {
2160 gimple_stmt_iterator gi;
2161 for (gi = gsi_start_bb (e->dest); !gsi_end_p (gi); gsi_next (&gi))
2162 {
2163 gimple stmt = gsi_stmt (gi);
2164 tree decl;
2165
2166 if (gimple_code (stmt) != GIMPLE_LABEL)
2167 break;
2168 decl = gimple_label_label (stmt);
2169 if (DECL_ARTIFICIAL (decl))
2170 continue;
2171
2172 /* Finally, we have a user-defined label. */
2173 if (lookup_attribute ("cold", DECL_ATTRIBUTES (decl)))
2174 predict_edge_def (e, PRED_COLD_LABEL, NOT_TAKEN);
2175 else if (lookup_attribute ("hot", DECL_ATTRIBUTES (decl)))
2176 predict_edge_def (e, PRED_HOT_LABEL, TAKEN);
2177 }
2178 }
2179
2180 /* Predict early returns to be probable, as we've already taken
2181 care for error returns and other cases are often used for
2182 fast paths through function.
2183
2184 Since we've already removed the return statements, we are
2185 looking for CFG like:
2186
2187 if (conditional)
2188 {
2189 ..
2190 goto return_block
2191 }
2192 some other blocks
2193 return_block:
2194 return_stmt. */
2195 if (e->dest != bb->next_bb
2196 && e->dest != EXIT_BLOCK_PTR
2197 && single_succ_p (e->dest)
2198 && single_succ_edge (e->dest)->dest == EXIT_BLOCK_PTR
2199 && (last = last_stmt (e->dest)) != NULL
2200 && gimple_code (last) == GIMPLE_RETURN)
2201 {
2202 edge e1;
2203 edge_iterator ei1;
2204
2205 if (single_succ_p (bb))
2206 {
2207 FOR_EACH_EDGE (e1, ei1, bb->preds)
2208 if (!predicted_by_p (e1->src, PRED_NULL_RETURN)
2209 && !predicted_by_p (e1->src, PRED_CONST_RETURN)
2210 && !predicted_by_p (e1->src, PRED_NEGATIVE_RETURN))
2211 predict_edge_def (e1, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
2212 }
2213 else
2214 if (!predicted_by_p (e->src, PRED_NULL_RETURN)
2215 && !predicted_by_p (e->src, PRED_CONST_RETURN)
2216 && !predicted_by_p (e->src, PRED_NEGATIVE_RETURN))
2217 predict_edge_def (e, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
2218 }
2219
2220 /* Look for block we are guarding (ie we dominate it,
2221 but it doesn't postdominate us). */
2222 if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
2223 && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
2224 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
2225 {
2226 gimple_stmt_iterator bi;
2227
2228 /* The call heuristic claims that a guarded function call
2229 is improbable. This is because such calls are often used
2230 to signal exceptional situations such as printing error
2231 messages. */
2232 for (bi = gsi_start_bb (e->dest); !gsi_end_p (bi);
2233 gsi_next (&bi))
2234 {
2235 gimple stmt = gsi_stmt (bi);
2236 if (is_gimple_call (stmt)
2237 /* Constant and pure calls are hardly used to signalize
2238 something exceptional. */
2239 && gimple_has_side_effects (stmt))
2240 {
2241 predict_edge_def (e, PRED_CALL, NOT_TAKEN);
2242 break;
2243 }
2244 }
2245 }
2246 }
2247 tree_predict_by_opcode (bb);
2248 }
2249
2250 /* Predict branch probabilities and estimate profile of the tree CFG.
2251 This function can be called from the loop optimizers to recompute
2252 the profile information. */
2253
2254 void
2255 tree_estimate_probability (void)
2256 {
2257 basic_block bb;
2258
2259 add_noreturn_fake_exit_edges ();
2260 connect_infinite_loops_to_exit ();
2261 /* We use loop_niter_by_eval, which requires that the loops have
2262 preheaders. */
2263 create_preheaders (CP_SIMPLE_PREHEADERS);
2264 calculate_dominance_info (CDI_POST_DOMINATORS);
2265
2266 bb_predictions = pointer_map_create ();
2267 tree_bb_level_predictions ();
2268 record_loop_exits ();
2269
2270 if (number_of_loops () > 1)
2271 predict_loops ();
2272
2273 FOR_EACH_BB (bb)
2274 tree_estimate_probability_bb (bb);
2275
2276 FOR_EACH_BB (bb)
2277 combine_predictions_for_bb (bb);
2278
2279 #ifdef ENABLE_CHECKING
2280 pointer_map_traverse (bb_predictions, assert_is_empty, NULL);
2281 #endif
2282 pointer_map_destroy (bb_predictions);
2283 bb_predictions = NULL;
2284
2285 estimate_bb_frequencies ();
2286 free_dominance_info (CDI_POST_DOMINATORS);
2287 remove_fake_exit_edges ();
2288 }
2289
2290 /* Predict branch probabilities and estimate profile of the tree CFG.
2291 This is the driver function for PASS_PROFILE. */
2292
2293 static unsigned int
2294 tree_estimate_probability_driver (void)
2295 {
2296 unsigned nb_loops;
2297
2298 loop_optimizer_init (LOOPS_NORMAL);
2299 if (dump_file && (dump_flags & TDF_DETAILS))
2300 flow_loops_dump (dump_file, NULL, 0);
2301
2302 mark_irreducible_loops ();
2303
2304 nb_loops = number_of_loops ();
2305 if (nb_loops > 1)
2306 scev_initialize ();
2307
2308 tree_estimate_probability ();
2309
2310 if (nb_loops > 1)
2311 scev_finalize ();
2312
2313 loop_optimizer_finalize ();
2314 if (dump_file && (dump_flags & TDF_DETAILS))
2315 gimple_dump_cfg (dump_file, dump_flags);
2316 if (profile_status == PROFILE_ABSENT)
2317 profile_status = PROFILE_GUESSED;
2318 return 0;
2319 }
2320 \f
2321 /* Predict edges to successors of CUR whose sources are not postdominated by
2322 BB by PRED and recurse to all postdominators. */
2323
2324 static void
2325 predict_paths_for_bb (basic_block cur, basic_block bb,
2326 enum br_predictor pred,
2327 enum prediction taken,
2328 bitmap visited)
2329 {
2330 edge e;
2331 edge_iterator ei;
2332 basic_block son;
2333
2334 /* We are looking for all edges forming edge cut induced by
2335 set of all blocks postdominated by BB. */
2336 FOR_EACH_EDGE (e, ei, cur->preds)
2337 if (e->src->index >= NUM_FIXED_BLOCKS
2338 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, bb))
2339 {
2340 edge e2;
2341 edge_iterator ei2;
2342 bool found = false;
2343
2344 /* Ignore fake edges and eh, we predict them as not taken anyway. */
2345 if (e->flags & (EDGE_EH | EDGE_FAKE))
2346 continue;
2347 gcc_assert (bb == cur || dominated_by_p (CDI_POST_DOMINATORS, cur, bb));
2348
2349 /* See if there is an edge from e->src that is not abnormal
2350 and does not lead to BB. */
2351 FOR_EACH_EDGE (e2, ei2, e->src->succs)
2352 if (e2 != e
2353 && !(e2->flags & (EDGE_EH | EDGE_FAKE))
2354 && !dominated_by_p (CDI_POST_DOMINATORS, e2->dest, bb))
2355 {
2356 found = true;
2357 break;
2358 }
2359
2360 /* If there is non-abnormal path leaving e->src, predict edge
2361 using predictor. Otherwise we need to look for paths
2362 leading to e->src.
2363
2364 The second may lead to infinite loop in the case we are predicitng
2365 regions that are only reachable by abnormal edges. We simply
2366 prevent visiting given BB twice. */
2367 if (found)
2368 predict_edge_def (e, pred, taken);
2369 else if (bitmap_set_bit (visited, e->src->index))
2370 predict_paths_for_bb (e->src, e->src, pred, taken, visited);
2371 }
2372 for (son = first_dom_son (CDI_POST_DOMINATORS, cur);
2373 son;
2374 son = next_dom_son (CDI_POST_DOMINATORS, son))
2375 predict_paths_for_bb (son, bb, pred, taken, visited);
2376 }
2377
2378 /* Sets branch probabilities according to PREDiction and
2379 FLAGS. */
2380
2381 static void
2382 predict_paths_leading_to (basic_block bb, enum br_predictor pred,
2383 enum prediction taken)
2384 {
2385 bitmap visited = BITMAP_ALLOC (NULL);
2386 predict_paths_for_bb (bb, bb, pred, taken, visited);
2387 BITMAP_FREE (visited);
2388 }
2389
2390 /* Like predict_paths_leading_to but take edge instead of basic block. */
2391
2392 static void
2393 predict_paths_leading_to_edge (edge e, enum br_predictor pred,
2394 enum prediction taken)
2395 {
2396 bool has_nonloop_edge = false;
2397 edge_iterator ei;
2398 edge e2;
2399
2400 basic_block bb = e->src;
2401 FOR_EACH_EDGE (e2, ei, bb->succs)
2402 if (e2->dest != e->src && e2->dest != e->dest
2403 && !(e->flags & (EDGE_EH | EDGE_FAKE))
2404 && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e2->dest))
2405 {
2406 has_nonloop_edge = true;
2407 break;
2408 }
2409 if (!has_nonloop_edge)
2410 {
2411 bitmap visited = BITMAP_ALLOC (NULL);
2412 predict_paths_for_bb (bb, bb, pred, taken, visited);
2413 BITMAP_FREE (visited);
2414 }
2415 else
2416 predict_edge_def (e, pred, taken);
2417 }
2418 \f
2419 /* This is used to carry information about basic blocks. It is
2420 attached to the AUX field of the standard CFG block. */
2421
2422 typedef struct block_info_def
2423 {
2424 /* Estimated frequency of execution of basic_block. */
2425 sreal frequency;
2426
2427 /* To keep queue of basic blocks to process. */
2428 basic_block next;
2429
2430 /* Number of predecessors we need to visit first. */
2431 int npredecessors;
2432 } *block_info;
2433
2434 /* Similar information for edges. */
2435 typedef struct edge_info_def
2436 {
2437 /* In case edge is a loopback edge, the probability edge will be reached
2438 in case header is. Estimated number of iterations of the loop can be
2439 then computed as 1 / (1 - back_edge_prob). */
2440 sreal back_edge_prob;
2441 /* True if the edge is a loopback edge in the natural loop. */
2442 unsigned int back_edge:1;
2443 } *edge_info;
2444
2445 #define BLOCK_INFO(B) ((block_info) (B)->aux)
2446 #define EDGE_INFO(E) ((edge_info) (E)->aux)
2447
2448 /* Helper function for estimate_bb_frequencies.
2449 Propagate the frequencies in blocks marked in
2450 TOVISIT, starting in HEAD. */
2451
2452 static void
2453 propagate_freq (basic_block head, bitmap tovisit)
2454 {
2455 basic_block bb;
2456 basic_block last;
2457 unsigned i;
2458 edge e;
2459 basic_block nextbb;
2460 bitmap_iterator bi;
2461
2462 /* For each basic block we need to visit count number of his predecessors
2463 we need to visit first. */
2464 EXECUTE_IF_SET_IN_BITMAP (tovisit, 0, i, bi)
2465 {
2466 edge_iterator ei;
2467 int count = 0;
2468
2469 bb = BASIC_BLOCK (i);
2470
2471 FOR_EACH_EDGE (e, ei, bb->preds)
2472 {
2473 bool visit = bitmap_bit_p (tovisit, e->src->index);
2474
2475 if (visit && !(e->flags & EDGE_DFS_BACK))
2476 count++;
2477 else if (visit && dump_file && !EDGE_INFO (e)->back_edge)
2478 fprintf (dump_file,
2479 "Irreducible region hit, ignoring edge to %i->%i\n",
2480 e->src->index, bb->index);
2481 }
2482 BLOCK_INFO (bb)->npredecessors = count;
2483 /* When function never returns, we will never process exit block. */
2484 if (!count && bb == EXIT_BLOCK_PTR)
2485 bb->count = bb->frequency = 0;
2486 }
2487
2488 memcpy (&BLOCK_INFO (head)->frequency, &real_one, sizeof (real_one));
2489 last = head;
2490 for (bb = head; bb; bb = nextbb)
2491 {
2492 edge_iterator ei;
2493 sreal cyclic_probability, frequency;
2494
2495 memcpy (&cyclic_probability, &real_zero, sizeof (real_zero));
2496 memcpy (&frequency, &real_zero, sizeof (real_zero));
2497
2498 nextbb = BLOCK_INFO (bb)->next;
2499 BLOCK_INFO (bb)->next = NULL;
2500
2501 /* Compute frequency of basic block. */
2502 if (bb != head)
2503 {
2504 #ifdef ENABLE_CHECKING
2505 FOR_EACH_EDGE (e, ei, bb->preds)
2506 gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
2507 || (e->flags & EDGE_DFS_BACK));
2508 #endif
2509
2510 FOR_EACH_EDGE (e, ei, bb->preds)
2511 if (EDGE_INFO (e)->back_edge)
2512 {
2513 sreal_add (&cyclic_probability, &cyclic_probability,
2514 &EDGE_INFO (e)->back_edge_prob);
2515 }
2516 else if (!(e->flags & EDGE_DFS_BACK))
2517 {
2518 sreal tmp;
2519
2520 /* frequency += (e->probability
2521 * BLOCK_INFO (e->src)->frequency /
2522 REG_BR_PROB_BASE); */
2523
2524 sreal_init (&tmp, e->probability, 0);
2525 sreal_mul (&tmp, &tmp, &BLOCK_INFO (e->src)->frequency);
2526 sreal_mul (&tmp, &tmp, &real_inv_br_prob_base);
2527 sreal_add (&frequency, &frequency, &tmp);
2528 }
2529
2530 if (sreal_compare (&cyclic_probability, &real_zero) == 0)
2531 {
2532 memcpy (&BLOCK_INFO (bb)->frequency, &frequency,
2533 sizeof (frequency));
2534 }
2535 else
2536 {
2537 if (sreal_compare (&cyclic_probability, &real_almost_one) > 0)
2538 {
2539 memcpy (&cyclic_probability, &real_almost_one,
2540 sizeof (real_almost_one));
2541 }
2542
2543 /* BLOCK_INFO (bb)->frequency = frequency
2544 / (1 - cyclic_probability) */
2545
2546 sreal_sub (&cyclic_probability, &real_one, &cyclic_probability);
2547 sreal_div (&BLOCK_INFO (bb)->frequency,
2548 &frequency, &cyclic_probability);
2549 }
2550 }
2551
2552 bitmap_clear_bit (tovisit, bb->index);
2553
2554 e = find_edge (bb, head);
2555 if (e)
2556 {
2557 sreal tmp;
2558
2559 /* EDGE_INFO (e)->back_edge_prob
2560 = ((e->probability * BLOCK_INFO (bb)->frequency)
2561 / REG_BR_PROB_BASE); */
2562
2563 sreal_init (&tmp, e->probability, 0);
2564 sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency);
2565 sreal_mul (&EDGE_INFO (e)->back_edge_prob,
2566 &tmp, &real_inv_br_prob_base);
2567 }
2568
2569 /* Propagate to successor blocks. */
2570 FOR_EACH_EDGE (e, ei, bb->succs)
2571 if (!(e->flags & EDGE_DFS_BACK)
2572 && BLOCK_INFO (e->dest)->npredecessors)
2573 {
2574 BLOCK_INFO (e->dest)->npredecessors--;
2575 if (!BLOCK_INFO (e->dest)->npredecessors)
2576 {
2577 if (!nextbb)
2578 nextbb = e->dest;
2579 else
2580 BLOCK_INFO (last)->next = e->dest;
2581
2582 last = e->dest;
2583 }
2584 }
2585 }
2586 }
2587
2588 /* Estimate probabilities of loopback edges in loops at same nest level. */
2589
2590 static void
2591 estimate_loops_at_level (struct loop *first_loop)
2592 {
2593 struct loop *loop;
2594
2595 for (loop = first_loop; loop; loop = loop->next)
2596 {
2597 edge e;
2598 basic_block *bbs;
2599 unsigned i;
2600 bitmap tovisit = BITMAP_ALLOC (NULL);
2601
2602 estimate_loops_at_level (loop->inner);
2603
2604 /* Find current loop back edge and mark it. */
2605 e = loop_latch_edge (loop);
2606 EDGE_INFO (e)->back_edge = 1;
2607
2608 bbs = get_loop_body (loop);
2609 for (i = 0; i < loop->num_nodes; i++)
2610 bitmap_set_bit (tovisit, bbs[i]->index);
2611 free (bbs);
2612 propagate_freq (loop->header, tovisit);
2613 BITMAP_FREE (tovisit);
2614 }
2615 }
2616
2617 /* Propagates frequencies through structure of loops. */
2618
2619 static void
2620 estimate_loops (void)
2621 {
2622 bitmap tovisit = BITMAP_ALLOC (NULL);
2623 basic_block bb;
2624
2625 /* Start by estimating the frequencies in the loops. */
2626 if (number_of_loops () > 1)
2627 estimate_loops_at_level (current_loops->tree_root->inner);
2628
2629 /* Now propagate the frequencies through all the blocks. */
2630 FOR_ALL_BB (bb)
2631 {
2632 bitmap_set_bit (tovisit, bb->index);
2633 }
2634 propagate_freq (ENTRY_BLOCK_PTR, tovisit);
2635 BITMAP_FREE (tovisit);
2636 }
2637
2638 /* Convert counts measured by profile driven feedback to frequencies.
2639 Return nonzero iff there was any nonzero execution count. */
2640
2641 int
2642 counts_to_freqs (void)
2643 {
2644 gcov_type count_max, true_count_max = 0;
2645 basic_block bb;
2646
2647 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
2648 true_count_max = MAX (bb->count, true_count_max);
2649
2650 count_max = MAX (true_count_max, 1);
2651 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
2652 bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max;
2653
2654 return true_count_max;
2655 }
2656
2657 /* Return true if function is likely to be expensive, so there is no point to
2658 optimize performance of prologue, epilogue or do inlining at the expense
2659 of code size growth. THRESHOLD is the limit of number of instructions
2660 function can execute at average to be still considered not expensive. */
2661
2662 bool
2663 expensive_function_p (int threshold)
2664 {
2665 unsigned int sum = 0;
2666 basic_block bb;
2667 unsigned int limit;
2668
2669 /* We can not compute accurately for large thresholds due to scaled
2670 frequencies. */
2671 gcc_assert (threshold <= BB_FREQ_MAX);
2672
2673 /* Frequencies are out of range. This either means that function contains
2674 internal loop executing more than BB_FREQ_MAX times or profile feedback
2675 is available and function has not been executed at all. */
2676 if (ENTRY_BLOCK_PTR->frequency == 0)
2677 return true;
2678
2679 /* Maximally BB_FREQ_MAX^2 so overflow won't happen. */
2680 limit = ENTRY_BLOCK_PTR->frequency * threshold;
2681 FOR_EACH_BB (bb)
2682 {
2683 rtx insn;
2684
2685 for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
2686 insn = NEXT_INSN (insn))
2687 if (active_insn_p (insn))
2688 {
2689 sum += bb->frequency;
2690 if (sum > limit)
2691 return true;
2692 }
2693 }
2694
2695 return false;
2696 }
2697
2698 /* Estimate basic blocks frequency by given branch probabilities. */
2699
2700 void
2701 estimate_bb_frequencies (void)
2702 {
2703 basic_block bb;
2704 sreal freq_max;
2705
2706 if (profile_status != PROFILE_READ || !counts_to_freqs ())
2707 {
2708 static int real_values_initialized = 0;
2709
2710 if (!real_values_initialized)
2711 {
2712 real_values_initialized = 1;
2713 sreal_init (&real_zero, 0, 0);
2714 sreal_init (&real_one, 1, 0);
2715 sreal_init (&real_br_prob_base, REG_BR_PROB_BASE, 0);
2716 sreal_init (&real_bb_freq_max, BB_FREQ_MAX, 0);
2717 sreal_init (&real_one_half, 1, -1);
2718 sreal_div (&real_inv_br_prob_base, &real_one, &real_br_prob_base);
2719 sreal_sub (&real_almost_one, &real_one, &real_inv_br_prob_base);
2720 }
2721
2722 mark_dfs_back_edges ();
2723
2724 single_succ_edge (ENTRY_BLOCK_PTR)->probability = REG_BR_PROB_BASE;
2725
2726 /* Set up block info for each basic block. */
2727 alloc_aux_for_blocks (sizeof (struct block_info_def));
2728 alloc_aux_for_edges (sizeof (struct edge_info_def));
2729 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
2730 {
2731 edge e;
2732 edge_iterator ei;
2733
2734 FOR_EACH_EDGE (e, ei, bb->succs)
2735 {
2736 sreal_init (&EDGE_INFO (e)->back_edge_prob, e->probability, 0);
2737 sreal_mul (&EDGE_INFO (e)->back_edge_prob,
2738 &EDGE_INFO (e)->back_edge_prob,
2739 &real_inv_br_prob_base);
2740 }
2741 }
2742
2743 /* First compute probabilities locally for each loop from innermost
2744 to outermost to examine probabilities for back edges. */
2745 estimate_loops ();
2746
2747 memcpy (&freq_max, &real_zero, sizeof (real_zero));
2748 FOR_EACH_BB (bb)
2749 if (sreal_compare (&freq_max, &BLOCK_INFO (bb)->frequency) < 0)
2750 memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, sizeof (freq_max));
2751
2752 sreal_div (&freq_max, &real_bb_freq_max, &freq_max);
2753 FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
2754 {
2755 sreal tmp;
2756
2757 sreal_mul (&tmp, &BLOCK_INFO (bb)->frequency, &freq_max);
2758 sreal_add (&tmp, &tmp, &real_one_half);
2759 bb->frequency = sreal_to_int (&tmp);
2760 }
2761
2762 free_aux_for_blocks ();
2763 free_aux_for_edges ();
2764 }
2765 compute_function_frequency ();
2766 }
2767
2768 /* Decide whether function is hot, cold or unlikely executed. */
2769 void
2770 compute_function_frequency (void)
2771 {
2772 basic_block bb;
2773 struct cgraph_node *node = cgraph_get_node (current_function_decl);
2774 if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
2775 || MAIN_NAME_P (DECL_NAME (current_function_decl)))
2776 node->only_called_at_startup = true;
2777 if (DECL_STATIC_DESTRUCTOR (current_function_decl))
2778 node->only_called_at_exit = true;
2779
2780 if (!profile_info || !flag_branch_probabilities)
2781 {
2782 int flags = flags_from_decl_or_type (current_function_decl);
2783 if (lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl))
2784 != NULL)
2785 node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
2786 else if (lookup_attribute ("hot", DECL_ATTRIBUTES (current_function_decl))
2787 != NULL)
2788 node->frequency = NODE_FREQUENCY_HOT;
2789 else if (flags & ECF_NORETURN)
2790 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
2791 else if (MAIN_NAME_P (DECL_NAME (current_function_decl)))
2792 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
2793 else if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
2794 || DECL_STATIC_DESTRUCTOR (current_function_decl))
2795 node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
2796 return;
2797 }
2798 node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
2799 FOR_EACH_BB (bb)
2800 {
2801 if (maybe_hot_bb_p (cfun, bb))
2802 {
2803 node->frequency = NODE_FREQUENCY_HOT;
2804 return;
2805 }
2806 if (!probably_never_executed_bb_p (cfun, bb))
2807 node->frequency = NODE_FREQUENCY_NORMAL;
2808 }
2809 }
2810
2811 static bool
2812 gate_estimate_probability (void)
2813 {
2814 return flag_guess_branch_prob;
2815 }
2816
2817 /* Build PREDICT_EXPR. */
2818 tree
2819 build_predict_expr (enum br_predictor predictor, enum prediction taken)
2820 {
2821 tree t = build1 (PREDICT_EXPR, void_type_node,
2822 build_int_cst (integer_type_node, predictor));
2823 SET_PREDICT_EXPR_OUTCOME (t, taken);
2824 return t;
2825 }
2826
2827 const char *
2828 predictor_name (enum br_predictor predictor)
2829 {
2830 return predictor_info[predictor].name;
2831 }
2832
2833 struct gimple_opt_pass pass_profile =
2834 {
2835 {
2836 GIMPLE_PASS,
2837 "profile_estimate", /* name */
2838 OPTGROUP_NONE, /* optinfo_flags */
2839 gate_estimate_probability, /* gate */
2840 tree_estimate_probability_driver, /* execute */
2841 NULL, /* sub */
2842 NULL, /* next */
2843 0, /* static_pass_number */
2844 TV_BRANCH_PROB, /* tv_id */
2845 PROP_cfg, /* properties_required */
2846 0, /* properties_provided */
2847 0, /* properties_destroyed */
2848 0, /* todo_flags_start */
2849 TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
2850 }
2851 };
2852
2853 struct gimple_opt_pass pass_strip_predict_hints =
2854 {
2855 {
2856 GIMPLE_PASS,
2857 "*strip_predict_hints", /* name */
2858 OPTGROUP_NONE, /* optinfo_flags */
2859 NULL, /* gate */
2860 strip_predict_hints, /* execute */
2861 NULL, /* sub */
2862 NULL, /* next */
2863 0, /* static_pass_number */
2864 TV_BRANCH_PROB, /* tv_id */
2865 PROP_cfg, /* properties_required */
2866 0, /* properties_provided */
2867 0, /* properties_destroyed */
2868 0, /* todo_flags_start */
2869 TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
2870 }
2871 };
2872
2873 /* Rebuild function frequencies. Passes are in general expected to
2874 maintain profile by hand, however in some cases this is not possible:
2875 for example when inlining several functions with loops freuqencies might run
2876 out of scale and thus needs to be recomputed. */
2877
2878 void
2879 rebuild_frequencies (void)
2880 {
2881 timevar_push (TV_REBUILD_FREQUENCIES);
2882 if (profile_status == PROFILE_GUESSED)
2883 {
2884 loop_optimizer_init (0);
2885 add_noreturn_fake_exit_edges ();
2886 mark_irreducible_loops ();
2887 connect_infinite_loops_to_exit ();
2888 estimate_bb_frequencies ();
2889 remove_fake_exit_edges ();
2890 loop_optimizer_finalize ();
2891 }
2892 else if (profile_status == PROFILE_READ)
2893 counts_to_freqs ();
2894 else
2895 gcc_unreachable ();
2896 timevar_pop (TV_REBUILD_FREQUENCIES);
2897 }