OSDN Git Service

.:
[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 *, bitmap);
77 static void propagate_freq (struct loop *, bitmap);
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_finalize ();
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   mark_irreducible_loops (&loops_info);
1304   predict_loops (&loops_info, false);
1305
1306   FOR_EACH_BB (bb)
1307     {
1308       edge e;
1309       edge_iterator ei;
1310
1311       FOR_EACH_EDGE (e, ei, bb->succs)
1312         {
1313           /* Predict early returns to be probable, as we've already taken
1314              care for error returns and other cases are often used for
1315              fast paths trought function.  */
1316           if (e->dest == EXIT_BLOCK_PTR
1317               && TREE_CODE (last_stmt (bb)) == RETURN_EXPR
1318               && EDGE_COUNT (bb->preds) > 1)
1319             {
1320               edge e1;
1321               edge_iterator ei1;
1322
1323               FOR_EACH_EDGE (e1, ei1, bb->preds)
1324                 if (!predicted_by_p (e1->src, PRED_NULL_RETURN)
1325                     && !predicted_by_p (e1->src, PRED_CONST_RETURN)
1326                     && !predicted_by_p (e1->src, PRED_NEGATIVE_RETURN)
1327                     && !last_basic_block_p (e1->src))
1328                   predict_edge_def (e1, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
1329             }
1330
1331           /* Look for block we are guarding (ie we dominate it,
1332              but it doesn't postdominate us).  */
1333           if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
1334               && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
1335               && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
1336             {
1337               block_stmt_iterator bi;
1338
1339               /* The call heuristic claims that a guarded function call
1340                  is improbable.  This is because such calls are often used
1341                  to signal exceptional situations such as printing error
1342                  messages.  */
1343               for (bi = bsi_start (e->dest); !bsi_end_p (bi);
1344                    bsi_next (&bi))
1345                 {
1346                   tree stmt = bsi_stmt (bi);
1347                   if ((TREE_CODE (stmt) == CALL_EXPR
1348                        || (TREE_CODE (stmt) == MODIFY_EXPR
1349                            && TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR))
1350                       /* Constant and pure calls are hardly used to signalize
1351                          something exceptional.  */
1352                       && TREE_SIDE_EFFECTS (stmt))
1353                     {
1354                       predict_edge_def (e, PRED_CALL, NOT_TAKEN);
1355                       break;
1356                     }
1357                 }
1358             }
1359         }
1360       tree_predict_by_opcode (bb);
1361     }
1362   FOR_EACH_BB (bb)
1363     combine_predictions_for_bb (dump_file, bb);
1364
1365   if (0)  /* FIXME: Enable once we are pass down the profile to RTL level.  */
1366     strip_builtin_expect ();
1367   estimate_bb_frequencies (&loops_info);
1368   free_dominance_info (CDI_POST_DOMINATORS);
1369   remove_fake_exit_edges ();
1370   flow_loops_free (&loops_info);
1371   if (dump_file && (dump_flags & TDF_DETAILS))
1372     dump_tree_cfg (dump_file, dump_flags);
1373   if (profile_status == PROFILE_ABSENT)
1374     profile_status = PROFILE_GUESSED;
1375 }
1376 \f
1377 /* __builtin_expect dropped tokens into the insn stream describing expected
1378    values of registers.  Generate branch probabilities based off these
1379    values.  */
1380
1381 void
1382 expected_value_to_br_prob (void)
1383 {
1384   rtx insn, cond, ev = NULL_RTX, ev_reg = NULL_RTX;
1385
1386   for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
1387     {
1388       switch (GET_CODE (insn))
1389         {
1390         case NOTE:
1391           /* Look for expected value notes.  */
1392           if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EXPECTED_VALUE)
1393             {
1394               ev = NOTE_EXPECTED_VALUE (insn);
1395               ev_reg = XEXP (ev, 0);
1396               delete_insn (insn);
1397             }
1398           continue;
1399
1400         case CODE_LABEL:
1401           /* Never propagate across labels.  */
1402           ev = NULL_RTX;
1403           continue;
1404
1405         case JUMP_INSN:
1406           /* Look for simple conditional branches.  If we haven't got an
1407              expected value yet, no point going further.  */
1408           if (!JUMP_P (insn) || ev == NULL_RTX
1409               || ! any_condjump_p (insn))
1410             continue;
1411           break;
1412
1413         default:
1414           /* Look for insns that clobber the EV register.  */
1415           if (ev && reg_set_p (ev_reg, insn))
1416             ev = NULL_RTX;
1417           continue;
1418         }
1419
1420       /* Collect the branch condition, hopefully relative to EV_REG.  */
1421       /* ???  At present we'll miss things like
1422                 (expected_value (eq r70 0))
1423                 (set r71 -1)
1424                 (set r80 (lt r70 r71))
1425                 (set pc (if_then_else (ne r80 0) ...))
1426          as canonicalize_condition will render this to us as
1427                 (lt r70, r71)
1428          Could use cselib to try and reduce this further.  */
1429       cond = XEXP (SET_SRC (pc_set (insn)), 0);
1430       cond = canonicalize_condition (insn, cond, 0, NULL, ev_reg,
1431                                      false, false);
1432       if (! cond || XEXP (cond, 0) != ev_reg
1433           || GET_CODE (XEXP (cond, 1)) != CONST_INT)
1434         continue;
1435
1436       /* Substitute and simplify.  Given that the expression we're
1437          building involves two constants, we should wind up with either
1438          true or false.  */
1439       cond = gen_rtx_fmt_ee (GET_CODE (cond), VOIDmode,
1440                              XEXP (ev, 1), XEXP (cond, 1));
1441       cond = simplify_rtx (cond);
1442
1443       /* Turn the condition into a scaled branch probability.  */
1444       if (cond != const_true_rtx && cond != const0_rtx)
1445         abort ();
1446       predict_insn_def (insn, PRED_BUILTIN_EXPECT,
1447                         cond == const_true_rtx ? TAKEN : NOT_TAKEN);
1448     }
1449 }
1450 \f
1451 /* Check whether this is the last basic block of function.  Commonly
1452    there is one extra common cleanup block.  */
1453 static bool
1454 last_basic_block_p (basic_block bb)
1455 {
1456   if (bb == EXIT_BLOCK_PTR)
1457     return false;
1458
1459   return (bb->next_bb == EXIT_BLOCK_PTR
1460           || (bb->next_bb->next_bb == EXIT_BLOCK_PTR
1461               && EDGE_COUNT (bb->succs) == 1
1462               && EDGE_SUCC (bb, 0)->dest->next_bb == EXIT_BLOCK_PTR));
1463 }
1464
1465 /* Sets branch probabilities according to PREDiction and
1466    FLAGS. HEADS[bb->index] should be index of basic block in that we
1467    need to alter branch predictions (i.e. the first of our dominators
1468    such that we do not post-dominate it) (but we fill this information
1469    on demand, so -1 may be there in case this was not needed yet).  */
1470
1471 static void
1472 predict_paths_leading_to (basic_block bb, int *heads, enum br_predictor pred,
1473                           enum prediction taken)
1474 {
1475   edge e;
1476   edge_iterator ei;
1477   int y;
1478
1479   if (heads[bb->index] < 0)
1480     {
1481       /* This is first time we need this field in heads array; so
1482          find first dominator that we do not post-dominate (we are
1483          using already known members of heads array).  */
1484       basic_block ai = bb;
1485       basic_block next_ai = get_immediate_dominator (CDI_DOMINATORS, bb);
1486       int head;
1487
1488       while (heads[next_ai->index] < 0)
1489         {
1490           if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
1491             break;
1492           heads[next_ai->index] = ai->index;
1493           ai = next_ai;
1494           next_ai = get_immediate_dominator (CDI_DOMINATORS, next_ai);
1495         }
1496       if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
1497         head = next_ai->index;
1498       else
1499         head = heads[next_ai->index];
1500       while (next_ai != bb)
1501         {
1502           next_ai = ai;
1503           if (heads[ai->index] == ENTRY_BLOCK)
1504             ai = ENTRY_BLOCK_PTR;
1505           else
1506             ai = BASIC_BLOCK (heads[ai->index]);
1507           heads[next_ai->index] = head;
1508         }
1509     }
1510   y = heads[bb->index];
1511
1512   /* Now find the edge that leads to our branch and aply the prediction.  */
1513
1514   if (y == last_basic_block)
1515     return;
1516   FOR_EACH_EDGE (e, ei, BASIC_BLOCK (y)->succs)
1517     if (e->dest->index >= 0
1518         && dominated_by_p (CDI_POST_DOMINATORS, e->dest, bb))
1519       predict_edge_def (e, pred, taken);
1520 }
1521 \f
1522 /* This is used to carry information about basic blocks.  It is
1523    attached to the AUX field of the standard CFG block.  */
1524
1525 typedef struct block_info_def
1526 {
1527   /* Estimated frequency of execution of basic_block.  */
1528   sreal frequency;
1529
1530   /* To keep queue of basic blocks to process.  */
1531   basic_block next;
1532
1533   /* Number of predecessors we need to visit first.  */
1534   int npredecessors;
1535 } *block_info;
1536
1537 /* Similar information for edges.  */
1538 typedef struct edge_info_def
1539 {
1540   /* In case edge is an loopback edge, the probability edge will be reached
1541      in case header is.  Estimated number of iterations of the loop can be
1542      then computed as 1 / (1 - back_edge_prob).  */
1543   sreal back_edge_prob;
1544   /* True if the edge is an loopback edge in the natural loop.  */
1545   unsigned int back_edge:1;
1546 } *edge_info;
1547
1548 #define BLOCK_INFO(B)   ((block_info) (B)->aux)
1549 #define EDGE_INFO(E)    ((edge_info) (E)->aux)
1550
1551 /* Helper function for estimate_bb_frequencies.
1552    Propagate the frequencies for LOOP.  */
1553
1554 static void
1555 propagate_freq (struct loop *loop, bitmap tovisit)
1556 {
1557   basic_block head = loop->header;
1558   basic_block bb;
1559   basic_block last;
1560   unsigned i;
1561   edge e;
1562   basic_block nextbb;
1563   bitmap_iterator bi;
1564
1565   /* For each basic block we need to visit count number of his predecessors
1566      we need to visit first.  */
1567   EXECUTE_IF_SET_IN_BITMAP (tovisit, 0, i, bi)
1568     {
1569       edge_iterator ei;
1570       int count = 0;
1571
1572        /* The outermost "loop" includes the exit block, which we can not
1573           look up via BASIC_BLOCK.  Detect this and use EXIT_BLOCK_PTR
1574           directly.  Do the same for the entry block.  */
1575      if (i == (unsigned)ENTRY_BLOCK)
1576        bb = ENTRY_BLOCK_PTR;
1577      else if (i == (unsigned)EXIT_BLOCK)
1578        bb = EXIT_BLOCK_PTR;
1579      else
1580        bb = BASIC_BLOCK (i);
1581
1582       FOR_EACH_EDGE (e, ei, bb->preds)
1583         {
1584           bool visit = bitmap_bit_p (tovisit, e->src->index);
1585
1586           if (visit && !(e->flags & EDGE_DFS_BACK))
1587             count++;
1588           else if (visit && dump_file && !EDGE_INFO (e)->back_edge)
1589             fprintf (dump_file,
1590                      "Irreducible region hit, ignoring edge to %i->%i\n",
1591                      e->src->index, bb->index);
1592         }
1593       BLOCK_INFO (bb)->npredecessors = count;
1594     }
1595
1596   memcpy (&BLOCK_INFO (head)->frequency, &real_one, sizeof (real_one));
1597   last = head;
1598   for (bb = head; bb; bb = nextbb)
1599     {
1600       edge_iterator ei;
1601       sreal cyclic_probability, frequency;
1602
1603       memcpy (&cyclic_probability, &real_zero, sizeof (real_zero));
1604       memcpy (&frequency, &real_zero, sizeof (real_zero));
1605
1606       nextbb = BLOCK_INFO (bb)->next;
1607       BLOCK_INFO (bb)->next = NULL;
1608
1609       /* Compute frequency of basic block.  */
1610       if (bb != head)
1611         {
1612 #ifdef ENABLE_CHECKING
1613           FOR_EACH_EDGE (e, ei, bb->preds)
1614             if (bitmap_bit_p (tovisit, e->src->index)
1615                 && !(e->flags & EDGE_DFS_BACK))
1616               abort ();
1617 #endif
1618
1619           FOR_EACH_EDGE (e, ei, bb->preds)
1620             if (EDGE_INFO (e)->back_edge)
1621               {
1622                 sreal_add (&cyclic_probability, &cyclic_probability,
1623                            &EDGE_INFO (e)->back_edge_prob);
1624               }
1625             else if (!(e->flags & EDGE_DFS_BACK))
1626               {
1627                 sreal tmp;
1628
1629                 /*  frequency += (e->probability
1630                                   * BLOCK_INFO (e->src)->frequency /
1631                                   REG_BR_PROB_BASE);  */
1632
1633                 sreal_init (&tmp, e->probability, 0);
1634                 sreal_mul (&tmp, &tmp, &BLOCK_INFO (e->src)->frequency);
1635                 sreal_mul (&tmp, &tmp, &real_inv_br_prob_base);
1636                 sreal_add (&frequency, &frequency, &tmp);
1637               }
1638
1639           if (sreal_compare (&cyclic_probability, &real_zero) == 0)
1640             {
1641               memcpy (&BLOCK_INFO (bb)->frequency, &frequency,
1642                       sizeof (frequency));
1643             }
1644           else
1645             {
1646               if (sreal_compare (&cyclic_probability, &real_almost_one) > 0)
1647                 {
1648                   memcpy (&cyclic_probability, &real_almost_one,
1649                           sizeof (real_almost_one));
1650                 }
1651
1652               /* BLOCK_INFO (bb)->frequency = frequency
1653                                               / (1 - cyclic_probability) */
1654
1655               sreal_sub (&cyclic_probability, &real_one, &cyclic_probability);
1656               sreal_div (&BLOCK_INFO (bb)->frequency,
1657                          &frequency, &cyclic_probability);
1658             }
1659         }
1660
1661       bitmap_clear_bit (tovisit, bb->index);
1662
1663       /* Compute back edge frequencies.  */
1664       FOR_EACH_EDGE (e, ei, bb->succs)
1665         if (e->dest == head)
1666           {
1667             sreal tmp;
1668             
1669             /* EDGE_INFO (e)->back_edge_prob
1670                = ((e->probability * BLOCK_INFO (bb)->frequency)
1671                / REG_BR_PROB_BASE); */
1672             
1673             sreal_init (&tmp, e->probability, 0);
1674             sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency);
1675             sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1676                        &tmp, &real_inv_br_prob_base);
1677           }
1678
1679       /* Propagate to successor blocks.  */
1680       FOR_EACH_EDGE (e, ei, bb->succs)
1681         if (!(e->flags & EDGE_DFS_BACK)
1682             && BLOCK_INFO (e->dest)->npredecessors)
1683           {
1684             BLOCK_INFO (e->dest)->npredecessors--;
1685             if (!BLOCK_INFO (e->dest)->npredecessors)
1686               {
1687                 if (!nextbb)
1688                   nextbb = e->dest;
1689                 else
1690                   BLOCK_INFO (last)->next = e->dest;
1691                 
1692                 last = e->dest;
1693               }
1694           }
1695     }
1696 }
1697
1698 /* Estimate probabilities of loopback edges in loops at same nest level.  */
1699
1700 static void
1701 estimate_loops_at_level (struct loop *first_loop, bitmap tovisit)
1702 {
1703   struct loop *loop;
1704
1705   for (loop = first_loop; loop; loop = loop->next)
1706     {
1707       edge e;
1708       basic_block *bbs;
1709       unsigned i;
1710
1711       estimate_loops_at_level (loop->inner, tovisit);
1712
1713       /* Do not do this for dummy function loop.  */
1714       if (EDGE_COUNT (loop->latch->succs) > 0)
1715         {
1716           /* Find current loop back edge and mark it.  */
1717           e = loop_latch_edge (loop);
1718           EDGE_INFO (e)->back_edge = 1;
1719        }
1720
1721       bbs = get_loop_body (loop);
1722       for (i = 0; i < loop->num_nodes; i++)
1723         bitmap_set_bit (tovisit, bbs[i]->index);
1724       free (bbs);
1725       propagate_freq (loop, tovisit);
1726     }
1727 }
1728
1729 /* Convert counts measured by profile driven feedback to frequencies.
1730    Return nonzero iff there was any nonzero execution count.  */
1731
1732 int
1733 counts_to_freqs (void)
1734 {
1735   gcov_type count_max, true_count_max = 0;
1736   basic_block bb;
1737
1738   FOR_EACH_BB (bb)
1739     true_count_max = MAX (bb->count, true_count_max);
1740
1741   count_max = MAX (true_count_max, 1);
1742   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1743     bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max;
1744   return true_count_max;
1745 }
1746
1747 /* Return true if function is likely to be expensive, so there is no point to
1748    optimize performance of prologue, epilogue or do inlining at the expense
1749    of code size growth.  THRESHOLD is the limit of number of instructions
1750    function can execute at average to be still considered not expensive.  */
1751
1752 bool
1753 expensive_function_p (int threshold)
1754 {
1755   unsigned int sum = 0;
1756   basic_block bb;
1757   unsigned int limit;
1758
1759   /* We can not compute accurately for large thresholds due to scaled
1760      frequencies.  */
1761   if (threshold > BB_FREQ_MAX)
1762     abort ();
1763
1764   /* Frequencies are out of range.  This either means that function contains
1765      internal loop executing more than BB_FREQ_MAX times or profile feedback
1766      is available and function has not been executed at all.  */
1767   if (ENTRY_BLOCK_PTR->frequency == 0)
1768     return true;
1769
1770   /* Maximally BB_FREQ_MAX^2 so overflow won't happen.  */
1771   limit = ENTRY_BLOCK_PTR->frequency * threshold;
1772   FOR_EACH_BB (bb)
1773     {
1774       rtx insn;
1775
1776       for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
1777            insn = NEXT_INSN (insn))
1778         if (active_insn_p (insn))
1779           {
1780             sum += bb->frequency;
1781             if (sum > limit)
1782               return true;
1783         }
1784     }
1785
1786   return false;
1787 }
1788
1789 /* Estimate basic blocks frequency by given branch probabilities.  */
1790
1791 static void
1792 estimate_bb_frequencies (struct loops *loops)
1793 {
1794   basic_block bb;
1795   sreal freq_max;
1796
1797   if (!flag_branch_probabilities || !counts_to_freqs ())
1798     {
1799       static int real_values_initialized = 0;
1800       bitmap tovisit;
1801
1802       if (!real_values_initialized)
1803         {
1804           real_values_initialized = 1;
1805           sreal_init (&real_zero, 0, 0);
1806           sreal_init (&real_one, 1, 0);
1807           sreal_init (&real_br_prob_base, REG_BR_PROB_BASE, 0);
1808           sreal_init (&real_bb_freq_max, BB_FREQ_MAX, 0);
1809           sreal_init (&real_one_half, 1, -1);
1810           sreal_div (&real_inv_br_prob_base, &real_one, &real_br_prob_base);
1811           sreal_sub (&real_almost_one, &real_one, &real_inv_br_prob_base);
1812         }
1813
1814       mark_dfs_back_edges ();
1815
1816       EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->probability = REG_BR_PROB_BASE;
1817
1818       /* Set up block info for each basic block.  */
1819       tovisit = BITMAP_XMALLOC ();
1820       alloc_aux_for_blocks (sizeof (struct block_info_def));
1821       alloc_aux_for_edges (sizeof (struct edge_info_def));
1822       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1823         {
1824           edge e;
1825           edge_iterator ei;
1826
1827           FOR_EACH_EDGE (e, ei, bb->succs)
1828             {
1829               sreal_init (&EDGE_INFO (e)->back_edge_prob, e->probability, 0);
1830               sreal_mul (&EDGE_INFO (e)->back_edge_prob,
1831                          &EDGE_INFO (e)->back_edge_prob,
1832                          &real_inv_br_prob_base);
1833             }
1834         }
1835
1836       /* First compute probabilities locally for each loop from innermost
1837          to outermost to examine probabilities for back edges.  */
1838       estimate_loops_at_level (loops->tree_root, tovisit);
1839
1840       memcpy (&freq_max, &real_zero, sizeof (real_zero));
1841       FOR_EACH_BB (bb)
1842         if (sreal_compare (&freq_max, &BLOCK_INFO (bb)->frequency) < 0)
1843           memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, sizeof (freq_max));
1844
1845       sreal_div (&freq_max, &real_bb_freq_max, &freq_max);
1846       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1847         {
1848           sreal tmp;
1849
1850           sreal_mul (&tmp, &BLOCK_INFO (bb)->frequency, &freq_max);
1851           sreal_add (&tmp, &tmp, &real_one_half);
1852           bb->frequency = sreal_to_int (&tmp);
1853         }
1854
1855       free_aux_for_blocks ();
1856       free_aux_for_edges ();
1857       BITMAP_XFREE (tovisit);
1858     }
1859   compute_function_frequency ();
1860   if (flag_reorder_functions)
1861     choose_function_section ();
1862 }
1863
1864 /* Decide whether function is hot, cold or unlikely executed.  */
1865 static void
1866 compute_function_frequency (void)
1867 {
1868   basic_block bb;
1869
1870   if (!profile_info || !flag_branch_probabilities)
1871     return;
1872   cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
1873   FOR_EACH_BB (bb)
1874     {
1875       if (maybe_hot_bb_p (bb))
1876         {
1877           cfun->function_frequency = FUNCTION_FREQUENCY_HOT;
1878           return;
1879         }
1880       if (!probably_never_executed_bb_p (bb))
1881         cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
1882     }
1883 }
1884
1885 /* Choose appropriate section for the function.  */
1886 static void
1887 choose_function_section (void)
1888 {
1889   if (DECL_SECTION_NAME (current_function_decl)
1890       || !targetm.have_named_sections
1891       /* Theoretically we can split the gnu.linkonce text section too,
1892          but this requires more work as the frequency needs to match
1893          for all generated objects so we need to merge the frequency
1894          of all instances.  For now just never set frequency for these.  */
1895       || DECL_ONE_ONLY (current_function_decl))
1896     return;
1897
1898   /* If we are doing the partitioning optimization, let the optimization
1899      choose the correct section into which to put things.  */
1900
1901   if (flag_reorder_blocks_and_partition)
1902     return;
1903
1904   if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
1905     DECL_SECTION_NAME (current_function_decl) =
1906       build_string (strlen (HOT_TEXT_SECTION_NAME), HOT_TEXT_SECTION_NAME);
1907   if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
1908     DECL_SECTION_NAME (current_function_decl) =
1909       build_string (strlen (UNLIKELY_EXECUTED_TEXT_SECTION_NAME),
1910                     UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
1911 }
1912
1913
1914 struct tree_opt_pass pass_profile = 
1915 {
1916   "profile",                            /* name */
1917   NULL,                                 /* gate */
1918   tree_estimate_probability,            /* execute */
1919   NULL,                                 /* sub */
1920   NULL,                                 /* next */
1921   0,                                    /* static_pass_number */
1922   TV_BRANCH_PROB,                       /* tv_id */
1923   PROP_cfg,                             /* properties_required */
1924   0,                                    /* properties_provided */
1925   0,                                    /* properties_destroyed */
1926   0,                                    /* todo_flags_start */
1927   TODO_ggc_collect | TODO_verify_ssa,                   /* todo_flags_finish */
1928   0                                     /* letter */
1929 };