Mercurial > hg > CbC > CbC_gcc
comparison gcc/predict.def @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Definitions for the branch prediction routines in the GNU compiler. | |
2 Copyright (C) 2001, 2003, 2004, 2007, 2008 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify it under | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 /* Before including this file, you should define a macro: | |
21 | |
22 DEF_PREDICTOR (ENUM, NAME, HITRATE) | |
23 | |
24 This macro will be called once for each predictor. The ENUM will | |
25 be of type `enum predictor', and will enumerate all supported | |
26 predictors. The order of DEF_PREDICTOR calls is important, as | |
27 in the first match combining heuristics, the predictor appearing | |
28 first in this file will win. | |
29 | |
30 NAME is used in the debugging output to determine predictor type. | |
31 | |
32 HITRATE is the probability that edge predicted by predictor as taken | |
33 will be really taken (so it should be always above | |
34 REG_BR_PROB_BASE / 2). */ | |
35 | |
36 | |
37 /* A value used as final outcome of all heuristics. */ | |
38 DEF_PREDICTOR (PRED_COMBINED, "combined", PROB_ALWAYS, 0) | |
39 | |
40 /* An outcome estimated by Dempster-Shaffer theory. */ | |
41 DEF_PREDICTOR (PRED_DS_THEORY, "DS theory", PROB_ALWAYS, 0) | |
42 | |
43 /* A combined heuristics using probability determined by first | |
44 matching heuristics from this list. */ | |
45 DEF_PREDICTOR (PRED_FIRST_MATCH, "first match", PROB_ALWAYS, 0) | |
46 | |
47 /* Heuristic applying when no heuristic below applies. */ | |
48 DEF_PREDICTOR (PRED_NO_PREDICTION, "no prediction", PROB_ALWAYS, 0) | |
49 | |
50 /* Mark unconditional jump as taken. */ | |
51 DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", PROB_ALWAYS, | |
52 PRED_FLAG_FIRST_MATCH) | |
53 | |
54 /* Use number of loop iterations determined by # of iterations | |
55 analysis to set probability. We don't want to use Dempster-Shaffer | |
56 theory here, as the predictions is exact. */ | |
57 DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS, | |
58 PRED_FLAG_FIRST_MATCH) | |
59 | |
60 /* Hints dropped by user via __builtin_expect feature. */ | |
61 DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY, | |
62 PRED_FLAG_FIRST_MATCH) | |
63 | |
64 /* Use number of loop iterations guessed by the contents of the loop. */ | |
65 DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations", | |
66 PROB_ALWAYS, PRED_FLAG_FIRST_MATCH) | |
67 | |
68 /* Branch containing goto is probably not taken. */ | |
69 DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (50), 0) | |
70 | |
71 /* Branch to basic block containing call marked by noreturn attribute. */ | |
72 DEF_PREDICTOR (PRED_NORETURN, "noreturn call", PROB_VERY_LIKELY, | |
73 PRED_FLAG_FIRST_MATCH) | |
74 | |
75 /* Branch to basic block containing call marked by cold function attribute. */ | |
76 DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", PROB_VERY_LIKELY, | |
77 PRED_FLAG_FIRST_MATCH) | |
78 | |
79 /* Loopback edge is taken. */ | |
80 DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (86), | |
81 PRED_FLAG_FIRST_MATCH) | |
82 | |
83 /* Edge causing loop to terminate is probably not taken. */ | |
84 DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (91), | |
85 PRED_FLAG_FIRST_MATCH) | |
86 | |
87 /* Pointers are usually not NULL. */ | |
88 DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (85), 0) | |
89 DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (85), 0) | |
90 | |
91 /* NE is probable, EQ not etc... */ | |
92 DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (79), 0) | |
93 DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (71), 0) | |
94 DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0) | |
95 DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (73), 0) | |
96 DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (72), 0) | |
97 DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0) | |
98 | |
99 /* Branch guarding call is probably taken. */ | |
100 DEF_PREDICTOR (PRED_CALL, "call", HITRATE (71), 0) | |
101 | |
102 /* Branch causing function to terminate is probably not taken. */ | |
103 DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (61), 0) | |
104 | |
105 /* Branch containing goto is probably not taken. */ | |
106 DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (70), 0) | |
107 | |
108 /* Branch ending with return constant is probably not taken. */ | |
109 DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (67), 0) | |
110 | |
111 /* Branch ending with return negative constant is probably not taken. */ | |
112 DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (96), 0) | |
113 | |
114 /* Branch ending with return; is probably not taken */ | |
115 DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (90), 0) | |
116 | |
117 /* Branches to a mudflap bounds check are extremely unlikely. */ | |
118 DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", PROB_VERY_LIKELY, 0) |