This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]