]>
Commit | Line | Data |
---|---|---|
826c9564 ZW |
1 | /* Register note definitions. |
2 | Copyright (C) 2004 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 2, 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 COPYING. If not, write to the Free | |
18 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
19 | 02111-1307, USA. */ | |
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 | |
a2fe1975 | 24 | DEF_REG_NOTE appropriately before including this file. */ |
826c9564 ZW |
25 | |
26 | /* Shorthand. */ | |
27 | #define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME) | |
28 | ||
29 | /* The value in REG dies in this insn (i.e., it is not needed past | |
30 | this insn). If REG is set in this insn, the REG_DEAD note may, | |
31 | but need not, be omitted. */ | |
32 | REG_NOTE (DEAD) | |
33 | ||
34 | /* The REG is autoincremented or autodecremented in this insn. */ | |
35 | REG_NOTE (INC) | |
36 | ||
37 | /* Describes the insn as a whole; it says that the insn sets a | |
38 | register to a constant value or to be equivalent to a memory | |
39 | address. If the register is spilled to the stack then the constant | |
40 | value should be substituted for it. The contents of the REG_EQUIV | |
41 | is the constant value or memory address, which may be different | |
42 | from the source of the SET although it has the same value. A | |
43 | REG_EQUIV note may also appear on an insn which copies a register | |
44 | parameter to a pseudo-register, if there is a memory address which | |
45 | could be used to hold that pseudo-register throughout the function. */ | |
46 | REG_NOTE (EQUIV) | |
47 | ||
48 | /* Like REG_EQUIV except that the destination is only momentarily | |
49 | equal to the specified rtx. Therefore, it cannot be used for | |
50 | substitution; but it can be used for cse. */ | |
51 | REG_NOTE (EQUAL) | |
52 | ||
53 | /* This insn copies the return-value of a library call out of the hard | |
54 | reg for return values. This note is actually an INSN_LIST and it | |
55 | points to the first insn involved in setting up arguments for the | |
56 | call. flow.c uses this to delete the entire library call when its | |
57 | result is dead. */ | |
58 | REG_NOTE (RETVAL) | |
59 | ||
60 | /* The inverse of REG_RETVAL: it goes on the first insn of the library | |
61 | call and points at the one that has the REG_RETVAL. This note is | |
62 | also an INSN_LIST. */ | |
63 | REG_NOTE (LIBCALL) | |
64 | ||
65 | /* The register is always nonnegative during the containing loop. | |
66 | This is used in branches so that decrement and branch instructions | |
67 | terminating on zero can be matched. There must be an insn pattern | |
68 | in the md file named `decrement_and_branch_until_zero' or else this | |
69 | will never be added to any instructions. */ | |
70 | REG_NOTE (NONNEG) | |
71 | ||
72 | /* There is no conflict *after this insn* between the register in the | |
73 | note and the destination of this insn. */ | |
74 | REG_NOTE (NO_CONFLICT) | |
75 | ||
76 | /* Identifies a register set in this insn and never used. */ | |
77 | REG_NOTE (UNUSED) | |
78 | ||
79 | /* REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use | |
80 | CC0, respectively. Normally, these are required to be consecutive | |
81 | insns, but we permit putting a cc0-setting insn in the delay slot | |
82 | of a branch as long as only one copy of the insn exists. In that | |
83 | case, these notes point from one to the other to allow code | |
84 | generation to determine what any require information and to | |
85 | properly update CC_STATUS. These notes are INSN_LISTs. */ | |
86 | REG_NOTE (CC_SETTER) | |
87 | REG_NOTE (CC_USER) | |
88 | ||
89 | /* Points to a CODE_LABEL. Used by non-JUMP_INSNs to say that the | |
90 | CODE_LABEL contained in the REG_LABEL note is used by the insn. | |
91 | This note is an INSN_LIST. */ | |
92 | REG_NOTE (LABEL) | |
93 | ||
94 | /* REG_DEP_ANTI and REG_DEP_OUTPUT are used in LOG_LINKS to represent | |
95 | write-after-read and write-after-write dependencies respectively. | |
96 | Data dependencies, which are the only type of LOG_LINK created by | |
97 | flow, are represented by a 0 reg note kind. */ | |
98 | REG_NOTE (DEP_ANTI) | |
99 | REG_NOTE (DEP_OUTPUT) | |
100 | ||
101 | /* REG_BR_PROB is attached to JUMP_INSNs and CALL_INSNs. It has an | |
102 | integer value. For jumps, it is the probability that this is a | |
103 | taken branch. For calls, it is the probability that this call | |
104 | won't return. */ | |
105 | REG_NOTE (BR_PROB) | |
106 | ||
107 | /* REG_VALUE_PROFILE is attached when the profile is read in to an | |
108 | insn before that the code to profile the value is inserted. It | |
109 | contains the results of profiling. */ | |
110 | REG_NOTE (VALUE_PROFILE) | |
111 | ||
112 | /* Attached to a call insn; indicates that the call is malloc-like and | |
113 | that the pointer returned cannot alias anything else. */ | |
114 | REG_NOTE (NOALIAS) | |
115 | ||
116 | /* Used to optimize rtl generated by dynamic stack allocations for | |
117 | targets where SETJMP_VIA_SAVE_AREA is true. */ | |
118 | REG_NOTE (SAVE_AREA) | |
119 | ||
120 | /* REG_BR_PRED is attached to JUMP_INSNs and CALL_INSNSs. It contains | |
121 | CONCAT of two integer value. First specifies the branch predictor | |
122 | that added the note, second specifies the predicted hitrate of | |
123 | branch in the same format as REG_BR_PROB note uses. */ | |
124 | REG_NOTE (BR_PRED) | |
125 | ||
126 | /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex | |
127 | for DWARF to interpret what they imply. The attached rtx is used | |
128 | instead of intuition. */ | |
129 | REG_NOTE (FRAME_RELATED_EXPR) | |
130 | ||
131 | /* Indicates that REG holds the exception context for the function. | |
132 | This context is shared by inline functions, so the code to acquire | |
133 | the real exception context is delayed until after inlining. */ | |
134 | REG_NOTE (EH_CONTEXT) | |
135 | ||
136 | /* Indicates what exception region an INSN belongs in. This is used | |
137 | to indicate what region to which a call may throw. REGION 0 | |
138 | indicates that a call cannot throw at all. REGION -1 indicates | |
139 | that it cannot throw, nor will it execute a non-local goto. */ | |
140 | REG_NOTE (EH_REGION) | |
141 | ||
142 | /* Used by haifa-sched to save NOTE_INSN notes across scheduling. */ | |
143 | REG_NOTE (SAVE_NOTE) | |
144 | ||
145 | /* Indicates that this insn (which is part of the prologue) computes a | |
146 | value which might not be used later, and if so it's OK to delete | |
147 | the insn. Normally, deleting any insn in the prologue is an error. | |
148 | At present the parameter is unused and set to (const_int 0). */ | |
149 | REG_NOTE (MAYBE_DEAD) | |
150 | ||
151 | /* Indicates that a call does not return. */ | |
152 | REG_NOTE (NORETURN) | |
153 | ||
154 | /* Indicates that an indirect jump is a non-local goto instead of a | |
155 | computed goto. */ | |
156 | REG_NOTE (NON_LOCAL_GOTO) | |
157 | ||
158 | /* Indicates that a jump crosses between hot and cold sections in a | |
159 | (partitioned) assembly or .o file, and therefore should not be | |
160 | reduced to a simpler jump by optimizations. */ | |
161 | REG_NOTE (CROSSING_JUMP) | |
162 | ||
163 | /* This kind of note is generated at each to `setjmp', and similar | |
164 | functions that can return twice. */ | |
165 | REG_NOTE (SETJMP) | |
166 | ||
167 | /* Indicate calls that always returns. */ | |
168 | REG_NOTE (ALWAYS_RETURN) |