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