Commit c9f4fe73 by Martin Liska Committed by Martin Liska

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.

From-SVN: r237539
parent 283635f9
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> 2016-06-16 Jakub Jelinek <jakub@redhat.com>
* gimplify.c (gimplify_scan_omp_clauses): Handle COMPONENT_REFs * gimplify.c (gimplify_scan_omp_clauses): Handle COMPONENT_REFs
......
...@@ -835,7 +835,8 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) ...@@ -835,7 +835,8 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb)
int probability = INTVAL (XEXP (XEXP (note, 0), 1)); int probability = INTVAL (XEXP (XEXP (note, 0), 1));
found = true; found = true;
if (best_predictor > predictor) if (best_predictor > predictor
&& predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
best_probability = probability, best_predictor = predictor; best_probability = probability, best_predictor = predictor;
d = (combined_probability * probability d = (combined_probability * probability
...@@ -855,7 +856,7 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) ...@@ -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 use no_prediction heuristic, in case we did match, use either
first match or Dempster-Shaffer theory depending on the flags. */ 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; first_match = true;
if (!found) if (!found)
...@@ -863,10 +864,12 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb) ...@@ -863,10 +864,12 @@ combine_predictions_for_insn (rtx_insn *insn, basic_block bb)
combined_probability, bb); combined_probability, bb);
else else
{ {
dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, if (!first_match)
bb, !first_match ? REASON_NONE : REASON_IGNORED); dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb, !first_match ? REASON_NONE : REASON_IGNORED);
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) if (first_match)
...@@ -1096,7 +1099,8 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) ...@@ -1096,7 +1099,8 @@ combine_predictions_for_bb (basic_block bb, bool dry_run)
found = true; found = true;
/* First match heuristics would be widly confused if we predicted /* First match heuristics would be widly confused if we predicted
both directions. */ both directions. */
if (best_predictor > predictor) if (best_predictor > predictor
&& predictor_info[predictor].flags & PRED_FLAG_FIRST_MATCH)
{ {
struct edge_prediction *pred2; struct edge_prediction *pred2;
int prob = probability; int prob = probability;
...@@ -1142,17 +1146,19 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) ...@@ -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 use no_prediction heuristic, in case we did match, use either
first match or Dempster-Shaffer theory depending on the flags. */ 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; first_match = true;
if (!found) if (!found)
dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb); dump_prediction (dump_file, PRED_NO_PREDICTION, combined_probability, bb);
else else
{ {
dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb, if (!first_match)
!first_match ? REASON_NONE : REASON_IGNORED); dump_prediction (dump_file, PRED_DS_THEORY, combined_probability, bb,
dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability, bb, !first_match ? REASON_NONE : REASON_IGNORED);
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) if (first_match)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment