(root)/
gcc-13.2.0/
gcc/
predict.h
       1  /* Definitions for branch prediction routines in the GNU compiler.
       2     Copyright (C) 2001-2023 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  #ifndef GCC_PREDICT_H
      21  #define GCC_PREDICT_H
      22  
      23  #include "profile-count.h"
      24  
      25  /* Random guesstimation given names.
      26     PROB_VERY_UNLIKELY should be small enough so basic block predicted
      27     by it gets below HOT_BB_FREQUENCY_FRACTION.  */
      28  #define PROB_VERY_UNLIKELY	(REG_BR_PROB_BASE / 2000 - 1)
      29  #define PROB_EVEN		(REG_BR_PROB_BASE / 2)
      30  #define PROB_VERY_LIKELY	(REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
      31  #define PROB_ALWAYS		(REG_BR_PROB_BASE)
      32  #define PROB_UNLIKELY           (REG_BR_PROB_BASE / 5 - 1)
      33  #define PROB_LIKELY             (REG_BR_PROB_BASE - PROB_UNLIKELY)
      34  #define PROB_UNINITIALIZED      (-1)
      35  
      36  #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) ENUM,
      37  enum br_predictor
      38  {
      39  #include "predict.def"
      40  
      41    /* Upper bound on non-language-specific builtins.  */
      42    END_PREDICTORS
      43  };
      44  #undef DEF_PREDICTOR
      45  enum prediction
      46  {
      47     NOT_TAKEN,
      48     TAKEN
      49  };
      50  
      51  /* In emit-rtl.cc.  */
      52  extern profile_probability split_branch_probability;
      53  
      54  extern gcov_type get_hot_bb_threshold (void);
      55  extern void set_hot_bb_threshold (gcov_type);
      56  extern bool maybe_hot_count_p (struct function *, profile_count);
      57  extern bool maybe_hot_bb_p (struct function *, const_basic_block);
      58  extern bool maybe_hot_edge_p (edge);
      59  extern bool probably_never_executed_bb_p (struct function *, const_basic_block);
      60  extern bool probably_never_executed_edge_p (struct function *, edge);
      61  extern enum optimize_size_level optimize_function_for_size_p (struct function *);
      62  extern bool optimize_function_for_speed_p (struct function *);
      63  extern optimization_type function_optimization_type (struct function *);
      64  extern enum optimize_size_level optimize_bb_for_size_p (const_basic_block);
      65  extern bool optimize_bb_for_speed_p (const_basic_block);
      66  extern optimization_type bb_optimization_type (const_basic_block);
      67  extern enum optimize_size_level optimize_edge_for_size_p (edge);
      68  extern bool optimize_edge_for_speed_p (edge);
      69  extern enum optimize_size_level optimize_insn_for_size_p (void);
      70  extern bool optimize_insn_for_speed_p (void);
      71  extern optimization_type insn_optimization_type ();
      72  extern enum optimize_size_level optimize_loop_for_size_p (class loop *);
      73  extern bool optimize_loop_for_speed_p (class loop *);
      74  extern bool optimize_loop_nest_for_speed_p (class loop *);
      75  extern enum optimize_size_level optimize_loop_nest_for_size_p (class loop *);
      76  extern bool predictable_edge_p (edge);
      77  extern void rtl_profile_for_bb (basic_block);
      78  extern void rtl_profile_for_edge (edge);
      79  extern void default_rtl_profile (void);
      80  extern bool rtl_predicted_by_p (const_basic_block, enum br_predictor);
      81  extern bool gimple_predicted_by_p (const_basic_block, enum br_predictor);
      82  extern bool edge_probability_reliable_p (const_edge);
      83  extern bool br_prob_note_reliable_p (const_rtx);
      84  extern void predict_insn_def (rtx_insn *, enum br_predictor, enum prediction);
      85  extern void rtl_predict_edge (edge, enum br_predictor, int);
      86  extern void gimple_predict_edge (edge, enum br_predictor, int);
      87  extern void remove_predictions_associated_with_edge (edge);
      88  extern void predict_edge_def (edge, enum br_predictor, enum prediction);
      89  extern void invert_br_probabilities (rtx);
      90  extern void guess_outgoing_edge_probabilities (basic_block);
      91  extern void tree_guess_outgoing_edge_probabilities (basic_block);
      92  extern void tree_estimate_probability (bool);
      93  extern void handle_missing_profiles (void);
      94  extern bool update_max_bb_count (void);
      95  extern bool expensive_function_p (int);
      96  extern void estimate_bb_frequencies (bool);
      97  extern void compute_function_frequency (void);
      98  extern tree build_predict_expr (enum br_predictor, enum prediction);
      99  extern const char *predictor_name (enum br_predictor);
     100  extern void rebuild_frequencies (void);
     101  extern void report_predictor_hitrates (void);
     102  extern void force_edge_cold (edge, bool);
     103  extern void propagate_unlikely_bbs_forward (void);
     104  extern void change_edge_frequency (edge, profile_probability);
     105  
     106  extern void add_reg_br_prob_note (rtx_insn *, profile_probability);
     107  
     108  /* In ipa-pure-const.cc   */
     109  extern void warn_function_cold (tree);
     110  
     111  #endif  /* GCC_PREDICT_H */