> Third part changes predictors values:
> 
> 1) PRED_LOOP_EXIT: no dominant branch; value simply taken from statistics
> 2) PRED_LOOP_EXIT_WITH_RECURSION: there are 4 dominant edges; value taken w/o 
> these edges
> 3) PRED_LOOP_EXTRA_EXIT: there's one really dominant edge; value taken w/o 
> the edge; note that
> coverage of the predictor is quite small
> 4) PRED_OPCODE_POSITIVE: no dominant branch; value simply taken from 
> statistics
> 5) PRED_CONST_RETURN: there are 4 dominant edges, value taken w/o these edges
> 6) PRED_NULL_RETURN: one dominant edge, value taken w/o these edges
> 7) PRED_LOOP_IV_COMPARE_GUESS: very fragile predictor (according how is 
> identified in predict.c);
> has a dominant edge; value taken w/o these edges; in future I plan to 
> investigate it
> 8) PRED_LOOP_GUARD: adjusted based on numbers without a one dominant edge
> 
> Martin

> >From 960f16a6e3e916524d8881f53913c15a3c2ec2ae Mon Sep 17 00:00:00 2001
> From: marxin <mli...@suse.cz>
> Date: Thu, 28 Dec 2017 10:13:50 +0100
> Subject: [PATCH 3/5] Adjust predictor values according to SPEC2006 and
>  SPEC2017.
> 
> gcc/ChangeLog:
> 
> 2017-12-28  Martin Liska  <mli...@suse.cz>
> 
>       * predict.def (PRED_LOOP_EXIT): Change from 85 to 89.
>       (PRED_LOOP_EXIT_WITH_RECURSION): Change from 72 to 78.
>       (PRED_LOOP_EXTRA_EXIT): Change from 83 to 67.
>       (PRED_OPCODE_POSITIVE): Change from 64 to 59.
>       (PRED_TREE_OPCODE_POSITIVE): Change from 64 to 59.
>       (PRED_CONST_RETURN): Change from 69 to 65.
>       (PRED_NULL_RETURN): Change from 91 to 71.
>       (PRED_LOOP_IV_COMPARE_GUESS): Change from 98 to 64.
>       (PRED_LOOP_GUARD): Change from 66 to 73.

OK,
please wait with commit for tomorrow as i have comitted today the fix to 
ipa-inline
I would like to hit nightly testers independently.

Thanks!
Honza
> ---
>  gcc/predict.def | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/gcc/predict.def b/gcc/predict.def
> index 390b9a35fa7..fe72080d5bd 100644
> --- a/gcc/predict.def
> +++ b/gcc/predict.def
> @@ -89,16 +89,16 @@ DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", 
> PROB_VERY_LIKELY,
>              PRED_FLAG_FIRST_MATCH)
>  
>  /* Edge causing loop to terminate is probably not taken.  */
> -DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (85),
> +DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (89),
>              PRED_FLAG_FIRST_MATCH)
>  
>  /* Same as LOOP_EXIT but for loops containing recursive call.  */
>  DEF_PREDICTOR (PRED_LOOP_EXIT_WITH_RECURSION, "loop exit with recursion",
> -            HITRATE (72), PRED_FLAG_FIRST_MATCH)
> +            HITRATE (78), PRED_FLAG_FIRST_MATCH)
>  
>  /* Edge causing loop to terminate by computing value used by later
>     conditional.  */
> -DEF_PREDICTOR (PRED_LOOP_EXTRA_EXIT, "extra loop exit", HITRATE (83),
> +DEF_PREDICTOR (PRED_LOOP_EXTRA_EXIT, "extra loop exit", HITRATE (67),
>              PRED_FLAG_FIRST_MATCH)
>  
>  /* Pointers are usually not NULL.  */
> @@ -106,11 +106,11 @@ DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (70), 0)
>  DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (70), 0)
>  
>  /* NE is probable, EQ not etc...  */
> -DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (64), 
> 0)
> +DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (59), 
> 0)
>  DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (66), 
> 0)
>  DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0)
>  DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on 
> trees)",
> -            HITRATE (64), 0)
> +            HITRATE (59), 0)
>  DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on 
> trees)",
>              HITRATE (66), 0)
>  DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
> @@ -136,18 +136,18 @@ DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return 
> (on trees)", HITRATE (66),
>  DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (66), 0)
>  
>  /* Branch ending with return constant is probably not taken.  */
> -DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (69), 0)
> +DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (65), 0)
>  
>  /* Branch ending with return negative constant is probably not taken.  */
>  DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (98), 0)
>  
>  /* Branch ending with return; is probably not taken */
> -DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (91), 0)
> +DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (71), 0)
>  
>  /* Branches to compare induction variable to a loop bound is
>     extremely likely.  */
>  DEF_PREDICTOR (PRED_LOOP_IV_COMPARE_GUESS, "guess loop iv compare",
> -            HITRATE (98), 0)
> +            HITRATE (64), 0)
>  
>  /* Use number of loop iterations determined by # of iterations analysis
>     to set probability of branches that compares IV to loop bound variable.  
> */
> @@ -160,7 +160,7 @@ DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", 
> PROB_UNINITIALIZED,
>         for (loop2)
>        body;
>     guess that cond is unlikely.  */
> -DEF_PREDICTOR (PRED_LOOP_GUARD, "loop guard", HITRATE (66), 0)
> +DEF_PREDICTOR (PRED_LOOP_GUARD, "loop guard", HITRATE (73), 0)
>  
>  /* Same but for loops containing recursion.  */
>  DEF_PREDICTOR (PRED_LOOP_GUARD_WITH_RECURSION, "loop guard with recursion",
> -- 
> 2.14.3
> 

Reply via email to