Remove predictors that are unrealiable.
authorMartin Liska <mliska@suse.cz>
Tue, 23 Jan 2018 15:43:59 +0000 (16:43 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 23 Jan 2018 15:43:59 +0000 (15:43 +0000)
2018-01-23  Martin Liska  <mliska@suse.cz>

* predict.def (PRED_INDIR_CALL): Set probability to PROB_EVEN in
order to ignore the predictor.
(PRED_POLYMORPHIC_CALL): Likewise.
(PRED_RECURSIVE_CALL): Likewise.

From-SVN: r256988

gcc/ChangeLog
gcc/predict.c
gcc/predict.def

index fd93bc8a426f7bedfc164137ba10f8fd4a7377ef..3238e70f63ee95393930b2e02c72c5b5135b5559 100644 (file)
@@ -1,3 +1,10 @@
+2018-01-23  Martin Liska  <mliska@suse.cz>
+
+       * predict.def (PRED_INDIR_CALL): Set probability to PROB_EVEN in
+       order to ignore the predictor.
+       (PRED_POLYMORPHIC_CALL): Likewise.
+       (PRED_RECURSIVE_CALL): Likewise.
+
 2018-01-23  Martin Liska  <mliska@suse.cz>
 
        * tree-profile.c (tree_profiling): Print function header to
index 724ba458db9c6bff6d3337e21801bc87035e06c4..2d932e9fd11645d3ebeee9b2cdeb2742a10f0e7f 100644 (file)
@@ -4216,7 +4216,7 @@ test_prediction_value_range ()
        continue;
 
       unsigned p = 100 * predictors[i].probability / REG_BR_PROB_BASE;
-      ASSERT_TRUE (p > 50 && p <= 100);
+      ASSERT_TRUE (p >= 50 && p <= 100);
     }
 }
 
index fe72080d5bdde35bf142dade9358783c031bd3b3..4ed97ed165c4d386aee2fd8c287de36ea4eed1f7 100644 (file)
@@ -118,15 +118,11 @@ DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
 /* Branch guarding call is probably taken.  */
 DEF_PREDICTOR (PRED_CALL, "call", HITRATE (67), 0)
 
-/* PRED_CALL is not very reliable predictor and it turns out to be even
-   less reliable for indirect calls and polymorphic calls.  For spec2k6
-   the predictio nis slightly in the direction of taking the call.  */
-DEF_PREDICTOR (PRED_INDIR_CALL, "indirect call", HITRATE (86), 0)
-DEF_PREDICTOR (PRED_POLYMORPHIC_CALL, "polymorphic call", HITRATE (59), 0)
-
-/* Recursive calls are usually not taken or the function will recurse
-   indefinitely.  */
-DEF_PREDICTOR (PRED_RECURSIVE_CALL, "recursive call", HITRATE (75), 0)
+/* Call predictors are for now ignored, lets leave the predictor
+   to measure its benefit.  */
+DEF_PREDICTOR (PRED_INDIR_CALL, "indirect call", PROB_EVEN, 0)
+DEF_PREDICTOR (PRED_POLYMORPHIC_CALL, "polymorphic call", PROB_EVEN, 0)
+DEF_PREDICTOR (PRED_RECURSIVE_CALL, "recursive call", PROB_EVEN, 0)
 
 /* Branch causing function to terminate is probably not taken.  */
 DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (66),