> 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 >