Commit f372b26f by Jan Hubicka Committed by Jan Hubicka

re PR gcov-profile/24487 (Basic block frequencies inaccurate)

	PR profile/24487
	* predict.c (predict_loops): Do not estimate more than
	MAX_PRED_LOOP_ITERATIONS in PRED_LOOP_ITERATIONS heuristic.
	* predict.def (MAX_PRED_LOOP_ITERATIONS): Define.

From-SVN: r106276
parent 52f66176
2005-10-31 Jan Hubicka <jh@suse.cz>
PR profile/24487
* predict.c (predict_loops): Do not estimate more than
MAX_PRED_LOOP_ITERATIONS in PRED_LOOP_ITERATIONS heuristic.
* predict.def (MAX_PRED_LOOP_ITERATIONS): Define.
2005-10-31 Andrew MacLeod <amacleod@redhat.com>
PR tree-optimization/19097
......
......@@ -624,6 +624,8 @@ predict_loops (struct loops *loops_info, bool rtlsimpleloops)
niter = desc.niter + 1;
if (niter == 0) /* We might overflow here. */
niter = desc.niter;
if (niter > MAX_PRED_LOOP_ITERATIONS)
niter = MAX_PRED_LOOP_ITERATIONS;
prob = (REG_BR_PROB_BASE
- (REG_BR_PROB_BASE + niter /2) / niter);
......@@ -654,13 +656,16 @@ predict_loops (struct loops *loops_info, bool rtlsimpleloops)
if (host_integerp (niter, 1)
&& tree_int_cst_lt (niter,
build_int_cstu (NULL_TREE,
REG_BR_PROB_BASE - 1)))
MAX_PRED_LOOP_ITERATIONS - 1)))
{
HOST_WIDE_INT nitercst = tree_low_cst (niter, 1) + 1;
probability = (REG_BR_PROB_BASE + nitercst / 2) / nitercst;
probability = ((REG_BR_PROB_BASE + nitercst / 2)
/ nitercst);
}
else
probability = 1;
probability = ((REG_BR_PROB_BASE
+ MAX_PRED_LOOP_ITERATIONS / 2)
/ MAX_PRED_LOOP_ITERATIONS);
predict_edge (exits[j], PRED_LOOP_ITERATIONS, probability);
}
......
......@@ -58,6 +58,18 @@ DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", PROB_ALWAYS,
DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS,
PRED_FLAG_FIRST_MATCH)
/* For guessed profiles, the loops having unknown number of iterations
are predicted to iterate relatively few (10) times at average.
For functions containing one loop with large known number of iterations
and other loops having unbounded loops we would end up predicting all
the other loops cold that is not usually the case. So we need to artifically
flatten the profile.
We need to cut the maximal predicted iterations to large enought iterations
so the loop appears important, but safely within HOT_BB_COUNT_FRACTION
range. */
#define MAX_PRED_LOOP_ITERATIONS 100
/* Hints dropped by user via __builtin_expect feature. */
DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY,
PRED_FLAG_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