diff options
author | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-06-16 19:25:56 +0000 |
---|---|---|
committer | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-06-16 19:25:56 +0000 |
commit | 1910963011b66dd58d67df7a5377f131fab8bb1d (patch) | |
tree | 6b7b963e1b4063bfecd849ef63345af19eccfc0a | |
parent | d8a3bc935f7a501c69e2fd08e4139c6013181eb6 (diff) | |
download | gcc-1910963011b66dd58d67df7a5377f131fab8bb1d.tar.gz |
Fix finding of a first match predictor
* predict.c (combine_predictions_for_insn): When we find a first
match predictor, we should consider just predictors with
PRED_FLAG_FIRST_MATCH. Print either first match (if any) or
DS theory predictor.
(combine_predictions_for_bb): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@237539 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/predict.c | 30 |
2 files changed, 26 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20e4ecdb4e0..f07df860263 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-06-16 Martin Liska <mliska@suse.cz> + + * predict.c (combine_predictions_for_insn): When we find a first + match predictor, we should consider just predictors with + PRED_FLAG_FIRST_MATCH. Print either first match (if any) or + DS theory predictor. + (combine_predictions_for_bb): Likewise. + 2016-06-16 Jakub Jelinek <jakub@redhat.com> * gimplify.c (gimplify_scan_omp_clauses): Handle COMPONENT_REFs diff --git a/gcc/predict.c b/gcc/predict.c index bafcc96fbc5..642bd6287a0 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -835,7 +835,8 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) int probability = INTVAL (XEXP (XEXP (note, 0), 1)); found = true; - if (best_predictor > predictor) + if (best_predictor > predictor + && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH) best_probability = probability, best_predictor = predictor; d = (combined_probability * probability @@ -855,7 +856,7 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) use no_prediction heuristic, in case we did match, use either first match or Dempster-Shaffer theory depending on the flags. */ - if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH) + if (best_predictor != END_PREDICTORS) first_match = true; if (!found) @@ -863,10 +864,12 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) combined_probability, bb); else { - dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, - bb, !first_match ? REASON_NONE : REASON_IGNORED); - dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, - bb, first_match ? REASON_NONE : REASON_IGNORED); + if (!first_match) + dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, + bb, !first_match ? REASON_NONE : REASON_IGNORED); + else + dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, + bb, first_match ? REASON_NONE : REASON_IGNORED); } if (first_match) @@ -1096,7 +1099,8 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) found = true; /* First match heuristics would be widly confused if we predicted both directions. */ - if (best_predictor > predictor) + if (best_predictor > predictor + && predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH) { struct edge_prediction *pred2; int prob = probability; @@ -1142,17 +1146,19 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) use no_prediction heuristic, in case we did match, use either first match or Dempster-Shaffer theory depending on the flags. */ - if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH) + if (best_predictor != END_PREDICTORS) first_match = true; if (!found) dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb); else { - dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb, - !first_match ? REASON_NONE : REASON_IGNORED); - dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb, - first_match ? REASON_NONE : REASON_IGNORED); + if (!first_match) + dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb, + !first_match ? REASON_NONE : REASON_IGNORED); + else + dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb, + first_match ? REASON_NONE : REASON_IGNORED); } if (first_match) |