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