OSDN Git Service

Fix linux make profiledbootstrap.
[pf3gnuchains/gcc-fork.git] / gcc / predict.c
1 /* Branch prediction routines for the GNU compiler.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004 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 2, 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 COPYING.  If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.  */
20
21 /* References:
22
23    [1] "Branch Prediction for Free"
24        Ball and Larus; PLDI '93.
25    [2] "Static Branch Frequency and Program Profile Analysis"
26        Wu and Larus; MICRO-27.
27    [3] "Corpus-based Static Branch Prediction"
28        Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95.  */
29
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "tm_p.h"
38 #include "hard-reg-set.h"
39 #include "basic-block.h"
40 #include "insn-config.h"
41 #include "regs.h"
42 #include "flags.h"
43 #include "output.h"
44 #include "function.h"
45 #include "except.h"
46 #include "toplev.h"
47 #include "recog.h"
48 #include "expr.h"
49 #include "predict.h"
50 #include "coverage.h"
51 #include "sreal.h"
52 #include "params.h"
53 #include "target.h"
54 #include "loop.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
62 /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE,
63                    1/REG_BR_PROB_BASE, 0.5, BB_FREQ_MAX.  */
64 static sreal real_zero, real_one, real_almost_one, real_br_prob_base,
65              real_inv_br_prob_base, real_one_half, real_bb_freq_max;
66
67 /* Random guesstimation given names.  */
68 #define PROB_VERY_UNLIKELY      (REG_BR_PROB_BASE / 10 - 1)
69 #define PROB_EVEN               (REG_BR_PROB_BASE / 2)
70 #define PROB_VERY_LIKELY        (REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
71 #define PROB_ALWAYS             (REG_BR_PROB_BASE)
72
73 static void combine_predictions_for_insn (rtx, basic_block);
74 static void dump_prediction (FILE *, enum br_predictor, int, basic_block, int);
75 static void estimate_loops_at_level (struct loop *loop);
76 static void propagate_freq (struct loop *);
77 static void estimate_bb_frequencies (struct loops *);
78 static int counts_to_freqs (void);
79 static bool last_basic_block_p (basic_block);
80 static void compute_function_frequency (void);
81 static void choose_function_section (void);
82 static bool can_predict_insn_p (rtx);
83
84 /* Information we hold about each branch predictor.
85    Filled using information from predict.def.  */
86
87 struct predictor_info
88 {
89   const char *const name;       /* Name used in the debugging dumps.  */
90   const int hitrate;            /* Expected hitrate used by
91                                    predict_insn_def call.  */
92   const int flags;
93 };
94
95 /* Use given predictor without Dempster-Shaffer theory if it matches
96    using first_match heuristics.  */
97 #define PRED_FLAG_FIRST_MATCH 1
98
99 /* Recompute hitrate in percent to our representation.  */
100
101 #define HITRATE(VAL) ((int) ((VAL) * REG_BR_PROB_BASE + 50) / 100)
102
103 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) {NAME, HITRATE, FLAGS},
104 static const struct predictor_info predictor_info[]= {
105 #include "predict.def"
106
107   /* Upper bound on predictors.  */
108   {NULL, 0, 0}
109 };
110 #undef DEF_PREDICTOR
111
112 /* Return true in case BB can be CPU intensive and should be optimized
113    for maximal performance.  */
114
115 bool
116 maybe_hot_bb_p (basic_block bb)
117 {
118   if (profile_info && flag_branch_probabilities
119       && (bb->count
120           < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
121     return false;
122   if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
123     return false;
124   return true;
125 }
126
127 /* Return true in case BB is cold and should be optimized for size.  */
128
129 bool
130 probably_cold_bb_p (basic_block bb)
131 {
132   if (profile_info && flag_branch_probabilities
133       && (bb->count
134           < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
135     return true;
136   if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
137     return true;
138   return false;
139 }
140
141 /* Return true in case BB is probably never executed.  */
142 bool
143 probably_never_executed_bb_p (basic_block bb)
144 {
145   if (profile_info && flag_branch_probabilities)
146     return ((bb->count + profile_info->runs / 2) / profile_info->runs) == 0;
147   return false;
148 }
149
150 /* Return true if the one of outgoing edges is already predicted by
151    PREDICTOR.  */
152
153 bool
154 rtl_predicted_by_p (basic_block bb, enum br_predictor predictor)
155 {
156   rtx note;
157   if (!INSN_P (BB_END (bb)))
158     return false;
159   for (note = REG_NOTES (BB_END (bb)); note; note = XEXP (note, 1))
160     if (REG_NOTE_KIND (note) == REG_BR_PRED
161         && INTVAL (XEXP (XEXP (note, 0), 0)) == (int)predictor)
162       return true;
163   return false;
164 }
165
166 /* Return true if the one of outgoing edges is already predicted by
167    PREDICTOR.  */
168
169 bool
170 tree_predicted_by_p (basic_block bb, enum br_predictor predictor)
171 {
172   struct edge_prediction *i = bb_ann (bb)->predictions;
173   for (i = bb_ann (bb)->predictions; i; i = i->next)
174     if (i->predictor == predictor)
175       return true;
176   return false;
177 }
178
179 void
180 predict_insn (rtx insn, enum br_predictor predictor, int probability)
181 {
182   if (!any_condjump_p (insn))
183     abort ();
184   if (!flag_guess_branch_prob)
185     return;
186
187   REG_NOTES (insn)
188     = gen_rtx_EXPR_LIST (REG_BR_PRED,
189                          gen_rtx_CONCAT (VOIDmode,
190                                          GEN_INT ((int) predictor),
191                                          GEN_INT ((int) probability)),
192                          REG_NOTES (insn));
193 }
194
195 /* Predict insn by given predictor.  */
196
197 void
198 predict_insn_def (rtx insn, enum br_predictor predictor,
199                   enum prediction taken)
200 {
201    int probability = predictor_info[(int) predictor].hitrate;
202
203    if (taken != TAKEN)
204      probability = REG_BR_PROB_BASE - probability;
205
206    predict_insn (insn, predictor, probability);
207 }
208
209 /* Predict edge E with given probability if possible.  */
210
211 void
212 rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
213 {
214   rtx last_insn;
215   last_insn = BB_END (e->src);
216
217   /* We can store the branch prediction information only about
218      conditional jumps.  */
219   if (!any_condjump_p (last_insn))
220     return;
221
222   /* We always store probability of branching.  */
223   if (e->flags & EDGE_FALLTHRU)
224     probability = REG_BR_PROB_BASE - probability;
225
226   predict_insn (last_insn, predictor, probability);
227 }
228
229 /* Predict edge E with the given PROBABILITY.  */
230 void
231 tree_predict_edge (edge e, enum br_predictor predictor, int probability)
232 {
233   struct edge_prediction *i = ggc_alloc (sizeof (struct edge_prediction));
234
235   i->next = bb_ann (e->src)->predictions;
236   bb_ann (e->src)->predictions = i;
237   i->probability = probability;
238   i->predictor = predictor;
239   i->edge = e;
240 }
241
242 /* Return true when we can store prediction on insn INSN.
243    At the moment we represent predictions only on conditional
244    jumps, not at computed jump or other complicated cases.  */
245 static bool
246 can_predict_insn_p (rtx insn)
247 {
248   return (JUMP_P (insn)
249           && any_condjump_p (insn)
250           && BLOCK_FOR_INSN (insn)->succ->succ_next);
251 }
252
253 /* Predict edge E by given predictor if possible.  */
254
255 void
256 predict_edge_def (edge e, enum br_predictor predictor,
257                   enum prediction taken)
258 {
259    int probability = predictor_info[(int) predictor].hitrate;
260
261    if (taken != TAKEN)
262      probability = REG_BR_PROB_BASE - probability;
263
264    predict_edge (e, predictor, probability);
265 }
266
267 /* Invert all branch predictions or probability notes in the INSN.  This needs
268    to be done each time we invert the condition used by the jump.  */
269
270 void
271 invert_br_probabilities (rtx insn)
272 {
273   rtx note;
274
275   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
276     if (REG_NOTE_KIND (note) == REG_BR_PROB)
277       XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0)));
278     else if (REG_NOTE_KIND (note) == REG_BR_PRED)
279       XEXP (XEXP (note, 0), 1)
280         = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1)));
281 }
282
283 /* Dump information about the branch prediction to the output file.  */
284
285 static void
286 dump_prediction (FILE *file, enum br_predictor predictor, int probability,
287                  basic_block bb, int used)
288 {
289   edge e = bb->succ;
290
291   if (!file)
292     return;
293
294   while (e && (e->flags & EDGE_FALLTHRU))
295     e = e->succ_next;
296
297   fprintf (file, "  %s heuristics%s: %.1f%%",
298            predictor_info[predictor].name,
299            used ? "" : " (ignored)", probability * 100.0 / REG_BR_PROB_BASE);
300
301   if (bb->count)
302     {
303       fprintf (file, "  exec ");
304       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, bb->count);
305       if (e)
306         {
307           fprintf (file, " hit ");
308           fprintf (file, HOST_WIDEST_INT_PRINT_DEC, e->count);
309           fprintf (file, " (%.1f%%)", e->count * 100.0 / bb->count);
310         }
311     }
312
313   fprintf (file, "\n");
314 }
315
316 /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB
317    note if not already present.  Remove now useless REG_BR_PRED notes.  */
318
319 static void
320 combine_predictions_for_insn (rtx insn, basic_block bb)
321 {
322   rtx prob_note = find_reg_note (insn, REG_BR_PROB, 0);
323   rtx *pnote = &REG_NOTES (insn);
324   rtx note;
325   int best_probability = PROB_EVEN;
326   int best_predictor = END_PREDICTORS;
327   int combined_probability = REG_BR_PROB_BASE / 2;
328   int d;
329   bool first_match = false;
330   bool found = false;
331
332   if (dump_file)
333     fprintf (dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn),
334              bb->index);
335
336   /* We implement "first match" heuristics and use probability guessed
337      by predictor with smallest index.  */
338   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
339     if (REG_NOTE_KIND (note) == REG_BR_PRED)
340       {
341         int predictor = INTVAL (XEXP (XEXP (note, 0), 0));
342         int probability = INTVAL (XEXP (XEXP (note, 0), 1));
343
344         found = true;
345         if (best_predictor > predictor)
346           best_probability = probability, best_predictor = predictor;
347
348         d = (combined_probability * probability
349              + (REG_BR_PROB_BASE - combined_probability)
350              * (REG_BR_PROB_BASE - probability));
351
352         /* Use FP math to avoid overflows of 32bit integers.  */
353         if (d == 0)
354           /* If one probability is 0% and one 100%, avoid division by zero.  */
355           combined_probability = REG_BR_PROB_BASE / 2;
356         else
357           combined_probability = (((double) combined_probability) * probability
358                                   * REG_BR_PROB_BASE / d + 0.5);
359       }
360
361   /* Decide which heuristic to use.  In case we didn't match anything,
362      use no_prediction heuristic, in case we did match, use either
363      first match or Dempster-Shaffer theory depending on the flags.  */
364
365   if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
366     first_match = true;
367
368   if (!found)
369     dump_prediction (dump_file, PRED_NO_PREDICTION,
370                      combined_probability, bb, true);
371   else
372     {
373       dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
374                        bb, !first_match);
375       dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
376                        bb, first_match);
377     }
378
379   if (first_match)
380     combined_probability = best_probability;
381   dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, true);
382
383   while (*pnote)
384     {
385       if (REG_NOTE_KIND (*pnote) == REG_BR_PRED)
386         {
387           int predictor = INTVAL (XEXP (XEXP (*pnote, 0), 0));
388           int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1));
389
390           dump_prediction (dump_file, predictor, probability, bb,
391                            !first_match || best_predictor == predictor);
392           *pnote = XEXP (*pnote, 1);
393         }
394       else
395         pnote = &XEXP (*pnote, 1);
396     }
397
398   if (!prob_note)
399     {
400       REG_NOTES (insn)
401         = gen_rtx_EXPR_LIST (REG_BR_PROB,
402                              GEN_INT (combined_probability), REG_NOTES (insn));
403
404       /* Save the prediction into CFG in case we are seeing non-degenerated
405          conditional jump.  */
406       if (bb->succ->succ_next)
407         {
408           BRANCH_EDGE (bb)->probability = combined_probability;
409           FALLTHRU_EDGE (bb)->probability
410             = REG_BR_PROB_BASE - combined_probability;
411         }
412     }
413 }
414
415 /* Combine predictions into single probability and store them into CFG.
416    Remove now useless prediction entries.  */
417
418 static void
419 combine_predictions_for_bb (FILE *file, basic_block bb)
420 {
421   int best_probability = PROB_EVEN;
422   int best_predictor = END_PREDICTORS;
423   int combined_probability = REG_BR_PROB_BASE / 2;
424   int d;
425   bool first_match = false;
426   bool found = false;
427   struct edge_prediction *pred;
428   int nedges = 0;
429   edge e, first = NULL, second = NULL;
430
431   for (e = bb->succ; e; e = e->succ_next)
432     if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
433       {
434         nedges ++;
435         if (first && !second)
436           second = e;
437         if (!first)
438           first = e;
439       }
440
441   /* When there is no successor or only one choice, prediction is easy. 
442
443      We are lazy for now and predict only basic blocks with two outgoing
444      edges.  It is possible to predict generic case too, but we have to
445      ignore first match heuristics and do more involved combining.  Implement
446      this later.  */
447   if (nedges != 2)
448     {
449       for (e = bb->succ; e; e = e->succ_next)
450         if (!(e->flags & (EDGE_EH | EDGE_FAKE)))
451           e->probability = (REG_BR_PROB_BASE + nedges / 2) / nedges;
452         else
453           e->probability = 0;
454       bb_ann (bb)->predictions = NULL;
455       if (file)
456         fprintf (file, "%i edges in bb %i predicted to even probabilities\n",
457                  nedges, bb->index);
458       return;
459     }
460
461   if (file)
462     fprintf (file, "Predictions for bb %i\n", bb->index);
463
464   /* We implement "first match" heuristics and use probability guessed
465      by predictor with smallest index.  */
466   for (pred = bb_ann (bb)->predictions; pred; pred = pred->next)
467     {
468       int predictor = pred->predictor;
469       int probability = pred->probability;
470
471       if (pred->edge != first)
472         probability = REG_BR_PROB_BASE - probability;
473
474       found = true;
475       if (best_predictor > predictor)
476         best_probability = probability, best_predictor = predictor;
477
478       d = (combined_probability * probability
479            + (REG_BR_PROB_BASE - combined_probability)
480            * (REG_BR_PROB_BASE - probability));
481
482       /* Use FP math to avoid overflows of 32bit integers.  */
483       if (d == 0)
484         /* If one probability is 0% and one 100%, avoid division by zero.  */
485         combined_probability = REG_BR_PROB_BASE / 2;
486       else
487         combined_probability = (((double) combined_probability) * probability
488                                 * REG_BR_PROB_BASE / d + 0.5);
489     }
490
491   /* Decide which heuristic to use.  In case we didn't match anything,
492      use no_prediction heuristic, in case we did match, use either
493      first match or Dempster-Shaffer theory depending on the flags.  */
494
495   if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH)
496     first_match = true;
497
498   if (!found)
499     dump_prediction (file, PRED_NO_PREDICTION, combined_probability, bb, true);
500   else
501     {
502       dump_prediction (file, PRED_DS_THEORY, combined_probability, bb,
503                        !first_match);
504       dump_prediction (file, PRED_FIRST_MATCH, best_probability, bb,
505                        first_match);
506     }
507
508   if (first_match)
509     combined_probability = best_probability;
510   dump_prediction (file, PRED_COMBINED, combined_probability, bb, true);
511
512   for (pred = bb_ann (bb)->predictions; pred; pred = pred->next)
513     {
514       int predictor = pred->predictor;
515       int probability = pred->probability;
516
517       if (pred->edge != bb->succ)
518         probability = REG_BR_PROB_BASE - probability;
519       dump_prediction (file, predictor, probability, bb,
520                        !first_match || best_predictor == predictor);
521     }
522   bb_ann (bb)->predictions = NULL;
523
524   first->probability = combined_probability;
525   second->probability = REG_BR_PROB_BASE - combined_probability;
526 }
527
528 /* Predict edge probabilities by exploiting loop structure.
529    When SIMPLELOOPS is set, attempt to count number of iterations by analyzing
530    RTL.  */
531 static void
532 predict_loops (struct loops *loops_info, bool simpleloops)
533 {
534   unsigned i;
535
536   /* Try to predict out blocks in a loop that are not part of a
537      natural loop.  */
538   for (i = 1; i < loops_info->num; i++)
539     {
540       basic_block bb, *bbs;
541       unsigned j;
542       int exits;
543       struct loop *loop = loops_info->parray[i];
544       struct niter_desc desc;
545       unsigned HOST_WIDE_INT niter;
546
547       flow_loop_scan (loop, LOOP_EXIT_EDGES);
548       exits = loop->num_exits;
549
550       if (simpleloops)
551         {
552           iv_analysis_loop_init (loop);
553           find_simple_exit (loop, &desc);
554
555           if (desc.simple_p && desc.const_iter)
556             {
557               int prob;
558               niter = desc.niter + 1;
559               if (niter == 0)        /* We might overflow here.  */
560                 niter = desc.niter;
561
562               prob = (REG_BR_PROB_BASE
563                       - (REG_BR_PROB_BASE + niter /2) / niter);
564               /* Branch prediction algorithm gives 0 frequency for everything
565                  after the end of loop for loop having 0 probability to finish.  */
566               if (prob == REG_BR_PROB_BASE)
567                 prob = REG_BR_PROB_BASE - 1;
568               predict_edge (desc.in_edge, PRED_LOOP_ITERATIONS,
569                             prob);
570             }
571         }
572
573       bbs = get_loop_body (loop);
574
575       for (j = 0; j < loop->num_nodes; j++)
576         {
577           int header_found = 0;
578           edge e;
579
580           bb = bbs[j];
581
582           /* Bypass loop heuristics on continue statement.  These
583              statements construct loops via "non-loop" constructs
584              in the source language and are better to be handled
585              separately.  */
586           if ((simpleloops && !can_predict_insn_p (BB_END (bb)))
587               || predicted_by_p (bb, PRED_CONTINUE))
588             continue;
589
590           /* Loop branch heuristics - predict an edge back to a
591              loop's head as taken.  */
592           for (e = bb->succ; e; e = e->succ_next)
593             if (e->dest == loop->header
594                 && e->src == loop->latch)
595               {
596                 header_found = 1;
597                 predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN);
598               }
599
600           /* Loop exit heuristics - predict an edge exiting the loop if the
601              conditional has no loop header successors as not taken.  */
602           if (!header_found)
603             for (e = bb->succ; e; e = e->succ_next)
604               if (e->dest->index < 0
605                   || !flow_bb_inside_loop_p (loop, e->dest))
606                 predict_edge
607                   (e, PRED_LOOP_EXIT,
608                    (REG_BR_PROB_BASE
609                     - predictor_info [(int) PRED_LOOP_EXIT].hitrate)
610                    / exits);
611         }
612       
613       /* Free basic blocks from get_loop_body.  */
614       free (bbs);
615     }
616 }
617
618 /* Statically estimate the probability that a branch will be taken and produce
619    estimated profile.  When profile feedback is present never executed portions
620    of function gets estimated.  */
621
622 void
623 estimate_probability (struct loops *loops_info)
624 {
625   basic_block bb;
626
627   connect_infinite_loops_to_exit ();
628   calculate_dominance_info (CDI_DOMINATORS);
629   calculate_dominance_info (CDI_POST_DOMINATORS);
630
631   predict_loops (loops_info, true);
632
633   iv_analysis_done ();
634
635   /* Attempt to predict conditional jumps using a number of heuristics.  */
636   FOR_EACH_BB (bb)
637     {
638       rtx last_insn = BB_END (bb);
639       rtx cond;
640       edge e;
641
642       if (! can_predict_insn_p (last_insn))
643         continue;
644
645       for (e = bb->succ; e; e = e->succ_next)
646         {
647           /* Predict early returns to be probable, as we've already taken
648              care for error returns and other are often used for fast paths
649              trought function.  */
650           if ((e->dest == EXIT_BLOCK_PTR
651                || (e->dest->succ && !e->dest->succ->succ_next
652                    && e->dest->succ->dest == EXIT_BLOCK_PTR))
653                && !predicted_by_p (bb, PRED_NULL_RETURN)
654                && !predicted_by_p (bb, PRED_CONST_RETURN)
655                && !predicted_by_p (bb, PRED_NEGATIVE_RETURN)
656                && !last_basic_block_p (e->dest))
657             predict_edge_def (e, PRED_EARLY_RETURN, TAKEN);
658
659           /* Look for block we are guarding (ie we dominate it,
660              but it doesn't postdominate us).  */
661           if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
662               && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
663               && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
664             {
665               rtx insn;
666
667               /* The call heuristic claims that a guarded function call
668                  is improbable.  This is because such calls are often used
669                  to signal exceptional situations such as printing error
670                  messages.  */
671               for (insn = BB_HEAD (e->dest); insn != NEXT_INSN (BB_END (e->dest));
672                    insn = NEXT_INSN (insn))
673                 if (CALL_P (insn)
674                     /* Constant and pure calls are hardly used to signalize
675                        something exceptional.  */
676                     && ! CONST_OR_PURE_CALL_P (insn))
677                   {
678                     predict_edge_def (e, PRED_CALL, NOT_TAKEN);
679                     break;
680                   }
681             }
682         }
683
684       cond = get_condition (last_insn, NULL, false, false);
685       if (! cond)
686         continue;
687
688       /* Try "pointer heuristic."
689          A comparison ptr == 0 is predicted as false.
690          Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
691       if (COMPARISON_P (cond)
692           && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0)))
693               || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1)))))
694         {
695           if (GET_CODE (cond) == EQ)
696             predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
697           else if (GET_CODE (cond) == NE)
698             predict_insn_def (last_insn, PRED_POINTER, TAKEN);
699         }
700       else
701
702       /* Try "opcode heuristic."
703          EQ tests are usually false and NE tests are usually true. Also,
704          most quantities are positive, so we can make the appropriate guesses
705          about signed comparisons against zero.  */
706         switch (GET_CODE (cond))
707           {
708           case CONST_INT:
709             /* Unconditional branch.  */
710             predict_insn_def (last_insn, PRED_UNCONDITIONAL,
711                               cond == const0_rtx ? NOT_TAKEN : TAKEN);
712             break;
713
714           case EQ:
715           case UNEQ:
716             /* Floating point comparisons appears to behave in a very
717                unpredictable way because of special role of = tests in
718                FP code.  */
719             if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
720               ;
721             /* Comparisons with 0 are often used for booleans and there is
722                nothing useful to predict about them.  */
723             else if (XEXP (cond, 1) == const0_rtx
724                      || XEXP (cond, 0) == const0_rtx)
725               ;
726             else
727               predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
728             break;
729
730           case NE:
731           case LTGT:
732             /* Floating point comparisons appears to behave in a very
733                unpredictable way because of special role of = tests in
734                FP code.  */
735             if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
736               ;
737             /* Comparisons with 0 are often used for booleans and there is
738                nothing useful to predict about them.  */
739             else if (XEXP (cond, 1) == const0_rtx
740                      || XEXP (cond, 0) == const0_rtx)
741               ;
742             else
743               predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
744             break;
745
746           case ORDERED:
747             predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
748             break;
749
750           case UNORDERED:
751             predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
752             break;
753
754           case LE:
755           case LT:
756             if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
757                 || XEXP (cond, 1) == constm1_rtx)
758               predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
759             break;
760
761           case GE:
762           case GT:
763             if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
764                 || XEXP (cond, 1) == constm1_rtx)
765               predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
766             break;
767
768           default:
769             break;
770           }
771     }
772
773   /* Attach the combined probability to each conditional jump.  */
774   FOR_EACH_BB (bb)
775     if (JUMP_P (BB_END (bb))
776         && any_condjump_p (BB_END (bb))
777         && bb->succ->succ_next != NULL)
778       combine_predictions_for_insn (BB_END (bb), bb);
779
780   remove_fake_exit_edges ();
781   /* Fill in the probability values in flowgraph based on the REG_BR_PROB
782      notes.  */
783   FOR_EACH_BB (bb)
784     {
785       rtx last_insn = BB_END (bb);
786
787       if (!can_predict_insn_p (last_insn))
788         {
789           /* We can predict only conditional jumps at the moment.
790              Expect each edge to be equally probable.
791              ?? In the future we want to make abnormal edges improbable.  */
792           int nedges = 0;
793           edge e;
794
795           for (e = bb->succ; e; e = e->succ_next)
796             {
797               nedges++;
798               if (e->probability != 0)
799                 break;
800             }
801           if (!e)
802             for (e = bb->succ; e; e = e->succ_next)
803               e->probability = (REG_BR_PROB_BASE + nedges / 2) / nedges;
804         }
805     }
806   estimate_bb_frequencies (loops_info);
807   free_dominance_info (CDI_POST_DOMINATORS);
808   if (profile_status == PROFILE_ABSENT)
809     profile_status = PROFILE_GUESSED;
810 }
811 \f
812
813 /* Predict using opcode of the last statement in basic block.  */
814 static void
815 tree_predict_by_opcode (basic_block bb)
816 {
817   tree stmt = last_stmt (bb);
818   edge then_edge;
819   tree cond;
820   tree op0;
821   tree type;
822
823   if (!stmt || TREE_CODE (stmt) != COND_EXPR)
824     return;
825   for (then_edge = bb->succ; then_edge; then_edge = then_edge->succ_next)
826     if (then_edge->flags & EDGE_TRUE_VALUE)
827        break;
828   cond = TREE_OPERAND (stmt, 0);
829   if (TREE_CODE_CLASS (TREE_CODE (cond)) != '<')
830     return;
831   op0 = TREE_OPERAND (cond, 0);
832   type = TREE_TYPE (op0);
833   /* Try "pointer heuristic."
834      A comparison ptr == 0 is predicted as false.
835      Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
836   if (POINTER_TYPE_P (type))
837     {
838       if (TREE_CODE (cond) == EQ_EXPR)
839         predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
840       else if (TREE_CODE (cond) == NE_EXPR)
841         predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
842     }
843   else
844
845   /* Try "opcode heuristic."
846      EQ tests are usually false and NE tests are usually true. Also,
847      most quantities are positive, so we can make the appropriate guesses
848      about signed comparisons against zero.  */
849     switch (TREE_CODE (cond))
850       {
851       case EQ_EXPR:
852       case UNEQ_EXPR:
853         /* Floating point comparisons appears to behave in a very
854            unpredictable way because of special role of = tests in
855            FP code.  */
856         if (FLOAT_TYPE_P (type))
857           ;
858         /* Comparisons with 0 are often used for booleans and there is
859            nothing useful to predict about them.  */
860         else if (integer_zerop (op0)
861                  || integer_zerop (TREE_OPERAND (cond, 1)))
862           ;
863         else
864           predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
865         break;
866
867       case NE_EXPR:
868       case LTGT_EXPR:
869         /* Floating point comparisons appears to behave in a very
870            unpredictable way because of special role of = tests in
871            FP code.  */
872         if (FLOAT_TYPE_P (type))
873           ;
874         /* Comparisons with 0 are often used for booleans and there is
875            nothing useful to predict about them.  */
876         else if (integer_zerop (op0)
877                  || integer_zerop (TREE_OPERAND (cond, 1)))
878           ;
879         else
880           predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
881         break;
882
883       case ORDERED_EXPR:
884         predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
885         break;
886
887       case UNORDERED_EXPR:
888         predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
889         break;
890
891       case LE_EXPR:
892       case LT_EXPR:
893         if (integer_zerop (TREE_OPERAND (cond, 1))
894             || integer_onep (TREE_OPERAND (cond, 1))
895             || integer_all_onesp (TREE_OPERAND (cond, 1))
896             || real_zerop (TREE_OPERAND (cond, 1))
897             || real_onep (TREE_OPERAND (cond, 1))
898             || real_minus_onep (TREE_OPERAND (cond, 1)))
899           predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
900         break;
901
902       case GE_EXPR:
903       case GT_EXPR:
904         if (integer_zerop (TREE_OPERAND (cond, 1))
905             || integer_onep (TREE_OPERAND (cond, 1))
906             || integer_all_onesp (TREE_OPERAND (cond, 1))
907             || real_zerop (TREE_OPERAND (cond, 1))
908             || real_onep (TREE_OPERAND (cond, 1))
909             || real_minus_onep (TREE_OPERAND (cond, 1)))
910           predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
911         break;
912
913       default:
914         break;
915       }
916 }
917
918 /* Predict branch probabilities and estimate profile of the tree CFG.  */
919 static void
920 tree_estimate_probability (void)
921 {
922   basic_block bb;
923   struct loops loops_info;
924
925   flow_loops_find (&loops_info, LOOP_TREE);
926   if (dump_file && (dump_flags & TDF_DETAILS))
927     flow_loops_dump (&loops_info, dump_file, NULL, 0);
928
929   connect_infinite_loops_to_exit ();
930   calculate_dominance_info (CDI_DOMINATORS);
931   calculate_dominance_info (CDI_POST_DOMINATORS);
932
933   predict_loops (&loops_info, false);
934
935   FOR_EACH_BB (bb)
936     {
937       edge e;
938
939       for (e = bb->succ; e; e = e->succ_next)
940         {
941           /* Predict early returns to be probable, as we've already taken
942              care for error returns and other are often used for fast paths
943              trought function.  */
944           if ((e->dest == EXIT_BLOCK_PTR
945                || (e->dest->succ && !e->dest->succ->succ_next
946                    && e->dest->succ->dest == EXIT_BLOCK_PTR))
947                && !predicted_by_p (bb, PRED_NULL_RETURN)
948                && !predicted_by_p (bb, PRED_CONST_RETURN)
949                && !predicted_by_p (bb, PRED_NEGATIVE_RETURN)
950                && !last_basic_block_p (e->dest))
951             predict_edge_def (e, PRED_EARLY_RETURN, TAKEN);
952
953           /* Look for block we are guarding (ie we dominate it,
954              but it doesn't postdominate us).  */
955           if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
956               && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
957               && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
958             {
959               block_stmt_iterator bi;
960
961               /* The call heuristic claims that a guarded function call
962                  is improbable.  This is because such calls are often used
963                  to signal exceptional situations such as printing error
964                  messages.  */
965               for (bi = bsi_start (e->dest); !bsi_end_p (bi);
966                    bsi_next (&bi))
967                 {
968                   tree stmt = bsi_stmt (bi);
969                   if ((TREE_CODE (stmt) == CALL_EXPR
970                        || (TREE_CODE (stmt) == MODIFY_EXPR
971                            && TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR))
972                       /* Constant and pure calls are hardly used to signalize
973                          something exceptional.  */
974                       && TREE_SIDE_EFFECTS (stmt))
975                     {
976                       predict_edge_def (e, PRED_CALL, NOT_TAKEN);
977                       break;
978                     }
979                 }
980             }
981         }
982       tree_predict_by_opcode (bb);
983     }
984   FOR_EACH_BB (bb)
985     combine_predictions_for_bb (dump_file, bb);
986
987   estimate_bb_frequencies (&loops_info);
988   free_dominance_info (CDI_POST_DOMINATORS);
989   remove_fake_exit_edges ();
990   flow_loops_free (&loops_info);
991   if (dump_file && (dump_flags & TDF_DETAILS))
992     dump_tree_cfg (dump_file, dump_flags);
993   if (profile_status == PROFILE_ABSENT)
994     profile_status = PROFILE_GUESSED;
995 }
996 \f
997 /* __builtin_expect dropped tokens into the insn stream describing expected
998    values of registers.  Generate branch probabilities based off these
999    values.  */
1000
1001 void
1002 expected_value_to_br_prob (void)
1003 {
1004   rtx insn, cond, ev = NULL_RTX, ev_reg = NULL_RTX;
1005
1006   for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
1007     {
1008       switch (GET_CODE (insn))
1009         {
1010         case NOTE:
1011           /* Look for expected value notes.  */
1012           if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EXPECTED_VALUE)
1013             {
1014               ev = NOTE_EXPECTED_VALUE (insn);
1015               ev_reg = XEXP (ev, 0);
1016               delete_insn (insn);
1017             }
1018           continue;
1019
1020         case CODE_LABEL:
1021           /* Never propagate across labels.  */
1022           ev = NULL_RTX;
1023           continue;
1024
1025         case JUMP_INSN:
1026           /* Look for simple conditional branches.  If we haven't got an
1027              expected value yet, no point going further.  */
1028           if (!JUMP_P (insn) || ev == NULL_RTX
1029               || ! any_condjump_p (insn))
1030             continue;
1031           break;
1032
1033         default:
1034           /* Look for insns that clobber the EV register.  */
1035           if (ev && reg_set_p (ev_reg, insn))
1036             ev = NULL_RTX;
1037           continue;
1038         }
1039
1040       /* Collect the branch condition, hopefully relative to EV_REG.  */
1041       /* ???  At present we'll miss things like
1042                 (expected_value (eq r70 0))
1043                 (set r71 -1)
1044                 (set r80 (lt r70 r71))
1045                 (set pc (if_then_else (ne r80 0) ...))
1046          as canonicalize_condition will render this to us as
1047                 (lt r70, r71)
1048          Could use cselib to try and reduce this further.  */
1049       cond = XEXP (SET_SRC (pc_set (insn)), 0);
1050       cond = canonicalize_condition (insn, cond, 0, NULL, ev_reg,
1051                                      false, false);
1052       if (! cond || XEXP (cond, 0) != ev_reg
1053           || GET_CODE (XEXP (cond, 1)) != CONST_INT)
1054         continue;
1055
1056       /* Substitute and simplify.  Given that the expression we're
1057          building involves two constants, we should wind up with either
1058          true or false.  */
1059       cond = gen_rtx_fmt_ee (GET_CODE (cond), VOIDmode,
1060                              XEXP (ev, 1), XEXP (cond, 1));
1061       cond = simplify_rtx (cond);
1062
1063       /* Turn the condition into a scaled branch probability.  */
1064       if (cond != const_true_rtx && cond != const0_rtx)
1065         abort ();
1066       predict_insn_def (insn, PRED_BUILTIN_EXPECT,
1067                         cond == const_true_rtx ? TAKEN : NOT_TAKEN);
1068     }
1069 }
1070 \f
1071 /* Check whether this is the last basic block of function.  Commonly
1072    there is one extra common cleanup block.  */
1073 static bool
1074 last_basic_block_p (basic_block bb)
1075 {
1076   if (bb == EXIT_BLOCK_PTR)
1077     return false;
1078
1079   return (bb->next_bb == EXIT_BLOCK_PTR
1080           || (bb->next_bb->next_bb == EXIT_BLOCK_PTR
1081               && bb->succ && !bb->succ->succ_next
1082               && bb->succ->dest->next_bb == EXIT_BLOCK_PTR));
1083 }
1084 \f
1085 /* This is used to carry information about basic blocks.  It is
1086    attached to the AUX field of the standard CFG block.  */
1087
1088 typedef struct block_info_def
1089 {
1090   /* Estimated frequency of execution of basic_block.  */
1091   sreal frequency;
1092
1093   /* To keep queue of basic blocks to process.  */
1094   basic_block next;
1095
1096   /* True if block needs to be visited in propagate_freq.  */
1097   unsigned int tovisit:1;
1098
1099   /* Number of predecessors we need to visit first.  */
1100   int npredecessors;
1101 } *block_info;
1102
1103 /* Similar information for edges.  */
1104 typedef struct edge_info_def
1105 {
1106   /* In case edge is an loopback edge, the probability edge will be reached
1107      in case header is.  Estimated number of iterations of the loop can be
1108      then computed as 1 / (1 - back_edge_prob).  */
1109   sreal back_edge_prob;
1110   /* True if the edge is an loopback edge in the natural loop.  */
1111   unsigned int back_edge:1;
1112 } *edge_info;
1113
1114 #define BLOCK_INFO(B)   ((block_info) (B)->aux)
1115 #define EDGE_INFO(E)    ((edge_info) (E)->aux)
1116
1117 /* Helper function for estimate_bb_frequencies.
1118    Propagate the frequencies for LOOP.  */
1119
1120 static void
1121 propagate_freq (struct loop *loop)
1122 {
1123   basic_block head = loop->header;
1124   basic_block bb;
1125   basic_block last;
1126   edge e;
1127   basic_block nextbb;
1128
1129   /* For each basic block we need to visit count number of his predecessors
1130      we need to visit first.  */
1131   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1132     {
1133       if (BLOCK_INFO (bb)->tovisit)
1134         {
1135           int count = 0;
1136
1137           for (e = bb->pred; e; e = e->pred_next)
1138             if (BLOCK_INFO (e->src)->tovisit && !(e->flags & EDGE_DFS_BACK))
1139               count++;
1140             else if (BLOCK_INFO (e->src)->tovisit
1141                      && dump_file && !EDGE_INFO (e)->back_edge)
1142               fprintf (dump_file,
1143                        "Irreducible region hit, ignoring edge to %i->%i\n",
1144                        e->src->index, bb->index);
1145           BLOCK_INFO (bb)->npredecessors = count;
1146         }
1147     }
1148
1149   memcpy (&BLOCK_INFO (head)->frequency, &real_one, sizeof (real_one));
1150   last = head;
1151   for (bb = head; bb; bb = nextbb)
1152     {
1153       sreal cyclic_probability, frequency;
1154
1155       memcpy (&cyclic_probability, &real_zero, sizeof (real_zero));
1156       memcpy (&frequency, &real_zero, sizeof (real_zero));
1157
1158       nextbb = BLOCK_INFO (bb)->next;
1159       BLOCK_INFO (bb)->next = NULL;
1160
1161       /* Compute frequency of basic block.  */
1162       if (bb != head)
1163         {
1164 #ifdef ENABLE_CHECKING
1165           for (e = bb->pred; e; e = e->pred_next)
1166             if (BLOCK_INFO (e->src)->tovisit && !(e->flags & EDGE_DFS_BACK))
1167               abort ();
1168 #endif
1169
1170           for (e = bb->pred; e; e = e->pred_next)
1171             if (EDGE_INFO (e)->back_edge)
1172               {
1173                 sreal_add (&cyclic_probability, &cyclic_probability,
1174                            &EDGE_INFO (e)->back_edge_prob);
1175               }
1176             else if (!(e->flags & EDGE_DFS_BACK))
1177               {
1178                 sreal tmp;
1179
1180                 /*  frequency += (e->probability
1181                                   * BLOCK_INFO (e->src)->frequency /
1182                                   REG_BR_PROB_BASE);  */
1183
1184                 sreal_init (&tmp, e->probability, 0);
1185                 sreal_mul (&tmp, &tmp, &BLOCK_INFO (e->src)->frequency);
1186                 sreal_mul (&tmp, &tmp, &real_inv_br_prob_base);
1187                 sreal_add (&frequency, &frequency, &tmp);
1188               }
1189
1190           if (sreal_compare (&cyclic_probability, &real_zero) == 0)
1191             {
1192               memcpy (&BLOCK_INFO (bb)->frequency, &frequency,
1193                       sizeof (frequency));
1194             }
1195           else
1196             {
1197               if (sreal_compare (&cyclic_probability, &real_almost_one) > 0)
1198                 {
1199                   memcpy (&cyclic_probability, &real_almost_one,
1200                           sizeof (real_almost_one));
1201                 }
1202
1203               /* BLOCK_INFO (bb)->frequency = frequency
1204                                               / (1 - cyclic_probability) */
1205
1206               sreal_sub (&cyclic_probability, &real_one, &cyclic_probability);
1207               sreal_div (&BLOCK_INFO (bb)->frequency,
1208                          &frequency, &cyclic_probability);
1209             }
1210         }
1211
1212       BLOCK_INFO (bb)->tovisit = 0;
1213
1214       /* Compute back edge frequencies.  */
1215       for (e = bb->succ; e; e = e->succ_next)
1216         if (e->dest == head)
1217           {
1218             sreal tmp;
1219
1220             /* EDGE_INFO (e)->back_edge_prob
1221                   = ((e->probability * BLOCK_INFO (bb)->frequency)
1222                      / REG_BR_PROB_BASE); */
1223
1224             sreal_init (&tmp, e->probability, 0);
1225             sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency);
1226             sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1227                        &tmp, &real_inv_br_prob_base);
1228           }
1229
1230       /* Propagate to successor blocks.  */
1231       for (e = bb->succ; e; e = e->succ_next)
1232         if (!(e->flags & EDGE_DFS_BACK)
1233             && BLOCK_INFO (e->dest)->npredecessors)
1234           {
1235             BLOCK_INFO (e->dest)->npredecessors--;
1236             if (!BLOCK_INFO (e->dest)->npredecessors)
1237               {
1238                 if (!nextbb)
1239                   nextbb = e->dest;
1240                 else
1241                   BLOCK_INFO (last)->next = e->dest;
1242
1243                 last = e->dest;
1244               }
1245            }
1246     }
1247 }
1248
1249 /* Estimate probabilities of loopback edges in loops at same nest level.  */
1250
1251 static void
1252 estimate_loops_at_level (struct loop *first_loop)
1253 {
1254   struct loop *loop;
1255
1256   for (loop = first_loop; loop; loop = loop->next)
1257     {
1258       edge e;
1259       basic_block *bbs;
1260       unsigned i;
1261
1262       estimate_loops_at_level (loop->inner);
1263
1264       if (loop->latch->succ)  /* Do not do this for dummy function loop.  */
1265         {
1266           /* Find current loop back edge and mark it.  */
1267           e = loop_latch_edge (loop);
1268           EDGE_INFO (e)->back_edge = 1;
1269        }
1270
1271       bbs = get_loop_body (loop);
1272       for (i = 0; i < loop->num_nodes; i++)
1273         BLOCK_INFO (bbs[i])->tovisit = 1;
1274       free (bbs);
1275       propagate_freq (loop);
1276     }
1277 }
1278
1279 /* Convert counts measured by profile driven feedback to frequencies.
1280    Return nonzero iff there was any nonzero execution count.  */
1281
1282 static int
1283 counts_to_freqs (void)
1284 {
1285   gcov_type count_max, true_count_max = 0;
1286   basic_block bb;
1287
1288   FOR_EACH_BB (bb)
1289     true_count_max = MAX (bb->count, true_count_max);
1290
1291   count_max = MAX (true_count_max, 1);
1292   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1293     bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max;
1294   return true_count_max;
1295 }
1296
1297 /* Return true if function is likely to be expensive, so there is no point to
1298    optimize performance of prologue, epilogue or do inlining at the expense
1299    of code size growth.  THRESHOLD is the limit of number of instructions
1300    function can execute at average to be still considered not expensive.  */
1301
1302 bool
1303 expensive_function_p (int threshold)
1304 {
1305   unsigned int sum = 0;
1306   basic_block bb;
1307   unsigned int limit;
1308
1309   /* We can not compute accurately for large thresholds due to scaled
1310      frequencies.  */
1311   if (threshold > BB_FREQ_MAX)
1312     abort ();
1313
1314   /* Frequencies are out of range.  This either means that function contains
1315      internal loop executing more than BB_FREQ_MAX times or profile feedback
1316      is available and function has not been executed at all.  */
1317   if (ENTRY_BLOCK_PTR->frequency == 0)
1318     return true;
1319
1320   /* Maximally BB_FREQ_MAX^2 so overflow won't happen.  */
1321   limit = ENTRY_BLOCK_PTR->frequency * threshold;
1322   FOR_EACH_BB (bb)
1323     {
1324       rtx insn;
1325
1326       for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
1327            insn = NEXT_INSN (insn))
1328         if (active_insn_p (insn))
1329           {
1330             sum += bb->frequency;
1331             if (sum > limit)
1332               return true;
1333         }
1334     }
1335
1336   return false;
1337 }
1338
1339 /* Estimate basic blocks frequency by given branch probabilities.  */
1340
1341 static void
1342 estimate_bb_frequencies (struct loops *loops)
1343 {
1344   basic_block bb;
1345   sreal freq_max;
1346
1347   if (!flag_branch_probabilities || !counts_to_freqs ())
1348     {
1349       static int real_values_initialized = 0;
1350
1351       if (!real_values_initialized)
1352         {
1353           real_values_initialized = 1;
1354           sreal_init (&real_zero, 0, 0);
1355           sreal_init (&real_one, 1, 0);
1356           sreal_init (&real_br_prob_base, REG_BR_PROB_BASE, 0);
1357           sreal_init (&real_bb_freq_max, BB_FREQ_MAX, 0);
1358           sreal_init (&real_one_half, 1, -1);
1359           sreal_div (&real_inv_br_prob_base, &real_one, &real_br_prob_base);
1360           sreal_sub (&real_almost_one, &real_one, &real_inv_br_prob_base);
1361         }
1362
1363       mark_dfs_back_edges ();
1364
1365       ENTRY_BLOCK_PTR->succ->probability = REG_BR_PROB_BASE;
1366
1367       /* Set up block info for each basic block.  */
1368       alloc_aux_for_blocks (sizeof (struct block_info_def));
1369       alloc_aux_for_edges (sizeof (struct edge_info_def));
1370       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1371         {
1372           edge e;
1373
1374           BLOCK_INFO (bb)->tovisit = 0;
1375           for (e = bb->succ; e; e = e->succ_next)
1376             {
1377               sreal_init (&EDGE_INFO (e)->back_edge_prob, e->probability, 0);
1378               sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1379                          &EDGE_INFO (e)->back_edge_prob,
1380                          &real_inv_br_prob_base);
1381             }
1382         }
1383
1384       /* First compute probabilities locally for each loop from innermost
1385          to outermost to examine probabilities for back edges.  */
1386       estimate_loops_at_level (loops->tree_root);
1387
1388       memcpy (&freq_max, &real_zero, sizeof (real_zero));
1389       FOR_EACH_BB (bb)
1390         if (sreal_compare (&freq_max, &BLOCK_INFO (bb)->frequency) < 0)
1391           memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, sizeof (freq_max));
1392
1393       sreal_div (&freq_max, &real_bb_freq_max, &freq_max);
1394       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1395         {
1396           sreal tmp;
1397
1398           sreal_mul (&tmp, &BLOCK_INFO (bb)->frequency, &freq_max);
1399           sreal_add (&tmp, &tmp, &real_one_half);
1400           bb->frequency = sreal_to_int (&tmp);
1401         }
1402
1403       free_aux_for_blocks ();
1404       free_aux_for_edges ();
1405     }
1406   compute_function_frequency ();
1407   if (flag_reorder_functions)
1408     choose_function_section ();
1409 }
1410
1411 /* Decide whether function is hot, cold or unlikely executed.  */
1412 static void
1413 compute_function_frequency (void)
1414 {
1415   basic_block bb;
1416
1417   if (!profile_info || !flag_branch_probabilities)
1418     return;
1419   cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
1420   FOR_EACH_BB (bb)
1421     {
1422       if (maybe_hot_bb_p (bb))
1423         {
1424           cfun->function_frequency = FUNCTION_FREQUENCY_HOT;
1425           return;
1426         }
1427       if (!probably_never_executed_bb_p (bb))
1428         cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
1429     }
1430 }
1431
1432 /* Choose appropriate section for the function.  */
1433 static void
1434 choose_function_section (void)
1435 {
1436   if (DECL_SECTION_NAME (current_function_decl)
1437       || !targetm.have_named_sections
1438       /* Theoretically we can split the gnu.linkonce text section too,
1439          but this requires more work as the frequency needs to match
1440          for all generated objects so we need to merge the frequency
1441          of all instances.  For now just never set frequency for these.  */
1442       || DECL_ONE_ONLY (current_function_decl))
1443     return;
1444
1445   /* If we are doing the partitioning optimization, let the optimization
1446      choose the correct section into which to put things.  */
1447
1448   if (flag_reorder_blocks_and_partition)
1449     return;
1450
1451   if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
1452     DECL_SECTION_NAME (current_function_decl) =
1453       build_string (strlen (HOT_TEXT_SECTION_NAME), HOT_TEXT_SECTION_NAME);
1454   if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
1455     DECL_SECTION_NAME (current_function_decl) =
1456       build_string (strlen (UNLIKELY_EXECUTED_TEXT_SECTION_NAME),
1457                     UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
1458 }
1459
1460
1461 struct tree_opt_pass pass_profile = 
1462 {
1463   "profile",                            /* name */
1464   NULL,                                 /* gate */
1465   tree_estimate_probability,            /* execute */
1466   NULL,                                 /* sub */
1467   NULL,                                 /* next */
1468   0,                                    /* static_pass_number */
1469   TV_BRANCH_PROB,                       /* tv_id */
1470   PROP_cfg,                             /* properties_required */
1471   0,                                    /* properties_provided */
1472   0,                                    /* properties_destroyed */
1473   0,                                    /* todo_flags_start */
1474   TODO_ggc_collect | TODO_verify_ssa    /* todo_flags_finish */
1475 };