OSDN Git Service

* Makefile.in (passes.o, ipa-inline.o): Add dependencies.
[pf3gnuchains/gcc-fork.git] / gcc / predict.c
1 /* Branch prediction routines for the GNU compiler.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.  */
21
22 /* References:
23
24    [1] "Branch Prediction for Free"
25        Ball and Larus; PLDI '93.
26    [2] "Static Branch Frequency and Program Profile Analysis"
27        Wu and Larus; MICRO-27.
28    [3] "Corpus-based Static Branch Prediction"
29        Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95.  */
30
31
32 #include "config.h"
33 #include "system.h"
34 #include "coretypes.h"
35 #include "tm.h"
36 #include "tree.h"
37 #include "rtl.h"
38 #include "tm_p.h"
39 #include "hard-reg-set.h"
40 #include "basic-block.h"
41 #include "insn-config.h"
42 #include "regs.h"
43 #include "flags.h"
44 #include "output.h"
45 #include "function.h"
46 #include "except.h"
47 #include "toplev.h"
48 #include "recog.h"
49 #include "expr.h"
50 #include "predict.h"
51 #include "coverage.h"
52 #include "sreal.h"
53 #include "params.h"
54 #include "target.h"
55 #include "cfgloop.h"
56 #include "tree-flow.h"
57 #include "ggc.h"
58 #include "tree-dump.h"
59 #include "tree-pass.h"
60 #include "timevar.h"
61 #include "tree-scalar-evolution.h"
62 #include "cfgloop.h"
63
64 /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE,
65                    1/REG_BR_PROB_BASE, 0.5, BB_FREQ_MAX.  */
66 static sreal real_zero, real_one, real_almost_one, real_br_prob_base,
67              real_inv_br_prob_base, real_one_half, real_bb_freq_max;
68
69 /* Random guesstimation given names.  */
70 #define PROB_VERY_UNLIKELY      (REG_BR_PROB_BASE / 100 - 1)
71 #define PROB_EVEN               (REG_BR_PROB_BASE / 2)
72 #define PROB_VERY_LIKELY        (REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
73 #define PROB_ALWAYS             (REG_BR_PROB_BASE)
74
75 static void combine_predictions_for_insn (rtx, basic_block);
76 static void dump_prediction (FILE *, enum br_predictor, int, basic_block, int);
77 static void predict_paths_leading_to (basic_block, int *, enum br_predictor, enum prediction);
78 static bool last_basic_block_p (basic_block);
79 static void compute_function_frequency (void);
80 static void choose_function_section (void);
81 static bool can_predict_insn_p (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 in case BB can be CPU intensive and should be optimized
112    for maximal performance.  */
113
114 bool
115 maybe_hot_bb_p (basic_block bb)
116 {
117   if (profile_info && flag_branch_probabilities
118       && (bb->count
119           < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
120     return false;
121   if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
122     return false;
123   return true;
124 }
125
126 /* Return true in case BB is cold and should be optimized for size.  */
127
128 bool
129 probably_cold_bb_p (basic_block bb)
130 {
131   if (profile_info && flag_branch_probabilities
132       && (bb->count
133           < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
134     return true;
135   if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
136     return true;
137   return false;
138 }
139
140 /* Return true in case BB is probably never executed.  */
141 bool
142 probably_never_executed_bb_p (basic_block bb)
143 {
144   if (profile_info && flag_branch_probabilities)
145     return ((bb->count + profile_info->runs / 2) / profile_info->runs) == 0;
146   return false;
147 }
148
149 /* Return true if the one of outgoing edges is already predicted by
150    PREDICTOR.  */
151
152 bool
153 rtl_predicted_by_p (basic_block bb, enum br_predictor predictor)
154 {
155   rtx note;
156   if (!INSN_P (BB_END (bb)))
157     return false;
158   for (note = REG_NOTES (BB_END (bb)); note; note = XEXP (note, 1))
159     if (REG_NOTE_KIND (note) == REG_BR_PRED
160         && INTVAL (XEXP (XEXP (note, 0), 0)) == (int)predictor)
161       return true;
162   return false;
163 }
164
165 /* Return true if the one of outgoing edges is already predicted by
166    PREDICTOR.  */
167
168 bool
169 tree_predicted_by_p (basic_block bb, enum br_predictor predictor)
170 {
171   struct edge_prediction *i;
172   for (i = bb->predictions; i; i = i->ep_next)
173     if (i->ep_predictor == predictor)
174       return true;
175   return false;
176 }
177
178 /* Return true when the probability of edge is reliable.
179   
180    The profile guessing code is good at predicting branch outcome (ie.
181    taken/not taken), that is predicted right slightly over 75% of time.
182    It is however notoriously poor on predicting the probability itself.
183    In general the profile appear a lot flatter (with probabilities closer
184    to 50%) than the reality so it is bad idea to use it to drive optimization
185    such as those disabling dynamic branch prediction for well predictable
186    branches.
187
188    There are two exceptions - edges leading to noreturn edges and edges
189    predicted by number of iterations heuristics are predicted well.  This macro
190    should be able to distinguish those, but at the moment it simply check for
191    noreturn heuristic that is only one giving probability over 99% or bellow
192    1%.  In future we might want to propagate reliability information across the
193    CFG if we find this information useful on multiple places.   */
194 static bool
195 probability_reliable_p (int prob)
196 {
197   return (profile_status == PROFILE_READ
198           || (profile_status == PROFILE_GUESSED
199               && (prob <= HITRATE (1) || prob >= HITRATE (99))));
200 }
201
202 /* Same predicate as above, working on edges.  */
203 bool
204 edge_probability_reliable_p (edge e)
205 {
206   return probability_reliable_p (e->probability);
207 }
208
209 /* Same predicate as edge_probability_reliable_p, working on notes.  */
210 bool
211 br_prob_note_reliable_p (rtx note)
212 {
213   gcc_assert (REG_NOTE_KIND (note) == REG_BR_PROB);
214   return probability_reliable_p (INTVAL (XEXP (note, 0)));
215 }
216
217 static void
218 predict_insn (rtx insn, enum br_predictor predictor, int probability)
219 {
220   gcc_assert (any_condjump_p (insn));
221   if (!flag_guess_branch_prob)
222     return;
223
224   REG_NOTES (insn)
225     = gen_rtx_EXPR_LIST (REG_BR_PRED,
226                          gen_rtx_CONCAT (VOIDmode,
227                                          GEN_INT ((int) predictor),
228                                          GEN_INT ((int) probability)),
229                          REG_NOTES (insn));
230 }
231
232 /* Predict insn by given predictor.  */
233
234 void
235 predict_insn_def (rtx insn, enum br_predictor predictor,
236                   enum prediction taken)
237 {
238    int probability = predictor_info[(int) predictor].hitrate;
239
240    if (taken != TAKEN)
241      probability = REG_BR_PROB_BASE - probability;
242
243    predict_insn (insn, predictor, probability);
244 }
245
246 /* Predict edge E with given probability if possible.  */
247
248 void
249 rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
250 {
251   rtx last_insn;
252   last_insn = BB_END (e->src);
253
254   /* We can store the branch prediction information only about
255      conditional jumps.  */
256   if (!any_condjump_p (last_insn))
257     return;
258
259   /* We always store probability of branching.  */
260   if (e->flags & EDGE_FALLTHRU)
261     probability = REG_BR_PROB_BASE - probability;
262
263   predict_insn (last_insn, predictor, probability);
264 }
265
266 /* Predict edge E with the given PROBABILITY.  */
267 void
268 tree_predict_edge (edge e, enum br_predictor predictor, int probability)
269 {
270   gcc_assert (profile_status != PROFILE_GUESSED);
271   if ((e->src != ENTRY_BLOCK_PTR && EDGE_COUNT (e->src->succs) > 1)
272       && flag_guess_branch_prob && optimize)
273     {
274       struct edge_prediction *i = ggc_alloc (sizeof (struct edge_prediction));
275
276       i->ep_next = e->src->predictions;
277       e->src->predictions = i;
278       i->ep_probability = probability;
279       i->ep_predictor = predictor;
280       i->ep_edge = e;
281     }
282 }
283
284 /* Remove all predictions on given basic block that are attached
285    to edge E.  */
286 void
287 remove_predictions_associated_with_edge (edge e)
288 {
289   if (e->src->predictions)
290     {
291       struct edge_prediction **prediction = &e->src->predictions;
292       while (*prediction)
293         {
294           if ((*prediction)->ep_edge == e)
295             *prediction = (*prediction)->ep_next;
296           else
297             prediction = &((*prediction)->ep_next);
298         }
299     }
300 }
301
302 /* Return true when we can store prediction on insn INSN.
303    At the moment we represent predictions only on conditional
304    jumps, not at computed jump or other complicated cases.  */
305 static bool
306 can_predict_insn_p (rtx insn)
307 {
308   return (JUMP_P (insn)
309           && any_condjump_p (insn)
310           && EDGE_COUNT (BLOCK_FOR_INSN (insn)->succs) >= 2);
311 }
312
313 /* Predict edge E by given predictor if possible.  */
314
315 void
316 predict_edge_def (edge e, enum br_predictor predictor,
317                   enum prediction taken)
318 {
319    int probability = predictor_info[(int) predictor].hitrate;
320
321    if (taken != TAKEN)
322      probability = REG_BR_PROB_BASE - probability;
323
324    predict_edge (e, predictor, probability);
325 }
326
327 /* Invert all branch predictions or probability notes in the INSN.  This needs
328    to be done each time we invert the condition used by the jump.  */
329
330 void
331 invert_br_probabilities (rtx insn)
332 {
333   rtx note;
334
335   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
336     if (REG_NOTE_KIND (note) == REG_BR_PROB)
337       XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0)));
338     else if (REG_NOTE_KIND (note) == REG_BR_PRED)
339       XEXP (XEXP (note, 0), 1)
340         = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1)));
341 }
342
343 /* Dump information about the branch prediction to the output file.  */
344
345 static void
346 dump_prediction (FILE *file, enum br_predictor predictor, int probability,
347                  basic_block bb, int used)
348 {
349   edge e;
350   edge_iterator ei;
351
352   if (!file)
353     return;
354
355   FOR_EACH_EDGE (e, ei, bb->succs)
356     if (! (e->flags & EDGE_FALLTHRU))
357       break;
358
359   fprintf (file, "  %s heuristics%s: %.1f%%",
360            predictor_info[predictor].name,
361            used ? "" : " (ignored)", probability * 100.0 / REG_BR_PROB_BASE);
362
363   if (bb->count)
364     {
365       fprintf (file, "  exec ");
366       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, bb->count);
367       if (e)
368         {
369           fprintf (file, " hit ");
370           fprintf (file, HOST_WIDEST_INT_PRINT_DEC, e->count);
371           fprintf (file, " (%.1f%%)", e->count * 100.0 / bb->count);
372         }
373     }
374
375   fprintf (file, "\n");
376 }
377
378 /* We can not predict the probabilities of outgoing edges of bb.  Set them
379    evenly and hope for the best.  */
380 static void
381 set_even_probabilities (basic_block bb)
382 {
383   int nedges = 0;
384   edge e;
385   edge_iterator ei;
386
387   FOR_EACH_EDGE (e, ei, bb->succs)
388     if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
389       nedges ++;
390   FOR_EACH_EDGE (e, ei, bb->succs)
391     if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
392       e->probability = (REG_BR_PROB_BASE + nedges / 2) / nedges;
393     else
394       e->probability = 0;
395 }
396
397 /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB
398    note if not already present.  Remove now useless REG_BR_PRED notes.  */
399
400 static void
401 combine_predictions_for_insn (rtx insn, basic_block bb)
402 {
403   rtx prob_note;
404   rtx *pnote;
405   rtx note;
406   int best_probability = PROB_EVEN;
407   int best_predictor = END_PREDICTORS;
408   int combined_probability = REG_BR_PROB_BASE / 2;
409   int d;
410   bool first_match = false;
411   bool found = false;
412
413   if (!can_predict_insn_p (insn))
414     {
415       set_even_probabilities (bb);
416       return;
417     }
418
419   prob_note = find_reg_note (insn, REG_BR_PROB, 0);
420   pnote = &REG_NOTES (insn);
421   if (dump_file)
422     fprintf (dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn),
423              bb->index);
424
425   /* We implement "first match" heuristics and use probability guessed
426      by predictor with smallest index.  */
427   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
428     if (REG_NOTE_KIND (note) == REG_BR_PRED)
429       {
430         int predictor = INTVAL (XEXP (XEXP (note, 0), 0));
431         int probability = INTVAL (XEXP (XEXP (note, 0), 1));
432
433         found = true;
434         if (best_predictor > predictor)
435           best_probability = probability, best_predictor = predictor;
436
437         d = (combined_probability * probability
438              + (REG_BR_PROB_BASE - combined_probability)
439              * (REG_BR_PROB_BASE - probability));
440
441         /* Use FP math to avoid overflows of 32bit integers.  */
442         if (d == 0)
443           /* If one probability is 0% and one 100%, avoid division by zero.  */
444           combined_probability = REG_BR_PROB_BASE / 2;
445         else
446           combined_probability = (((double) combined_probability) * probability
447                                   * REG_BR_PROB_BASE / d + 0.5);
448       }
449
450   /* Decide which heuristic to use.  In case we didn't match anything,
451      use no_prediction heuristic, in case we did match, use either
452      first match or Dempster-Shaffer theory depending on the flags.  */
453
454   if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
455     first_match = true;
456
457   if (!found)
458     dump_prediction (dump_file, PRED_NO_PREDICTION,
459                      combined_probability, bb, true);
460   else
461     {
462       dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
463                        bb, !first_match);
464       dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
465                        bb, first_match);
466     }
467
468   if (first_match)
469     combined_probability = best_probability;
470   dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, true);
471
472   while (*pnote)
473     {
474       if (REG_NOTE_KIND (*pnote) == REG_BR_PRED)
475         {
476           int predictor = INTVAL (XEXP (XEXP (*pnote, 0), 0));
477           int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1));
478
479           dump_prediction (dump_file, predictor, probability, bb,
480                            !first_match || best_predictor == predictor);
481           *pnote = XEXP (*pnote, 1);
482         }
483       else
484         pnote = &XEXP (*pnote, 1);
485     }
486
487   if (!prob_note)
488     {
489       REG_NOTES (insn)
490         = gen_rtx_EXPR_LIST (REG_BR_PROB,
491                              GEN_INT (combined_probability), REG_NOTES (insn));
492
493       /* Save the prediction into CFG in case we are seeing non-degenerated
494          conditional jump.  */
495       if (!single_succ_p (bb))
496         {
497           BRANCH_EDGE (bb)->probability = combined_probability;
498           FALLTHRU_EDGE (bb)->probability
499             = REG_BR_PROB_BASE - combined_probability;
500         }
501     }
502   else if (!single_succ_p (bb))
503     {
504       int prob = INTVAL (XEXP (prob_note, 0));
505
506       BRANCH_EDGE (bb)->probability = prob;
507       FALLTHRU_EDGE (bb)->probability = REG_BR_PROB_BASE - prob;
508     }
509   else
510     single_succ_edge (bb)->probability = REG_BR_PROB_BASE;
511 }
512
513 /* Combine predictions into single probability and store them into CFG.
514    Remove now useless prediction entries.  */
515
516 static void
517 combine_predictions_for_bb (basic_block bb)
518 {
519   int best_probability = PROB_EVEN;
520   int best_predictor = END_PREDICTORS;
521   int combined_probability = REG_BR_PROB_BASE / 2;
522   int d;
523   bool first_match = false;
524   bool found = false;
525   struct edge_prediction *pred;
526   int nedges = 0;
527   edge e, first = NULL, second = NULL;
528   edge_iterator ei;
529
530   FOR_EACH_EDGE (e, ei, bb->succs)
531     if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
532       {
533         nedges ++;
534         if (first && !second)
535           second = e;
536         if (!first)
537           first = e;
538       }
539
540   /* When there is no successor or only one choice, prediction is easy. 
541
542      We are lazy for now and predict only basic blocks with two outgoing
543      edges.  It is possible to predict generic case too, but we have to
544      ignore first match heuristics and do more involved combining.  Implement
545      this later.  */
546   if (nedges != 2)
547     {
548       if (!bb->count)
549         set_even_probabilities (bb);
550       bb->predictions = NULL;
551       if (dump_file)
552         fprintf (dump_file, "%i edges in bb %i predicted to even probabilities\n",
553                  nedges, bb->index);
554       return;
555     }
556
557   if (dump_file)
558     fprintf (dump_file, "Predictions for bb %i\n", bb->index);
559
560   /* We implement "first match" heuristics and use probability guessed
561      by predictor with smallest index.  */
562   for (pred = bb->predictions; pred; pred = pred->ep_next)
563     {
564       int predictor = pred->ep_predictor;
565       int probability = pred->ep_probability;
566
567       if (pred->ep_edge != first)
568         probability = REG_BR_PROB_BASE - probability;
569
570       found = true;
571       if (best_predictor > predictor)
572         best_probability = probability, best_predictor = predictor;
573
574       d = (combined_probability * probability
575            + (REG_BR_PROB_BASE - combined_probability)
576            * (REG_BR_PROB_BASE - probability));
577
578       /* Use FP math to avoid overflows of 32bit integers.  */
579       if (d == 0)
580         /* If one probability is 0% and one 100%, avoid division by zero.  */
581         combined_probability = REG_BR_PROB_BASE / 2;
582       else
583         combined_probability = (((double) combined_probability) * probability
584                                 * REG_BR_PROB_BASE / d + 0.5);
585     }
586
587   /* Decide which heuristic to use.  In case we didn't match anything,
588      use no_prediction heuristic, in case we did match, use either
589      first match or Dempster-Shaffer theory depending on the flags.  */
590
591   if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
592     first_match = true;
593
594   if (!found)
595     dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb, true);
596   else
597     {
598       dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb,
599                        !first_match);
600       dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb,
601                        first_match);
602     }
603
604   if (first_match)
605     combined_probability = best_probability;
606   dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, true);
607
608   for (pred = bb->predictions; pred; pred = pred->ep_next)
609     {
610       int predictor = pred->ep_predictor;
611       int probability = pred->ep_probability;
612
613       if (pred->ep_edge != EDGE_SUCC (bb, 0))
614         probability = REG_BR_PROB_BASE - probability;
615       dump_prediction (dump_file, predictor, probability, bb,
616                        !first_match || best_predictor == predictor);
617     }
618   bb->predictions = NULL;
619
620   if (!bb->count)
621     {
622       first->probability = combined_probability;
623       second->probability = REG_BR_PROB_BASE - combined_probability;
624     }
625 }
626
627 /* Predict edge probabilities by exploiting loop structure.  */
628
629 static void
630 predict_loops (void)
631 {
632   loop_iterator li;
633   struct loop *loop;
634
635   scev_initialize ();
636
637   /* Try to predict out blocks in a loop that are not part of a
638      natural loop.  */
639   FOR_EACH_LOOP (li, loop, 0)
640     {
641       basic_block bb, *bbs;
642       unsigned j, n_exits;
643       VEC (edge, heap) *exits;
644       struct tree_niter_desc niter_desc;
645       edge ex;
646
647       exits = get_loop_exit_edges (loop);
648       n_exits = VEC_length (edge, exits);
649
650       for (j = 0; VEC_iterate (edge, exits, j, ex); j++)
651         {
652           tree niter = NULL;
653
654           if (number_of_iterations_exit (loop, ex, &niter_desc, false))
655             niter = niter_desc.niter;
656           if (!niter || TREE_CODE (niter_desc.niter) != INTEGER_CST)
657             niter = loop_niter_by_eval (loop, ex);
658
659           if (TREE_CODE (niter) == INTEGER_CST)
660             {
661               int probability;
662               int max = PARAM_VALUE (PARAM_MAX_PREDICTED_ITERATIONS);
663               if (host_integerp (niter, 1)
664                   && compare_tree_int (niter, max-1) == -1)
665                 {
666                   HOST_WIDE_INT nitercst = tree_low_cst (niter, 1) + 1;
667                   probability = ((REG_BR_PROB_BASE + nitercst / 2)
668                                  / nitercst);
669                 }
670               else
671                 probability = ((REG_BR_PROB_BASE + max / 2) / max);
672
673               predict_edge (ex, PRED_LOOP_ITERATIONS, probability);
674             }
675         }
676       VEC_free (edge, heap, exits);
677
678       bbs = get_loop_body (loop);
679
680       for (j = 0; j < loop->num_nodes; j++)
681         {
682           int header_found = 0;
683           edge e;
684           edge_iterator ei;
685
686           bb = bbs[j];
687
688           /* Bypass loop heuristics on continue statement.  These
689              statements construct loops via "non-loop" constructs
690              in the source language and are better to be handled
691              separately.  */
692           if (predicted_by_p (bb, PRED_CONTINUE))
693             continue;
694
695           /* Loop branch heuristics - predict an edge back to a
696              loop's head as taken.  */
697           if (bb == loop->latch)
698             {
699               e = find_edge (loop->latch, loop->header);
700               if (e)
701                 {
702                   header_found = 1;
703                   predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN);
704                 }
705             }
706
707           /* Loop exit heuristics - predict an edge exiting the loop if the
708              conditional has no loop header successors as not taken.  */
709           if (!header_found)
710             {
711               /* For loop with many exits we don't want to predict all exits
712                  with the pretty large probability, because if all exits are
713                  considered in row, the loop would be predicted to iterate
714                  almost never.  The code to divide probability by number of
715                  exits is very rough.  It should compute the number of exits
716                  taken in each patch through function (not the overall number
717                  of exits that might be a lot higher for loops with wide switch
718                  statements in them) and compute n-th square root.
719
720                  We limit the minimal probability by 2% to avoid
721                  EDGE_PROBABILITY_RELIABLE from trusting the branch prediction
722                  as this was causing regression in perl benchmark containing such
723                  a wide loop.  */
724                 
725               int probability = ((REG_BR_PROB_BASE
726                                   - predictor_info [(int) PRED_LOOP_EXIT].hitrate)
727                                  / n_exits);
728               if (probability < HITRATE (2))
729                 probability = HITRATE (2);
730               FOR_EACH_EDGE (e, ei, bb->succs)
731                 if (e->dest->index < NUM_FIXED_BLOCKS
732                     || !flow_bb_inside_loop_p (loop, e->dest))
733                   predict_edge (e, PRED_LOOP_EXIT, probability);
734             }
735         }
736       
737       /* Free basic blocks from get_loop_body.  */
738       free (bbs);
739     }
740
741   scev_finalize ();
742 }
743
744 /* Attempt to predict probabilities of BB outgoing edges using local
745    properties.  */
746 static void
747 bb_estimate_probability_locally (basic_block bb)
748 {
749   rtx last_insn = BB_END (bb);
750   rtx cond;
751
752   if (! can_predict_insn_p (last_insn))
753     return;
754   cond = get_condition (last_insn, NULL, false, false);
755   if (! cond)
756     return;
757
758   /* Try "pointer heuristic."
759      A comparison ptr == 0 is predicted as false.
760      Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
761   if (COMPARISON_P (cond)
762       && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0)))
763           || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1)))))
764     {
765       if (GET_CODE (cond) == EQ)
766         predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
767       else if (GET_CODE (cond) == NE)
768         predict_insn_def (last_insn, PRED_POINTER, TAKEN);
769     }
770   else
771
772   /* Try "opcode heuristic."
773      EQ tests are usually false and NE tests are usually true. Also,
774      most quantities are positive, so we can make the appropriate guesses
775      about signed comparisons against zero.  */
776     switch (GET_CODE (cond))
777       {
778       case CONST_INT:
779         /* Unconditional branch.  */
780         predict_insn_def (last_insn, PRED_UNCONDITIONAL,
781                           cond == const0_rtx ? NOT_TAKEN : TAKEN);
782         break;
783
784       case EQ:
785       case UNEQ:
786         /* Floating point comparisons appears to behave in a very
787            unpredictable way because of special role of = tests in
788            FP code.  */
789         if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
790           ;
791         /* Comparisons with 0 are often used for booleans and there is
792            nothing useful to predict about them.  */
793         else if (XEXP (cond, 1) == const0_rtx
794                  || XEXP (cond, 0) == const0_rtx)
795           ;
796         else
797           predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
798         break;
799
800       case NE:
801       case LTGT:
802         /* Floating point comparisons appears to behave in a very
803            unpredictable way because of special role of = tests in
804            FP code.  */
805         if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
806           ;
807         /* Comparisons with 0 are often used for booleans and there is
808            nothing useful to predict about them.  */
809         else if (XEXP (cond, 1) == const0_rtx
810                  || XEXP (cond, 0) == const0_rtx)
811           ;
812         else
813           predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
814         break;
815
816       case ORDERED:
817         predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
818         break;
819
820       case UNORDERED:
821         predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
822         break;
823
824       case LE:
825       case LT:
826         if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
827             || XEXP (cond, 1) == constm1_rtx)
828           predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
829         break;
830
831       case GE:
832       case GT:
833         if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
834             || XEXP (cond, 1) == constm1_rtx)
835           predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
836         break;
837
838       default:
839         break;
840       }
841 }
842
843 /* Set edge->probability for each successor edge of BB.  */
844 void
845 guess_outgoing_edge_probabilities (basic_block bb)
846 {
847   bb_estimate_probability_locally (bb);
848   combine_predictions_for_insn (BB_END (bb), bb);
849 }
850 \f
851 /* Return constant EXPR will likely have at execution time, NULL if unknown. 
852    The function is used by builtin_expect branch predictor so the evidence
853    must come from this construct and additional possible constant folding.
854   
855    We may want to implement more involved value guess (such as value range
856    propagation based prediction), but such tricks shall go to new
857    implementation.  */
858
859 static tree
860 expr_expected_value (tree expr, bitmap visited)
861 {
862   if (TREE_CONSTANT (expr))
863     return expr;
864   else if (TREE_CODE (expr) == SSA_NAME)
865     {
866       tree def = SSA_NAME_DEF_STMT (expr);
867
868       /* If we were already here, break the infinite cycle.  */
869       if (bitmap_bit_p (visited, SSA_NAME_VERSION (expr)))
870         return NULL;
871       bitmap_set_bit (visited, SSA_NAME_VERSION (expr));
872
873       if (TREE_CODE (def) == PHI_NODE)
874         {
875           /* All the arguments of the PHI node must have the same constant
876              length.  */
877           int i;
878           tree val = NULL, new_val;
879
880           for (i = 0; i < PHI_NUM_ARGS (def); i++)
881             {
882               tree arg = PHI_ARG_DEF (def, i);
883
884               /* If this PHI has itself as an argument, we cannot
885                  determine the string length of this argument.  However,
886                  if we can find an expected constant value for the other
887                  PHI args then we can still be sure that this is
888                  likely a constant.  So be optimistic and just
889                  continue with the next argument.  */
890               if (arg == PHI_RESULT (def))
891                 continue;
892
893               new_val = expr_expected_value (arg, visited);
894               if (!new_val)
895                 return NULL;
896               if (!val)
897                 val = new_val;
898               else if (!operand_equal_p (val, new_val, false))
899                 return NULL;
900             }
901           return val;
902         }
903       if (TREE_CODE (def) != GIMPLE_MODIFY_STMT
904           || GIMPLE_STMT_OPERAND (def, 0) != expr)
905         return NULL;
906       return expr_expected_value (GIMPLE_STMT_OPERAND (def, 1), visited);
907     }
908   else if (TREE_CODE (expr) == CALL_EXPR)
909     {
910       tree decl = get_callee_fndecl (expr);
911       if (!decl)
912         return NULL;
913       if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
914           && DECL_FUNCTION_CODE (decl) == BUILT_IN_EXPECT)
915         {
916           tree arglist = TREE_OPERAND (expr, 1);
917           tree val;
918
919           if (arglist == NULL_TREE
920               || TREE_CHAIN (arglist) == NULL_TREE)
921             return NULL; 
922           val = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (expr, 1)));
923           if (TREE_CONSTANT (val))
924             return val;
925           return TREE_VALUE (TREE_CHAIN (TREE_OPERAND (expr, 1)));
926         }
927     }
928   if (BINARY_CLASS_P (expr) || COMPARISON_CLASS_P (expr))
929     {
930       tree op0, op1, res;
931       op0 = expr_expected_value (TREE_OPERAND (expr, 0), visited);
932       if (!op0)
933         return NULL;
934       op1 = expr_expected_value (TREE_OPERAND (expr, 1), visited);
935       if (!op1)
936         return NULL;
937       res = fold_build2 (TREE_CODE (expr), TREE_TYPE (expr), op0, op1);
938       if (TREE_CONSTANT (res))
939         return res;
940       return NULL;
941     }
942   if (UNARY_CLASS_P (expr))
943     {
944       tree op0, res;
945       op0 = expr_expected_value (TREE_OPERAND (expr, 0), visited);
946       if (!op0)
947         return NULL;
948       res = fold_build1 (TREE_CODE (expr), TREE_TYPE (expr), op0);
949       if (TREE_CONSTANT (res))
950         return res;
951       return NULL;
952     }
953   return NULL;
954 }
955 \f
956 /* Get rid of all builtin_expect calls we no longer need.  */
957 static void
958 strip_builtin_expect (void)
959 {
960   basic_block bb;
961   FOR_EACH_BB (bb)
962     {
963       block_stmt_iterator bi;
964       for (bi = bsi_start (bb); !bsi_end_p (bi); bsi_next (&bi))
965         {
966           tree stmt = bsi_stmt (bi);
967           tree fndecl;
968           tree arglist;
969
970           if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
971               && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 1)) == CALL_EXPR
972               && (fndecl = get_callee_fndecl (GIMPLE_STMT_OPERAND (stmt, 1)))
973               && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
974               && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_EXPECT
975               && (arglist = TREE_OPERAND (GIMPLE_STMT_OPERAND (stmt, 1), 1))
976               && TREE_CHAIN (arglist))
977             {
978               GIMPLE_STMT_OPERAND (stmt, 1) = TREE_VALUE (arglist);
979               update_stmt (stmt);
980             }
981         }
982     }
983 }
984 \f
985 /* Predict using opcode of the last statement in basic block.  */
986 static void
987 tree_predict_by_opcode (basic_block bb)
988 {
989   tree stmt = last_stmt (bb);
990   edge then_edge;
991   tree cond;
992   tree op0;
993   tree type;
994   tree val;
995   bitmap visited;
996   edge_iterator ei;
997
998   if (!stmt || TREE_CODE (stmt) != COND_EXPR)
999     return;
1000   FOR_EACH_EDGE (then_edge, ei, bb->succs)
1001     if (then_edge->flags & EDGE_TRUE_VALUE)
1002       break;
1003   cond = TREE_OPERAND (stmt, 0);
1004   if (!COMPARISON_CLASS_P (cond))
1005     return;
1006   op0 = TREE_OPERAND (cond, 0);
1007   type = TREE_TYPE (op0);
1008   visited = BITMAP_ALLOC (NULL);
1009   val = expr_expected_value (cond, visited);
1010   BITMAP_FREE (visited);
1011   if (val)
1012     {
1013       if (integer_zerop (val))
1014         predict_edge_def (then_edge, PRED_BUILTIN_EXPECT, NOT_TAKEN);
1015       else
1016         predict_edge_def (then_edge, PRED_BUILTIN_EXPECT, TAKEN);
1017       return;
1018     }
1019   /* Try "pointer heuristic."
1020      A comparison ptr == 0 is predicted as false.
1021      Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
1022   if (POINTER_TYPE_P (type))
1023     {
1024       if (TREE_CODE (cond) == EQ_EXPR)
1025         predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
1026       else if (TREE_CODE (cond) == NE_EXPR)
1027         predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
1028     }
1029   else
1030
1031   /* Try "opcode heuristic."
1032      EQ tests are usually false and NE tests are usually true. Also,
1033      most quantities are positive, so we can make the appropriate guesses
1034      about signed comparisons against zero.  */
1035     switch (TREE_CODE (cond))
1036       {
1037       case EQ_EXPR:
1038       case UNEQ_EXPR:
1039         /* Floating point comparisons appears to behave in a very
1040            unpredictable way because of special role of = tests in
1041            FP code.  */
1042         if (FLOAT_TYPE_P (type))
1043           ;
1044         /* Comparisons with 0 are often used for booleans and there is
1045            nothing useful to predict about them.  */
1046         else if (integer_zerop (op0)
1047                  || integer_zerop (TREE_OPERAND (cond, 1)))
1048           ;
1049         else
1050           predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
1051         break;
1052
1053       case NE_EXPR:
1054       case LTGT_EXPR:
1055         /* Floating point comparisons appears to behave in a very
1056            unpredictable way because of special role of = tests in
1057            FP code.  */
1058         if (FLOAT_TYPE_P (type))
1059           ;
1060         /* Comparisons with 0 are often used for booleans and there is
1061            nothing useful to predict about them.  */
1062         else if (integer_zerop (op0)
1063                  || integer_zerop (TREE_OPERAND (cond, 1)))
1064           ;
1065         else
1066           predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
1067         break;
1068
1069       case ORDERED_EXPR:
1070         predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
1071         break;
1072
1073       case UNORDERED_EXPR:
1074         predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
1075         break;
1076
1077       case LE_EXPR:
1078       case LT_EXPR:
1079         if (integer_zerop (TREE_OPERAND (cond, 1))
1080             || integer_onep (TREE_OPERAND (cond, 1))
1081             || integer_all_onesp (TREE_OPERAND (cond, 1))
1082             || real_zerop (TREE_OPERAND (cond, 1))
1083             || real_onep (TREE_OPERAND (cond, 1))
1084             || real_minus_onep (TREE_OPERAND (cond, 1)))
1085           predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
1086         break;
1087
1088       case GE_EXPR:
1089       case GT_EXPR:
1090         if (integer_zerop (TREE_OPERAND (cond, 1))
1091             || integer_onep (TREE_OPERAND (cond, 1))
1092             || integer_all_onesp (TREE_OPERAND (cond, 1))
1093             || real_zerop (TREE_OPERAND (cond, 1))
1094             || real_onep (TREE_OPERAND (cond, 1))
1095             || real_minus_onep (TREE_OPERAND (cond, 1)))
1096           predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
1097         break;
1098
1099       default:
1100         break;
1101       }
1102 }
1103
1104 /* Try to guess whether the value of return means error code.  */
1105 static enum br_predictor
1106 return_prediction (tree val, enum prediction *prediction)
1107 {
1108   /* VOID.  */
1109   if (!val)
1110     return PRED_NO_PREDICTION;
1111   /* Different heuristics for pointers and scalars.  */
1112   if (POINTER_TYPE_P (TREE_TYPE (val)))
1113     {
1114       /* NULL is usually not returned.  */
1115       if (integer_zerop (val))
1116         {
1117           *prediction = NOT_TAKEN;
1118           return PRED_NULL_RETURN;
1119         }
1120     }
1121   else if (INTEGRAL_TYPE_P (TREE_TYPE (val)))
1122     {
1123       /* Negative return values are often used to indicate
1124          errors.  */
1125       if (TREE_CODE (val) == INTEGER_CST
1126           && tree_int_cst_sgn (val) < 0)
1127         {
1128           *prediction = NOT_TAKEN;
1129           return PRED_NEGATIVE_RETURN;
1130         }
1131       /* Constant return values seems to be commonly taken.
1132          Zero/one often represent booleans so exclude them from the
1133          heuristics.  */
1134       if (TREE_CONSTANT (val)
1135           && (!integer_zerop (val) && !integer_onep (val)))
1136         {
1137           *prediction = TAKEN;
1138           return PRED_NEGATIVE_RETURN;
1139         }
1140     }
1141   return PRED_NO_PREDICTION;
1142 }
1143
1144 /* Find the basic block with return expression and look up for possible
1145    return value trying to apply RETURN_PREDICTION heuristics.  */
1146 static void
1147 apply_return_prediction (int *heads)
1148 {
1149   tree return_stmt = NULL;
1150   tree return_val;
1151   edge e;
1152   tree phi;
1153   int phi_num_args, i;
1154   enum br_predictor pred;
1155   enum prediction direction;
1156   edge_iterator ei;
1157
1158   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
1159     {
1160       return_stmt = last_stmt (e->src);
1161       if (TREE_CODE (return_stmt) == RETURN_EXPR)
1162         break;
1163     }
1164   if (!e)
1165     return;
1166   return_val = TREE_OPERAND (return_stmt, 0);
1167   if (!return_val)
1168     return;
1169   if (TREE_CODE (return_val) == GIMPLE_MODIFY_STMT)
1170     return_val = GIMPLE_STMT_OPERAND (return_val, 1);
1171   if (TREE_CODE (return_val) != SSA_NAME
1172       || !SSA_NAME_DEF_STMT (return_val)
1173       || TREE_CODE (SSA_NAME_DEF_STMT (return_val)) != PHI_NODE)
1174     return;
1175   for (phi = SSA_NAME_DEF_STMT (return_val); phi; phi = PHI_CHAIN (phi))
1176     if (PHI_RESULT (phi) == return_val)
1177       break;
1178   if (!phi)
1179     return;
1180   phi_num_args = PHI_NUM_ARGS (phi);
1181   pred = return_prediction (PHI_ARG_DEF (phi, 0), &direction);
1182
1183   /* Avoid the degenerate case where all return values form the function
1184      belongs to same category (ie they are all positive constants)
1185      so we can hardly say something about them.  */
1186   for (i = 1; i < phi_num_args; i++)
1187     if (pred != return_prediction (PHI_ARG_DEF (phi, i), &direction))
1188       break;
1189   if (i != phi_num_args)
1190     for (i = 0; i < phi_num_args; i++)
1191       {
1192         pred = return_prediction (PHI_ARG_DEF (phi, i), &direction);
1193         if (pred != PRED_NO_PREDICTION)
1194           predict_paths_leading_to (PHI_ARG_EDGE (phi, i)->src, heads, pred,
1195                                     direction);
1196       }
1197 }
1198
1199 /* Look for basic block that contains unlikely to happen events
1200    (such as noreturn calls) and mark all paths leading to execution
1201    of this basic blocks as unlikely.  */
1202
1203 static void
1204 tree_bb_level_predictions (void)
1205 {
1206   basic_block bb;
1207   int *heads;
1208
1209   heads = XCNEWVEC (int, last_basic_block);
1210   heads[ENTRY_BLOCK_PTR->next_bb->index] = last_basic_block;
1211
1212   apply_return_prediction (heads);
1213
1214   FOR_EACH_BB (bb)
1215     {
1216       block_stmt_iterator bsi = bsi_last (bb);
1217
1218       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1219         {
1220           tree stmt = bsi_stmt (bsi);
1221           switch (TREE_CODE (stmt))
1222             {
1223               case GIMPLE_MODIFY_STMT:
1224                 if (TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 1)) == CALL_EXPR)
1225                   {
1226                     stmt = GIMPLE_STMT_OPERAND (stmt, 1);
1227                     goto call_expr;
1228                   }
1229                 break;
1230               case CALL_EXPR:
1231 call_expr:;
1232                 if (call_expr_flags (stmt) & ECF_NORETURN)
1233                   predict_paths_leading_to (bb, heads, PRED_NORETURN,
1234                                             NOT_TAKEN);
1235                 break;
1236               default:
1237                 break;
1238             }
1239         }
1240     }
1241
1242   free (heads);
1243 }
1244
1245 /* Predict branch probabilities and estimate profile of the tree CFG.  */
1246 static unsigned int
1247 tree_estimate_probability (void)
1248 {
1249   basic_block bb;
1250
1251   loop_optimizer_init (0);
1252   if (current_loops && dump_file && (dump_flags & TDF_DETAILS))
1253     flow_loops_dump (dump_file, NULL, 0);
1254
1255   add_noreturn_fake_exit_edges ();
1256   connect_infinite_loops_to_exit ();
1257   calculate_dominance_info (CDI_DOMINATORS);
1258   calculate_dominance_info (CDI_POST_DOMINATORS);
1259
1260   tree_bb_level_predictions ();
1261
1262   mark_irreducible_loops ();
1263   if (current_loops)
1264     predict_loops ();
1265
1266   FOR_EACH_BB (bb)
1267     {
1268       edge e;
1269       edge_iterator ei;
1270
1271       FOR_EACH_EDGE (e, ei, bb->succs)
1272         {
1273           /* Predict early returns to be probable, as we've already taken
1274              care for error returns and other cases are often used for
1275              fast paths through function.  */
1276           if (e->dest == EXIT_BLOCK_PTR
1277               && TREE_CODE (last_stmt (bb)) == RETURN_EXPR
1278               && !single_pred_p (bb))
1279             {
1280               edge e1;
1281               edge_iterator ei1;
1282
1283               FOR_EACH_EDGE (e1, ei1, bb->preds)
1284                 if (!predicted_by_p (e1->src, PRED_NULL_RETURN)
1285                     && !predicted_by_p (e1->src, PRED_CONST_RETURN)
1286                     && !predicted_by_p (e1->src, PRED_NEGATIVE_RETURN)
1287                     && !last_basic_block_p (e1->src))
1288                   predict_edge_def (e1, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
1289             }
1290
1291           /* Look for block we are guarding (ie we dominate it,
1292              but it doesn't postdominate us).  */
1293           if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
1294               && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
1295               && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
1296             {
1297               block_stmt_iterator bi;
1298
1299               /* The call heuristic claims that a guarded function call
1300                  is improbable.  This is because such calls are often used
1301                  to signal exceptional situations such as printing error
1302                  messages.  */
1303               for (bi = bsi_start (e->dest); !bsi_end_p (bi);
1304                    bsi_next (&bi))
1305                 {
1306                   tree stmt = bsi_stmt (bi);
1307                   if ((TREE_CODE (stmt) == CALL_EXPR
1308                        || (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
1309                            && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 1))
1310                               == CALL_EXPR))
1311                       /* Constant and pure calls are hardly used to signalize
1312                          something exceptional.  */
1313                       && TREE_SIDE_EFFECTS (stmt))
1314                     {
1315                       predict_edge_def (e, PRED_CALL, NOT_TAKEN);
1316                       break;
1317                     }
1318                 }
1319             }
1320         }
1321       tree_predict_by_opcode (bb);
1322     }
1323   FOR_EACH_BB (bb)
1324     combine_predictions_for_bb (bb);
1325
1326   strip_builtin_expect ();
1327   estimate_bb_frequencies ();
1328   free_dominance_info (CDI_POST_DOMINATORS);
1329   remove_fake_exit_edges ();
1330   loop_optimizer_finalize ();
1331   if (dump_file && (dump_flags & TDF_DETAILS))
1332     dump_tree_cfg (dump_file, dump_flags);
1333   if (profile_status == PROFILE_ABSENT)
1334     profile_status = PROFILE_GUESSED;
1335   return 0;
1336 }
1337 \f
1338 /* Check whether this is the last basic block of function.  Commonly
1339    there is one extra common cleanup block.  */
1340 static bool
1341 last_basic_block_p (basic_block bb)
1342 {
1343   if (bb == EXIT_BLOCK_PTR)
1344     return false;
1345
1346   return (bb->next_bb == EXIT_BLOCK_PTR
1347           || (bb->next_bb->next_bb == EXIT_BLOCK_PTR
1348               && single_succ_p (bb)
1349               && single_succ (bb)->next_bb == EXIT_BLOCK_PTR));
1350 }
1351
1352 /* Sets branch probabilities according to PREDiction and
1353    FLAGS. HEADS[bb->index] should be index of basic block in that we
1354    need to alter branch predictions (i.e. the first of our dominators
1355    such that we do not post-dominate it) (but we fill this information
1356    on demand, so -1 may be there in case this was not needed yet).  */
1357
1358 static void
1359 predict_paths_leading_to (basic_block bb, int *heads, enum br_predictor pred,
1360                           enum prediction taken)
1361 {
1362   edge e;
1363   edge_iterator ei;
1364   int y;
1365
1366   if (heads[bb->index] == ENTRY_BLOCK)
1367     {
1368       /* This is first time we need this field in heads array; so
1369          find first dominator that we do not post-dominate (we are
1370          using already known members of heads array).  */
1371       basic_block ai = bb;
1372       basic_block next_ai = get_immediate_dominator (CDI_DOMINATORS, bb);
1373       int head;
1374
1375       while (heads[next_ai->index] == ENTRY_BLOCK)
1376         {
1377           if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
1378             break;
1379           heads[next_ai->index] = ai->index;
1380           ai = next_ai;
1381           next_ai = get_immediate_dominator (CDI_DOMINATORS, next_ai);
1382         }
1383       if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
1384         head = next_ai->index;
1385       else
1386         head = heads[next_ai->index];
1387       while (next_ai != bb)
1388         {
1389           next_ai = ai;
1390           ai = BASIC_BLOCK (heads[ai->index]);
1391           heads[next_ai->index] = head;
1392         }
1393     }
1394   y = heads[bb->index];
1395
1396   /* Now find the edge that leads to our branch and aply the prediction.  */
1397
1398   if (y == last_basic_block)
1399     return;
1400   FOR_EACH_EDGE (e, ei, BASIC_BLOCK (y)->succs)
1401     if (e->dest->index >= NUM_FIXED_BLOCKS
1402         && dominated_by_p (CDI_POST_DOMINATORS, e->dest, bb))
1403       predict_edge_def (e, pred, taken);
1404 }
1405 \f
1406 /* This is used to carry information about basic blocks.  It is
1407    attached to the AUX field of the standard CFG block.  */
1408
1409 typedef struct block_info_def
1410 {
1411   /* Estimated frequency of execution of basic_block.  */
1412   sreal frequency;
1413
1414   /* To keep queue of basic blocks to process.  */
1415   basic_block next;
1416
1417   /* Number of predecessors we need to visit first.  */
1418   int npredecessors;
1419 } *block_info;
1420
1421 /* Similar information for edges.  */
1422 typedef struct edge_info_def
1423 {
1424   /* In case edge is a loopback edge, the probability edge will be reached
1425      in case header is.  Estimated number of iterations of the loop can be
1426      then computed as 1 / (1 - back_edge_prob).  */
1427   sreal back_edge_prob;
1428   /* True if the edge is a loopback edge in the natural loop.  */
1429   unsigned int back_edge:1;
1430 } *edge_info;
1431
1432 #define BLOCK_INFO(B)   ((block_info) (B)->aux)
1433 #define EDGE_INFO(E)    ((edge_info) (E)->aux)
1434
1435 /* Helper function for estimate_bb_frequencies.
1436    Propagate the frequencies in blocks marked in
1437    TOVISIT, starting in HEAD.  */
1438
1439 static void
1440 propagate_freq (basic_block head, bitmap tovisit)
1441 {
1442   basic_block bb;
1443   basic_block last;
1444   unsigned i;
1445   edge e;
1446   basic_block nextbb;
1447   bitmap_iterator bi;
1448
1449   /* For each basic block we need to visit count number of his predecessors
1450      we need to visit first.  */
1451   EXECUTE_IF_SET_IN_BITMAP (tovisit, 0, i, bi)
1452     {
1453       edge_iterator ei;
1454       int count = 0;
1455
1456        /* The outermost "loop" includes the exit block, which we can not
1457           look up via BASIC_BLOCK.  Detect this and use EXIT_BLOCK_PTR
1458           directly.  Do the same for the entry block.  */
1459       bb = BASIC_BLOCK (i);
1460
1461       FOR_EACH_EDGE (e, ei, bb->preds)
1462         {
1463           bool visit = bitmap_bit_p (tovisit, e->src->index);
1464
1465           if (visit && !(e->flags & EDGE_DFS_BACK))
1466             count++;
1467           else if (visit && dump_file && !EDGE_INFO (e)->back_edge)
1468             fprintf (dump_file,
1469                      "Irreducible region hit, ignoring edge to %i->%i\n",
1470                      e->src->index, bb->index);
1471         }
1472       BLOCK_INFO (bb)->npredecessors = count;
1473     }
1474
1475   memcpy (&BLOCK_INFO (head)->frequency, &real_one, sizeof (real_one));
1476   last = head;
1477   for (bb = head; bb; bb = nextbb)
1478     {
1479       edge_iterator ei;
1480       sreal cyclic_probability, frequency;
1481
1482       memcpy (&cyclic_probability, &real_zero, sizeof (real_zero));
1483       memcpy (&frequency, &real_zero, sizeof (real_zero));
1484
1485       nextbb = BLOCK_INFO (bb)->next;
1486       BLOCK_INFO (bb)->next = NULL;
1487
1488       /* Compute frequency of basic block.  */
1489       if (bb != head)
1490         {
1491 #ifdef ENABLE_CHECKING
1492           FOR_EACH_EDGE (e, ei, bb->preds)
1493             gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
1494                         || (e->flags & EDGE_DFS_BACK));
1495 #endif
1496
1497           FOR_EACH_EDGE (e, ei, bb->preds)
1498             if (EDGE_INFO (e)->back_edge)
1499               {
1500                 sreal_add (&cyclic_probability, &cyclic_probability,
1501                            &EDGE_INFO (e)->back_edge_prob);
1502               }
1503             else if (!(e->flags & EDGE_DFS_BACK))
1504               {
1505                 sreal tmp;
1506
1507                 /*  frequency += (e->probability
1508                                   * BLOCK_INFO (e->src)->frequency /
1509                                   REG_BR_PROB_BASE);  */
1510
1511                 sreal_init (&tmp, e->probability, 0);
1512                 sreal_mul (&tmp, &tmp, &BLOCK_INFO (e->src)->frequency);
1513                 sreal_mul (&tmp, &tmp, &real_inv_br_prob_base);
1514                 sreal_add (&frequency, &frequency, &tmp);
1515               }
1516
1517           if (sreal_compare (&cyclic_probability, &real_zero) == 0)
1518             {
1519               memcpy (&BLOCK_INFO (bb)->frequency, &frequency,
1520                       sizeof (frequency));
1521             }
1522           else
1523             {
1524               if (sreal_compare (&cyclic_probability, &real_almost_one) > 0)
1525                 {
1526                   memcpy (&cyclic_probability, &real_almost_one,
1527                           sizeof (real_almost_one));
1528                 }
1529
1530               /* BLOCK_INFO (bb)->frequency = frequency
1531                                               / (1 - cyclic_probability) */
1532
1533               sreal_sub (&cyclic_probability, &real_one, &cyclic_probability);
1534               sreal_div (&BLOCK_INFO (bb)->frequency,
1535                          &frequency, &cyclic_probability);
1536             }
1537         }
1538
1539       bitmap_clear_bit (tovisit, bb->index);
1540
1541       e = find_edge (bb, head);
1542       if (e)
1543         {
1544           sreal tmp;
1545             
1546           /* EDGE_INFO (e)->back_edge_prob
1547              = ((e->probability * BLOCK_INFO (bb)->frequency)
1548              / REG_BR_PROB_BASE); */
1549             
1550           sreal_init (&tmp, e->probability, 0);
1551           sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency);
1552           sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1553                      &tmp, &real_inv_br_prob_base);
1554         }
1555
1556       /* Propagate to successor blocks.  */
1557       FOR_EACH_EDGE (e, ei, bb->succs)
1558         if (!(e->flags & EDGE_DFS_BACK)
1559             && BLOCK_INFO (e->dest)->npredecessors)
1560           {
1561             BLOCK_INFO (e->dest)->npredecessors--;
1562             if (!BLOCK_INFO (e->dest)->npredecessors)
1563               {
1564                 if (!nextbb)
1565                   nextbb = e->dest;
1566                 else
1567                   BLOCK_INFO (last)->next = e->dest;
1568                 
1569                 last = e->dest;
1570               }
1571           }
1572     }
1573 }
1574
1575 /* Estimate probabilities of loopback edges in loops at same nest level.  */
1576
1577 static void
1578 estimate_loops_at_level (struct loop *first_loop)
1579 {
1580   struct loop *loop;
1581
1582   for (loop = first_loop; loop; loop = loop->next)
1583     {
1584       edge e;
1585       basic_block *bbs;
1586       unsigned i;
1587       bitmap tovisit = BITMAP_ALLOC (NULL);
1588
1589       estimate_loops_at_level (loop->inner);
1590
1591       /* Find current loop back edge and mark it.  */
1592       e = loop_latch_edge (loop);
1593       EDGE_INFO (e)->back_edge = 1;
1594
1595       bbs = get_loop_body (loop);
1596       for (i = 0; i < loop->num_nodes; i++)
1597         bitmap_set_bit (tovisit, bbs[i]->index);
1598       free (bbs);
1599       propagate_freq (loop->header, tovisit);
1600       BITMAP_FREE (tovisit);
1601     }
1602 }
1603
1604 /* Propagates frequencies through structure of loops.  */
1605
1606 static void
1607 estimate_loops (void)
1608 {
1609   bitmap tovisit = BITMAP_ALLOC (NULL);
1610   basic_block bb;
1611
1612   /* Start by estimating the frequencies in the loops.  */
1613   if (current_loops)
1614     estimate_loops_at_level (current_loops->tree_root->inner);
1615
1616   /* Now propagate the frequencies through all the blocks.  */
1617   FOR_ALL_BB (bb)
1618     {
1619       bitmap_set_bit (tovisit, bb->index);
1620     }
1621   propagate_freq (ENTRY_BLOCK_PTR, tovisit);
1622   BITMAP_FREE (tovisit);
1623 }
1624
1625 /* Convert counts measured by profile driven feedback to frequencies.
1626    Return nonzero iff there was any nonzero execution count.  */
1627
1628 int
1629 counts_to_freqs (void)
1630 {
1631   gcov_type count_max, true_count_max = 0;
1632   basic_block bb;
1633
1634   FOR_EACH_BB (bb)
1635     true_count_max = MAX (bb->count, true_count_max);
1636
1637   count_max = MAX (true_count_max, 1);
1638   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1639     bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max;
1640
1641   return true_count_max;
1642 }
1643
1644 /* Return true if function is likely to be expensive, so there is no point to
1645    optimize performance of prologue, epilogue or do inlining at the expense
1646    of code size growth.  THRESHOLD is the limit of number of instructions
1647    function can execute at average to be still considered not expensive.  */
1648
1649 bool
1650 expensive_function_p (int threshold)
1651 {
1652   unsigned int sum = 0;
1653   basic_block bb;
1654   unsigned int limit;
1655
1656   /* We can not compute accurately for large thresholds due to scaled
1657      frequencies.  */
1658   gcc_assert (threshold <= BB_FREQ_MAX);
1659
1660   /* Frequencies are out of range.  This either means that function contains
1661      internal loop executing more than BB_FREQ_MAX times or profile feedback
1662      is available and function has not been executed at all.  */
1663   if (ENTRY_BLOCK_PTR->frequency == 0)
1664     return true;
1665
1666   /* Maximally BB_FREQ_MAX^2 so overflow won't happen.  */
1667   limit = ENTRY_BLOCK_PTR->frequency * threshold;
1668   FOR_EACH_BB (bb)
1669     {
1670       rtx insn;
1671
1672       for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
1673            insn = NEXT_INSN (insn))
1674         if (active_insn_p (insn))
1675           {
1676             sum += bb->frequency;
1677             if (sum > limit)
1678               return true;
1679         }
1680     }
1681
1682   return false;
1683 }
1684
1685 /* Estimate basic blocks frequency by given branch probabilities.  */
1686
1687 void
1688 estimate_bb_frequencies (void)
1689 {
1690   basic_block bb;
1691   sreal freq_max;
1692
1693   if (!flag_branch_probabilities || !counts_to_freqs ())
1694     {
1695       static int real_values_initialized = 0;
1696
1697       if (!real_values_initialized)
1698         {
1699           real_values_initialized = 1;
1700           sreal_init (&real_zero, 0, 0);
1701           sreal_init (&real_one, 1, 0);
1702           sreal_init (&real_br_prob_base, REG_BR_PROB_BASE, 0);
1703           sreal_init (&real_bb_freq_max, BB_FREQ_MAX, 0);
1704           sreal_init (&real_one_half, 1, -1);
1705           sreal_div (&real_inv_br_prob_base, &real_one, &real_br_prob_base);
1706           sreal_sub (&real_almost_one, &real_one, &real_inv_br_prob_base);
1707         }
1708
1709       mark_dfs_back_edges ();
1710
1711       single_succ_edge (ENTRY_BLOCK_PTR)->probability = REG_BR_PROB_BASE;
1712
1713       /* Set up block info for each basic block.  */
1714       alloc_aux_for_blocks (sizeof (struct block_info_def));
1715       alloc_aux_for_edges (sizeof (struct edge_info_def));
1716       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1717         {
1718           edge e;
1719           edge_iterator ei;
1720
1721           FOR_EACH_EDGE (e, ei, bb->succs)
1722             {
1723               sreal_init (&EDGE_INFO (e)->back_edge_prob, e->probability, 0);
1724               sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1725                          &EDGE_INFO (e)->back_edge_prob,
1726                          &real_inv_br_prob_base);
1727             }
1728         }
1729
1730       /* First compute probabilities locally for each loop from innermost
1731          to outermost to examine probabilities for back edges.  */
1732       estimate_loops ();
1733
1734       memcpy (&freq_max, &real_zero, sizeof (real_zero));
1735       FOR_EACH_BB (bb)
1736         if (sreal_compare (&freq_max, &BLOCK_INFO (bb)->frequency) < 0)
1737           memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, sizeof (freq_max));
1738
1739       sreal_div (&freq_max, &real_bb_freq_max, &freq_max);
1740       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1741         {
1742           sreal tmp;
1743
1744           sreal_mul (&tmp, &BLOCK_INFO (bb)->frequency, &freq_max);
1745           sreal_add (&tmp, &tmp, &real_one_half);
1746           bb->frequency = sreal_to_int (&tmp);
1747         }
1748
1749       free_aux_for_blocks ();
1750       free_aux_for_edges ();
1751     }
1752   compute_function_frequency ();
1753   if (flag_reorder_functions)
1754     choose_function_section ();
1755 }
1756
1757 /* Decide whether function is hot, cold or unlikely executed.  */
1758 static void
1759 compute_function_frequency (void)
1760 {
1761   basic_block bb;
1762
1763   if (!profile_info || !flag_branch_probabilities)
1764     return;
1765   cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
1766   FOR_EACH_BB (bb)
1767     {
1768       if (maybe_hot_bb_p (bb))
1769         {
1770           cfun->function_frequency = FUNCTION_FREQUENCY_HOT;
1771           return;
1772         }
1773       if (!probably_never_executed_bb_p (bb))
1774         cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
1775     }
1776 }
1777
1778 /* Choose appropriate section for the function.  */
1779 static void
1780 choose_function_section (void)
1781 {
1782   if (DECL_SECTION_NAME (current_function_decl)
1783       || !targetm.have_named_sections
1784       /* Theoretically we can split the gnu.linkonce text section too,
1785          but this requires more work as the frequency needs to match
1786          for all generated objects so we need to merge the frequency
1787          of all instances.  For now just never set frequency for these.  */
1788       || DECL_ONE_ONLY (current_function_decl))
1789     return;
1790
1791   /* If we are doing the partitioning optimization, let the optimization
1792      choose the correct section into which to put things.  */
1793
1794   if (flag_reorder_blocks_and_partition)
1795     return;
1796
1797   if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
1798     DECL_SECTION_NAME (current_function_decl) =
1799       build_string (strlen (HOT_TEXT_SECTION_NAME), HOT_TEXT_SECTION_NAME);
1800   if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
1801     DECL_SECTION_NAME (current_function_decl) =
1802       build_string (strlen (UNLIKELY_EXECUTED_TEXT_SECTION_NAME),
1803                     UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
1804 }
1805
1806 static bool
1807 gate_estimate_probability (void)
1808 {
1809   return flag_guess_branch_prob;
1810 }
1811
1812 struct tree_opt_pass pass_profile = 
1813 {
1814   "profile",                            /* name */
1815   gate_estimate_probability,            /* gate */
1816   tree_estimate_probability,            /* execute */
1817   NULL,                                 /* sub */
1818   NULL,                                 /* next */
1819   0,                                    /* static_pass_number */
1820   TV_BRANCH_PROB,                       /* tv_id */
1821   PROP_cfg,                             /* properties_required */
1822   0,                                    /* properties_provided */
1823   0,                                    /* properties_destroyed */
1824   0,                                    /* todo_flags_start */
1825   TODO_ggc_collect | TODO_verify_ssa,                   /* todo_flags_finish */
1826   0                                     /* letter */
1827 };