mirror of git://gcc.gnu.org/git/gcc.git
re PR middle-end/77484 (Static branch predictor causes ~6-8% regression of SPEC2000 GAP)
PR middle-end/77484 * predict.def (PRED_CALL): Update hitrate. (PRED_INDIR_CALL, PRED_POLYMORPHIC_CALL): New predictors. * predict.c (tree_estimate_probability_bb): Split CALL predictor into direct/indirect/polymorphic variants. From-SVN: r243995
This commit is contained in:
parent
cbe34bb5ed
commit
2c5123744b
|
|
@ -1,3 +1,11 @@
|
|||
2017-01-01 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR middle-end/77484
|
||||
* predict.def (PRED_CALL): Update hitrate.
|
||||
(PRED_INDIR_CALL, PRED_POLYMORPHIC_CALL): New predictors.
|
||||
* predict.c (tree_estimate_probability_bb): Split CALL predictor
|
||||
into direct/indirect/polymorphic variants.
|
||||
|
||||
2017-01-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Update copyright years.
|
||||
|
|
|
|||
|
|
@ -2786,7 +2786,12 @@ tree_estimate_probability_bb (basic_block bb)
|
|||
something exceptional. */
|
||||
&& gimple_has_side_effects (stmt))
|
||||
{
|
||||
predict_edge_def (e, PRED_CALL, NOT_TAKEN);
|
||||
if (gimple_call_fndecl (stmt))
|
||||
predict_edge_def (e, PRED_CALL, NOT_TAKEN);
|
||||
else if (virtual_method_call_p (gimple_call_fn (stmt)))
|
||||
predict_edge_def (e, PRED_POLYMORPHIC_CALL, TAKEN);
|
||||
else
|
||||
predict_edge_def (e, PRED_INDIR_CALL, TAKEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,13 @@ DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)",
|
|||
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)
|
||||
DEF_PREDICTOR (PRED_CALL, "call", HITRATE (55), 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 (51), 0)
|
||||
DEF_PREDICTOR (PRED_POLYMORPHIC_CALL, "polymorphic call", HITRATE (58), 0)
|
||||
|
||||
/* Recursive calls are usually not taken or the function will recurse
|
||||
indefinitely. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue