OSDN Git Service

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