OSDN Git Service

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