aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-01-19 13:05:20 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-01-19 12:05:20 +0000
commite2a1e6a441f9ced9412609cd4d8ae8ede52628a3 (patch)
tree4b5b32f73bb7f7d32c6c5d3c9876f543a772cdf4 /gcc
parentd1b9a5724b8a05d2d2d51b3e5d13cc785326c74f (diff)
downloadgcc-e2a1e6a441f9ced9412609cd4d8ae8ede52628a3.zip
gcc-e2a1e6a441f9ced9412609cd4d8ae8ede52628a3.tar.gz
gcc-e2a1e6a441f9ced9412609cd4d8ae8ede52628a3.tar.bz2
Introduce PROB_UNINITIALIZED constant and use it in predict.def.
2018-01-19 Martin Liska <mliska@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. From-SVN: r256887
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/predict.c6
-rw-r--r--gcc/predict.def8
-rw-r--r--gcc/predict.h1
4 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ea286f..38c85fe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,17 @@
2018-01-19 Martin Liska <mliska@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.
+
+2018-01-19 Martin Liska <mliska@suse.cz>
+
* predict.c (dump_prediction): Add new format for
analyze_brprob.py script which is enabled with -details
suboption.
diff --git a/gcc/predict.c b/gcc/predict.c
index fdf5d82..340c766 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;
@@ -4196,7 +4197,7 @@ namespace selftest {
struct branch_predictor
{
const char *name;
- unsigned probability;
+ int probability;
};
#define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) { NAME, HITRATE },
@@ -4211,6 +4212,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 0f37e39..390b9a3 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 5771515..e4d1da0 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