Mercurial > hg > CbC > CbC_gcc
annotate gcc/reg-notes.def @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
rev | line source |
---|---|
0 | 1 /* Register note definitions. |
145 | 2 Copyright (C) 2004-2020 Free Software Foundation, Inc. |
0 | 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 /* This file defines all the codes that may appear on individual | |
111 | 21 EXPR_LIST, INSN_LIST and INT_LIST rtxes in the REG_NOTES chain of an insn. |
22 The codes are stored in the mode field of the rtx. Source files | |
23 define DEF_REG_NOTE appropriately before including this file. | |
24 | |
25 CFA related notes meant for RTX_FRAME_RELATED_P instructions | |
26 should be declared with REG_CFA_NOTE macro instead of REG_NOTE. */ | |
0 | 27 |
28 /* Shorthand. */ | |
29 #define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME) | |
111 | 30 #ifndef REG_CFA_NOTE |
31 # define REG_CFA_NOTE(NAME) REG_NOTE (NAME) | |
32 #endif | |
0 | 33 |
34 /* REG_DEP_TRUE is used in scheduler dependencies lists to represent a | |
35 read-after-write dependency (i.e. a true data dependency). This is | |
36 here, not grouped with REG_DEP_ANTI and REG_DEP_OUTPUT, because some | |
37 passes use a literal 0 for it. */ | |
38 REG_NOTE (DEP_TRUE) | |
39 | |
40 /* The value in REG dies in this insn (i.e., it is not needed past | |
41 this insn). If REG is set in this insn, the REG_DEAD note may, | |
42 but need not, be omitted. */ | |
43 REG_NOTE (DEAD) | |
44 | |
45 /* The REG is autoincremented or autodecremented in this insn. */ | |
46 REG_NOTE (INC) | |
47 | |
48 /* Describes the insn as a whole; it says that the insn sets a | |
49 register to a constant value or to be equivalent to a memory | |
50 address. If the register is spilled to the stack then the constant | |
51 value should be substituted for it. The contents of the REG_EQUIV | |
52 is the constant value or memory address, which may be different | |
53 from the source of the SET although it has the same value. A | |
54 REG_EQUIV note may also appear on an insn which copies a register | |
55 parameter to a pseudo-register, if there is a memory address which | |
56 could be used to hold that pseudo-register throughout the function. */ | |
57 REG_NOTE (EQUIV) | |
58 | |
59 /* Like REG_EQUIV except that the destination is only momentarily | |
60 equal to the specified rtx. Therefore, it cannot be used for | |
61 substitution; but it can be used for cse. */ | |
62 REG_NOTE (EQUAL) | |
63 | |
64 /* The register is always nonnegative during the containing loop. | |
65 This is used in branches so that decrement and branch instructions | |
66 terminating on zero can be matched. There must be an insn pattern | |
67 in the md file named `decrement_and_branch_until_zero' or else this | |
68 will never be added to any instructions. */ | |
69 REG_NOTE (NONNEG) | |
70 | |
71 /* Identifies a register set in this insn and never used. */ | |
72 REG_NOTE (UNUSED) | |
73 | |
74 /* REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use | |
75 CC0, respectively. Normally, these are required to be consecutive | |
76 insns, but we permit putting a cc0-setting insn in the delay slot | |
77 of a branch as long as only one copy of the insn exists. In that | |
78 case, these notes point from one to the other to allow code | |
79 generation to determine what any require information and to | |
80 properly update CC_STATUS. These notes are INSN_LISTs. */ | |
81 REG_NOTE (CC_SETTER) | |
82 REG_NOTE (CC_USER) | |
83 | |
84 /* Points to a CODE_LABEL. Used by JUMP_INSNs to say that the CODE_LABEL | |
85 contained in the REG_LABEL_TARGET note is a possible jump target of | |
86 this insn. This note is an INSN_LIST. */ | |
87 REG_NOTE (LABEL_TARGET) | |
88 | |
89 /* Points to a CODE_LABEL. Used by any insn to say that the CODE_LABEL | |
90 contained in the REG_LABEL_OPERAND note is used by the insn, but as an | |
91 operand, not as a jump target (though it may indirectly be a jump | |
92 target for a later jump insn). This note is an INSN_LIST. */ | |
93 REG_NOTE (LABEL_OPERAND) | |
94 | |
95 /* REG_DEP_OUTPUT and REG_DEP_ANTI are used in scheduler dependencies lists | |
96 to represent write-after-write and write-after-read dependencies | |
97 respectively. */ | |
98 REG_NOTE (DEP_OUTPUT) | |
99 REG_NOTE (DEP_ANTI) | |
111 | 100 REG_NOTE (DEP_CONTROL) |
0 | 101 |
111 | 102 /* REG_BR_PROB is attached to JUMP_INSNs. It has an |
103 integer value (in an INT_LIST). For jumps, it is the probability | |
104 that this is a taken branch. The integer represents a value of | |
105 profile_probability type. Use to_reg_br_prob_note and from_reg_br_prob_note | |
106 to extract the actual value. */ | |
0 | 107 REG_NOTE (BR_PROB) |
108 | |
109 /* Attached to a call insn; indicates that the call is malloc-like and | |
110 that the pointer returned cannot alias anything else. */ | |
111 REG_NOTE (NOALIAS) | |
112 | |
111 | 113 /* REG_BR_PRED is attached to JUMP_INSNs. It contains |
0 | 114 CONCAT of two integer value. First specifies the branch predictor |
115 that added the note, second specifies the predicted hitrate of | |
111 | 116 branch in a fixed point arithmetic based on REG_BR_PROB_BASE. */ |
0 | 117 REG_NOTE (BR_PRED) |
118 | |
119 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex | |
120 for DWARF to interpret what they imply. The attached rtx is used | |
121 instead of intuition. */ | |
111 | 122 REG_CFA_NOTE (FRAME_RELATED_EXPR) |
0 | 123 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
124 /* 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 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
|
131 expression rendered in a dwarf location expression. */ |
111 | 132 REG_CFA_NOTE (CFA_DEF_CFA) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
133 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
134 /* 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
|
135 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
|
136 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
|
137 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
|
138 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
|
139 rtx is NULL, we use the first SET of the insn. */ |
111 | 140 REG_CFA_NOTE (CFA_ADJUST_CFA) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
141 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
142 /* 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
|
143 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
|
144 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
|
145 the CFA. */ |
111 | 146 REG_CFA_NOTE (CFA_OFFSET) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
147 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
148 /* 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
|
149 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
|
150 or the pattern should be simple reg-reg move. */ |
111 | 151 REG_CFA_NOTE (CFA_REGISTER) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
152 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
153 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
154 for FRAME_RELATED_EXPR intuition. This is a save to memory, i.e. will |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
155 result in a DW_CFA_expression. The pattern or the insn should be a |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
156 store of a register to an arbitrary (non-validated) memory address. */ |
111 | 157 REG_CFA_NOTE (CFA_EXPRESSION) |
158 | |
159 /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex | |
160 for FRAME_RELATED_EXPR intuition. The DWARF expression computes the value of | |
161 the given register. */ | |
162 REG_CFA_NOTE (CFA_VAL_EXPRESSION) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
163 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
164 /* 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
|
165 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
|
166 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
|
167 first pattern is the register to be restored. */ |
111 | 168 REG_CFA_NOTE (CFA_RESTORE) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
169 |
111 | 170 /* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
171 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
|
172 to the argument, if it is a MEM, it is ignored. */ |
111 | 173 REG_CFA_NOTE (CFA_SET_VDRAP) |
174 | |
175 /* Attached to insns that are RTX_FRAME_RELATED_P, indicating a window | |
176 save operation, i.e. will result in a DW_CFA_GNU_window_save. | |
177 The argument is ignored. */ | |
178 REG_CFA_NOTE (CFA_WINDOW_SAVE) | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
179 |
111 | 180 /* Attached to insns that are RTX_FRAME_RELATED_P, marks the insn as |
181 requiring that all queued information should be flushed *before* insn, | |
182 regardless of what is visible in the rtl. The argument is ignored. | |
183 This is normally used for a call instruction which is not exposed to | |
184 the rest of the compiler as a CALL_INSN. */ | |
185 REG_CFA_NOTE (CFA_FLUSH_QUEUE) | |
186 | |
187 /* Attached to insns that are RTX_FRAME_RELATED_P, toggling the mangling status | |
188 of return address. Currently it's only used by AArch64. The argument is | |
189 ignored. */ | |
190 REG_CFA_NOTE (CFA_TOGGLE_RA_MANGLE) | |
0 | 191 |
192 /* Indicates what exception region an INSN belongs in. This is used | |
193 to indicate what region to which a call may throw. REGION 0 | |
194 indicates that a call cannot throw at all. REGION -1 indicates | |
195 that it cannot throw, nor will it execute a non-local goto. */ | |
196 REG_NOTE (EH_REGION) | |
197 | |
198 /* Used by haifa-sched to save NOTE_INSN notes across scheduling. */ | |
199 REG_NOTE (SAVE_NOTE) | |
200 | |
201 /* Indicates that a call does not return. */ | |
202 REG_NOTE (NORETURN) | |
203 | |
204 /* Indicates that an indirect jump is a non-local goto instead of a | |
205 computed goto. */ | |
206 REG_NOTE (NON_LOCAL_GOTO) | |
207 | |
208 /* This kind of note is generated at each to `setjmp', and similar | |
209 functions that can return twice. */ | |
210 REG_NOTE (SETJMP) | |
111 | 211 |
212 /* This kind of note is generated at each transactional memory | |
213 builtin, to indicate we need to generate transaction restart | |
214 edges for this insn. */ | |
215 REG_NOTE (TM) | |
216 | |
217 /* Indicates the cumulative offset of the stack pointer accounting | |
218 for pushed arguments. This will only be generated when | |
219 ACCUMULATE_OUTGOING_ARGS is false. */ | |
220 REG_NOTE (ARGS_SIZE) | |
221 | |
222 /* Used for communication between IRA and caller-save.c, indicates | |
223 that the return value of a call can be used to reinitialize a | |
224 pseudo reg. */ | |
225 REG_NOTE (RETURNED) | |
226 | |
227 /* Indicates the instruction is a stack check probe that should not | |
228 be combined with other stack adjustments. */ | |
229 REG_NOTE (STACK_CHECK) | |
230 | |
231 /* Used to mark a call with the function decl called by the call. | |
232 The decl might not be available in the call due to splitting of the call | |
233 insn. This note is a SYMBOL_REF. */ | |
234 REG_NOTE (CALL_DECL) | |
235 | |
236 /* Indicate that a call should not be verified for control-flow consistency. | |
237 The target address of the call is assumed as a valid address and no check | |
238 to validate a branch to the target address is needed. The call is marked | |
239 when a called function has a 'notrack' attribute. This note is used by the | |
240 compiler when the option -fcf-protection=branch is specified. */ | |
241 REG_NOTE (CALL_NOCF_CHECK) | |
131 | 242 |
243 /* The values passed to callee, for debuginfo purposes. */ | |
244 REG_NOTE (CALL_ARG_LOCATION) |