mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
52f661769d
commit
f372b26ff8
|
|
@ -1,3 +1,10 @@
|
|||
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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue