This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
predict.def housekeeping
- From: Jan Hubicka <jh at suse dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 27 Feb 2007 01:09:50 +0100
- Subject: predict.def housekeeping
Hi,
I've upated SPEC tester on britten to again collect statistics about
predictors. The results seems quite a bit different from RTL
predictors, especially overall we now predict with 71% hitrate, compared
to 76% hitrate reached by RTL code in pre-4.1.
I've also fixed one obvious typo and have fix for return predictor in
testing, hopefully we will get back again to the original scores.
Bootstrapped/regtested i686-linux, comitted.
Honza
* predict.def: Set outcomes according to more recent results.
(PRED_LOOP_CONDITION, PRED_LOOP_PRECONDITIONING, PRED_LOOP_HEADER):
Remove dead predictors.
* predict.c (return_prediction): Fix pasto.
Index: predict.def
===================================================================
--- predict.def (revision 122312)
+++ predict.def (working copy)
@@ -70,41 +70,30 @@ DEF_PREDICTOR (PRED_NORETURN, "noreturn
PRED_FLAG_FIRST_MATCH)
/* Loopback edge is taken. */
-DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (89),
+DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (86),
PRED_FLAG_FIRST_MATCH)
/* Edge causing loop to terminate is probably not taken. */
-DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (90),
+DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (91),
PRED_FLAG_FIRST_MATCH)
-/* Condition emitted by preconditiong code to ensure that variable
- setting number of iterations is greater than initial value of iterator. */
-DEF_PREDICTOR (PRED_LOOP_CONDITION, "loop condition", PROB_VERY_LIKELY, 0)
-
-/* Preconditioning makes linear list of branches. */
-DEF_PREDICTOR (PRED_LOOP_PRECONDITIONING, "loop preconditioning", PROB_VERY_LIKELY, 0)
-
-/* Copied condition for the first iteration of loop is probably true. */
-DEF_PREDICTOR (PRED_LOOP_HEADER, "loop header", HITRATE (64), 0)
-
/* Pointers are usually not NULL. */
-DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (81), 0)
-DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (81), 0)
+DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (85), 0)
+DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (85), 0)
/* NE is probable, EQ not etc... */
DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (79), 0)
DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (71), 0)
DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0)
-DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (79), 0)
-DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (71), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (70), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (69), 0)
DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
/* Branch guarding call is probably taken. */
-DEF_PREDICTOR (PRED_CALL, "call", HITRATE (70), 0)
+DEF_PREDICTOR (PRED_CALL, "call", HITRATE (69), 0)
/* Branch causing function to terminate is probably not taken. */
-DEF_PREDICTOR (PRED_EARLY_RETURN, "early return", HITRATE (67), 0)
-DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (67), 0)
+DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (45), 0)
/* Branch containing goto is probably not taken. */
DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (70), 0)
@@ -113,10 +102,10 @@ DEF_PREDICTOR (PRED_GOTO, "goto", HITRAT
DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (95), 0)
/* Branch ending with return negative constant is probably not taken. */
-DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (96), 0)
+DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (77), 0)
/* Branch ending with return; is probably not taken */
-DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (90), 0)
+DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (96), 0)
/* Branches to a mudflap bounds check are extremely unlikely. */
-DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", HITRATE (99), 0)
+DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", PROB_VERY_LIKELY, 0)
Index: predict.c
===================================================================
--- predict.c (revision 122312)
+++ predict.c (working copy)
@@ -1133,7 +1146,7 @@ return_prediction (tree val, enum predic
&& (!integer_zerop (val) && !integer_onep (val)))
{
*prediction = TAKEN;
- return PRED_NEGATIVE_RETURN;
+ return PRED_CONST_RETURN;
}
}
return PRED_NO_PREDICTION;