xref: /dragonfly/contrib/gcc-8.0/gcc/predict.c (revision e5a92d33)
1 /* Branch prediction routines for the GNU compiler.
2    Copyright (C) 2000-2018 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 3, 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 COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19 
20 /* References:
21 
22    [1] "Branch Prediction for Free"
23        Ball and Larus; PLDI '93.
24    [2] "Static Branch Frequency and Program Profile Analysis"
25        Wu and Larus; MICRO-27.
26    [3] "Corpus-based Static Branch Prediction"
27        Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95.  */
28 
29 
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "backend.h"
34 #include "rtl.h"
35 #include "tree.h"
36 #include "gimple.h"
37 #include "cfghooks.h"
38 #include "tree-pass.h"
39 #include "ssa.h"
40 #include "memmodel.h"
41 #include "emit-rtl.h"
42 #include "cgraph.h"
43 #include "coverage.h"
44 #include "diagnostic-core.h"
45 #include "gimple-predict.h"
46 #include "fold-const.h"
47 #include "calls.h"
48 #include "cfganal.h"
49 #include "profile.h"
50 #include "sreal.h"
51 #include "params.h"
52 #include "cfgloop.h"
53 #include "gimple-iterator.h"
54 #include "tree-cfg.h"
55 #include "tree-ssa-loop-niter.h"
56 #include "tree-ssa-loop.h"
57 #include "tree-scalar-evolution.h"
58 #include "ipa-utils.h"
59 #include "gimple-pretty-print.h"
60 #include "selftest.h"
61 #include "cfgrtl.h"
62 #include "stringpool.h"
63 #include "attribs.h"
64 
65 /* Enum with reasons why a predictor is ignored.  */
66 
67 enum predictor_reason
68 {
69   REASON_NONE,
70   REASON_IGNORED,
71   REASON_SINGLE_EDGE_DUPLICATE,
72   REASON_EDGE_PAIR_DUPLICATE
73 };
74 
75 /* String messages for the aforementioned enum.  */
76 
77 static const char *reason_messages[] = {"", " (ignored)",
78     " (single edge duplicate)", " (edge pair duplicate)"};
79 
80 /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE,
81 		   1/REG_BR_PROB_BASE, 0.5, BB_FREQ_MAX.  */
82 static sreal real_almost_one, real_br_prob_base,
83 	     real_inv_br_prob_base, real_one_half, real_bb_freq_max;
84 
85 static void combine_predictions_for_insn (rtx_insn *, basic_block);
86 static void dump_prediction (FILE *, enum br_predictor, int, basic_block,
87 			     enum predictor_reason, edge);
88 static void predict_paths_leading_to (basic_block, enum br_predictor,
89 				      enum prediction,
90 				      struct loop *in_loop = NULL);
91 static void predict_paths_leading_to_edge (edge, enum br_predictor,
92 					   enum prediction,
93 					   struct loop *in_loop = NULL);
94 static bool can_predict_insn_p (const rtx_insn *);
95 
96 /* Information we hold about each branch predictor.
97    Filled using information from predict.def.  */
98 
99 struct predictor_info
100 {
101   const char *const name;	/* Name used in the debugging dumps.  */
102   const int hitrate;		/* Expected hitrate used by
103 				   predict_insn_def call.  */
104   const int flags;
105 };
106 
107 /* Use given predictor without Dempster-Shaffer theory if it matches
108    using first_match heuristics.  */
109 #define PRED_FLAG_FIRST_MATCH 1
110 
111 /* Recompute hitrate in percent to our representation.  */
112 
113 #define HITRATE(VAL) ((int) ((VAL) * REG_BR_PROB_BASE + 50) / 100)
114 
115 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) {NAME, HITRATE, FLAGS},
116 static const struct predictor_info predictor_info[]= {
117 #include "predict.def"
118 
119   /* Upper bound on predictors.  */
120   {NULL, 0, 0}
121 };
122 #undef DEF_PREDICTOR
123 
124 static gcov_type min_count = -1;
125 
126 /* Determine the threshold for hot BB counts.  */
127 
128 gcov_type
129 get_hot_bb_threshold ()
130 {
131   gcov_working_set_t *ws;
132   if (min_count == -1)
133     {
134       ws = find_working_set (PARAM_VALUE (HOT_BB_COUNT_WS_PERMILLE));
135       gcc_assert (ws);
136       min_count = ws->min_counter;
137     }
138   return min_count;
139 }
140 
141 /* Set the threshold for hot BB counts.  */
142 
143 void
144 set_hot_bb_threshold (gcov_type min)
145 {
146   min_count = min;
147 }
148 
149 /* Return TRUE if frequency FREQ is considered to be hot.  */
150 
151 bool
152 maybe_hot_count_p (struct function *fun, profile_count count)
153 {
154   if (!count.initialized_p ())
155     return true;
156   if (count.ipa () == profile_count::zero ())
157     return false;
158   if (!count.ipa_p ())
159     {
160       struct cgraph_node *node = cgraph_node::get (fun->decl);
161       if (!profile_info || profile_status_for_fn (fun) != PROFILE_READ)
162 	{
163 	  if (node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED)
164 	    return false;
165 	  if (node->frequency == NODE_FREQUENCY_HOT)
166 	    return true;
167 	}
168       if (profile_status_for_fn (fun) == PROFILE_ABSENT)
169 	return true;
170       if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
171 	  && count < (ENTRY_BLOCK_PTR_FOR_FN (fun)->count.apply_scale (2, 3)))
172 	return false;
173       if (PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION) == 0)
174 	return false;
175       if (count.apply_scale (PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION), 1)
176 	  < ENTRY_BLOCK_PTR_FOR_FN (fun)->count)
177 	return false;
178       return true;
179     }
180   /* Code executed at most once is not hot.  */
181   if (count <= MAX (profile_info ? profile_info->runs : 1, 1))
182     return false;
183   return (count.to_gcov_type () >= get_hot_bb_threshold ());
184 }
185 
186 /* Return true in case BB can be CPU intensive and should be optimized
187    for maximal performance.  */
188 
189 bool
190 maybe_hot_bb_p (struct function *fun, const_basic_block bb)
191 {
192   gcc_checking_assert (fun);
193   return maybe_hot_count_p (fun, bb->count);
194 }
195 
196 /* Return true in case BB can be CPU intensive and should be optimized
197    for maximal performance.  */
198 
199 bool
200 maybe_hot_edge_p (edge e)
201 {
202   return maybe_hot_count_p (cfun, e->count ());
203 }
204 
205 /* Return true if profile COUNT and FREQUENCY, or function FUN static
206    node frequency reflects never being executed.  */
207 
208 static bool
209 probably_never_executed (struct function *fun,
210                          profile_count count)
211 {
212   gcc_checking_assert (fun);
213   if (count.ipa () == profile_count::zero ())
214     return true;
215   /* Do not trust adjusted counts.  This will make us to drop int cold section
216      code with low execution count as a result of inlining. These low counts
217      are not safe even with read profile and may lead us to dropping
218      code which actually gets executed into cold section of binary that is not
219      desirable.  */
220   if (count.precise_p () && profile_status_for_fn (fun) == PROFILE_READ)
221     {
222       int unlikely_count_fraction = PARAM_VALUE (UNLIKELY_BB_COUNT_FRACTION);
223       if (count.apply_scale (unlikely_count_fraction, 1) >= profile_info->runs)
224 	return false;
225       return true;
226     }
227   if ((!profile_info || profile_status_for_fn (fun) != PROFILE_READ)
228       && (cgraph_node::get (fun->decl)->frequency
229 	  == NODE_FREQUENCY_UNLIKELY_EXECUTED))
230     return true;
231   return false;
232 }
233 
234 
235 /* Return true in case BB is probably never executed.  */
236 
237 bool
238 probably_never_executed_bb_p (struct function *fun, const_basic_block bb)
239 {
240   return probably_never_executed (fun, bb->count);
241 }
242 
243 
244 /* Return true if E is unlikely executed for obvious reasons.  */
245 
246 static bool
247 unlikely_executed_edge_p (edge e)
248 {
249   return (e->count () == profile_count::zero ()
250 	  || e->probability == profile_probability::never ())
251 	 || (e->flags & (EDGE_EH | EDGE_FAKE));
252 }
253 
254 /* Return true in case edge E is probably never executed.  */
255 
256 bool
257 probably_never_executed_edge_p (struct function *fun, edge e)
258 {
259   if (unlikely_executed_edge_p (e))
260     return true;
261   return probably_never_executed (fun, e->count ());
262 }
263 
264 /* Return true when current function should always be optimized for size.  */
265 
266 bool
267 optimize_function_for_size_p (struct function *fun)
268 {
269   if (!fun || !fun->decl)
270     return optimize_size;
271   cgraph_node *n = cgraph_node::get (fun->decl);
272   return n && n->optimize_for_size_p ();
273 }
274 
275 /* Return true when current function should always be optimized for speed.  */
276 
277 bool
278 optimize_function_for_speed_p (struct function *fun)
279 {
280   return !optimize_function_for_size_p (fun);
281 }
282 
283 /* Return the optimization type that should be used for the function FUN.  */
284 
285 optimization_type
286 function_optimization_type (struct function *fun)
287 {
288   return (optimize_function_for_speed_p (fun)
289 	  ? OPTIMIZE_FOR_SPEED
290 	  : OPTIMIZE_FOR_SIZE);
291 }
292 
293 /* Return TRUE when BB should be optimized for size.  */
294 
295 bool
296 optimize_bb_for_size_p (const_basic_block bb)
297 {
298   return (optimize_function_for_size_p (cfun)
299 	  || (bb && !maybe_hot_bb_p (cfun, bb)));
300 }
301 
302 /* Return TRUE when BB should be optimized for speed.  */
303 
304 bool
305 optimize_bb_for_speed_p (const_basic_block bb)
306 {
307   return !optimize_bb_for_size_p (bb);
308 }
309 
310 /* Return the optimization type that should be used for block BB.  */
311 
312 optimization_type
313 bb_optimization_type (const_basic_block bb)
314 {
315   return (optimize_bb_for_speed_p (bb)
316 	  ? OPTIMIZE_FOR_SPEED
317 	  : OPTIMIZE_FOR_SIZE);
318 }
319 
320 /* Return TRUE when BB should be optimized for size.  */
321 
322 bool
323 optimize_edge_for_size_p (edge e)
324 {
325   return optimize_function_for_size_p (cfun) || !maybe_hot_edge_p (e);
326 }
327 
328 /* Return TRUE when BB should be optimized for speed.  */
329 
330 bool
331 optimize_edge_for_speed_p (edge e)
332 {
333   return !optimize_edge_for_size_p (e);
334 }
335 
336 /* Return TRUE when BB should be optimized for size.  */
337 
338 bool
339 optimize_insn_for_size_p (void)
340 {
341   return optimize_function_for_size_p (cfun) || !crtl->maybe_hot_insn_p;
342 }
343 
344 /* Return TRUE when BB should be optimized for speed.  */
345 
346 bool
347 optimize_insn_for_speed_p (void)
348 {
349   return !optimize_insn_for_size_p ();
350 }
351 
352 /* Return TRUE when LOOP should be optimized for size.  */
353 
354 bool
355 optimize_loop_for_size_p (struct loop *loop)
356 {
357   return optimize_bb_for_size_p (loop->header);
358 }
359 
360 /* Return TRUE when LOOP should be optimized for speed.  */
361 
362 bool
363 optimize_loop_for_speed_p (struct loop *loop)
364 {
365   return optimize_bb_for_speed_p (loop->header);
366 }
367 
368 /* Return TRUE when LOOP nest should be optimized for speed.  */
369 
370 bool
371 optimize_loop_nest_for_speed_p (struct loop *loop)
372 {
373   struct loop *l = loop;
374   if (optimize_loop_for_speed_p (loop))
375     return true;
376   l = loop->inner;
377   while (l && l != loop)
378     {
379       if (optimize_loop_for_speed_p (l))
380         return true;
381       if (l->inner)
382         l = l->inner;
383       else if (l->next)
384         l = l->next;
385       else
386         {
387 	  while (l != loop && !l->next)
388 	    l = loop_outer (l);
389 	  if (l != loop)
390 	    l = l->next;
391 	}
392     }
393   return false;
394 }
395 
396 /* Return TRUE when LOOP nest should be optimized for size.  */
397 
398 bool
399 optimize_loop_nest_for_size_p (struct loop *loop)
400 {
401   return !optimize_loop_nest_for_speed_p (loop);
402 }
403 
404 /* Return true when edge E is likely to be well predictable by branch
405    predictor.  */
406 
407 bool
408 predictable_edge_p (edge e)
409 {
410   if (!e->probability.initialized_p ())
411     return false;
412   if ((e->probability.to_reg_br_prob_base ()
413        <= PARAM_VALUE (PARAM_PREDICTABLE_BRANCH_OUTCOME) * REG_BR_PROB_BASE / 100)
414       || (REG_BR_PROB_BASE - e->probability.to_reg_br_prob_base ()
415           <= PARAM_VALUE (PARAM_PREDICTABLE_BRANCH_OUTCOME) * REG_BR_PROB_BASE / 100))
416     return true;
417   return false;
418 }
419 
420 
421 /* Set RTL expansion for BB profile.  */
422 
423 void
424 rtl_profile_for_bb (basic_block bb)
425 {
426   crtl->maybe_hot_insn_p = maybe_hot_bb_p (cfun, bb);
427 }
428 
429 /* Set RTL expansion for edge profile.  */
430 
431 void
432 rtl_profile_for_edge (edge e)
433 {
434   crtl->maybe_hot_insn_p = maybe_hot_edge_p (e);
435 }
436 
437 /* Set RTL expansion to default mode (i.e. when profile info is not known).  */
438 void
439 default_rtl_profile (void)
440 {
441   crtl->maybe_hot_insn_p = true;
442 }
443 
444 /* Return true if the one of outgoing edges is already predicted by
445    PREDICTOR.  */
446 
447 bool
448 rtl_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
449 {
450   rtx note;
451   if (!INSN_P (BB_END (bb)))
452     return false;
453   for (note = REG_NOTES (BB_END (bb)); note; note = XEXP (note, 1))
454     if (REG_NOTE_KIND (note) == REG_BR_PRED
455 	&& INTVAL (XEXP (XEXP (note, 0), 0)) == (int)predictor)
456       return true;
457   return false;
458 }
459 
460 /*  Structure representing predictions in tree level. */
461 
462 struct edge_prediction {
463     struct edge_prediction *ep_next;
464     edge ep_edge;
465     enum br_predictor ep_predictor;
466     int ep_probability;
467 };
468 
469 /* This map contains for a basic block the list of predictions for the
470    outgoing edges.  */
471 
472 static hash_map<const_basic_block, edge_prediction *> *bb_predictions;
473 
474 /* Return true if the one of outgoing edges is already predicted by
475    PREDICTOR.  */
476 
477 bool
478 gimple_predicted_by_p (const_basic_block bb, enum br_predictor predictor)
479 {
480   struct edge_prediction *i;
481   edge_prediction **preds = bb_predictions->get (bb);
482 
483   if (!preds)
484     return false;
485 
486   for (i = *preds; i; i = i->ep_next)
487     if (i->ep_predictor == predictor)
488       return true;
489   return false;
490 }
491 
492 /* Return true if the one of outgoing edges is already predicted by
493    PREDICTOR for edge E predicted as TAKEN.  */
494 
495 bool
496 edge_predicted_by_p (edge e, enum br_predictor predictor, bool taken)
497 {
498   struct edge_prediction *i;
499   basic_block bb = e->src;
500   edge_prediction **preds = bb_predictions->get (bb);
501   if (!preds)
502     return false;
503 
504   int probability = predictor_info[(int) predictor].hitrate;
505 
506   if (taken != TAKEN)
507     probability = REG_BR_PROB_BASE - probability;
508 
509   for (i = *preds; i; i = i->ep_next)
510     if (i->ep_predictor == predictor
511 	&& i->ep_edge == e
512 	&& i->ep_probability == probability)
513       return true;
514   return false;
515 }
516 
517 /* Same predicate as above, working on edges.  */
518 bool
519 edge_probability_reliable_p (const_edge e)
520 {
521   return e->probability.probably_reliable_p ();
522 }
523 
524 /* Same predicate as edge_probability_reliable_p, working on notes.  */
525 bool
526 br_prob_note_reliable_p (const_rtx note)
527 {
528   gcc_assert (REG_NOTE_KIND (note) == REG_BR_PROB);
529   return profile_probability::from_reg_br_prob_note
530 		 (XINT (note, 0)).probably_reliable_p ();
531 }
532 
533 static void
534 predict_insn (rtx_insn *insn, enum br_predictor predictor, int probability)
535 {
536   gcc_assert (any_condjump_p (insn));
537   if (!flag_guess_branch_prob)
538     return;
539 
540   add_reg_note (insn, REG_BR_PRED,
541 		gen_rtx_CONCAT (VOIDmode,
542 				GEN_INT ((int) predictor),
543 				GEN_INT ((int) probability)));
544 }
545 
546 /* Predict insn by given predictor.  */
547 
548 void
549 predict_insn_def (rtx_insn *insn, enum br_predictor predictor,
550 		  enum prediction taken)
551 {
552    int probability = predictor_info[(int) predictor].hitrate;
553    gcc_assert (probability != PROB_UNINITIALIZED);
554 
555    if (taken != TAKEN)
556      probability = REG_BR_PROB_BASE - probability;
557 
558    predict_insn (insn, predictor, probability);
559 }
560 
561 /* Predict edge E with given probability if possible.  */
562 
563 void
564 rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
565 {
566   rtx_insn *last_insn;
567   last_insn = BB_END (e->src);
568 
569   /* We can store the branch prediction information only about
570      conditional jumps.  */
571   if (!any_condjump_p (last_insn))
572     return;
573 
574   /* We always store probability of branching.  */
575   if (e->flags & EDGE_FALLTHRU)
576     probability = REG_BR_PROB_BASE - probability;
577 
578   predict_insn (last_insn, predictor, probability);
579 }
580 
581 /* Predict edge E with the given PROBABILITY.  */
582 void
583 gimple_predict_edge (edge e, enum br_predictor predictor, int probability)
584 {
585   if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
586       && EDGE_COUNT (e->src->succs) > 1
587       && flag_guess_branch_prob
588       && optimize)
589     {
590       struct edge_prediction *i = XNEW (struct edge_prediction);
591       edge_prediction *&preds = bb_predictions->get_or_insert (e->src);
592 
593       i->ep_next = preds;
594       preds = i;
595       i->ep_probability = probability;
596       i->ep_predictor = predictor;
597       i->ep_edge = e;
598     }
599 }
600 
601 /* Filter edge predictions PREDS by a function FILTER.  DATA are passed
602    to the filter function.  */
603 
604 void
605 filter_predictions (edge_prediction **preds,
606 		    bool (*filter) (edge_prediction *, void *), void *data)
607 {
608   if (!bb_predictions)
609     return;
610 
611   if (preds)
612     {
613       struct edge_prediction **prediction = preds;
614       struct edge_prediction *next;
615 
616       while (*prediction)
617 	{
618 	  if ((*filter) (*prediction, data))
619 	    prediction = &((*prediction)->ep_next);
620 	  else
621 	    {
622 	      next = (*prediction)->ep_next;
623 	      free (*prediction);
624 	      *prediction = next;
625 	    }
626 	}
627     }
628 }
629 
630 /* Filter function predicate that returns true for a edge predicate P
631    if its edge is equal to DATA.  */
632 
633 bool
634 equal_edge_p (edge_prediction *p, void *data)
635 {
636   return p->ep_edge == (edge)data;
637 }
638 
639 /* Remove all predictions on given basic block that are attached
640    to edge E.  */
641 void
642 remove_predictions_associated_with_edge (edge e)
643 {
644   if (!bb_predictions)
645     return;
646 
647   edge_prediction **preds = bb_predictions->get (e->src);
648   filter_predictions (preds, equal_edge_p, e);
649 }
650 
651 /* Clears the list of predictions stored for BB.  */
652 
653 static void
654 clear_bb_predictions (basic_block bb)
655 {
656   edge_prediction **preds = bb_predictions->get (bb);
657   struct edge_prediction *pred, *next;
658 
659   if (!preds)
660     return;
661 
662   for (pred = *preds; pred; pred = next)
663     {
664       next = pred->ep_next;
665       free (pred);
666     }
667   *preds = NULL;
668 }
669 
670 /* Return true when we can store prediction on insn INSN.
671    At the moment we represent predictions only on conditional
672    jumps, not at computed jump or other complicated cases.  */
673 static bool
674 can_predict_insn_p (const rtx_insn *insn)
675 {
676   return (JUMP_P (insn)
677 	  && any_condjump_p (insn)
678 	  && EDGE_COUNT (BLOCK_FOR_INSN (insn)->succs) >= 2);
679 }
680 
681 /* Predict edge E by given predictor if possible.  */
682 
683 void
684 predict_edge_def (edge e, enum br_predictor predictor,
685 		  enum prediction taken)
686 {
687    int probability = predictor_info[(int) predictor].hitrate;
688 
689    if (taken != TAKEN)
690      probability = REG_BR_PROB_BASE - probability;
691 
692    predict_edge (e, predictor, probability);
693 }
694 
695 /* Invert all branch predictions or probability notes in the INSN.  This needs
696    to be done each time we invert the condition used by the jump.  */
697 
698 void
699 invert_br_probabilities (rtx insn)
700 {
701   rtx note;
702 
703   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
704     if (REG_NOTE_KIND (note) == REG_BR_PROB)
705       XINT (note, 0) = profile_probability::from_reg_br_prob_note
706 			 (XINT (note, 0)).invert ().to_reg_br_prob_note ();
707     else if (REG_NOTE_KIND (note) == REG_BR_PRED)
708       XEXP (XEXP (note, 0), 1)
709 	= GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1)));
710 }
711 
712 /* Dump information about the branch prediction to the output file.  */
713 
714 static void
715 dump_prediction (FILE *file, enum br_predictor predictor, int probability,
716 		 basic_block bb, enum predictor_reason reason = REASON_NONE,
717 		 edge ep_edge = NULL)
718 {
719   edge e = ep_edge;
720   edge_iterator ei;
721 
722   if (!file)
723     return;
724 
725   if (e == NULL)
726     FOR_EACH_EDGE (e, ei, bb->succs)
727       if (! (e->flags & EDGE_FALLTHRU))
728 	break;
729 
730   char edge_info_str[128];
731   if (ep_edge)
732     sprintf (edge_info_str, " of edge %d->%d", ep_edge->src->index,
733 	     ep_edge->dest->index);
734   else
735     edge_info_str[0] = '\0';
736 
737   fprintf (file, "  %s heuristics%s%s: %.1f%%",
738 	   predictor_info[predictor].name,
739 	   edge_info_str, reason_messages[reason],
740 	   probability * 100.0 / REG_BR_PROB_BASE);
741 
742   if (bb->count.initialized_p ())
743     {
744       fprintf (file, "  exec ");
745       bb->count.dump (file);
746       if (e)
747 	{
748 	  fprintf (file, " hit ");
749 	  e->count ().dump (file);
750 	  fprintf (file, " (%.1f%%)", e->count ().to_gcov_type() * 100.0
751 		   / bb->count.to_gcov_type ());
752 	}
753     }
754 
755   fprintf (file, "\n");
756 
757   /* Print output that be easily read by analyze_brprob.py script. We are
758      interested only in counts that are read from GCDA files.  */
759   if (dump_file && (dump_flags & TDF_DETAILS)
760       && bb->count.precise_p ()
761       && reason == REASON_NONE)
762     {
763       gcc_assert (e->count ().precise_p ());
764       fprintf (file, ";;heuristics;%s;%" PRId64 ";%" PRId64 ";%.1f;\n",
765 	       predictor_info[predictor].name,
766 	       bb->count.to_gcov_type (), e->count ().to_gcov_type (),
767 	       probability * 100.0 / REG_BR_PROB_BASE);
768     }
769 }
770 
771 /* Return true if STMT is known to be unlikely executed.  */
772 
773 static bool
774 unlikely_executed_stmt_p (gimple *stmt)
775 {
776   if (!is_gimple_call (stmt))
777     return false;
778   /* NORETURN attribute alone is not strong enough: exit() may be quite
779      likely executed once during program run.  */
780   if (gimple_call_fntype (stmt)
781       && lookup_attribute ("cold",
782 			   TYPE_ATTRIBUTES (gimple_call_fntype (stmt)))
783       && !lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl)))
784     return true;
785   tree decl = gimple_call_fndecl (stmt);
786   if (!decl)
787     return false;
788   if (lookup_attribute ("cold", DECL_ATTRIBUTES (decl))
789       && !lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl)))
790     return true;
791 
792   cgraph_node *n = cgraph_node::get (decl);
793   if (!n)
794     return false;
795 
796   availability avail;
797   n = n->ultimate_alias_target (&avail);
798   if (avail < AVAIL_AVAILABLE)
799     return false;
800   if (!n->analyzed
801       || n->decl == current_function_decl)
802     return false;
803   return n->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED;
804 }
805 
806 /* Return true if BB is unlikely executed.  */
807 
808 static bool
809 unlikely_executed_bb_p (basic_block bb)
810 {
811   if (bb->count == profile_count::zero ())
812     return true;
813   if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun) || bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
814     return false;
815   for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
816        !gsi_end_p (gsi); gsi_next (&gsi))
817     {
818       if (unlikely_executed_stmt_p (gsi_stmt (gsi)))
819         return true;
820       if (stmt_can_terminate_bb_p (gsi_stmt (gsi)))
821 	return false;
822     }
823   return false;
824 }
825 
826 /* We can not predict the probabilities of outgoing edges of bb.  Set them
827    evenly and hope for the best.  If UNLIKELY_EDGES is not null, distribute
828    even probability for all edges not mentioned in the set.  These edges
829    are given PROB_VERY_UNLIKELY probability.  */
830 
831 static void
832 set_even_probabilities (basic_block bb,
833 			hash_set<edge> *unlikely_edges = NULL)
834 {
835   unsigned nedges = 0, unlikely_count = 0;
836   edge e = NULL;
837   edge_iterator ei;
838   profile_probability all = profile_probability::always ();
839 
840   FOR_EACH_EDGE (e, ei, bb->succs)
841     if (e->probability.initialized_p ())
842       all -= e->probability;
843     else if (!unlikely_executed_edge_p (e))
844       {
845         nedges ++;
846         if (unlikely_edges != NULL && unlikely_edges->contains (e))
847 	  {
848 	    all -= profile_probability::very_unlikely ();
849 	    unlikely_count++;
850 	  }
851       }
852 
853   /* Make the distribution even if all edges are unlikely.  */
854   if (unlikely_count == nedges)
855     {
856       unlikely_edges = NULL;
857       unlikely_count = 0;
858     }
859 
860   unsigned c = nedges - unlikely_count;
861 
862   FOR_EACH_EDGE (e, ei, bb->succs)
863     if (e->probability.initialized_p ())
864       ;
865     else if (!unlikely_executed_edge_p (e))
866       {
867 	if (unlikely_edges != NULL && unlikely_edges->contains (e))
868 	  e->probability = profile_probability::very_unlikely ();
869 	else
870 	  e->probability = all.apply_scale (1, c).guessed ();
871       }
872     else
873       e->probability = profile_probability::never ();
874 }
875 
876 /* Add REG_BR_PROB note to JUMP with PROB.  */
877 
878 void
879 add_reg_br_prob_note (rtx_insn *jump, profile_probability prob)
880 {
881   gcc_checking_assert (JUMP_P (jump) && !find_reg_note (jump, REG_BR_PROB, 0));
882   add_int_reg_note (jump, REG_BR_PROB, prob.to_reg_br_prob_note ());
883 }
884 
885 /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB
886    note if not already present.  Remove now useless REG_BR_PRED notes.  */
887 
888 static void
889 combine_predictions_for_insn (rtx_insn *insn, basic_block bb)
890 {
891   rtx prob_note;
892   rtx *pnote;
893   rtx note;
894   int best_probability = PROB_EVEN;
895   enum br_predictor best_predictor = END_PREDICTORS;
896   int combined_probability = REG_BR_PROB_BASE / 2;
897   int d;
898   bool first_match = false;
899   bool found = false;
900 
901   if (!can_predict_insn_p (insn))
902     {
903       set_even_probabilities (bb);
904       return;
905     }
906 
907   prob_note = find_reg_note (insn, REG_BR_PROB, 0);
908   pnote = &REG_NOTES (insn);
909   if (dump_file)
910     fprintf (dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn),
911 	     bb->index);
912 
913   /* We implement "first match" heuristics and use probability guessed
914      by predictor with smallest index.  */
915   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
916     if (REG_NOTE_KIND (note) == REG_BR_PRED)
917       {
918 	enum br_predictor predictor = ((enum br_predictor)
919 				       INTVAL (XEXP (XEXP (note, 0), 0)));
920 	int probability = INTVAL (XEXP (XEXP (note, 0), 1));
921 
922 	found = true;
923 	if (best_predictor > predictor
924 	    && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
925 	  best_probability = probability, best_predictor = predictor;
926 
927 	d = (combined_probability * probability
928 	     + (REG_BR_PROB_BASE - combined_probability)
929 	     * (REG_BR_PROB_BASE - probability));
930 
931 	/* Use FP math to avoid overflows of 32bit integers.  */
932 	if (d == 0)
933 	  /* If one probability is 0% and one 100%, avoid division by zero.  */
934 	  combined_probability = REG_BR_PROB_BASE / 2;
935 	else
936 	  combined_probability = (((double) combined_probability) * probability
937 				  * REG_BR_PROB_BASE / d + 0.5);
938       }
939 
940   /* Decide which heuristic to use.  In case we didn't match anything,
941      use no_prediction heuristic, in case we did match, use either
942      first match or Dempster-Shaffer theory depending on the flags.  */
943 
944   if (best_predictor != END_PREDICTORS)
945     first_match = true;
946 
947   if (!found)
948     dump_prediction (dump_file, PRED_NO_PREDICTION,
949 		     combined_probability, bb);
950   else
951     {
952       if (!first_match)
953 	dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
954 			 bb, !first_match ? REASON_NONE : REASON_IGNORED);
955       else
956 	dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
957 			 bb, first_match ? REASON_NONE : REASON_IGNORED);
958     }
959 
960   if (first_match)
961     combined_probability = best_probability;
962   dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb);
963 
964   while (*pnote)
965     {
966       if (REG_NOTE_KIND (*pnote) == REG_BR_PRED)
967 	{
968 	  enum br_predictor predictor = ((enum br_predictor)
969 					 INTVAL (XEXP (XEXP (*pnote, 0), 0)));
970 	  int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1));
971 
972 	  dump_prediction (dump_file, predictor, probability, bb,
973 			   (!first_match || best_predictor == predictor)
974 			   ? REASON_NONE : REASON_IGNORED);
975 	  *pnote = XEXP (*pnote, 1);
976 	}
977       else
978 	pnote = &XEXP (*pnote, 1);
979     }
980 
981   if (!prob_note)
982     {
983       profile_probability p
984 	 = profile_probability::from_reg_br_prob_base (combined_probability);
985       add_reg_br_prob_note (insn, p);
986 
987       /* Save the prediction into CFG in case we are seeing non-degenerated
988 	 conditional jump.  */
989       if (!single_succ_p (bb))
990 	{
991 	  BRANCH_EDGE (bb)->probability = p;
992 	  FALLTHRU_EDGE (bb)->probability
993 	    = BRANCH_EDGE (bb)->probability.invert ();
994 	}
995     }
996   else if (!single_succ_p (bb))
997     {
998       profile_probability prob = profile_probability::from_reg_br_prob_note
999 					(XINT (prob_note, 0));
1000 
1001       BRANCH_EDGE (bb)->probability = prob;
1002       FALLTHRU_EDGE (bb)->probability = prob.invert ();
1003     }
1004   else
1005     single_succ_edge (bb)->probability = profile_probability::always ();
1006 }
1007 
1008 /* Edge prediction hash traits.  */
1009 
1010 struct predictor_hash: pointer_hash <edge_prediction>
1011 {
1012 
1013   static inline hashval_t hash (const edge_prediction *);
1014   static inline bool equal (const edge_prediction *, const edge_prediction *);
1015 };
1016 
1017 /* Calculate hash value of an edge prediction P based on predictor and
1018    normalized probability.  */
1019 
1020 inline hashval_t
1021 predictor_hash::hash (const edge_prediction *p)
1022 {
1023   inchash::hash hstate;
1024   hstate.add_int (p->ep_predictor);
1025 
1026   int prob = p->ep_probability;
1027   if (prob > REG_BR_PROB_BASE / 2)
1028     prob = REG_BR_PROB_BASE - prob;
1029 
1030   hstate.add_int (prob);
1031 
1032   return hstate.end ();
1033 }
1034 
1035 /* Return true whether edge predictions P1 and P2 use the same predictor and
1036    have equal (or opposed probability).  */
1037 
1038 inline bool
1039 predictor_hash::equal (const edge_prediction *p1, const edge_prediction *p2)
1040 {
1041   return (p1->ep_predictor == p2->ep_predictor
1042 	  && (p1->ep_probability == p2->ep_probability
1043 	      || p1->ep_probability == REG_BR_PROB_BASE - p2->ep_probability));
1044 }
1045 
1046 struct predictor_hash_traits: predictor_hash,
1047   typed_noop_remove <edge_prediction *> {};
1048 
1049 /* Return true if edge prediction P is not in DATA hash set.  */
1050 
1051 static bool
1052 not_removed_prediction_p (edge_prediction *p, void *data)
1053 {
1054   hash_set<edge_prediction *> *remove = (hash_set<edge_prediction *> *) data;
1055   return !remove->contains (p);
1056 }
1057 
1058 /* Prune predictions for a basic block BB.  Currently we do following
1059    clean-up steps:
1060 
1061    1) remove duplicate prediction that is guessed with the same probability
1062       (different than 1/2) to both edge
1063    2) remove duplicates for a prediction that belongs with the same probability
1064       to a single edge
1065 
1066   */
1067 
1068 static void
1069 prune_predictions_for_bb (basic_block bb)
1070 {
1071   edge_prediction **preds = bb_predictions->get (bb);
1072 
1073   if (preds)
1074     {
1075       hash_table <predictor_hash_traits> s (13);
1076       hash_set <edge_prediction *> remove;
1077 
1078       /* Step 1: identify predictors that should be removed.  */
1079       for (edge_prediction *pred = *preds; pred; pred = pred->ep_next)
1080 	{
1081 	  edge_prediction *existing = s.find (pred);
1082 	  if (existing)
1083 	    {
1084 	      if (pred->ep_edge == existing->ep_edge
1085 		  && pred->ep_probability == existing->ep_probability)
1086 		{
1087 		  /* Remove a duplicate predictor.  */
1088 		  dump_prediction (dump_file, pred->ep_predictor,
1089 				   pred->ep_probability, bb,
1090 				   REASON_SINGLE_EDGE_DUPLICATE, pred->ep_edge);
1091 
1092 		  remove.add (pred);
1093 		}
1094 	      else if (pred->ep_edge != existing->ep_edge
1095 		       && pred->ep_probability == existing->ep_probability
1096 		       && pred->ep_probability != REG_BR_PROB_BASE / 2)
1097 		{
1098 		  /* Remove both predictors as they predict the same
1099 		     for both edges.  */
1100 		  dump_prediction (dump_file, existing->ep_predictor,
1101 				   pred->ep_probability, bb,
1102 				   REASON_EDGE_PAIR_DUPLICATE,
1103 				   existing->ep_edge);
1104 		  dump_prediction (dump_file, pred->ep_predictor,
1105 				   pred->ep_probability, bb,
1106 				   REASON_EDGE_PAIR_DUPLICATE,
1107 				   pred->ep_edge);
1108 
1109 		  remove.add (existing);
1110 		  remove.add (pred);
1111 		}
1112 	    }
1113 
1114 	  edge_prediction **slot2 = s.find_slot (pred, INSERT);
1115 	  *slot2 = pred;
1116 	}
1117 
1118       /* Step 2: Remove predictors.  */
1119       filter_predictions (preds, not_removed_prediction_p, &remove);
1120     }
1121 }
1122 
1123 /* Combine predictions into single probability and store them into CFG.
1124    Remove now useless prediction entries.
1125    If DRY_RUN is set, only produce dumps and do not modify profile.  */
1126 
1127 static void
1128 combine_predictions_for_bb (basic_block bb, bool dry_run)
1129 {
1130   int best_probability = PROB_EVEN;
1131   enum br_predictor best_predictor = END_PREDICTORS;
1132   int combined_probability = REG_BR_PROB_BASE / 2;
1133   int d;
1134   bool first_match = false;
1135   bool found = false;
1136   struct edge_prediction *pred;
1137   int nedges = 0;
1138   edge e, first = NULL, second = NULL;
1139   edge_iterator ei;
1140   int nzero = 0;
1141   int nunknown = 0;
1142 
1143   FOR_EACH_EDGE (e, ei, bb->succs)
1144     {
1145       if (!unlikely_executed_edge_p (e))
1146         {
1147 	  nedges ++;
1148 	  if (first && !second)
1149 	    second = e;
1150 	  if (!first)
1151 	    first = e;
1152         }
1153       else if (!e->probability.initialized_p ())
1154         e->probability = profile_probability::never ();
1155      if (!e->probability.initialized_p ())
1156         nunknown++;
1157      else if (e->probability == profile_probability::never ())
1158 	nzero++;
1159     }
1160 
1161   /* When there is no successor or only one choice, prediction is easy.
1162 
1163      When we have a basic block with more than 2 successors, the situation
1164      is more complicated as DS theory cannot be used literally.
1165      More precisely, let's assume we predicted edge e1 with probability p1,
1166      thus: m1({b1}) = p1.  As we're going to combine more than 2 edges, we
1167      need to find probability of e.g. m1({b2}), which we don't know.
1168      The only approximation is to equally distribute 1-p1 to all edges
1169      different from b1.
1170 
1171      According to numbers we've got from SPEC2006 benchark, there's only
1172      one interesting reliable predictor (noreturn call), which can be
1173      handled with a bit easier approach.  */
1174   if (nedges != 2)
1175     {
1176       hash_set<edge> unlikely_edges (4);
1177 
1178       /* Identify all edges that have a probability close to very unlikely.
1179 	 Doing the approach for very unlikely doesn't worth for doing as
1180 	 there's no such probability in SPEC2006 benchmark.  */
1181       edge_prediction **preds = bb_predictions->get (bb);
1182       if (preds)
1183 	for (pred = *preds; pred; pred = pred->ep_next)
1184 	  if (pred->ep_probability <= PROB_VERY_UNLIKELY)
1185 	    unlikely_edges.add (pred->ep_edge);
1186 
1187       if (!dry_run)
1188 	set_even_probabilities (bb, &unlikely_edges);
1189       clear_bb_predictions (bb);
1190       if (dump_file)
1191 	{
1192 	  fprintf (dump_file, "Predictions for bb %i\n", bb->index);
1193 	  if (unlikely_edges.elements () == 0)
1194 	    fprintf (dump_file,
1195 		     "%i edges in bb %i predicted to even probabilities\n",
1196 		     nedges, bb->index);
1197 	  else
1198 	    {
1199 	      fprintf (dump_file,
1200 		       "%i edges in bb %i predicted with some unlikely edges\n",
1201 		       nedges, bb->index);
1202 	      FOR_EACH_EDGE (e, ei, bb->succs)
1203 		if (!unlikely_executed_edge_p (e))
1204 		  dump_prediction (dump_file, PRED_COMBINED,
1205 		   e->probability.to_reg_br_prob_base (), bb, REASON_NONE, e);
1206 	    }
1207 	}
1208       return;
1209     }
1210 
1211   if (dump_file)
1212     fprintf (dump_file, "Predictions for bb %i\n", bb->index);
1213 
1214   prune_predictions_for_bb (bb);
1215 
1216   edge_prediction **preds = bb_predictions->get (bb);
1217 
1218   if (preds)
1219     {
1220       /* We implement "first match" heuristics and use probability guessed
1221 	 by predictor with smallest index.  */
1222       for (pred = *preds; pred; pred = pred->ep_next)
1223 	{
1224 	  enum br_predictor predictor = pred->ep_predictor;
1225 	  int probability = pred->ep_probability;
1226 
1227 	  if (pred->ep_edge != first)
1228 	    probability = REG_BR_PROB_BASE - probability;
1229 
1230 	  found = true;
1231 	  /* First match heuristics would be widly confused if we predicted
1232 	     both directions.  */
1233 	  if (best_predictor > predictor
1234 	    && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
1235 	    {
1236               struct edge_prediction *pred2;
1237 	      int prob = probability;
1238 
1239 	      for (pred2 = (struct edge_prediction *) *preds;
1240 		   pred2; pred2 = pred2->ep_next)
1241 	       if (pred2 != pred && pred2->ep_predictor == pred->ep_predictor)
1242 	         {
1243 		   int probability2 = pred2->ep_probability;
1244 
1245 		   if (pred2->ep_edge != first)
1246 		     probability2 = REG_BR_PROB_BASE - probability2;
1247 
1248 		   if ((probability < REG_BR_PROB_BASE / 2) !=
1249 		       (probability2 < REG_BR_PROB_BASE / 2))
1250 		     break;
1251 
1252 		   /* If the same predictor later gave better result, go for it! */
1253 		   if ((probability >= REG_BR_PROB_BASE / 2 && (probability2 > probability))
1254 		       || (probability <= REG_BR_PROB_BASE / 2 && (probability2 < probability)))
1255 		     prob = probability2;
1256 		 }
1257 	      if (!pred2)
1258 	        best_probability = prob, best_predictor = predictor;
1259 	    }
1260 
1261 	  d = (combined_probability * probability
1262 	       + (REG_BR_PROB_BASE - combined_probability)
1263 	       * (REG_BR_PROB_BASE - probability));
1264 
1265 	  /* Use FP math to avoid overflows of 32bit integers.  */
1266 	  if (d == 0)
1267 	    /* If one probability is 0% and one 100%, avoid division by zero.  */
1268 	    combined_probability = REG_BR_PROB_BASE / 2;
1269 	  else
1270 	    combined_probability = (((double) combined_probability)
1271 				    * probability
1272 		    		    * REG_BR_PROB_BASE / d + 0.5);
1273 	}
1274     }
1275 
1276   /* Decide which heuristic to use.  In case we didn't match anything,
1277      use no_prediction heuristic, in case we did match, use either
1278      first match or Dempster-Shaffer theory depending on the flags.  */
1279 
1280   if (best_predictor != END_PREDICTORS)
1281     first_match = true;
1282 
1283   if (!found)
1284     dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb);
1285   else
1286     {
1287       if (!first_match)
1288 	dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb,
1289 			 !first_match ? REASON_NONE : REASON_IGNORED);
1290       else
1291 	dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb,
1292 			 first_match ? REASON_NONE : REASON_IGNORED);
1293     }
1294 
1295   if (first_match)
1296     combined_probability = best_probability;
1297   dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb);
1298 
1299   if (preds)
1300     {
1301       for (pred = (struct edge_prediction *) *preds; pred; pred = pred->ep_next)
1302 	{
1303 	  enum br_predictor predictor = pred->ep_predictor;
1304 	  int probability = pred->ep_probability;
1305 
1306 	  dump_prediction (dump_file, predictor, probability, bb,
1307 			   (!first_match || best_predictor == predictor)
1308 			   ? REASON_NONE : REASON_IGNORED, pred->ep_edge);
1309 	}
1310     }
1311   clear_bb_predictions (bb);
1312 
1313 
1314   /* If we have only one successor which is unknown, we can compute missing
1315      probablity.  */
1316   if (nunknown == 1)
1317     {
1318       profile_probability prob = profile_probability::always ();
1319       edge missing = NULL;
1320 
1321       FOR_EACH_EDGE (e, ei, bb->succs)
1322 	if (e->probability.initialized_p ())
1323 	  prob -= e->probability;
1324 	else if (missing == NULL)
1325 	  missing = e;
1326 	else
1327 	  gcc_unreachable ();
1328        missing->probability = prob;
1329     }
1330   /* If nothing is unknown, we have nothing to update.  */
1331   else if (!nunknown && nzero != (int)EDGE_COUNT (bb->succs))
1332     ;
1333   else if (!dry_run)
1334     {
1335       first->probability
1336 	 = profile_probability::from_reg_br_prob_base (combined_probability);
1337       second->probability = first->probability.invert ();
1338     }
1339 }
1340 
1341 /* Check if T1 and T2 satisfy the IV_COMPARE condition.
1342    Return the SSA_NAME if the condition satisfies, NULL otherwise.
1343 
1344    T1 and T2 should be one of the following cases:
1345      1. T1 is SSA_NAME, T2 is NULL
1346      2. T1 is SSA_NAME, T2 is INTEGER_CST between [-4, 4]
1347      3. T2 is SSA_NAME, T1 is INTEGER_CST between [-4, 4]  */
1348 
1349 static tree
1350 strips_small_constant (tree t1, tree t2)
1351 {
1352   tree ret = NULL;
1353   int value = 0;
1354 
1355   if (!t1)
1356     return NULL;
1357   else if (TREE_CODE (t1) == SSA_NAME)
1358     ret = t1;
1359   else if (tree_fits_shwi_p (t1))
1360     value = tree_to_shwi (t1);
1361   else
1362     return NULL;
1363 
1364   if (!t2)
1365     return ret;
1366   else if (tree_fits_shwi_p (t2))
1367     value = tree_to_shwi (t2);
1368   else if (TREE_CODE (t2) == SSA_NAME)
1369     {
1370       if (ret)
1371         return NULL;
1372       else
1373         ret = t2;
1374     }
1375 
1376   if (value <= 4 && value >= -4)
1377     return ret;
1378   else
1379     return NULL;
1380 }
1381 
1382 /* Return the SSA_NAME in T or T's operands.
1383    Return NULL if SSA_NAME cannot be found.  */
1384 
1385 static tree
1386 get_base_value (tree t)
1387 {
1388   if (TREE_CODE (t) == SSA_NAME)
1389     return t;
1390 
1391   if (!BINARY_CLASS_P (t))
1392     return NULL;
1393 
1394   switch (TREE_OPERAND_LENGTH (t))
1395     {
1396     case 1:
1397       return strips_small_constant (TREE_OPERAND (t, 0), NULL);
1398     case 2:
1399       return strips_small_constant (TREE_OPERAND (t, 0),
1400 				    TREE_OPERAND (t, 1));
1401     default:
1402       return NULL;
1403     }
1404 }
1405 
1406 /* Check the compare STMT in LOOP. If it compares an induction
1407    variable to a loop invariant, return true, and save
1408    LOOP_INVARIANT, COMPARE_CODE and LOOP_STEP.
1409    Otherwise return false and set LOOP_INVAIANT to NULL.  */
1410 
1411 static bool
1412 is_comparison_with_loop_invariant_p (gcond *stmt, struct loop *loop,
1413 				     tree *loop_invariant,
1414 				     enum tree_code *compare_code,
1415 				     tree *loop_step,
1416 				     tree *loop_iv_base)
1417 {
1418   tree op0, op1, bound, base;
1419   affine_iv iv0, iv1;
1420   enum tree_code code;
1421   tree step;
1422 
1423   code = gimple_cond_code (stmt);
1424   *loop_invariant = NULL;
1425 
1426   switch (code)
1427     {
1428     case GT_EXPR:
1429     case GE_EXPR:
1430     case NE_EXPR:
1431     case LT_EXPR:
1432     case LE_EXPR:
1433     case EQ_EXPR:
1434       break;
1435 
1436     default:
1437       return false;
1438     }
1439 
1440   op0 = gimple_cond_lhs (stmt);
1441   op1 = gimple_cond_rhs (stmt);
1442 
1443   if ((TREE_CODE (op0) != SSA_NAME && TREE_CODE (op0) != INTEGER_CST)
1444        || (TREE_CODE (op1) != SSA_NAME && TREE_CODE (op1) != INTEGER_CST))
1445     return false;
1446   if (!simple_iv (loop, loop_containing_stmt (stmt), op0, &iv0, true))
1447     return false;
1448   if (!simple_iv (loop, loop_containing_stmt (stmt), op1, &iv1, true))
1449     return false;
1450   if (TREE_CODE (iv0.step) != INTEGER_CST
1451       || TREE_CODE (iv1.step) != INTEGER_CST)
1452     return false;
1453   if ((integer_zerop (iv0.step) && integer_zerop (iv1.step))
1454       || (!integer_zerop (iv0.step) && !integer_zerop (iv1.step)))
1455     return false;
1456 
1457   if (integer_zerop (iv0.step))
1458     {
1459       if (code != NE_EXPR && code != EQ_EXPR)
1460 	code = invert_tree_comparison (code, false);
1461       bound = iv0.base;
1462       base = iv1.base;
1463       if (tree_fits_shwi_p (iv1.step))
1464 	step = iv1.step;
1465       else
1466 	return false;
1467     }
1468   else
1469     {
1470       bound = iv1.base;
1471       base = iv0.base;
1472       if (tree_fits_shwi_p (iv0.step))
1473 	step = iv0.step;
1474       else
1475 	return false;
1476     }
1477 
1478   if (TREE_CODE (bound) != INTEGER_CST)
1479     bound = get_base_value (bound);
1480   if (!bound)
1481     return false;
1482   if (TREE_CODE (base) != INTEGER_CST)
1483     base = get_base_value (base);
1484   if (!base)
1485     return false;
1486 
1487   *loop_invariant = bound;
1488   *compare_code = code;
1489   *loop_step = step;
1490   *loop_iv_base = base;
1491   return true;
1492 }
1493 
1494 /* Compare two SSA_NAMEs: returns TRUE if T1 and T2 are value coherent.  */
1495 
1496 static bool
1497 expr_coherent_p (tree t1, tree t2)
1498 {
1499   gimple *stmt;
1500   tree ssa_name_1 = NULL;
1501   tree ssa_name_2 = NULL;
1502 
1503   gcc_assert (TREE_CODE (t1) == SSA_NAME || TREE_CODE (t1) == INTEGER_CST);
1504   gcc_assert (TREE_CODE (t2) == SSA_NAME || TREE_CODE (t2) == INTEGER_CST);
1505 
1506   if (t1 == t2)
1507     return true;
1508 
1509   if (TREE_CODE (t1) == INTEGER_CST && TREE_CODE (t2) == INTEGER_CST)
1510     return true;
1511   if (TREE_CODE (t1) == INTEGER_CST || TREE_CODE (t2) == INTEGER_CST)
1512     return false;
1513 
1514   /* Check to see if t1 is expressed/defined with t2.  */
1515   stmt = SSA_NAME_DEF_STMT (t1);
1516   gcc_assert (stmt != NULL);
1517   if (is_gimple_assign (stmt))
1518     {
1519       ssa_name_1 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1520       if (ssa_name_1 && ssa_name_1 == t2)
1521 	return true;
1522     }
1523 
1524   /* Check to see if t2 is expressed/defined with t1.  */
1525   stmt = SSA_NAME_DEF_STMT (t2);
1526   gcc_assert (stmt != NULL);
1527   if (is_gimple_assign (stmt))
1528     {
1529       ssa_name_2 = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_USE);
1530       if (ssa_name_2 && ssa_name_2 == t1)
1531 	return true;
1532     }
1533 
1534   /* Compare if t1 and t2's def_stmts are identical.  */
1535   if (ssa_name_2 != NULL && ssa_name_1 == ssa_name_2)
1536     return true;
1537   else
1538     return false;
1539 }
1540 
1541 /* Return true if E is predicted by one of loop heuristics.  */
1542 
1543 static bool
1544 predicted_by_loop_heuristics_p (basic_block bb)
1545 {
1546   struct edge_prediction *i;
1547   edge_prediction **preds = bb_predictions->get (bb);
1548 
1549   if (!preds)
1550     return false;
1551 
1552   for (i = *preds; i; i = i->ep_next)
1553     if (i->ep_predictor == PRED_LOOP_ITERATIONS_GUESSED
1554 	|| i->ep_predictor == PRED_LOOP_ITERATIONS_MAX
1555 	|| i->ep_predictor == PRED_LOOP_ITERATIONS
1556 	|| i->ep_predictor == PRED_LOOP_EXIT
1557 	|| i->ep_predictor == PRED_LOOP_EXIT_WITH_RECURSION
1558 	|| i->ep_predictor == PRED_LOOP_EXTRA_EXIT)
1559       return true;
1560   return false;
1561 }
1562 
1563 /* Predict branch probability of BB when BB contains a branch that compares
1564    an induction variable in LOOP with LOOP_IV_BASE_VAR to LOOP_BOUND_VAR. The
1565    loop exit is compared using LOOP_BOUND_CODE, with step of LOOP_BOUND_STEP.
1566 
1567    E.g.
1568      for (int i = 0; i < bound; i++) {
1569        if (i < bound - 2)
1570 	 computation_1();
1571        else
1572 	 computation_2();
1573      }
1574 
1575   In this loop, we will predict the branch inside the loop to be taken.  */
1576 
1577 static void
1578 predict_iv_comparison (struct loop *loop, basic_block bb,
1579 		       tree loop_bound_var,
1580 		       tree loop_iv_base_var,
1581 		       enum tree_code loop_bound_code,
1582 		       int loop_bound_step)
1583 {
1584   gimple *stmt;
1585   tree compare_var, compare_base;
1586   enum tree_code compare_code;
1587   tree compare_step_var;
1588   edge then_edge;
1589   edge_iterator ei;
1590 
1591   if (predicted_by_loop_heuristics_p (bb))
1592     return;
1593 
1594   stmt = last_stmt (bb);
1595   if (!stmt || gimple_code (stmt) != GIMPLE_COND)
1596     return;
1597   if (!is_comparison_with_loop_invariant_p (as_a <gcond *> (stmt),
1598 					    loop, &compare_var,
1599 					    &compare_code,
1600 					    &compare_step_var,
1601 					    &compare_base))
1602     return;
1603 
1604   /* Find the taken edge.  */
1605   FOR_EACH_EDGE (then_edge, ei, bb->succs)
1606     if (then_edge->flags & EDGE_TRUE_VALUE)
1607       break;
1608 
1609   /* When comparing an IV to a loop invariant, NE is more likely to be
1610      taken while EQ is more likely to be not-taken.  */
1611   if (compare_code == NE_EXPR)
1612     {
1613       predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1614       return;
1615     }
1616   else if (compare_code == EQ_EXPR)
1617     {
1618       predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1619       return;
1620     }
1621 
1622   if (!expr_coherent_p (loop_iv_base_var, compare_base))
1623     return;
1624 
1625   /* If loop bound, base and compare bound are all constants, we can
1626      calculate the probability directly.  */
1627   if (tree_fits_shwi_p (loop_bound_var)
1628       && tree_fits_shwi_p (compare_var)
1629       && tree_fits_shwi_p (compare_base))
1630     {
1631       int probability;
1632       bool overflow, overall_overflow = false;
1633       widest_int compare_count, tem;
1634 
1635       /* (loop_bound - base) / compare_step */
1636       tem = wi::sub (wi::to_widest (loop_bound_var),
1637 		     wi::to_widest (compare_base), SIGNED, &overflow);
1638       overall_overflow |= overflow;
1639       widest_int loop_count = wi::div_trunc (tem,
1640 					     wi::to_widest (compare_step_var),
1641 					     SIGNED, &overflow);
1642       overall_overflow |= overflow;
1643 
1644       if (!wi::neg_p (wi::to_widest (compare_step_var))
1645           ^ (compare_code == LT_EXPR || compare_code == LE_EXPR))
1646 	{
1647 	  /* (loop_bound - compare_bound) / compare_step */
1648 	  tem = wi::sub (wi::to_widest (loop_bound_var),
1649 			 wi::to_widest (compare_var), SIGNED, &overflow);
1650 	  overall_overflow |= overflow;
1651 	  compare_count = wi::div_trunc (tem, wi::to_widest (compare_step_var),
1652 					 SIGNED, &overflow);
1653 	  overall_overflow |= overflow;
1654 	}
1655       else
1656         {
1657 	  /* (compare_bound - base) / compare_step */
1658 	  tem = wi::sub (wi::to_widest (compare_var),
1659 			 wi::to_widest (compare_base), SIGNED, &overflow);
1660 	  overall_overflow |= overflow;
1661           compare_count = wi::div_trunc (tem, wi::to_widest (compare_step_var),
1662 					 SIGNED, &overflow);
1663 	  overall_overflow |= overflow;
1664 	}
1665       if (compare_code == LE_EXPR || compare_code == GE_EXPR)
1666 	++compare_count;
1667       if (loop_bound_code == LE_EXPR || loop_bound_code == GE_EXPR)
1668 	++loop_count;
1669       if (wi::neg_p (compare_count))
1670         compare_count = 0;
1671       if (wi::neg_p (loop_count))
1672         loop_count = 0;
1673       if (loop_count == 0)
1674 	probability = 0;
1675       else if (wi::cmps (compare_count, loop_count) == 1)
1676 	probability = REG_BR_PROB_BASE;
1677       else
1678         {
1679 	  tem = compare_count * REG_BR_PROB_BASE;
1680 	  tem = wi::udiv_trunc (tem, loop_count);
1681 	  probability = tem.to_uhwi ();
1682 	}
1683 
1684       /* FIXME: The branch prediction seems broken. It has only 20% hitrate.  */
1685       if (!overall_overflow)
1686         predict_edge (then_edge, PRED_LOOP_IV_COMPARE, probability);
1687 
1688       return;
1689     }
1690 
1691   if (expr_coherent_p (loop_bound_var, compare_var))
1692     {
1693       if ((loop_bound_code == LT_EXPR || loop_bound_code == LE_EXPR)
1694 	  && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1695 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1696       else if ((loop_bound_code == GT_EXPR || loop_bound_code == GE_EXPR)
1697 	       && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1698 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1699       else if (loop_bound_code == NE_EXPR)
1700 	{
1701 	  /* If the loop backedge condition is "(i != bound)", we do
1702 	     the comparison based on the step of IV:
1703 	     * step < 0 : backedge condition is like (i > bound)
1704 	     * step > 0 : backedge condition is like (i < bound)  */
1705 	  gcc_assert (loop_bound_step != 0);
1706 	  if (loop_bound_step > 0
1707 	      && (compare_code == LT_EXPR
1708 		  || compare_code == LE_EXPR))
1709 	    predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1710 	  else if (loop_bound_step < 0
1711 		   && (compare_code == GT_EXPR
1712 		       || compare_code == GE_EXPR))
1713 	    predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1714 	  else
1715 	    predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1716 	}
1717       else
1718 	/* The branch is predicted not-taken if loop_bound_code is
1719 	   opposite with compare_code.  */
1720 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1721     }
1722   else if (expr_coherent_p (loop_iv_base_var, compare_var))
1723     {
1724       /* For cases like:
1725 	   for (i = s; i < h; i++)
1726 	     if (i > s + 2) ....
1727 	 The branch should be predicted taken.  */
1728       if (loop_bound_step > 0
1729 	  && (compare_code == GT_EXPR || compare_code == GE_EXPR))
1730 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1731       else if (loop_bound_step < 0
1732 	       && (compare_code == LT_EXPR || compare_code == LE_EXPR))
1733 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, TAKEN);
1734       else
1735 	predict_edge_def (then_edge, PRED_LOOP_IV_COMPARE_GUESS, NOT_TAKEN);
1736     }
1737 }
1738 
1739 /* Predict for extra loop exits that will lead to EXIT_EDGE. The extra loop
1740    exits are resulted from short-circuit conditions that will generate an
1741    if_tmp. E.g.:
1742 
1743    if (foo() || global > 10)
1744      break;
1745 
1746    This will be translated into:
1747 
1748    BB3:
1749      loop header...
1750    BB4:
1751      if foo() goto BB6 else goto BB5
1752    BB5:
1753      if global > 10 goto BB6 else goto BB7
1754    BB6:
1755      goto BB7
1756    BB7:
1757      iftmp = (PHI 0(BB5), 1(BB6))
1758      if iftmp == 1 goto BB8 else goto BB3
1759    BB8:
1760      outside of the loop...
1761 
1762    The edge BB7->BB8 is loop exit because BB8 is outside of the loop.
1763    From the dataflow, we can infer that BB4->BB6 and BB5->BB6 are also loop
1764    exits. This function takes BB7->BB8 as input, and finds out the extra loop
1765    exits to predict them using PRED_LOOP_EXTRA_EXIT.  */
1766 
1767 static void
1768 predict_extra_loop_exits (edge exit_edge)
1769 {
1770   unsigned i;
1771   bool check_value_one;
1772   gimple *lhs_def_stmt;
1773   gphi *phi_stmt;
1774   tree cmp_rhs, cmp_lhs;
1775   gimple *last;
1776   gcond *cmp_stmt;
1777 
1778   last = last_stmt (exit_edge->src);
1779   if (!last)
1780     return;
1781   cmp_stmt = dyn_cast <gcond *> (last);
1782   if (!cmp_stmt)
1783     return;
1784 
1785   cmp_rhs = gimple_cond_rhs (cmp_stmt);
1786   cmp_lhs = gimple_cond_lhs (cmp_stmt);
1787   if (!TREE_CONSTANT (cmp_rhs)
1788       || !(integer_zerop (cmp_rhs) || integer_onep (cmp_rhs)))
1789     return;
1790   if (TREE_CODE (cmp_lhs) != SSA_NAME)
1791     return;
1792 
1793   /* If check_value_one is true, only the phi_args with value '1' will lead
1794      to loop exit. Otherwise, only the phi_args with value '0' will lead to
1795      loop exit.  */
1796   check_value_one = (((integer_onep (cmp_rhs))
1797 		    ^ (gimple_cond_code (cmp_stmt) == EQ_EXPR))
1798 		    ^ ((exit_edge->flags & EDGE_TRUE_VALUE) != 0));
1799 
1800   lhs_def_stmt = SSA_NAME_DEF_STMT (cmp_lhs);
1801   if (!lhs_def_stmt)
1802     return;
1803 
1804   phi_stmt = dyn_cast <gphi *> (lhs_def_stmt);
1805   if (!phi_stmt)
1806     return;
1807 
1808   for (i = 0; i < gimple_phi_num_args (phi_stmt); i++)
1809     {
1810       edge e1;
1811       edge_iterator ei;
1812       tree val = gimple_phi_arg_def (phi_stmt, i);
1813       edge e = gimple_phi_arg_edge (phi_stmt, i);
1814 
1815       if (!TREE_CONSTANT (val) || !(integer_zerop (val) || integer_onep (val)))
1816 	continue;
1817       if ((check_value_one ^ integer_onep (val)) == 1)
1818 	continue;
1819       if (EDGE_COUNT (e->src->succs) != 1)
1820 	{
1821 	  predict_paths_leading_to_edge (e, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
1822 	  continue;
1823 	}
1824 
1825       FOR_EACH_EDGE (e1, ei, e->src->preds)
1826 	predict_paths_leading_to_edge (e1, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
1827     }
1828 }
1829 
1830 
1831 /* Predict edge probabilities by exploiting loop structure.  */
1832 
1833 static void
1834 predict_loops (void)
1835 {
1836   struct loop *loop;
1837   basic_block bb;
1838   hash_set <struct loop *> with_recursion(10);
1839 
1840   FOR_EACH_BB_FN (bb, cfun)
1841     {
1842       gimple_stmt_iterator gsi;
1843       tree decl;
1844 
1845       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1846 	if (is_gimple_call (gsi_stmt (gsi))
1847 	    && (decl = gimple_call_fndecl (gsi_stmt (gsi))) != NULL
1848 	    && recursive_call_p (current_function_decl, decl))
1849 	  {
1850 	    loop = bb->loop_father;
1851 	    while (loop && !with_recursion.add (loop))
1852 	      loop = loop_outer (loop);
1853 	  }
1854     }
1855 
1856   /* Try to predict out blocks in a loop that are not part of a
1857      natural loop.  */
1858   FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
1859     {
1860       basic_block bb, *bbs;
1861       unsigned j, n_exits = 0;
1862       vec<edge> exits;
1863       struct tree_niter_desc niter_desc;
1864       edge ex;
1865       struct nb_iter_bound *nb_iter;
1866       enum tree_code loop_bound_code = ERROR_MARK;
1867       tree loop_bound_step = NULL;
1868       tree loop_bound_var = NULL;
1869       tree loop_iv_base = NULL;
1870       gcond *stmt = NULL;
1871       bool recursion = with_recursion.contains (loop);
1872 
1873       exits = get_loop_exit_edges (loop);
1874       FOR_EACH_VEC_ELT (exits, j, ex)
1875 	if (!unlikely_executed_edge_p (ex) && !(ex->flags & EDGE_ABNORMAL_CALL))
1876 	  n_exits ++;
1877       if (!n_exits)
1878 	{
1879           exits.release ();
1880 	  continue;
1881 	}
1882 
1883       if (dump_file && (dump_flags & TDF_DETAILS))
1884 	fprintf (dump_file, "Predicting loop %i%s with %i exits.\n",
1885 		 loop->num, recursion ? " (with recursion)":"", n_exits);
1886       if (dump_file && (dump_flags & TDF_DETAILS)
1887 	  && max_loop_iterations_int (loop) >= 0)
1888 	{
1889 	  fprintf (dump_file,
1890 		   "Loop %d iterates at most %i times.\n", loop->num,
1891 		   (int)max_loop_iterations_int (loop));
1892 	}
1893       if (dump_file && (dump_flags & TDF_DETAILS)
1894 	  && likely_max_loop_iterations_int (loop) >= 0)
1895 	{
1896 	  fprintf (dump_file, "Loop %d likely iterates at most %i times.\n",
1897 		   loop->num, (int)likely_max_loop_iterations_int (loop));
1898 	}
1899 
1900       FOR_EACH_VEC_ELT (exits, j, ex)
1901 	{
1902 	  tree niter = NULL;
1903 	  HOST_WIDE_INT nitercst;
1904 	  int max = PARAM_VALUE (PARAM_MAX_PREDICTED_ITERATIONS);
1905 	  int probability;
1906 	  enum br_predictor predictor;
1907 	  widest_int nit;
1908 
1909 	  if (unlikely_executed_edge_p (ex)
1910 	      || (ex->flags & EDGE_ABNORMAL_CALL))
1911 	    continue;
1912 	  /* Loop heuristics do not expect exit conditional to be inside
1913 	     inner loop.  We predict from innermost to outermost loop.  */
1914 	  if (predicted_by_loop_heuristics_p (ex->src))
1915 	    {
1916 	      if (dump_file && (dump_flags & TDF_DETAILS))
1917 		fprintf (dump_file, "Skipping exit %i->%i because "
1918 			 "it is already predicted.\n",
1919 			 ex->src->index, ex->dest->index);
1920 	      continue;
1921 	    }
1922 	  predict_extra_loop_exits (ex);
1923 
1924 	  if (number_of_iterations_exit (loop, ex, &niter_desc, false, false))
1925 	    niter = niter_desc.niter;
1926 	  if (!niter || TREE_CODE (niter_desc.niter) != INTEGER_CST)
1927 	    niter = loop_niter_by_eval (loop, ex);
1928 	  if (dump_file && (dump_flags & TDF_DETAILS)
1929 	      && TREE_CODE (niter) == INTEGER_CST)
1930 	    {
1931 	      fprintf (dump_file, "Exit %i->%i %d iterates ",
1932 		       ex->src->index, ex->dest->index,
1933 		       loop->num);
1934 	      print_generic_expr (dump_file, niter, TDF_SLIM);
1935 	      fprintf (dump_file, " times.\n");
1936 	    }
1937 
1938 	  if (TREE_CODE (niter) == INTEGER_CST)
1939 	    {
1940 	      if (tree_fits_uhwi_p (niter)
1941 		  && max
1942 		  && compare_tree_int (niter, max - 1) == -1)
1943 		nitercst = tree_to_uhwi (niter) + 1;
1944 	      else
1945 		nitercst = max;
1946 	      predictor = PRED_LOOP_ITERATIONS;
1947 	    }
1948 	  /* If we have just one exit and we can derive some information about
1949 	     the number of iterations of the loop from the statements inside
1950 	     the loop, use it to predict this exit.  */
1951 	  else if (n_exits == 1
1952 		   && estimated_stmt_executions (loop, &nit))
1953 	    {
1954 	      if (wi::gtu_p (nit, max))
1955 		nitercst = max;
1956 	      else
1957 		nitercst = nit.to_shwi ();
1958 	      predictor = PRED_LOOP_ITERATIONS_GUESSED;
1959 	    }
1960 	  /* If we have likely upper bound, trust it for very small iteration
1961 	     counts.  Such loops would otherwise get mispredicted by standard
1962 	     LOOP_EXIT heuristics.  */
1963 	  else if (n_exits == 1
1964 		   && likely_max_stmt_executions (loop, &nit)
1965 		   && wi::ltu_p (nit,
1966 				 RDIV (REG_BR_PROB_BASE,
1967 				       REG_BR_PROB_BASE
1968 					 - predictor_info
1969 						 [recursion
1970 						  ? PRED_LOOP_EXIT_WITH_RECURSION
1971 						  : PRED_LOOP_EXIT].hitrate)))
1972 	    {
1973 	      nitercst = nit.to_shwi ();
1974 	      predictor = PRED_LOOP_ITERATIONS_MAX;
1975 	    }
1976 	  else
1977 	    {
1978 	      if (dump_file && (dump_flags & TDF_DETAILS))
1979 		fprintf (dump_file, "Nothing known about exit %i->%i.\n",
1980 			 ex->src->index, ex->dest->index);
1981 	      continue;
1982 	    }
1983 
1984 	  if (dump_file && (dump_flags & TDF_DETAILS))
1985 	    fprintf (dump_file, "Recording prediction to %i iterations by %s.\n",
1986 		     (int)nitercst, predictor_info[predictor].name);
1987 	  /* If the prediction for number of iterations is zero, do not
1988 	     predict the exit edges.  */
1989 	  if (nitercst == 0)
1990 	    continue;
1991 
1992 	  probability = RDIV (REG_BR_PROB_BASE, nitercst);
1993 	  predict_edge (ex, predictor, probability);
1994 	}
1995       exits.release ();
1996 
1997       /* Find information about loop bound variables.  */
1998       for (nb_iter = loop->bounds; nb_iter;
1999 	   nb_iter = nb_iter->next)
2000 	if (nb_iter->stmt
2001 	    && gimple_code (nb_iter->stmt) == GIMPLE_COND)
2002 	  {
2003 	    stmt = as_a <gcond *> (nb_iter->stmt);
2004 	    break;
2005 	  }
2006       if (!stmt && last_stmt (loop->header)
2007 	  && gimple_code (last_stmt (loop->header)) == GIMPLE_COND)
2008 	stmt = as_a <gcond *> (last_stmt (loop->header));
2009       if (stmt)
2010 	is_comparison_with_loop_invariant_p (stmt, loop,
2011 					     &loop_bound_var,
2012 					     &loop_bound_code,
2013 					     &loop_bound_step,
2014 					     &loop_iv_base);
2015 
2016       bbs = get_loop_body (loop);
2017 
2018       for (j = 0; j < loop->num_nodes; j++)
2019 	{
2020 	  edge e;
2021 	  edge_iterator ei;
2022 
2023 	  bb = bbs[j];
2024 
2025 	  /* Bypass loop heuristics on continue statement.  These
2026 	     statements construct loops via "non-loop" constructs
2027 	     in the source language and are better to be handled
2028 	     separately.  */
2029 	  if (predicted_by_p (bb, PRED_CONTINUE))
2030 	    {
2031 	      if (dump_file && (dump_flags & TDF_DETAILS))
2032 		fprintf (dump_file, "BB %i predicted by continue.\n",
2033 			 bb->index);
2034 	      continue;
2035 	    }
2036 
2037 	  /* If we already used more reliable loop exit predictors, do not
2038 	     bother with PRED_LOOP_EXIT.  */
2039 	  if (!predicted_by_loop_heuristics_p (bb))
2040 	    {
2041 	      /* For loop with many exits we don't want to predict all exits
2042 	         with the pretty large probability, because if all exits are
2043 		 considered in row, the loop would be predicted to iterate
2044 		 almost never.  The code to divide probability by number of
2045 		 exits is very rough.  It should compute the number of exits
2046 		 taken in each patch through function (not the overall number
2047 		 of exits that might be a lot higher for loops with wide switch
2048 		 statements in them) and compute n-th square root.
2049 
2050 		 We limit the minimal probability by 2% to avoid
2051 		 EDGE_PROBABILITY_RELIABLE from trusting the branch prediction
2052 		 as this was causing regression in perl benchmark containing such
2053 		 a wide loop.  */
2054 
2055 	      int probability = ((REG_BR_PROB_BASE
2056 		                  - predictor_info
2057 				     [recursion
2058 				      ? PRED_LOOP_EXIT_WITH_RECURSION
2059 				      : PRED_LOOP_EXIT].hitrate)
2060 				 / n_exits);
2061 	      if (probability < HITRATE (2))
2062 		probability = HITRATE (2);
2063 	      FOR_EACH_EDGE (e, ei, bb->succs)
2064 		if (e->dest->index < NUM_FIXED_BLOCKS
2065 		    || !flow_bb_inside_loop_p (loop, e->dest))
2066 		  {
2067 		    if (dump_file && (dump_flags & TDF_DETAILS))
2068 		      fprintf (dump_file,
2069 			       "Predicting exit %i->%i with prob %i.\n",
2070 			       e->src->index, e->dest->index, probability);
2071 		    predict_edge (e,
2072 				  recursion ? PRED_LOOP_EXIT_WITH_RECURSION
2073 			          : PRED_LOOP_EXIT, probability);
2074 		  }
2075 	    }
2076 	  if (loop_bound_var)
2077 	    predict_iv_comparison (loop, bb, loop_bound_var, loop_iv_base,
2078 				   loop_bound_code,
2079 				   tree_to_shwi (loop_bound_step));
2080 	}
2081 
2082       /* In the following code
2083 	 for (loop1)
2084 	   if (cond)
2085 	     for (loop2)
2086 	       body;
2087 	 guess that cond is unlikely.  */
2088       if (loop_outer (loop)->num)
2089 	{
2090 	  basic_block bb = NULL;
2091 	  edge preheader_edge = loop_preheader_edge (loop);
2092 
2093 	  if (single_pred_p (preheader_edge->src)
2094 	      && single_succ_p (preheader_edge->src))
2095 	    preheader_edge = single_pred_edge (preheader_edge->src);
2096 
2097 	  gimple *stmt = last_stmt (preheader_edge->src);
2098 	  /* Pattern match fortran loop preheader:
2099 	     _16 = BUILTIN_EXPECT (_15, 1, PRED_FORTRAN_LOOP_PREHEADER);
2100 	     _17 = (logical(kind=4)) _16;
2101 	     if (_17 != 0)
2102 	       goto <bb 11>;
2103 	     else
2104 	       goto <bb 13>;
2105 
2106 	     Loop guard branch prediction says nothing about duplicated loop
2107 	     headers produced by fortran frontend and in this case we want
2108 	     to predict paths leading to this preheader.  */
2109 
2110 	  if (stmt
2111 	      && gimple_code (stmt) == GIMPLE_COND
2112 	      && gimple_cond_code (stmt) == NE_EXPR
2113 	      && TREE_CODE (gimple_cond_lhs (stmt)) == SSA_NAME
2114 	      && integer_zerop (gimple_cond_rhs (stmt)))
2115 	     {
2116 	       gimple *call_stmt = SSA_NAME_DEF_STMT (gimple_cond_lhs (stmt));
2117 	       if (gimple_code (call_stmt) == GIMPLE_ASSIGN
2118 		   && gimple_expr_code (call_stmt) == NOP_EXPR
2119 		   && TREE_CODE (gimple_assign_rhs1 (call_stmt)) == SSA_NAME)
2120 		 call_stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (call_stmt));
2121 	       if (gimple_call_internal_p (call_stmt, IFN_BUILTIN_EXPECT)
2122 		   && TREE_CODE (gimple_call_arg (call_stmt, 2)) == INTEGER_CST
2123 		   && tree_fits_uhwi_p (gimple_call_arg (call_stmt, 2))
2124 		   && tree_to_uhwi (gimple_call_arg (call_stmt, 2))
2125 			== PRED_FORTRAN_LOOP_PREHEADER)
2126 		 bb = preheader_edge->src;
2127 	     }
2128 	  if (!bb)
2129 	    {
2130 	      if (!dominated_by_p (CDI_DOMINATORS,
2131 				   loop_outer (loop)->latch, loop->header))
2132 		predict_paths_leading_to_edge (loop_preheader_edge (loop),
2133 					       recursion
2134 					       ? PRED_LOOP_GUARD_WITH_RECURSION
2135 					       : PRED_LOOP_GUARD,
2136 					       NOT_TAKEN,
2137 					       loop_outer (loop));
2138 	    }
2139 	  else
2140 	    {
2141 	      if (!dominated_by_p (CDI_DOMINATORS,
2142 				   loop_outer (loop)->latch, bb))
2143 		predict_paths_leading_to (bb,
2144 					  recursion
2145 					  ? PRED_LOOP_GUARD_WITH_RECURSION
2146 					  : PRED_LOOP_GUARD,
2147 					  NOT_TAKEN,
2148 					  loop_outer (loop));
2149 	    }
2150 	}
2151 
2152       /* Free basic blocks from get_loop_body.  */
2153       free (bbs);
2154     }
2155 }
2156 
2157 /* Attempt to predict probabilities of BB outgoing edges using local
2158    properties.  */
2159 static void
2160 bb_estimate_probability_locally (basic_block bb)
2161 {
2162   rtx_insn *last_insn = BB_END (bb);
2163   rtx cond;
2164 
2165   if (! can_predict_insn_p (last_insn))
2166     return;
2167   cond = get_condition (last_insn, NULL, false, false);
2168   if (! cond)
2169     return;
2170 
2171   /* Try "pointer heuristic."
2172      A comparison ptr == 0 is predicted as false.
2173      Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
2174   if (COMPARISON_P (cond)
2175       && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0)))
2176 	  || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1)))))
2177     {
2178       if (GET_CODE (cond) == EQ)
2179 	predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
2180       else if (GET_CODE (cond) == NE)
2181 	predict_insn_def (last_insn, PRED_POINTER, TAKEN);
2182     }
2183   else
2184 
2185   /* Try "opcode heuristic."
2186      EQ tests are usually false and NE tests are usually true. Also,
2187      most quantities are positive, so we can make the appropriate guesses
2188      about signed comparisons against zero.  */
2189     switch (GET_CODE (cond))
2190       {
2191       case CONST_INT:
2192 	/* Unconditional branch.  */
2193 	predict_insn_def (last_insn, PRED_UNCONDITIONAL,
2194 			  cond == const0_rtx ? NOT_TAKEN : TAKEN);
2195 	break;
2196 
2197       case EQ:
2198       case UNEQ:
2199 	/* Floating point comparisons appears to behave in a very
2200 	   unpredictable way because of special role of = tests in
2201 	   FP code.  */
2202 	if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
2203 	  ;
2204 	/* Comparisons with 0 are often used for booleans and there is
2205 	   nothing useful to predict about them.  */
2206 	else if (XEXP (cond, 1) == const0_rtx
2207 		 || XEXP (cond, 0) == const0_rtx)
2208 	  ;
2209 	else
2210 	  predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
2211 	break;
2212 
2213       case NE:
2214       case LTGT:
2215 	/* Floating point comparisons appears to behave in a very
2216 	   unpredictable way because of special role of = tests in
2217 	   FP code.  */
2218 	if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0))))
2219 	  ;
2220 	/* Comparisons with 0 are often used for booleans and there is
2221 	   nothing useful to predict about them.  */
2222 	else if (XEXP (cond, 1) == const0_rtx
2223 		 || XEXP (cond, 0) == const0_rtx)
2224 	  ;
2225 	else
2226 	  predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
2227 	break;
2228 
2229       case ORDERED:
2230 	predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
2231 	break;
2232 
2233       case UNORDERED:
2234 	predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
2235 	break;
2236 
2237       case LE:
2238       case LT:
2239 	if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
2240 	    || XEXP (cond, 1) == constm1_rtx)
2241 	  predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
2242 	break;
2243 
2244       case GE:
2245       case GT:
2246 	if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx
2247 	    || XEXP (cond, 1) == constm1_rtx)
2248 	  predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
2249 	break;
2250 
2251       default:
2252 	break;
2253       }
2254 }
2255 
2256 /* Set edge->probability for each successor edge of BB.  */
2257 void
2258 guess_outgoing_edge_probabilities (basic_block bb)
2259 {
2260   bb_estimate_probability_locally (bb);
2261   combine_predictions_for_insn (BB_END (bb), bb);
2262 }
2263 
2264 static tree expr_expected_value (tree, bitmap, enum br_predictor *predictor);
2265 
2266 /* Helper function for expr_expected_value.  */
2267 
2268 static tree
2269 expr_expected_value_1 (tree type, tree op0, enum tree_code code,
2270 		       tree op1, bitmap visited, enum br_predictor *predictor)
2271 {
2272   gimple *def;
2273 
2274   if (predictor)
2275     *predictor = PRED_UNCONDITIONAL;
2276 
2277   if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
2278     {
2279       if (TREE_CONSTANT (op0))
2280 	return op0;
2281 
2282       if (code == IMAGPART_EXPR)
2283 	{
2284 	  if (TREE_CODE (TREE_OPERAND (op0, 0)) == SSA_NAME)
2285 	    {
2286 	      def = SSA_NAME_DEF_STMT (TREE_OPERAND (op0, 0));
2287 	      if (is_gimple_call (def)
2288 		  && gimple_call_internal_p (def)
2289 		  && (gimple_call_internal_fn (def)
2290 		      == IFN_ATOMIC_COMPARE_EXCHANGE))
2291 		{
2292 		  /* Assume that any given atomic operation has low contention,
2293 		     and thus the compare-and-swap operation succeeds.  */
2294 		  if (predictor)
2295 		    *predictor = PRED_COMPARE_AND_SWAP;
2296 		  return build_one_cst (TREE_TYPE (op0));
2297 		}
2298 	    }
2299 	}
2300 
2301       if (code != SSA_NAME)
2302 	return NULL_TREE;
2303 
2304       def = SSA_NAME_DEF_STMT (op0);
2305 
2306       /* If we were already here, break the infinite cycle.  */
2307       if (!bitmap_set_bit (visited, SSA_NAME_VERSION (op0)))
2308 	return NULL;
2309 
2310       if (gimple_code (def) == GIMPLE_PHI)
2311 	{
2312 	  /* All the arguments of the PHI node must have the same constant
2313 	     length.  */
2314 	  int i, n = gimple_phi_num_args (def);
2315 	  tree val = NULL, new_val;
2316 
2317 	  for (i = 0; i < n; i++)
2318 	    {
2319 	      tree arg = PHI_ARG_DEF (def, i);
2320 	      enum br_predictor predictor2;
2321 
2322 	      /* If this PHI has itself as an argument, we cannot
2323 		 determine the string length of this argument.  However,
2324 		 if we can find an expected constant value for the other
2325 		 PHI args then we can still be sure that this is
2326 		 likely a constant.  So be optimistic and just
2327 		 continue with the next argument.  */
2328 	      if (arg == PHI_RESULT (def))
2329 		continue;
2330 
2331 	      new_val = expr_expected_value (arg, visited, &predictor2);
2332 
2333 	      /* It is difficult to combine value predictors.  Simply assume
2334 		 that later predictor is weaker and take its prediction.  */
2335 	      if (predictor && *predictor < predictor2)
2336 		*predictor = predictor2;
2337 	      if (!new_val)
2338 		return NULL;
2339 	      if (!val)
2340 		val = new_val;
2341 	      else if (!operand_equal_p (val, new_val, false))
2342 		return NULL;
2343 	    }
2344 	  return val;
2345 	}
2346       if (is_gimple_assign (def))
2347 	{
2348 	  if (gimple_assign_lhs (def) != op0)
2349 	    return NULL;
2350 
2351 	  return expr_expected_value_1 (TREE_TYPE (gimple_assign_lhs (def)),
2352 					gimple_assign_rhs1 (def),
2353 					gimple_assign_rhs_code (def),
2354 					gimple_assign_rhs2 (def),
2355 					visited, predictor);
2356 	}
2357 
2358       if (is_gimple_call (def))
2359 	{
2360 	  tree decl = gimple_call_fndecl (def);
2361 	  if (!decl)
2362 	    {
2363 	      if (gimple_call_internal_p (def)
2364 		  && gimple_call_internal_fn (def) == IFN_BUILTIN_EXPECT)
2365 		{
2366 		  gcc_assert (gimple_call_num_args (def) == 3);
2367 		  tree val = gimple_call_arg (def, 0);
2368 		  if (TREE_CONSTANT (val))
2369 		    return val;
2370 		  if (predictor)
2371 		    {
2372 		      tree val2 = gimple_call_arg (def, 2);
2373 		      gcc_assert (TREE_CODE (val2) == INTEGER_CST
2374 				  && tree_fits_uhwi_p (val2)
2375 				  && tree_to_uhwi (val2) < END_PREDICTORS);
2376 		      *predictor = (enum br_predictor) tree_to_uhwi (val2);
2377 		    }
2378 		  return gimple_call_arg (def, 1);
2379 		}
2380 	      return NULL;
2381 	    }
2382 	  if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
2383 	    switch (DECL_FUNCTION_CODE (decl))
2384 	      {
2385 	      case BUILT_IN_EXPECT:
2386 		{
2387 		  tree val;
2388 		  if (gimple_call_num_args (def) != 2)
2389 		    return NULL;
2390 		  val = gimple_call_arg (def, 0);
2391 		  if (TREE_CONSTANT (val))
2392 		    return val;
2393 		  if (predictor)
2394 		    *predictor = PRED_BUILTIN_EXPECT;
2395 		  return gimple_call_arg (def, 1);
2396 		}
2397 
2398 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N:
2399 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
2400 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
2401 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
2402 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
2403 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
2404 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE:
2405 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N:
2406 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
2407 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
2408 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
2409 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
2410 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
2411 		/* Assume that any given atomic operation has low contention,
2412 		   and thus the compare-and-swap operation succeeds.  */
2413 		if (predictor)
2414 		  *predictor = PRED_COMPARE_AND_SWAP;
2415 		return boolean_true_node;
2416 	      default:
2417 		break;
2418 	    }
2419 	}
2420 
2421       return NULL;
2422     }
2423 
2424   if (get_gimple_rhs_class (code) == GIMPLE_BINARY_RHS)
2425     {
2426       tree res;
2427       enum br_predictor predictor2;
2428       op0 = expr_expected_value (op0, visited, predictor);
2429       if (!op0)
2430 	return NULL;
2431       op1 = expr_expected_value (op1, visited, &predictor2);
2432       if (predictor && *predictor < predictor2)
2433 	*predictor = predictor2;
2434       if (!op1)
2435 	return NULL;
2436       res = fold_build2 (code, type, op0, op1);
2437       if (TREE_CONSTANT (res))
2438 	return res;
2439       return NULL;
2440     }
2441   if (get_gimple_rhs_class (code) == GIMPLE_UNARY_RHS)
2442     {
2443       tree res;
2444       op0 = expr_expected_value (op0, visited, predictor);
2445       if (!op0)
2446 	return NULL;
2447       res = fold_build1 (code, type, op0);
2448       if (TREE_CONSTANT (res))
2449 	return res;
2450       return NULL;
2451     }
2452   return NULL;
2453 }
2454 
2455 /* Return constant EXPR will likely have at execution time, NULL if unknown.
2456    The function is used by builtin_expect branch predictor so the evidence
2457    must come from this construct and additional possible constant folding.
2458 
2459    We may want to implement more involved value guess (such as value range
2460    propagation based prediction), but such tricks shall go to new
2461    implementation.  */
2462 
2463 static tree
2464 expr_expected_value (tree expr, bitmap visited,
2465 		     enum br_predictor *predictor)
2466 {
2467   enum tree_code code;
2468   tree op0, op1;
2469 
2470   if (TREE_CONSTANT (expr))
2471     {
2472       if (predictor)
2473 	*predictor = PRED_UNCONDITIONAL;
2474       return expr;
2475     }
2476 
2477   extract_ops_from_tree (expr, &code, &op0, &op1);
2478   return expr_expected_value_1 (TREE_TYPE (expr),
2479 				op0, code, op1, visited, predictor);
2480 }
2481 
2482 /* Predict using opcode of the last statement in basic block.  */
2483 static void
2484 tree_predict_by_opcode (basic_block bb)
2485 {
2486   gimple *stmt = last_stmt (bb);
2487   edge then_edge;
2488   tree op0, op1;
2489   tree type;
2490   tree val;
2491   enum tree_code cmp;
2492   edge_iterator ei;
2493   enum br_predictor predictor;
2494 
2495   if (!stmt || gimple_code (stmt) != GIMPLE_COND)
2496     return;
2497   FOR_EACH_EDGE (then_edge, ei, bb->succs)
2498     if (then_edge->flags & EDGE_TRUE_VALUE)
2499       break;
2500   op0 = gimple_cond_lhs (stmt);
2501   op1 = gimple_cond_rhs (stmt);
2502   cmp = gimple_cond_code (stmt);
2503   type = TREE_TYPE (op0);
2504   val = expr_expected_value_1 (boolean_type_node, op0, cmp, op1, auto_bitmap (),
2505 			       &predictor);
2506   if (val && TREE_CODE (val) == INTEGER_CST)
2507     {
2508       if (predictor == PRED_BUILTIN_EXPECT)
2509 	{
2510 	  int percent = PARAM_VALUE (BUILTIN_EXPECT_PROBABILITY);
2511 
2512 	  gcc_assert (percent >= 0 && percent <= 100);
2513 	  if (integer_zerop (val))
2514 	    percent = 100 - percent;
2515 	  predict_edge (then_edge, PRED_BUILTIN_EXPECT, HITRATE (percent));
2516 	}
2517       else
2518 	predict_edge_def (then_edge, predictor,
2519 			  integer_zerop (val) ? NOT_TAKEN : TAKEN);
2520     }
2521   /* Try "pointer heuristic."
2522      A comparison ptr == 0 is predicted as false.
2523      Similarly, a comparison ptr1 == ptr2 is predicted as false.  */
2524   if (POINTER_TYPE_P (type))
2525     {
2526       if (cmp == EQ_EXPR)
2527 	predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
2528       else if (cmp == NE_EXPR)
2529 	predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
2530     }
2531   else
2532 
2533   /* Try "opcode heuristic."
2534      EQ tests are usually false and NE tests are usually true. Also,
2535      most quantities are positive, so we can make the appropriate guesses
2536      about signed comparisons against zero.  */
2537     switch (cmp)
2538       {
2539       case EQ_EXPR:
2540       case UNEQ_EXPR:
2541 	/* Floating point comparisons appears to behave in a very
2542 	   unpredictable way because of special role of = tests in
2543 	   FP code.  */
2544 	if (FLOAT_TYPE_P (type))
2545 	  ;
2546 	/* Comparisons with 0 are often used for booleans and there is
2547 	   nothing useful to predict about them.  */
2548 	else if (integer_zerop (op0) || integer_zerop (op1))
2549 	  ;
2550 	else
2551 	  predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
2552 	break;
2553 
2554       case NE_EXPR:
2555       case LTGT_EXPR:
2556 	/* Floating point comparisons appears to behave in a very
2557 	   unpredictable way because of special role of = tests in
2558 	   FP code.  */
2559 	if (FLOAT_TYPE_P (type))
2560 	  ;
2561 	/* Comparisons with 0 are often used for booleans and there is
2562 	   nothing useful to predict about them.  */
2563 	else if (integer_zerop (op0)
2564 		 || integer_zerop (op1))
2565 	  ;
2566 	else
2567 	  predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
2568 	break;
2569 
2570       case ORDERED_EXPR:
2571 	predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
2572 	break;
2573 
2574       case UNORDERED_EXPR:
2575 	predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
2576 	break;
2577 
2578       case LE_EXPR:
2579       case LT_EXPR:
2580 	if (integer_zerop (op1)
2581 	    || integer_onep (op1)
2582 	    || integer_all_onesp (op1)
2583 	    || real_zerop (op1)
2584 	    || real_onep (op1)
2585 	    || real_minus_onep (op1))
2586 	  predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
2587 	break;
2588 
2589       case GE_EXPR:
2590       case GT_EXPR:
2591 	if (integer_zerop (op1)
2592 	    || integer_onep (op1)
2593 	    || integer_all_onesp (op1)
2594 	    || real_zerop (op1)
2595 	    || real_onep (op1)
2596 	    || real_minus_onep (op1))
2597 	  predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
2598 	break;
2599 
2600       default:
2601 	break;
2602       }
2603 }
2604 
2605 /* Returns TRUE if the STMT is exit(0) like statement. */
2606 
2607 static bool
2608 is_exit_with_zero_arg (const gimple *stmt)
2609 {
2610   /* This is not exit, _exit or _Exit. */
2611   if (!gimple_call_builtin_p (stmt, BUILT_IN_EXIT)
2612       && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT)
2613       && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT2))
2614     return false;
2615 
2616   /* Argument is an interger zero. */
2617   return integer_zerop (gimple_call_arg (stmt, 0));
2618 }
2619 
2620 /* Try to guess whether the value of return means error code.  */
2621 
2622 static enum br_predictor
2623 return_prediction (tree val, enum prediction *prediction)
2624 {
2625   /* VOID.  */
2626   if (!val)
2627     return PRED_NO_PREDICTION;
2628   /* Different heuristics for pointers and scalars.  */
2629   if (POINTER_TYPE_P (TREE_TYPE (val)))
2630     {
2631       /* NULL is usually not returned.  */
2632       if (integer_zerop (val))
2633 	{
2634 	  *prediction = NOT_TAKEN;
2635 	  return PRED_NULL_RETURN;
2636 	}
2637     }
2638   else if (INTEGRAL_TYPE_P (TREE_TYPE (val)))
2639     {
2640       /* Negative return values are often used to indicate
2641          errors.  */
2642       if (TREE_CODE (val) == INTEGER_CST
2643 	  && tree_int_cst_sgn (val) < 0)
2644 	{
2645 	  *prediction = NOT_TAKEN;
2646 	  return PRED_NEGATIVE_RETURN;
2647 	}
2648       /* Constant return values seems to be commonly taken.
2649          Zero/one often represent booleans so exclude them from the
2650 	 heuristics.  */
2651       if (TREE_CONSTANT (val)
2652 	  && (!integer_zerop (val) && !integer_onep (val)))
2653 	{
2654 	  *prediction = NOT_TAKEN;
2655 	  return PRED_CONST_RETURN;
2656 	}
2657     }
2658   return PRED_NO_PREDICTION;
2659 }
2660 
2661 /* Return zero if phi result could have values other than -1, 0 or 1,
2662    otherwise return a bitmask, with bits 0, 1 and 2 set if -1, 0 and 1
2663    values are used or likely.  */
2664 
2665 static int
2666 zero_one_minusone (gphi *phi, int limit)
2667 {
2668   int phi_num_args = gimple_phi_num_args (phi);
2669   int ret = 0;
2670   for (int i = 0; i < phi_num_args; i++)
2671     {
2672       tree t = PHI_ARG_DEF (phi, i);
2673       if (TREE_CODE (t) != INTEGER_CST)
2674 	continue;
2675       wide_int w = wi::to_wide (t);
2676       if (w == -1)
2677 	ret |= 1;
2678       else if (w == 0)
2679 	ret |= 2;
2680       else if (w == 1)
2681 	ret |= 4;
2682       else
2683 	return 0;
2684     }
2685   for (int i = 0; i < phi_num_args; i++)
2686     {
2687       tree t = PHI_ARG_DEF (phi, i);
2688       if (TREE_CODE (t) == INTEGER_CST)
2689 	continue;
2690       if (TREE_CODE (t) != SSA_NAME)
2691 	return 0;
2692       gimple *g = SSA_NAME_DEF_STMT (t);
2693       if (gimple_code (g) == GIMPLE_PHI && limit > 0)
2694 	if (int r = zero_one_minusone (as_a <gphi *> (g), limit - 1))
2695 	  {
2696 	    ret |= r;
2697 	    continue;
2698 	  }
2699       if (!is_gimple_assign (g))
2700 	return 0;
2701       if (gimple_assign_cast_p (g))
2702 	{
2703 	  tree rhs1 = gimple_assign_rhs1 (g);
2704 	  if (TREE_CODE (rhs1) != SSA_NAME
2705 	      || !INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
2706 	      || TYPE_PRECISION (TREE_TYPE (rhs1)) != 1
2707 	      || !TYPE_UNSIGNED (TREE_TYPE (rhs1)))
2708 	    return 0;
2709 	  ret |= (2 | 4);
2710 	  continue;
2711 	}
2712       if (TREE_CODE_CLASS (gimple_assign_rhs_code (g)) != tcc_comparison)
2713 	return 0;
2714       ret |= (2 | 4);
2715     }
2716   return ret;
2717 }
2718 
2719 /* Find the basic block with return expression and look up for possible
2720    return value trying to apply RETURN_PREDICTION heuristics.  */
2721 static void
2722 apply_return_prediction (void)
2723 {
2724   greturn *return_stmt = NULL;
2725   tree return_val;
2726   edge e;
2727   gphi *phi;
2728   int phi_num_args, i;
2729   enum br_predictor pred;
2730   enum prediction direction;
2731   edge_iterator ei;
2732 
2733   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
2734     {
2735       gimple *last = last_stmt (e->src);
2736       if (last
2737 	  && gimple_code (last) == GIMPLE_RETURN)
2738 	{
2739 	  return_stmt = as_a <greturn *> (last);
2740 	  break;
2741 	}
2742     }
2743   if (!e)
2744     return;
2745   return_val = gimple_return_retval (return_stmt);
2746   if (!return_val)
2747     return;
2748   if (TREE_CODE (return_val) != SSA_NAME
2749       || !SSA_NAME_DEF_STMT (return_val)
2750       || gimple_code (SSA_NAME_DEF_STMT (return_val)) != GIMPLE_PHI)
2751     return;
2752   phi = as_a <gphi *> (SSA_NAME_DEF_STMT (return_val));
2753   phi_num_args = gimple_phi_num_args (phi);
2754   pred = return_prediction (PHI_ARG_DEF (phi, 0), &direction);
2755 
2756   /* Avoid the case where the function returns -1, 0 and 1 values and
2757      nothing else.  Those could be qsort etc. comparison functions
2758      where the negative return isn't less probable than positive.
2759      For this require that the function returns at least -1 or 1
2760      or -1 and a boolean value or comparison result, so that functions
2761      returning just -1 and 0 are treated as if -1 represents error value.  */
2762   if (INTEGRAL_TYPE_P (TREE_TYPE (return_val))
2763       && !TYPE_UNSIGNED (TREE_TYPE (return_val))
2764       && TYPE_PRECISION (TREE_TYPE (return_val)) > 1)
2765     if (int r = zero_one_minusone (phi, 3))
2766       if ((r & (1 | 4)) == (1 | 4))
2767 	return;
2768 
2769   /* Avoid the degenerate case where all return values form the function
2770      belongs to same category (ie they are all positive constants)
2771      so we can hardly say something about them.  */
2772   for (i = 1; i < phi_num_args; i++)
2773     if (pred != return_prediction (PHI_ARG_DEF (phi, i), &direction))
2774       break;
2775   if (i != phi_num_args)
2776     for (i = 0; i < phi_num_args; i++)
2777       {
2778 	pred = return_prediction (PHI_ARG_DEF (phi, i), &direction);
2779 	if (pred != PRED_NO_PREDICTION)
2780 	  predict_paths_leading_to_edge (gimple_phi_arg_edge (phi, i), pred,
2781 				         direction);
2782       }
2783 }
2784 
2785 /* Look for basic block that contains unlikely to happen events
2786    (such as noreturn calls) and mark all paths leading to execution
2787    of this basic blocks as unlikely.  */
2788 
2789 static void
2790 tree_bb_level_predictions (void)
2791 {
2792   basic_block bb;
2793   bool has_return_edges = false;
2794   edge e;
2795   edge_iterator ei;
2796 
2797   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
2798     if (!unlikely_executed_edge_p (e) && !(e->flags & EDGE_ABNORMAL_CALL))
2799       {
2800         has_return_edges = true;
2801 	break;
2802       }
2803 
2804   apply_return_prediction ();
2805 
2806   FOR_EACH_BB_FN (bb, cfun)
2807     {
2808       gimple_stmt_iterator gsi;
2809 
2810       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
2811 	{
2812 	  gimple *stmt = gsi_stmt (gsi);
2813 	  tree decl;
2814 
2815 	  if (is_gimple_call (stmt))
2816 	    {
2817 	      if (gimple_call_noreturn_p (stmt)
2818 		  && has_return_edges
2819 		  && !is_exit_with_zero_arg (stmt))
2820 		predict_paths_leading_to (bb, PRED_NORETURN,
2821 					  NOT_TAKEN);
2822 	      decl = gimple_call_fndecl (stmt);
2823 	      if (decl
2824 		  && lookup_attribute ("cold",
2825 				       DECL_ATTRIBUTES (decl)))
2826 		predict_paths_leading_to (bb, PRED_COLD_FUNCTION,
2827 					  NOT_TAKEN);
2828 	      if (decl && recursive_call_p (current_function_decl, decl))
2829 		predict_paths_leading_to (bb, PRED_RECURSIVE_CALL,
2830 					  NOT_TAKEN);
2831 	    }
2832 	  else if (gimple_code (stmt) == GIMPLE_PREDICT)
2833 	    {
2834 	      predict_paths_leading_to (bb, gimple_predict_predictor (stmt),
2835 					gimple_predict_outcome (stmt));
2836 	      /* Keep GIMPLE_PREDICT around so early inlining will propagate
2837 	         hints to callers.  */
2838 	    }
2839 	}
2840     }
2841 }
2842 
2843 /* Callback for hash_map::traverse, asserts that the pointer map is
2844    empty.  */
2845 
2846 bool
2847 assert_is_empty (const_basic_block const &, edge_prediction *const &value,
2848 		 void *)
2849 {
2850   gcc_assert (!value);
2851   return false;
2852 }
2853 
2854 /* Predict branch probabilities and estimate profile for basic block BB.
2855    When LOCAL_ONLY is set do not use any global properties of CFG.  */
2856 
2857 static void
2858 tree_estimate_probability_bb (basic_block bb, bool local_only)
2859 {
2860   edge e;
2861   edge_iterator ei;
2862 
2863   FOR_EACH_EDGE (e, ei, bb->succs)
2864     {
2865       /* Look for block we are guarding (ie we dominate it,
2866 	 but it doesn't postdominate us).  */
2867       if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) && e->dest != bb
2868 	  && !local_only
2869 	  && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
2870 	  && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
2871 	{
2872 	  gimple_stmt_iterator bi;
2873 
2874 	  /* The call heuristic claims that a guarded function call
2875 	     is improbable.  This is because such calls are often used
2876 	     to signal exceptional situations such as printing error
2877 	     messages.  */
2878 	  for (bi = gsi_start_bb (e->dest); !gsi_end_p (bi);
2879 	       gsi_next (&bi))
2880 	    {
2881 	      gimple *stmt = gsi_stmt (bi);
2882 	      if (is_gimple_call (stmt)
2883 		  && !gimple_inexpensive_call_p (as_a <gcall *>  (stmt))
2884 		  /* Constant and pure calls are hardly used to signalize
2885 		     something exceptional.  */
2886 		  && gimple_has_side_effects (stmt))
2887 		{
2888 		  if (gimple_call_fndecl (stmt))
2889 		    predict_edge_def (e, PRED_CALL, NOT_TAKEN);
2890 		  else if (virtual_method_call_p (gimple_call_fn (stmt)))
2891 		    predict_edge_def (e, PRED_POLYMORPHIC_CALL, NOT_TAKEN);
2892 		  else
2893 		    predict_edge_def (e, PRED_INDIR_CALL, TAKEN);
2894 		  break;
2895 		}
2896 	    }
2897 	}
2898     }
2899   tree_predict_by_opcode (bb);
2900 }
2901 
2902 /* Predict branch probabilities and estimate profile of the tree CFG.
2903    This function can be called from the loop optimizers to recompute
2904    the profile information.
2905    If DRY_RUN is set, do not modify CFG and only produce dump files.  */
2906 
2907 void
2908 tree_estimate_probability (bool dry_run)
2909 {
2910   basic_block bb;
2911 
2912   add_noreturn_fake_exit_edges ();
2913   connect_infinite_loops_to_exit ();
2914   /* We use loop_niter_by_eval, which requires that the loops have
2915      preheaders.  */
2916   create_preheaders (CP_SIMPLE_PREHEADERS);
2917   calculate_dominance_info (CDI_POST_DOMINATORS);
2918 
2919   bb_predictions = new hash_map<const_basic_block, edge_prediction *>;
2920   tree_bb_level_predictions ();
2921   record_loop_exits ();
2922 
2923   if (number_of_loops (cfun) > 1)
2924     predict_loops ();
2925 
2926   FOR_EACH_BB_FN (bb, cfun)
2927     tree_estimate_probability_bb (bb, false);
2928 
2929   FOR_EACH_BB_FN (bb, cfun)
2930     combine_predictions_for_bb (bb, dry_run);
2931 
2932   if (flag_checking)
2933     bb_predictions->traverse<void *, assert_is_empty> (NULL);
2934 
2935   delete bb_predictions;
2936   bb_predictions = NULL;
2937 
2938   if (!dry_run)
2939     estimate_bb_frequencies (false);
2940   free_dominance_info (CDI_POST_DOMINATORS);
2941   remove_fake_exit_edges ();
2942 }
2943 
2944 /* Set edge->probability for each successor edge of BB.  */
2945 void
2946 tree_guess_outgoing_edge_probabilities (basic_block bb)
2947 {
2948   bb_predictions = new hash_map<const_basic_block, edge_prediction *>;
2949   tree_estimate_probability_bb (bb, true);
2950   combine_predictions_for_bb (bb, false);
2951   if (flag_checking)
2952     bb_predictions->traverse<void *, assert_is_empty> (NULL);
2953   delete bb_predictions;
2954   bb_predictions = NULL;
2955 }
2956 
2957 /* Predict edges to successors of CUR whose sources are not postdominated by
2958    BB by PRED and recurse to all postdominators.  */
2959 
2960 static void
2961 predict_paths_for_bb (basic_block cur, basic_block bb,
2962 		      enum br_predictor pred,
2963 		      enum prediction taken,
2964 		      bitmap visited, struct loop *in_loop = NULL)
2965 {
2966   edge e;
2967   edge_iterator ei;
2968   basic_block son;
2969 
2970   /* If we exited the loop or CUR is unconditional in the loop, there is
2971      nothing to do.  */
2972   if (in_loop
2973       && (!flow_bb_inside_loop_p (in_loop, cur)
2974 	  || dominated_by_p (CDI_DOMINATORS, in_loop->latch, cur)))
2975     return;
2976 
2977   /* We are looking for all edges forming edge cut induced by
2978      set of all blocks postdominated by BB.  */
2979   FOR_EACH_EDGE (e, ei, cur->preds)
2980     if (e->src->index >= NUM_FIXED_BLOCKS
2981 	&& !dominated_by_p (CDI_POST_DOMINATORS, e->src, bb))
2982     {
2983       edge e2;
2984       edge_iterator ei2;
2985       bool found = false;
2986 
2987       /* Ignore fake edges and eh, we predict them as not taken anyway.  */
2988       if (unlikely_executed_edge_p (e))
2989 	continue;
2990       gcc_assert (bb == cur || dominated_by_p (CDI_POST_DOMINATORS, cur, bb));
2991 
2992       /* See if there is an edge from e->src that is not abnormal
2993 	 and does not lead to BB and does not exit the loop.  */
2994       FOR_EACH_EDGE (e2, ei2, e->src->succs)
2995 	if (e2 != e
2996 	    && !unlikely_executed_edge_p (e2)
2997 	    && !dominated_by_p (CDI_POST_DOMINATORS, e2->dest, bb)
2998 	    && (!in_loop || !loop_exit_edge_p (in_loop, e2)))
2999 	  {
3000 	    found = true;
3001 	    break;
3002 	  }
3003 
3004       /* If there is non-abnormal path leaving e->src, predict edge
3005 	 using predictor.  Otherwise we need to look for paths
3006 	 leading to e->src.
3007 
3008 	 The second may lead to infinite loop in the case we are predicitng
3009 	 regions that are only reachable by abnormal edges.  We simply
3010 	 prevent visiting given BB twice.  */
3011       if (found)
3012 	{
3013 	  if (!edge_predicted_by_p (e, pred, taken))
3014             predict_edge_def (e, pred, taken);
3015 	}
3016       else if (bitmap_set_bit (visited, e->src->index))
3017 	predict_paths_for_bb (e->src, e->src, pred, taken, visited, in_loop);
3018     }
3019   for (son = first_dom_son (CDI_POST_DOMINATORS, cur);
3020        son;
3021        son = next_dom_son (CDI_POST_DOMINATORS, son))
3022     predict_paths_for_bb (son, bb, pred, taken, visited, in_loop);
3023 }
3024 
3025 /* Sets branch probabilities according to PREDiction and
3026    FLAGS.  */
3027 
3028 static void
3029 predict_paths_leading_to (basic_block bb, enum br_predictor pred,
3030 			  enum prediction taken, struct loop *in_loop)
3031 {
3032   predict_paths_for_bb (bb, bb, pred, taken, auto_bitmap (), in_loop);
3033 }
3034 
3035 /* Like predict_paths_leading_to but take edge instead of basic block.  */
3036 
3037 static void
3038 predict_paths_leading_to_edge (edge e, enum br_predictor pred,
3039 			       enum prediction taken, struct loop *in_loop)
3040 {
3041   bool has_nonloop_edge = false;
3042   edge_iterator ei;
3043   edge e2;
3044 
3045   basic_block bb = e->src;
3046   FOR_EACH_EDGE (e2, ei, bb->succs)
3047     if (e2->dest != e->src && e2->dest != e->dest
3048 	&& !unlikely_executed_edge_p (e)
3049 	&& !dominated_by_p (CDI_POST_DOMINATORS, e->src, e2->dest))
3050       {
3051 	has_nonloop_edge = true;
3052 	break;
3053       }
3054   if (!has_nonloop_edge)
3055     {
3056       predict_paths_for_bb (bb, bb, pred, taken, auto_bitmap (), in_loop);
3057     }
3058   else
3059     predict_edge_def (e, pred, taken);
3060 }
3061 
3062 /* This is used to carry information about basic blocks.  It is
3063    attached to the AUX field of the standard CFG block.  */
3064 
3065 struct block_info
3066 {
3067   /* Estimated frequency of execution of basic_block.  */
3068   sreal frequency;
3069 
3070   /* To keep queue of basic blocks to process.  */
3071   basic_block next;
3072 
3073   /* Number of predecessors we need to visit first.  */
3074   int npredecessors;
3075 };
3076 
3077 /* Similar information for edges.  */
3078 struct edge_prob_info
3079 {
3080   /* In case edge is a loopback edge, the probability edge will be reached
3081      in case header is.  Estimated number of iterations of the loop can be
3082      then computed as 1 / (1 - back_edge_prob).  */
3083   sreal back_edge_prob;
3084   /* True if the edge is a loopback edge in the natural loop.  */
3085   unsigned int back_edge:1;
3086 };
3087 
3088 #define BLOCK_INFO(B)	((block_info *) (B)->aux)
3089 #undef EDGE_INFO
3090 #define EDGE_INFO(E)	((edge_prob_info *) (E)->aux)
3091 
3092 /* Helper function for estimate_bb_frequencies.
3093    Propagate the frequencies in blocks marked in
3094    TOVISIT, starting in HEAD.  */
3095 
3096 static void
3097 propagate_freq (basic_block head, bitmap tovisit)
3098 {
3099   basic_block bb;
3100   basic_block last;
3101   unsigned i;
3102   edge e;
3103   basic_block nextbb;
3104   bitmap_iterator bi;
3105 
3106   /* For each basic block we need to visit count number of his predecessors
3107      we need to visit first.  */
3108   EXECUTE_IF_SET_IN_BITMAP (tovisit, 0, i, bi)
3109     {
3110       edge_iterator ei;
3111       int count = 0;
3112 
3113       bb = BASIC_BLOCK_FOR_FN (cfun, i);
3114 
3115       FOR_EACH_EDGE (e, ei, bb->preds)
3116 	{
3117 	  bool visit = bitmap_bit_p (tovisit, e->src->index);
3118 
3119 	  if (visit && !(e->flags & EDGE_DFS_BACK))
3120 	    count++;
3121 	  else if (visit && dump_file && !EDGE_INFO (e)->back_edge)
3122 	    fprintf (dump_file,
3123 		     "Irreducible region hit, ignoring edge to %i->%i\n",
3124 		     e->src->index, bb->index);
3125 	}
3126       BLOCK_INFO (bb)->npredecessors = count;
3127       /* When function never returns, we will never process exit block.  */
3128       if (!count && bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
3129 	bb->count = profile_count::zero ();
3130     }
3131 
3132   BLOCK_INFO (head)->frequency = 1;
3133   last = head;
3134   for (bb = head; bb; bb = nextbb)
3135     {
3136       edge_iterator ei;
3137       sreal cyclic_probability = 0;
3138       sreal frequency = 0;
3139 
3140       nextbb = BLOCK_INFO (bb)->next;
3141       BLOCK_INFO (bb)->next = NULL;
3142 
3143       /* Compute frequency of basic block.  */
3144       if (bb != head)
3145 	{
3146 	  if (flag_checking)
3147 	    FOR_EACH_EDGE (e, ei, bb->preds)
3148 	      gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
3149 			  || (e->flags & EDGE_DFS_BACK));
3150 
3151 	  FOR_EACH_EDGE (e, ei, bb->preds)
3152 	    if (EDGE_INFO (e)->back_edge)
3153 	      {
3154 		cyclic_probability += EDGE_INFO (e)->back_edge_prob;
3155 	      }
3156 	    else if (!(e->flags & EDGE_DFS_BACK))
3157 	      {
3158 		/*  frequency += (e->probability
3159 				  * BLOCK_INFO (e->src)->frequency /
3160 				  REG_BR_PROB_BASE);  */
3161 
3162 		/* FIXME: Graphite is producing edges with no profile. Once
3163 		   this is fixed, drop this.  */
3164 		sreal tmp = e->probability.initialized_p () ?
3165 			    e->probability.to_reg_br_prob_base () : 0;
3166 		tmp *= BLOCK_INFO (e->src)->frequency;
3167 		tmp *= real_inv_br_prob_base;
3168 		frequency += tmp;
3169 	      }
3170 
3171 	  if (cyclic_probability == 0)
3172 	    {
3173 	      BLOCK_INFO (bb)->frequency = frequency;
3174 	    }
3175 	  else
3176 	    {
3177 	      if (cyclic_probability > real_almost_one)
3178 		cyclic_probability = real_almost_one;
3179 
3180 	      /* BLOCK_INFO (bb)->frequency = frequency
3181 					      / (1 - cyclic_probability) */
3182 
3183 	      cyclic_probability = sreal (1) - cyclic_probability;
3184 	      BLOCK_INFO (bb)->frequency = frequency / cyclic_probability;
3185 	    }
3186 	}
3187 
3188       bitmap_clear_bit (tovisit, bb->index);
3189 
3190       e = find_edge (bb, head);
3191       if (e)
3192 	{
3193 	  /* EDGE_INFO (e)->back_edge_prob
3194 	     = ((e->probability * BLOCK_INFO (bb)->frequency)
3195 	     / REG_BR_PROB_BASE); */
3196 
3197 	  /* FIXME: Graphite is producing edges with no profile. Once
3198 	     this is fixed, drop this.  */
3199 	  sreal tmp = e->probability.initialized_p () ?
3200 		      e->probability.to_reg_br_prob_base () : 0;
3201 	  tmp *= BLOCK_INFO (bb)->frequency;
3202 	  EDGE_INFO (e)->back_edge_prob = tmp * real_inv_br_prob_base;
3203 	}
3204 
3205       /* Propagate to successor blocks.  */
3206       FOR_EACH_EDGE (e, ei, bb->succs)
3207 	if (!(e->flags & EDGE_DFS_BACK)
3208 	    && BLOCK_INFO (e->dest)->npredecessors)
3209 	  {
3210 	    BLOCK_INFO (e->dest)->npredecessors--;
3211 	    if (!BLOCK_INFO (e->dest)->npredecessors)
3212 	      {
3213 		if (!nextbb)
3214 		  nextbb = e->dest;
3215 		else
3216 		  BLOCK_INFO (last)->next = e->dest;
3217 
3218 		last = e->dest;
3219 	      }
3220 	  }
3221     }
3222 }
3223 
3224 /* Estimate frequencies in loops at same nest level.  */
3225 
3226 static void
3227 estimate_loops_at_level (struct loop *first_loop)
3228 {
3229   struct loop *loop;
3230 
3231   for (loop = first_loop; loop; loop = loop->next)
3232     {
3233       edge e;
3234       basic_block *bbs;
3235       unsigned i;
3236       auto_bitmap tovisit;
3237 
3238       estimate_loops_at_level (loop->inner);
3239 
3240       /* Find current loop back edge and mark it.  */
3241       e = loop_latch_edge (loop);
3242       EDGE_INFO (e)->back_edge = 1;
3243 
3244       bbs = get_loop_body (loop);
3245       for (i = 0; i < loop->num_nodes; i++)
3246 	bitmap_set_bit (tovisit, bbs[i]->index);
3247       free (bbs);
3248       propagate_freq (loop->header, tovisit);
3249     }
3250 }
3251 
3252 /* Propagates frequencies through structure of loops.  */
3253 
3254 static void
3255 estimate_loops (void)
3256 {
3257   auto_bitmap tovisit;
3258   basic_block bb;
3259 
3260   /* Start by estimating the frequencies in the loops.  */
3261   if (number_of_loops (cfun) > 1)
3262     estimate_loops_at_level (current_loops->tree_root->inner);
3263 
3264   /* Now propagate the frequencies through all the blocks.  */
3265   FOR_ALL_BB_FN (bb, cfun)
3266     {
3267       bitmap_set_bit (tovisit, bb->index);
3268     }
3269   propagate_freq (ENTRY_BLOCK_PTR_FOR_FN (cfun), tovisit);
3270 }
3271 
3272 /* Drop the profile for NODE to guessed, and update its frequency based on
3273    whether it is expected to be hot given the CALL_COUNT.  */
3274 
3275 static void
3276 drop_profile (struct cgraph_node *node, profile_count call_count)
3277 {
3278   struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
3279   /* In the case where this was called by another function with a
3280      dropped profile, call_count will be 0. Since there are no
3281      non-zero call counts to this function, we don't know for sure
3282      whether it is hot, and therefore it will be marked normal below.  */
3283   bool hot = maybe_hot_count_p (NULL, call_count);
3284 
3285   if (dump_file)
3286     fprintf (dump_file,
3287 	     "Dropping 0 profile for %s. %s based on calls.\n",
3288 	     node->dump_name (),
3289 	     hot ? "Function is hot" : "Function is normal");
3290   /* We only expect to miss profiles for functions that are reached
3291      via non-zero call edges in cases where the function may have
3292      been linked from another module or library (COMDATs and extern
3293      templates). See the comments below for handle_missing_profiles.
3294      Also, only warn in cases where the missing counts exceed the
3295      number of training runs. In certain cases with an execv followed
3296      by a no-return call the profile for the no-return call is not
3297      dumped and there can be a mismatch.  */
3298   if (!DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl)
3299       && call_count > profile_info->runs)
3300     {
3301       if (flag_profile_correction)
3302         {
3303           if (dump_file)
3304             fprintf (dump_file,
3305 		     "Missing counts for called function %s\n",
3306 		     node->dump_name ());
3307         }
3308       else
3309 	warning (0, "Missing counts for called function %s",
3310 		 node->dump_name ());
3311     }
3312 
3313   basic_block bb;
3314   if (opt_for_fn (node->decl, flag_guess_branch_prob))
3315     {
3316       bool clear_zeros
3317 	 = !ENTRY_BLOCK_PTR_FOR_FN (fn)->count.nonzero_p ();
3318       FOR_ALL_BB_FN (bb, fn)
3319 	if (clear_zeros || !(bb->count == profile_count::zero ()))
3320 	  bb->count = bb->count.guessed_local ();
3321       fn->cfg->count_max = fn->cfg->count_max.guessed_local ();
3322     }
3323   else
3324     {
3325       FOR_ALL_BB_FN (bb, fn)
3326 	bb->count = profile_count::uninitialized ();
3327       fn->cfg->count_max = profile_count::uninitialized ();
3328     }
3329 
3330   struct cgraph_edge *e;
3331   for (e = node->callees; e; e = e->next_callee)
3332     e->count = gimple_bb (e->call_stmt)->count;
3333   for (e = node->indirect_calls; e; e = e->next_callee)
3334     e->count = gimple_bb (e->call_stmt)->count;
3335   node->count = ENTRY_BLOCK_PTR_FOR_FN (fn)->count;
3336 
3337   profile_status_for_fn (fn)
3338       = (flag_guess_branch_prob ? PROFILE_GUESSED : PROFILE_ABSENT);
3339   node->frequency
3340       = hot ? NODE_FREQUENCY_HOT : NODE_FREQUENCY_NORMAL;
3341 }
3342 
3343 /* In the case of COMDAT routines, multiple object files will contain the same
3344    function and the linker will select one for the binary. In that case
3345    all the other copies from the profile instrument binary will be missing
3346    profile counts. Look for cases where this happened, due to non-zero
3347    call counts going to 0-count functions, and drop the profile to guessed
3348    so that we can use the estimated probabilities and avoid optimizing only
3349    for size.
3350 
3351    The other case where the profile may be missing is when the routine
3352    is not going to be emitted to the object file, e.g. for "extern template"
3353    class methods. Those will be marked DECL_EXTERNAL. Emit a warning in
3354    all other cases of non-zero calls to 0-count functions.  */
3355 
3356 void
3357 handle_missing_profiles (void)
3358 {
3359   struct cgraph_node *node;
3360   int unlikely_count_fraction = PARAM_VALUE (UNLIKELY_BB_COUNT_FRACTION);
3361   auto_vec<struct cgraph_node *, 64> worklist;
3362 
3363   /* See if 0 count function has non-0 count callers.  In this case we
3364      lost some profile.  Drop its function profile to PROFILE_GUESSED.  */
3365   FOR_EACH_DEFINED_FUNCTION (node)
3366     {
3367       struct cgraph_edge *e;
3368       profile_count call_count = profile_count::zero ();
3369       gcov_type max_tp_first_run = 0;
3370       struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
3371 
3372       if (node->count.ipa ().nonzero_p ())
3373         continue;
3374       for (e = node->callers; e; e = e->next_caller)
3375 	if (e->count.ipa ().initialized_p () && e->count.ipa () > 0)
3376 	  {
3377             call_count = call_count + e->count.ipa ();
3378 
3379 	    if (e->caller->tp_first_run > max_tp_first_run)
3380 	      max_tp_first_run = e->caller->tp_first_run;
3381 	  }
3382 
3383       /* If time profile is missing, let assign the maximum that comes from
3384 	 caller functions.  */
3385       if (!node->tp_first_run && max_tp_first_run)
3386 	node->tp_first_run = max_tp_first_run + 1;
3387 
3388       if (call_count > 0
3389           && fn && fn->cfg
3390           && (call_count.apply_scale (unlikely_count_fraction, 1)
3391 	      >= profile_info->runs))
3392         {
3393           drop_profile (node, call_count);
3394           worklist.safe_push (node);
3395         }
3396     }
3397 
3398   /* Propagate the profile dropping to other 0-count COMDATs that are
3399      potentially called by COMDATs we already dropped the profile on.  */
3400   while (worklist.length () > 0)
3401     {
3402       struct cgraph_edge *e;
3403 
3404       node = worklist.pop ();
3405       for (e = node->callees; e; e = e->next_caller)
3406         {
3407           struct cgraph_node *callee = e->callee;
3408           struct function *fn = DECL_STRUCT_FUNCTION (callee->decl);
3409 
3410           if (!(e->count.ipa () == profile_count::zero ())
3411 	      && callee->count.ipa ().nonzero_p ())
3412             continue;
3413           if ((DECL_COMDAT (callee->decl) || DECL_EXTERNAL (callee->decl))
3414 	      && fn && fn->cfg
3415               && profile_status_for_fn (fn) == PROFILE_READ)
3416             {
3417               drop_profile (node, profile_count::zero ());
3418               worklist.safe_push (callee);
3419             }
3420         }
3421     }
3422 }
3423 
3424 /* Convert counts measured by profile driven feedback to frequencies.
3425    Return nonzero iff there was any nonzero execution count.  */
3426 
3427 bool
3428 update_max_bb_count (void)
3429 {
3430   profile_count true_count_max = profile_count::uninitialized ();
3431   basic_block bb;
3432 
3433   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3434     true_count_max = true_count_max.max (bb->count);
3435 
3436   cfun->cfg->count_max = true_count_max;
3437 
3438   return true_count_max.ipa ().nonzero_p ();
3439 }
3440 
3441 /* Return true if function is likely to be expensive, so there is no point to
3442    optimize performance of prologue, epilogue or do inlining at the expense
3443    of code size growth.  THRESHOLD is the limit of number of instructions
3444    function can execute at average to be still considered not expensive.  */
3445 
3446 bool
3447 expensive_function_p (int threshold)
3448 {
3449   basic_block bb;
3450 
3451   /* If profile was scaled in a way entry block has count 0, then the function
3452      is deifnitly taking a lot of time.  */
3453   if (!ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.nonzero_p ())
3454     return true;
3455 
3456   profile_count limit = ENTRY_BLOCK_PTR_FOR_FN
3457 			   (cfun)->count.apply_scale (threshold, 1);
3458   profile_count sum = profile_count::zero ();
3459   FOR_EACH_BB_FN (bb, cfun)
3460     {
3461       rtx_insn *insn;
3462 
3463       if (!bb->count.initialized_p ())
3464 	{
3465 	  if (dump_file)
3466 	    fprintf (dump_file, "Function is considered expensive because"
3467 		     " count of bb %i is not initialized\n", bb->index);
3468 	  return true;
3469 	}
3470 
3471       FOR_BB_INSNS (bb, insn)
3472 	if (active_insn_p (insn))
3473 	  {
3474 	    sum += bb->count;
3475 	    if (sum > limit)
3476 	      return true;
3477 	}
3478     }
3479 
3480   return false;
3481 }
3482 
3483 /* All basic blocks that are reachable only from unlikely basic blocks are
3484    unlikely.  */
3485 
3486 void
3487 propagate_unlikely_bbs_forward (void)
3488 {
3489   auto_vec<basic_block, 64> worklist;
3490   basic_block bb;
3491   edge_iterator ei;
3492   edge e;
3493 
3494   if (!(ENTRY_BLOCK_PTR_FOR_FN (cfun)->count == profile_count::zero ()))
3495     {
3496       ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux = (void *)(size_t) 1;
3497       worklist.safe_push (ENTRY_BLOCK_PTR_FOR_FN (cfun));
3498 
3499       while (worklist.length () > 0)
3500 	{
3501 	  bb = worklist.pop ();
3502 	  FOR_EACH_EDGE (e, ei, bb->succs)
3503 	    if (!(e->count () == profile_count::zero ())
3504 		&& !(e->dest->count == profile_count::zero ())
3505 		&& !e->dest->aux)
3506 	      {
3507 		e->dest->aux = (void *)(size_t) 1;
3508 		worklist.safe_push (e->dest);
3509 	      }
3510 	}
3511     }
3512 
3513   FOR_ALL_BB_FN (bb, cfun)
3514     {
3515       if (!bb->aux)
3516 	{
3517 	  if (!(bb->count == profile_count::zero ())
3518 	      && (dump_file && (dump_flags & TDF_DETAILS)))
3519 	    fprintf (dump_file,
3520 		     "Basic block %i is marked unlikely by forward prop\n",
3521 		     bb->index);
3522 	  bb->count = profile_count::zero ();
3523 	}
3524       else
3525         bb->aux = NULL;
3526     }
3527 }
3528 
3529 /* Determine basic blocks/edges that are known to be unlikely executed and set
3530    their counters to zero.
3531    This is done with first identifying obviously unlikely BBs/edges and then
3532    propagating in both directions.  */
3533 
3534 static void
3535 determine_unlikely_bbs ()
3536 {
3537   basic_block bb;
3538   auto_vec<basic_block, 64> worklist;
3539   edge_iterator ei;
3540   edge e;
3541 
3542   FOR_EACH_BB_FN (bb, cfun)
3543     {
3544       if (!(bb->count == profile_count::zero ())
3545 	  && unlikely_executed_bb_p (bb))
3546 	{
3547           if (dump_file && (dump_flags & TDF_DETAILS))
3548 	    fprintf (dump_file, "Basic block %i is locally unlikely\n",
3549 		     bb->index);
3550 	  bb->count = profile_count::zero ();
3551 	}
3552 
3553       FOR_EACH_EDGE (e, ei, bb->succs)
3554 	if (!(e->probability == profile_probability::never ())
3555 	    && unlikely_executed_edge_p (e))
3556 	  {
3557             if (dump_file && (dump_flags & TDF_DETAILS))
3558 	      fprintf (dump_file, "Edge %i->%i is locally unlikely\n",
3559 		       bb->index, e->dest->index);
3560 	    e->probability = profile_probability::never ();
3561 	  }
3562 
3563       gcc_checking_assert (!bb->aux);
3564     }
3565   propagate_unlikely_bbs_forward ();
3566 
3567   auto_vec<int, 64> nsuccs;
3568   nsuccs.safe_grow_cleared (last_basic_block_for_fn (cfun));
3569   FOR_ALL_BB_FN (bb, cfun)
3570     if (!(bb->count == profile_count::zero ())
3571 	&& bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
3572       {
3573 	nsuccs[bb->index] = 0;
3574         FOR_EACH_EDGE (e, ei, bb->succs)
3575 	  if (!(e->probability == profile_probability::never ())
3576 	      && !(e->dest->count == profile_count::zero ()))
3577 	    nsuccs[bb->index]++;
3578 	if (!nsuccs[bb->index])
3579 	  worklist.safe_push (bb);
3580       }
3581   while (worklist.length () > 0)
3582     {
3583       bb = worklist.pop ();
3584       if (bb->count == profile_count::zero ())
3585 	continue;
3586       if (bb != ENTRY_BLOCK_PTR_FOR_FN (cfun))
3587 	{
3588 	  bool found = false;
3589           for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
3590                !gsi_end_p (gsi); gsi_next (&gsi))
3591 	    if (stmt_can_terminate_bb_p (gsi_stmt (gsi))
3592 		/* stmt_can_terminate_bb_p special cases noreturns because it
3593 		   assumes that fake edges are created.  We want to know that
3594 		   noreturn alone does not imply BB to be unlikely.  */
3595 		|| (is_gimple_call (gsi_stmt (gsi))
3596 		    && (gimple_call_flags (gsi_stmt (gsi)) & ECF_NORETURN)))
3597 	      {
3598 		found = true;
3599 		break;
3600 	      }
3601 	  if (found)
3602 	    continue;
3603 	}
3604       if (dump_file && (dump_flags & TDF_DETAILS))
3605 	fprintf (dump_file,
3606 		 "Basic block %i is marked unlikely by backward prop\n",
3607 		 bb->index);
3608       bb->count = profile_count::zero ();
3609       FOR_EACH_EDGE (e, ei, bb->preds)
3610 	if (!(e->probability == profile_probability::never ()))
3611 	  {
3612 	    if (!(e->src->count == profile_count::zero ()))
3613 	      {
3614 		gcc_checking_assert (nsuccs[e->src->index] > 0);
3615 	        nsuccs[e->src->index]--;
3616 	        if (!nsuccs[e->src->index])
3617 		  worklist.safe_push (e->src);
3618 	      }
3619 	  }
3620     }
3621   /* Finally all edges from non-0 regions to 0 are unlikely.  */
3622   FOR_ALL_BB_FN (bb, cfun)
3623     if (!(bb->count == profile_count::zero ()))
3624       FOR_EACH_EDGE (e, ei, bb->succs)
3625 	if (!(e->probability == profile_probability::never ())
3626 	    && e->dest->count == profile_count::zero ())
3627 	   {
3628 	     if (dump_file && (dump_flags & TDF_DETAILS))
3629 	       fprintf (dump_file, "Edge %i->%i is unlikely because "
3630 		 	"it enters unlikely block\n",
3631 			bb->index, e->dest->index);
3632 	     e->probability = profile_probability::never ();
3633 	   }
3634   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count == profile_count::zero ())
3635     cgraph_node::get (current_function_decl)->count = profile_count::zero ();
3636 }
3637 
3638 /* Estimate and propagate basic block frequencies using the given branch
3639    probabilities.  If FORCE is true, the frequencies are used to estimate
3640    the counts even when there are already non-zero profile counts.  */
3641 
3642 void
3643 estimate_bb_frequencies (bool force)
3644 {
3645   basic_block bb;
3646   sreal freq_max;
3647 
3648   determine_unlikely_bbs ();
3649 
3650   if (force || profile_status_for_fn (cfun) != PROFILE_READ
3651       || !update_max_bb_count ())
3652     {
3653       static int real_values_initialized = 0;
3654 
3655       if (!real_values_initialized)
3656         {
3657 	  real_values_initialized = 1;
3658 	  real_br_prob_base = REG_BR_PROB_BASE;
3659 	  /* Scaling frequencies up to maximal profile count may result in
3660 	     frequent overflows especially when inlining loops.
3661 	     Small scalling results in unnecesary precision loss.  Stay in
3662 	     the half of the (exponential) range.  */
3663 	  real_bb_freq_max = (uint64_t)1 << (profile_count::n_bits / 2);
3664 	  real_one_half = sreal (1, -1);
3665 	  real_inv_br_prob_base = sreal (1) / real_br_prob_base;
3666 	  real_almost_one = sreal (1) - real_inv_br_prob_base;
3667 	}
3668 
3669       mark_dfs_back_edges ();
3670 
3671       single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun))->probability =
3672 	 profile_probability::always ();
3673 
3674       /* Set up block info for each basic block.  */
3675       alloc_aux_for_blocks (sizeof (block_info));
3676       alloc_aux_for_edges (sizeof (edge_prob_info));
3677       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3678 	{
3679 	  edge e;
3680 	  edge_iterator ei;
3681 
3682 	  FOR_EACH_EDGE (e, ei, bb->succs)
3683 	    {
3684 	      /* FIXME: Graphite is producing edges with no profile. Once
3685 		 this is fixed, drop this.  */
3686 	      if (e->probability.initialized_p ())
3687 	        EDGE_INFO (e)->back_edge_prob
3688 		   = e->probability.to_reg_br_prob_base ();
3689 	      else
3690 		EDGE_INFO (e)->back_edge_prob = REG_BR_PROB_BASE / 2;
3691 	      EDGE_INFO (e)->back_edge_prob *= real_inv_br_prob_base;
3692 	    }
3693 	}
3694 
3695       /* First compute frequencies locally for each loop from innermost
3696          to outermost to examine frequencies for back edges.  */
3697       estimate_loops ();
3698 
3699       freq_max = 0;
3700       FOR_EACH_BB_FN (bb, cfun)
3701 	if (freq_max < BLOCK_INFO (bb)->frequency)
3702 	  freq_max = BLOCK_INFO (bb)->frequency;
3703 
3704       freq_max = real_bb_freq_max / freq_max;
3705       if (freq_max < 16)
3706 	freq_max = 16;
3707       profile_count ipa_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa ();
3708       cfun->cfg->count_max = profile_count::uninitialized ();
3709       FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3710 	{
3711 	  sreal tmp = BLOCK_INFO (bb)->frequency * freq_max + real_one_half;
3712 	  profile_count count = profile_count::from_gcov_type (tmp.to_int ());
3713 
3714 	  /* If we have profile feedback in which this function was never
3715 	     executed, then preserve this info.  */
3716 	  if (!(bb->count == profile_count::zero ()))
3717 	    bb->count = count.guessed_local ().combine_with_ipa_count (ipa_count);
3718           cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
3719 	}
3720 
3721       free_aux_for_blocks ();
3722       free_aux_for_edges ();
3723     }
3724   compute_function_frequency ();
3725 }
3726 
3727 /* Decide whether function is hot, cold or unlikely executed.  */
3728 void
3729 compute_function_frequency (void)
3730 {
3731   basic_block bb;
3732   struct cgraph_node *node = cgraph_node::get (current_function_decl);
3733 
3734   if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
3735       || MAIN_NAME_P (DECL_NAME (current_function_decl)))
3736     node->only_called_at_startup = true;
3737   if (DECL_STATIC_DESTRUCTOR (current_function_decl))
3738     node->only_called_at_exit = true;
3739 
3740   if (profile_status_for_fn (cfun) != PROFILE_READ)
3741     {
3742       int flags = flags_from_decl_or_type (current_function_decl);
3743       if ((ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa_p ()
3744 	   && ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa() == profile_count::zero ())
3745 	  || lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl))
3746 	     != NULL)
3747 	{
3748           node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
3749 	  warn_function_cold (current_function_decl);
3750 	}
3751       else if (lookup_attribute ("hot", DECL_ATTRIBUTES (current_function_decl))
3752 	       != NULL)
3753         node->frequency = NODE_FREQUENCY_HOT;
3754       else if (flags & ECF_NORETURN)
3755         node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3756       else if (MAIN_NAME_P (DECL_NAME (current_function_decl)))
3757         node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3758       else if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
3759 	       || DECL_STATIC_DESTRUCTOR (current_function_decl))
3760         node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
3761       return;
3762     }
3763 
3764   node->frequency = NODE_FREQUENCY_UNLIKELY_EXECUTED;
3765   warn_function_cold (current_function_decl);
3766   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa() == profile_count::zero ())
3767     return;
3768   FOR_EACH_BB_FN (bb, cfun)
3769     {
3770       if (maybe_hot_bb_p (cfun, bb))
3771 	{
3772 	  node->frequency = NODE_FREQUENCY_HOT;
3773 	  return;
3774 	}
3775       if (!probably_never_executed_bb_p (cfun, bb))
3776 	node->frequency = NODE_FREQUENCY_NORMAL;
3777     }
3778 }
3779 
3780 /* Build PREDICT_EXPR.  */
3781 tree
3782 build_predict_expr (enum br_predictor predictor, enum prediction taken)
3783 {
3784   tree t = build1 (PREDICT_EXPR, void_type_node,
3785 		   build_int_cst (integer_type_node, predictor));
3786   SET_PREDICT_EXPR_OUTCOME (t, taken);
3787   return t;
3788 }
3789 
3790 const char *
3791 predictor_name (enum br_predictor predictor)
3792 {
3793   return predictor_info[predictor].name;
3794 }
3795 
3796 /* Predict branch probabilities and estimate profile of the tree CFG. */
3797 
3798 namespace {
3799 
3800 const pass_data pass_data_profile =
3801 {
3802   GIMPLE_PASS, /* type */
3803   "profile_estimate", /* name */
3804   OPTGROUP_NONE, /* optinfo_flags */
3805   TV_BRANCH_PROB, /* tv_id */
3806   PROP_cfg, /* properties_required */
3807   0, /* properties_provided */
3808   0, /* properties_destroyed */
3809   0, /* todo_flags_start */
3810   0, /* todo_flags_finish */
3811 };
3812 
3813 class pass_profile : public gimple_opt_pass
3814 {
3815 public:
3816   pass_profile (gcc::context *ctxt)
3817     : gimple_opt_pass (pass_data_profile, ctxt)
3818   {}
3819 
3820   /* opt_pass methods: */
3821   virtual bool gate (function *) { return flag_guess_branch_prob; }
3822   virtual unsigned int execute (function *);
3823 
3824 }; // class pass_profile
3825 
3826 unsigned int
3827 pass_profile::execute (function *fun)
3828 {
3829   unsigned nb_loops;
3830 
3831   if (profile_status_for_fn (cfun) == PROFILE_GUESSED)
3832     return 0;
3833 
3834   loop_optimizer_init (LOOPS_NORMAL);
3835   if (dump_file && (dump_flags & TDF_DETAILS))
3836     flow_loops_dump (dump_file, NULL, 0);
3837 
3838   mark_irreducible_loops ();
3839 
3840   nb_loops = number_of_loops (fun);
3841   if (nb_loops > 1)
3842     scev_initialize ();
3843 
3844   tree_estimate_probability (false);
3845 
3846   if (nb_loops > 1)
3847     scev_finalize ();
3848 
3849   loop_optimizer_finalize ();
3850   if (dump_file && (dump_flags & TDF_DETAILS))
3851     gimple_dump_cfg (dump_file, dump_flags);
3852  if (profile_status_for_fn (fun) == PROFILE_ABSENT)
3853     profile_status_for_fn (fun) = PROFILE_GUESSED;
3854  if (dump_file && (dump_flags & TDF_DETAILS))
3855    {
3856      struct loop *loop;
3857      FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
3858        if (loop->header->count.initialized_p ())
3859          fprintf (dump_file, "Loop got predicted %d to iterate %i times.\n",
3860        	   loop->num,
3861        	   (int)expected_loop_iterations_unbounded (loop));
3862    }
3863   return 0;
3864 }
3865 
3866 } // anon namespace
3867 
3868 gimple_opt_pass *
3869 make_pass_profile (gcc::context *ctxt)
3870 {
3871   return new pass_profile (ctxt);
3872 }
3873 
3874 namespace {
3875 
3876 const pass_data pass_data_strip_predict_hints =
3877 {
3878   GIMPLE_PASS, /* type */
3879   "*strip_predict_hints", /* name */
3880   OPTGROUP_NONE, /* optinfo_flags */
3881   TV_BRANCH_PROB, /* tv_id */
3882   PROP_cfg, /* properties_required */
3883   0, /* properties_provided */
3884   0, /* properties_destroyed */
3885   0, /* todo_flags_start */
3886   0, /* todo_flags_finish */
3887 };
3888 
3889 class pass_strip_predict_hints : public gimple_opt_pass
3890 {
3891 public:
3892   pass_strip_predict_hints (gcc::context *ctxt)
3893     : gimple_opt_pass (pass_data_strip_predict_hints, ctxt)
3894   {}
3895 
3896   /* opt_pass methods: */
3897   opt_pass * clone () { return new pass_strip_predict_hints (m_ctxt); }
3898   virtual unsigned int execute (function *);
3899 
3900 }; // class pass_strip_predict_hints
3901 
3902 /* Get rid of all builtin_expect calls and GIMPLE_PREDICT statements
3903    we no longer need.  */
3904 unsigned int
3905 pass_strip_predict_hints::execute (function *fun)
3906 {
3907   basic_block bb;
3908   gimple *ass_stmt;
3909   tree var;
3910   bool changed = false;
3911 
3912   FOR_EACH_BB_FN (bb, fun)
3913     {
3914       gimple_stmt_iterator bi;
3915       for (bi = gsi_start_bb (bb); !gsi_end_p (bi);)
3916 	{
3917 	  gimple *stmt = gsi_stmt (bi);
3918 
3919 	  if (gimple_code (stmt) == GIMPLE_PREDICT)
3920 	    {
3921 	      gsi_remove (&bi, true);
3922 	      changed = true;
3923 	      continue;
3924 	    }
3925 	  else if (is_gimple_call (stmt))
3926 	    {
3927 	      tree fndecl = gimple_call_fndecl (stmt);
3928 
3929 	      if ((fndecl
3930 		   && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
3931 		   && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_EXPECT
3932 		   && gimple_call_num_args (stmt) == 2)
3933 		  || (gimple_call_internal_p (stmt)
3934 		      && gimple_call_internal_fn (stmt) == IFN_BUILTIN_EXPECT))
3935 		{
3936 		  var = gimple_call_lhs (stmt);
3937 	          changed = true;
3938 		  if (var)
3939 		    {
3940 		      ass_stmt
3941 			= gimple_build_assign (var, gimple_call_arg (stmt, 0));
3942 		      gsi_replace (&bi, ass_stmt, true);
3943 		    }
3944 		  else
3945 		    {
3946 		      gsi_remove (&bi, true);
3947 		      continue;
3948 		    }
3949 		}
3950 	    }
3951 	  gsi_next (&bi);
3952 	}
3953     }
3954   return changed ? TODO_cleanup_cfg : 0;
3955 }
3956 
3957 } // anon namespace
3958 
3959 gimple_opt_pass *
3960 make_pass_strip_predict_hints (gcc::context *ctxt)
3961 {
3962   return new pass_strip_predict_hints (ctxt);
3963 }
3964 
3965 /* Rebuild function frequencies.  Passes are in general expected to
3966    maintain profile by hand, however in some cases this is not possible:
3967    for example when inlining several functions with loops freuqencies might run
3968    out of scale and thus needs to be recomputed.  */
3969 
3970 void
3971 rebuild_frequencies (void)
3972 {
3973   timevar_push (TV_REBUILD_FREQUENCIES);
3974 
3975   /* When the max bb count in the function is small, there is a higher
3976      chance that there were truncation errors in the integer scaling
3977      of counts by inlining and other optimizations. This could lead
3978      to incorrect classification of code as being cold when it isn't.
3979      In that case, force the estimation of bb counts/frequencies from the
3980      branch probabilities, rather than computing frequencies from counts,
3981      which may also lead to frequencies incorrectly reduced to 0. There
3982      is less precision in the probabilities, so we only do this for small
3983      max counts.  */
3984   cfun->cfg->count_max = profile_count::uninitialized ();
3985   basic_block bb;
3986   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
3987     cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
3988 
3989   if (profile_status_for_fn (cfun) == PROFILE_GUESSED)
3990     {
3991       loop_optimizer_init (0);
3992       add_noreturn_fake_exit_edges ();
3993       mark_irreducible_loops ();
3994       connect_infinite_loops_to_exit ();
3995       estimate_bb_frequencies (true);
3996       remove_fake_exit_edges ();
3997       loop_optimizer_finalize ();
3998     }
3999   else if (profile_status_for_fn (cfun) == PROFILE_READ)
4000     update_max_bb_count ();
4001   else if (profile_status_for_fn (cfun) == PROFILE_ABSENT
4002 	   && !flag_guess_branch_prob)
4003     ;
4004   else
4005     gcc_unreachable ();
4006   timevar_pop (TV_REBUILD_FREQUENCIES);
4007 }
4008 
4009 /* Perform a dry run of the branch prediction pass and report comparsion of
4010    the predicted and real profile into the dump file.  */
4011 
4012 void
4013 report_predictor_hitrates (void)
4014 {
4015   unsigned nb_loops;
4016 
4017   loop_optimizer_init (LOOPS_NORMAL);
4018   if (dump_file && (dump_flags & TDF_DETAILS))
4019     flow_loops_dump (dump_file, NULL, 0);
4020 
4021   mark_irreducible_loops ();
4022 
4023   nb_loops = number_of_loops (cfun);
4024   if (nb_loops > 1)
4025     scev_initialize ();
4026 
4027   tree_estimate_probability (true);
4028 
4029   if (nb_loops > 1)
4030     scev_finalize ();
4031 
4032   loop_optimizer_finalize ();
4033 }
4034 
4035 /* Force edge E to be cold.
4036    If IMPOSSIBLE is true, for edge to have count and probability 0 otherwise
4037    keep low probability to represent possible error in a guess.  This is used
4038    i.e. in case we predict loop to likely iterate given number of times but
4039    we are not 100% sure.
4040 
4041    This function locally updates profile without attempt to keep global
4042    consistency which can not be reached in full generality without full profile
4043    rebuild from probabilities alone.  Doing so is not necessarily a good idea
4044    because frequencies and counts may be more realistic then probabilities.
4045 
4046    In some cases (such as for elimination of early exits during full loop
4047    unrolling) the caller can ensure that profile will get consistent
4048    afterwards.  */
4049 
4050 void
4051 force_edge_cold (edge e, bool impossible)
4052 {
4053   profile_count count_sum = profile_count::zero ();
4054   profile_probability prob_sum = profile_probability::never ();
4055   edge_iterator ei;
4056   edge e2;
4057   bool uninitialized_exit = false;
4058 
4059   /* When branch probability guesses are not known, then do nothing.  */
4060   if (!impossible && !e->count ().initialized_p ())
4061     return;
4062 
4063   profile_probability goal = (impossible ? profile_probability::never ()
4064 			      : profile_probability::very_unlikely ());
4065 
4066   /* If edge is already improbably or cold, just return.  */
4067   if (e->probability <= goal
4068       && (!impossible || e->count () == profile_count::zero ()))
4069     return;
4070   FOR_EACH_EDGE (e2, ei, e->src->succs)
4071     if (e2 != e)
4072       {
4073 	if (e->flags & EDGE_FAKE)
4074 	  continue;
4075 	if (e2->count ().initialized_p ())
4076 	  count_sum += e2->count ();
4077 	if (e2->probability.initialized_p ())
4078 	  prob_sum += e2->probability;
4079 	else
4080 	  uninitialized_exit = true;
4081       }
4082 
4083   /* If we are not guessing profiles but have some other edges out,
4084      just assume the control flow goes elsewhere.  */
4085   if (uninitialized_exit)
4086     e->probability = goal;
4087   /* If there are other edges out of e->src, redistribute probabilitity
4088      there.  */
4089   else if (prob_sum > profile_probability::never ())
4090     {
4091       if (!(e->probability < goal))
4092 	e->probability = goal;
4093 
4094       profile_probability prob_comp = prob_sum / e->probability.invert ();
4095 
4096       if (dump_file && (dump_flags & TDF_DETAILS))
4097 	fprintf (dump_file, "Making edge %i->%i %s by redistributing "
4098 		 "probability to other edges.\n",
4099 		 e->src->index, e->dest->index,
4100 		 impossible ? "impossible" : "cold");
4101       FOR_EACH_EDGE (e2, ei, e->src->succs)
4102 	if (e2 != e)
4103 	  {
4104 	    e2->probability /= prob_comp;
4105 	  }
4106       if (current_ir_type () != IR_GIMPLE
4107 	  && e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun))
4108 	update_br_prob_note (e->src);
4109     }
4110   /* If all edges out of e->src are unlikely, the basic block itself
4111      is unlikely.  */
4112   else
4113     {
4114       if (prob_sum == profile_probability::never ())
4115         e->probability = profile_probability::always ();
4116       else
4117 	{
4118 	  if (impossible)
4119 	    e->probability = profile_probability::never ();
4120 	  /* If BB has some edges out that are not impossible, we can not
4121 	     assume that BB itself is.  */
4122 	  impossible = false;
4123 	}
4124       if (current_ir_type () != IR_GIMPLE
4125 	  && e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun))
4126 	update_br_prob_note (e->src);
4127       if (e->src->count == profile_count::zero ())
4128 	return;
4129       if (count_sum == profile_count::zero () && impossible)
4130 	{
4131 	  bool found = false;
4132 	  if (e->src == ENTRY_BLOCK_PTR_FOR_FN (cfun))
4133 	    ;
4134 	  else if (current_ir_type () == IR_GIMPLE)
4135 	    for (gimple_stmt_iterator gsi = gsi_start_bb (e->src);
4136 	         !gsi_end_p (gsi); gsi_next (&gsi))
4137 	      {
4138 	        if (stmt_can_terminate_bb_p (gsi_stmt (gsi)))
4139 		  {
4140 		    found = true;
4141 	            break;
4142 		  }
4143 	      }
4144 	  /* FIXME: Implement RTL path.  */
4145 	  else
4146 	    found = true;
4147 	  if (!found)
4148 	    {
4149 	      if (dump_file && (dump_flags & TDF_DETAILS))
4150 		fprintf (dump_file,
4151 			 "Making bb %i impossible and dropping count to 0.\n",
4152 			 e->src->index);
4153 	      e->src->count = profile_count::zero ();
4154 	      FOR_EACH_EDGE (e2, ei, e->src->preds)
4155 		force_edge_cold (e2, impossible);
4156 	      return;
4157 	    }
4158 	}
4159 
4160       /* If we did not adjusting, the source basic block has no likely edeges
4161  	 leaving other direction. In that case force that bb cold, too.
4162 	 This in general is difficult task to do, but handle special case when
4163 	 BB has only one predecestor.  This is common case when we are updating
4164 	 after loop transforms.  */
4165       if (!(prob_sum > profile_probability::never ())
4166 	  && count_sum == profile_count::zero ()
4167 	  && single_pred_p (e->src) && e->src->count.to_frequency (cfun)
4168 	     > (impossible ? 0 : 1))
4169 	{
4170 	  int old_frequency = e->src->count.to_frequency (cfun);
4171 	  if (dump_file && (dump_flags & TDF_DETAILS))
4172 	    fprintf (dump_file, "Making bb %i %s.\n", e->src->index,
4173 		     impossible ? "impossible" : "cold");
4174 	  int new_frequency = MIN (e->src->count.to_frequency (cfun),
4175 				   impossible ? 0 : 1);
4176 	  if (impossible)
4177 	    e->src->count = profile_count::zero ();
4178 	  else
4179 	    e->src->count = e->count ().apply_scale (new_frequency,
4180 						     old_frequency);
4181 	  force_edge_cold (single_pred_edge (e->src), impossible);
4182 	}
4183       else if (dump_file && (dump_flags & TDF_DETAILS)
4184 	       && maybe_hot_bb_p (cfun, e->src))
4185 	fprintf (dump_file, "Giving up on making bb %i %s.\n", e->src->index,
4186 		 impossible ? "impossible" : "cold");
4187     }
4188 }
4189 
4190 #if CHECKING_P
4191 
4192 namespace selftest {
4193 
4194 /* Test that value range of predictor values defined in predict.def is
4195    within range (50, 100].  */
4196 
4197 struct branch_predictor
4198 {
4199   const char *name;
4200   int probability;
4201 };
4202 
4203 #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) { NAME, HITRATE },
4204 
4205 static void
4206 test_prediction_value_range ()
4207 {
4208   branch_predictor predictors[] = {
4209 #include "predict.def"
4210     { NULL, PROB_UNINITIALIZED }
4211   };
4212 
4213   for (unsigned i = 0; predictors[i].name != NULL; i++)
4214     {
4215       if (predictors[i].probability == PROB_UNINITIALIZED)
4216 	continue;
4217 
4218       unsigned p = 100 * predictors[i].probability / REG_BR_PROB_BASE;
4219       ASSERT_TRUE (p >= 50 && p <= 100);
4220     }
4221 }
4222 
4223 #undef DEF_PREDICTOR
4224 
4225 /* Run all of the selfests within this file.  */
4226 
4227 void
4228 predict_c_tests ()
4229 {
4230   test_prediction_value_range ();
4231 }
4232 
4233 } // namespace selftest
4234 #endif /* CHECKING_P.  */
4235