> Second patch cleans up predictors that do not use a value from predict.def, > but their value is derived from e.g. number of iterations of a loop. > These predictors have set probability to PROB_UNINITIALIZED and > analyze_branch.py > does not compare statistics to values defined in predict.def. > > The patch is no-op.
OK, thanks! Honza > > Martin > >From 6f6f2d88d3141b1e1604698abf857fffbb42330e Mon Sep 17 00:00:00 2001 > From: marxin <mli...@suse.cz> > Date: Wed, 27 Dec 2017 14:49:20 +0100 > Subject: [PATCH 2/5] Introduce PROB_UNINITIALIZED constant and use it in > predict.def. > > gcc/ChangeLog: > > 2017-12-28 Martin Liska <mli...@suse.cz> > > * predict.c (predict_insn_def): Add new assert. > (struct branch_predictor): Change type to signed integer. > (test_prediction_value_range): Amend test to cover > PROB_UNINITIALIZED. > * predict.def (PRED_LOOP_ITERATIONS): Use the new constant. > (PRED_LOOP_ITERATIONS_GUESSED): Likewise. > (PRED_LOOP_ITERATIONS_MAX): Likewise. > (PRED_LOOP_IV_COMPARE): Likewise. > * predict.h (PROB_UNINITIALIZED): Define new constant. > --- > gcc/predict.c | 6 +++++- > gcc/predict.def | 8 ++++---- > gcc/predict.h | 1 + > 3 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/gcc/predict.c b/gcc/predict.c > index 3ac18a2c5f2..51fd14205c2 100644 > --- a/gcc/predict.c > +++ b/gcc/predict.c > @@ -545,6 +545,7 @@ predict_insn_def (rtx_insn *insn, enum br_predictor > predictor, > enum prediction taken) > { > int probability = predictor_info[(int) predictor].hitrate; > + gcc_assert (probability != PROB_UNINITIALIZED); > > if (taken != TAKEN) > probability = REG_BR_PROB_BASE - probability; > @@ -4185,7 +4186,7 @@ namespace selftest { > struct branch_predictor > { > const char *name; > - unsigned probability; > + int probability; > }; > > #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) { NAME, HITRATE }, > @@ -4200,6 +4201,9 @@ test_prediction_value_range () > > for (unsigned i = 0; predictors[i].name != NULL; i++) > { > + if (predictors[i].probability == PROB_UNINITIALIZED) > + continue; > + > unsigned p = 100 * predictors[i].probability / REG_BR_PROB_BASE; > ASSERT_TRUE (p > 50 && p <= 100); > } > diff --git a/gcc/predict.def b/gcc/predict.def > index 0f37e399312..390b9a35fa7 100644 > --- a/gcc/predict.def > +++ b/gcc/predict.def > @@ -54,7 +54,7 @@ DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", > PROB_ALWAYS, > /* Use number of loop iterations determined by # of iterations > analysis to set probability. We don't want to use Dempster-Shaffer > theory here, as the predictions is exact. */ > -DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS, > +DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_UNINITIALIZED, > PRED_FLAG_FIRST_MATCH) > > /* Assume that any given atomic operation has low contention, > @@ -71,11 +71,11 @@ DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", > PROB_VERY_LIKELY, > > /* Use number of loop iterations guessed by the contents of the loop. */ > DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations", > - PROB_ALWAYS, PRED_FLAG_FIRST_MATCH) > + PROB_UNINITIALIZED, PRED_FLAG_FIRST_MATCH) > > /* Use number of loop iterations guessed by the contents of the loop. */ > DEF_PREDICTOR (PRED_LOOP_ITERATIONS_MAX, "guessed loop iterations", > - PROB_ALWAYS, PRED_FLAG_FIRST_MATCH) > + PROB_UNINITIALIZED, PRED_FLAG_FIRST_MATCH) > > /* Branch containing goto is probably not taken. */ > DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (67), 0) > @@ -151,7 +151,7 @@ DEF_PREDICTOR (PRED_LOOP_IV_COMPARE_GUESS, "guess loop iv > compare", > > /* Use number of loop iterations determined by # of iterations analysis > to set probability of branches that compares IV to loop bound variable. > */ > -DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", PROB_VERY_LIKELY, > +DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", PROB_UNINITIALIZED, > PRED_FLAG_FIRST_MATCH) > > /* In the following code > diff --git a/gcc/predict.h b/gcc/predict.h > index 57715159b95..e4d1da090ca 100644 > --- a/gcc/predict.h > +++ b/gcc/predict.h > @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see > #define PROB_ALWAYS (REG_BR_PROB_BASE) > #define PROB_UNLIKELY (REG_BR_PROB_BASE / 5 - 1) > #define PROB_LIKELY (REG_BR_PROB_BASE - PROB_UNLIKELY) > +#define PROB_UNINITIALIZED (-1) > > #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) ENUM, > enum br_predictor > -- > 2.14.3 >