Mercurial > hg > CbC > CbC_gcc
annotate gcc/reg-notes.def @ 63:b7f97abdc517 gcc-4.6-20100522
update gcc from gcc-4.5.0 to gcc-4.6
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 May 2010 12:47:05 +0900 |
parents | 77e2b8dfacca |
children | f6334be47118 |
rev | line source |
---|---|
0 | 1 /* Register note definitions. |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
3 Free Software Foundation, Inc. |
0 | 4 |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it under | |
8 the terms of the GNU General Public License as published by the Free | |
9 Software Foundation; either version 3, or (at your option) any later | |
10 version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 /* This file defines all the codes that may appear on individual | |
22 EXPR_LIST rtxes in the REG_NOTES chain of an insn. The codes are | |
23 stored in the mode field of the EXPR_LIST. Source files define | |
24 DEF_REG_NOTE appropriately before including this file. */ | |
25 | |
26 /* Shorthand. */ | |
27 #define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME) | |
28 | |
29 /* REG_DEP_TRUE is used in scheduler dependencies lists to represent a | |
30 read-after-write dependency (i.e. a true data dependency). This is | |
31 here, not grouped with REG_DEP_ANTI and REG_DEP_OUTPUT, because some | |
32 passes use a literal 0 for it. */ | |
33 REG_NOTE (DEP_TRUE) | |
34 | |
35 /* The value in REG dies in this insn (i.e., it is not needed past | |
36 this insn). If REG is set in this insn, the REG_DEAD note may, | |
37 but need not, be omitted. */ | |
38 REG_NOTE (DEAD) | |
39 | |
40 /* The REG is autoincremented or autodecremented in this insn. */ | |
41 REG_NOTE (INC) | |
42 | |
43 /* Describes the insn as a whole; it says that the insn sets a | |
44 register to a constant value or to be equivalent to a memory | |
45 address. If the register is spilled to the stack then the constant | |
46 value should be substituted for it. The contents of the REG_EQUIV | |
47 is the constant value or memory address, which may be different | |
48 from the source of the SET although it has the same value. A | |
49 REG_EQUIV note may also appear on an insn which copies a register | |
50 parameter to a pseudo-register, if there is a memory address which | |
51 could be used to hold that pseudo-register throughout the function. */ | |
52 REG_NOTE (EQUIV) | |
53 | |
54 /* Like REG_EQUIV except that the destination is only momentarily | |
55 equal to the specified rtx. Therefore, it cannot be used for | |
56 substitution; but it can be used for cse. */ | |
57 REG_NOTE (EQUAL) | |
58 | |
59 /* The register is always nonnegative during the containing loop. | |
60 This is used in branches so that decrement and branch instructions | |
61 terminating on zero can be matched. There must be an insn pattern | |
62 in the md file named `decrement_and_branch_until_zero' or else this | |
63 will never be added to any instructions. */ | |
64 REG_NOTE (NONNEG) | |
65 | |
66 /* Identifies a register set in this insn and never used. */ | |
67 REG_NOTE (UNUSED) | |
68 | |
69 /* REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use | |
70 CC0, respectively. Normally, these are required to be consecutive | |
71 insns, but we permit putting a cc0-setting insn in the delay slot | |
72 of a branch as long as only one copy of the insn exists. In that | |
73 case, these notes point from one to the other to allow code | |
74 generation to determine what any require information and to | |
75 properly update CC_STATUS. These notes are INSN_LISTs. */ | |
76 REG_NOTE (CC_SETTER) | |
77 REG_NOTE (CC_USER) | |
78 | |
79 /* Points to a CODE_LABEL. Used by JUMP_INSNs to say that the CODE_LABEL | |
80 contained in the REG_LABEL_TARGET note is a possible jump target of | |
81 this insn. This note is an INSN_LIST. */ | |
82 REG_NOTE (LABEL_TARGET) | |
83 | |
84 /* Points to a CODE_LABEL. Used by any insn to say that the CODE_LABEL | |
85 contained in the REG_LABEL_OPERAND note is used by the insn, but as an | |
86 operand, not as a jump target (though it may indirectly be a jump | |
87 target for a later jump insn). This note is an INSN_LIST. */ | |
88 REG_NOTE (LABEL_OPERAND) | |
89 | |
90 /* REG_DEP_OUTPUT and REG_DEP_ANTI are used in scheduler dependencies lists | |
91 to represent write-after-write and write-after-read dependencies | |
92 respectively. */ | |
93 REG_NOTE (DEP_OUTPUT) | |
94 REG_NOTE (DEP_ANTI) | |
95 | |
96 /* REG_BR_PROB is attached to JUMP_INSNs and CALL_INSNs. It has an | |
97 integer value. For jumps, it is the probability that this is a | |
98 taken branch. For calls, it is the probability that this call | |
99 won't return. */ | |
100 REG_NOTE (BR_PROB) | |
101 | |
102 /* REG_VALUE_PROFILE is attached when the profile is read in to an | |
103 insn before that the code to profile the value is inserted. It | |
104 contains the results of profiling. */ | |
105 REG_NOTE (VALUE_PROFILE) | |
106 | |
107 /* Attached to a call insn; indicates that the call is malloc-like and | |
108 that the pointer returned cannot alias anything else. */ | |
109 REG_NOTE (NOALIAS) | |
110 | |
111 /* REG_BR_PRED is attached to JUMP_INSNs and CALL_INSNSs. It contains | |
112 CONCAT of two integer value. First specifies the branch predictor | |
113 that added the note, second specifies the predicted hitrate of | |
114 branch in the same format as REG_BR_PROB note uses. */ | |
115 REG_NOTE (BR_PRED) | |
116 | |
117 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex | |
118 for DWARF to interpret what they imply. The attached rtx is used | |
119 instead of intuition. */ | |
120 REG_NOTE (FRAME_RELATED_EXPR) | |
121 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
122 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
123 for FRAME_RELATED_EXPR intuition. The insn's first pattern must be |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
124 a SET, and the destination must be the CFA register. The attached |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
125 rtx is an expression that defines the CFA. In the simplest case, the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
126 rtx could be just the stack_pointer_rtx; more common would be a PLUS |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
127 with a base register and a constant offset. In the most complicated |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
128 cases, this will result in a DW_CFA_def_cfa_expression with the rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
129 expression rendered in a dwarf location expression. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
130 REG_NOTE (CFA_DEF_CFA) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
131 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
132 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
133 for FRAME_RELATED_EXPR intuition. This note adjusts the expression |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
134 from which the CFA is computed. The attached rtx defines a new CFA |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
135 expression, relative to the old CFA expression. This rtx must be of |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
136 the form (SET new-cfa-reg (PLUS old-cfa-reg const_int)). If the note |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
137 rtx is NULL, we use the first SET of the insn. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
138 REG_NOTE (CFA_ADJUST_CFA) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
139 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
140 /* Similar to FRAME_RELATED_EXPR, with the additional information that |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
141 this is a save to memory, i.e. will result in DW_CFA_offset or the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
142 like. The pattern or the insn should be a simple store relative to |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
143 the CFA. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
144 REG_NOTE (CFA_OFFSET) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
145 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
146 /* Similar to FRAME_RELATED_EXPR, with the additional information that this |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
147 is a save to a register, i.e. will result in DW_CFA_register. The insn |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
148 or the pattern should be simple reg-reg move. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
149 REG_NOTE (CFA_REGISTER) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
150 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
151 /* Attached to insns that are RTX_FRAME_RELATED_P, with the information |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
152 that this is a restore operation, i.e. will result in DW_CFA_restore |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
153 or the like. Either the attached rtx, or the destination of the insn's |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
154 first pattern is the register to be restored. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
155 REG_NOTE (CFA_RESTORE) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
156 |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
157 /* Attached to insn that is RTX_FRAME_RELATED_P, marks insn that sets |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
158 vDRAP from DRAP. If vDRAP is a register, vdrap_reg is initalized |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
159 to the argument, if it is a MEM, it is ignored. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
160 REG_NOTE (CFA_SET_VDRAP) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
161 |
0 | 162 /* Indicates that REG holds the exception context for the function. |
163 This context is shared by inline functions, so the code to acquire | |
164 the real exception context is delayed until after inlining. */ | |
165 REG_NOTE (EH_CONTEXT) | |
166 | |
167 /* Indicates what exception region an INSN belongs in. This is used | |
168 to indicate what region to which a call may throw. REGION 0 | |
169 indicates that a call cannot throw at all. REGION -1 indicates | |
170 that it cannot throw, nor will it execute a non-local goto. */ | |
171 REG_NOTE (EH_REGION) | |
172 | |
173 /* Used by haifa-sched to save NOTE_INSN notes across scheduling. */ | |
174 REG_NOTE (SAVE_NOTE) | |
175 | |
176 /* Indicates that a call does not return. */ | |
177 REG_NOTE (NORETURN) | |
178 | |
179 /* Indicates that an indirect jump is a non-local goto instead of a | |
180 computed goto. */ | |
181 REG_NOTE (NON_LOCAL_GOTO) | |
182 | |
183 /* Indicates that a jump crosses between hot and cold sections in a | |
184 (partitioned) assembly or .o file, and therefore should not be | |
185 reduced to a simpler jump by optimizations. */ | |
186 REG_NOTE (CROSSING_JUMP) | |
187 | |
188 /* This kind of note is generated at each to `setjmp', and similar | |
189 functions that can return twice. */ | |
190 REG_NOTE (SETJMP) |