Mercurial > hg > CbC > CbC_gcc
annotate gcc/ipa-prop.h @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
rev | line source |
---|---|
0 | 1 /* Interprocedural analyses. |
2 Copyright (C) 2005, 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 #ifndef IPA_PROP_H | |
21 #define IPA_PROP_H | |
22 | |
23 #include "tree.h" | |
24 #include "vec.h" | |
25 #include "cgraph.h" | |
26 | |
27 /* The following definitions and interfaces are used by | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
28 interprocedural analyses or parameters. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
29 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
30 /* ipa-prop.c stuff (ipa-cp, indirect inlining): */ |
0 | 31 |
32 /* A jump function for a callsite represents the values passed as actual | |
33 arguments of the callsite. There are three main types of values : | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
34 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
35 Pass-through - the caller's formal parameter is passed as an actual |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
36 argument, possibly one simple operation performed on it. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
37 Constant - a constant (is_gimple_ip_invariant)is passed as an actual |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
38 argument. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
39 Unknown - neither of the above. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
40 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
41 IPA_JF_CONST_MEMBER_PTR stands for C++ member pointers, other constants are |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
42 represented with IPA_JF_CONST. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
43 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
44 In addition to "ordinary" pass through functions represented by |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
45 IPA_JF_PASS_THROUGH, IPA_JF_ANCESTOR represents getting addresses of of |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
46 ancestor fields in C++ (e.g. &this_1(D)->D.1766.D.1756). */ |
0 | 47 enum jump_func_type |
48 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
49 IPA_JF_UNKNOWN = 0, /* newly allocated and zeroed jump functions default */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
50 IPA_JF_CONST, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
51 IPA_JF_CONST_MEMBER_PTR, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
52 IPA_JF_PASS_THROUGH, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
53 IPA_JF_ANCESTOR |
0 | 54 }; |
55 | |
56 /* All formal parameters in the program have a lattice associated with it | |
57 computed by the interprocedural stage of IPCP. | |
58 There are three main values of the lattice: | |
59 IPA_TOP - unknown, | |
60 IPA_BOTTOM - non constant, | |
61 IPA_CONST_VALUE - simple scalar constant, | |
62 Cval of formal f will have a constant value if all callsites to this | |
63 function have the same constant value passed to f. | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
64 Integer and real constants are represented as IPA_CONST_VALUE. */ |
0 | 65 enum ipa_lattice_type |
66 { | |
67 IPA_BOTTOM, | |
68 IPA_CONST_VALUE, | |
69 IPA_TOP | |
70 }; | |
71 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
72 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
73 /* Structure holding data required to describe a pass-through jump function. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
74 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
75 struct GTY(()) ipa_pass_through_data |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
76 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
77 /* If an operation is to be performed on the original parameter, this is the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
78 second (constant) operand. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
79 tree operand; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
80 /* Number of the caller's formal parameter being passed. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
81 int formal_id; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
82 /* Operation that is performed on the argument before it is passed on. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
83 NOP_EXPR means no operation. Otherwise oper must be a simple binary |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
84 arithmetic operation where the caller's parameter is the first operand and |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
85 operand field from this structure is the second one. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
86 enum tree_code operation; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
87 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
88 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
89 /* Structure holding data required to describe and ancestor pass throu |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
90 funkci. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 struct GTY(()) ipa_ancestor_jf_data |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
93 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
94 /* Offset of the field representing the ancestor. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
95 HOST_WIDE_INT offset; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
96 /* TYpe of the result. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
97 tree type; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
98 /* Number of the caller's formal parameter being passed. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
99 int formal_id; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
100 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
101 |
0 | 102 /* Structure holding a C++ member pointer constant. Holds a pointer to the |
103 method and delta offset. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
104 struct GTY(()) ipa_member_ptr_cst |
0 | 105 { |
106 tree pfn; | |
107 tree delta; | |
108 }; | |
109 | |
110 /* A jump function for a callsite represents the values passed as actual | |
111 arguments of the callsite. See enum jump_func_type for the various | |
112 types of jump functions supported. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
113 struct GTY (()) ipa_jump_func |
0 | 114 { |
115 enum jump_func_type type; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
116 /* Represents a value of a jump function. pass_through is used only in jump |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
117 function context. constant represents the actual constant in constant jump |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
118 functions and member_cst holds constant c++ member functions. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
119 union jump_func_value |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
120 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
121 tree GTY ((tag ("IPA_JF_CONST"))) constant; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
122 struct ipa_pass_through_data GTY ((tag ("IPA_JF_PASS_THROUGH"))) pass_through; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
123 struct ipa_ancestor_jf_data GTY ((tag ("IPA_JF_ANCESTOR"))) ancestor; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
124 struct ipa_member_ptr_cst GTY ((tag ("IPA_JF_CONST_MEMBER_PTR"))) member_cst; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
125 } GTY ((desc ("%1.type"))) value; |
0 | 126 }; |
127 | |
128 /* All formal parameters in the program have a cval computed by | |
129 the interprocedural stage of IPCP. See enum ipa_lattice_type for | |
130 the various types of lattices supported */ | |
131 struct ipcp_lattice | |
132 { | |
133 enum ipa_lattice_type type; | |
134 tree constant; | |
135 }; | |
136 | |
137 /* Each instance of the following structure describes a statement that calls a | |
138 function parameter. Those referring to statements within the same function | |
139 are linked in a list. */ | |
140 struct ipa_param_call_note | |
141 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
142 /* Expected number of executions: calculated in profile.c. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
143 gcov_type count; |
0 | 144 /* Linked list's next */ |
145 struct ipa_param_call_note *next; | |
146 /* Statement that contains the call to the parameter above. */ | |
147 gimple stmt; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
148 /* When in LTO, we the above stmt will be NULL and we need an uid. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
149 unsigned int lto_stmt_uid; |
0 | 150 /* Index of the parameter that is called. */ |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
151 int formal_id; |
0 | 152 /* Expected frequency of executions within the function. see cgraph_edge in |
153 cgraph.h for more on this. */ | |
154 int frequency; | |
155 /* Depth of loop nest, 1 means no loop nest. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
156 unsigned short int loop_nest; |
0 | 157 /* Set when we have already found the target to be a compile time constant |
158 and turned this into an edge or when the note was found unusable for some | |
159 reason. */ | |
160 bool processed; | |
161 }; | |
162 | |
163 /* Structure describing a single formal parameter. */ | |
164 struct ipa_param_descriptor | |
165 { | |
166 /* IPA-CP lattice. */ | |
167 struct ipcp_lattice ipcp_lattice; | |
168 /* PARAM_DECL of this parameter. */ | |
169 tree decl; | |
170 /* Whether the value parameter has been modified within the function. */ | |
171 unsigned modified : 1; | |
172 /* Whether the parameter has been used as a call destination. */ | |
173 unsigned called : 1; | |
174 }; | |
175 | |
176 /* ipa_node_params stores information related to formal parameters of functions | |
177 and some other information for interprocedural passes that operate on | |
178 parameters (such as ipa-cp). */ | |
179 struct ipa_node_params | |
180 { | |
181 /* Number of formal parameters of this function. When set to 0, | |
182 this function's parameters would not be analyzed by the different | |
183 stages of IPA CP. */ | |
184 int param_count; | |
185 /* Pointer to an array of structures describing individual formal | |
186 parameters. */ | |
187 struct ipa_param_descriptor *params; | |
188 /* List of structures enumerating calls to a formal parameter. */ | |
189 struct ipa_param_call_note *param_calls; | |
190 /* Only for versioned nodes this field would not be NULL, | |
191 it points to the node that IPA cp cloned from. */ | |
192 struct cgraph_node *ipcp_orig_node; | |
193 /* Meaningful only for original functions. Expresses the | |
194 ratio between the direct calls and sum of all invocations of | |
195 this function (given by profiling info). It is used to calculate | |
196 the profiling information of the original function and the versioned | |
197 one. */ | |
198 gcov_type count_scale; | |
199 | |
200 /* Whether this function is called with variable number of actual | |
201 arguments. */ | |
202 unsigned called_with_var_arguments : 1; | |
203 /* Whether the modification analysis has already been performed. */ | |
204 unsigned modification_analysis_done : 1; | |
205 /* Whether the param uses analysis has already been performed. */ | |
206 unsigned uses_analysis_done : 1; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
207 /* Whether the function is enqueued in an ipa_func_list. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
208 unsigned node_enqueued : 1; |
0 | 209 }; |
210 | |
211 /* ipa_node_params access functions. Please use these to access fields that | |
212 are or will be shared among various passes. */ | |
213 | |
214 /* Set the number of formal parameters. */ | |
215 | |
216 static inline void | |
217 ipa_set_param_count (struct ipa_node_params *info, int count) | |
218 { | |
219 info->param_count = count; | |
220 } | |
221 | |
222 /* Return the number of formal parameters. */ | |
223 | |
224 static inline int | |
225 ipa_get_param_count (struct ipa_node_params *info) | |
226 { | |
227 return info->param_count; | |
228 } | |
229 | |
230 /* Return the declaration of Ith formal parameter of the function corresponding | |
231 to INFO. Note there is no setter function as this array is built just once | |
232 using ipa_initialize_node_params. */ | |
233 | |
234 static inline tree | |
235 ipa_get_param (struct ipa_node_params *info, int i) | |
236 { | |
237 return info->params[i].decl; | |
238 } | |
239 | |
240 /* Return the modification flag corresponding to the Ith formal parameter of | |
241 the function associated with INFO. Note that there is no setter method as | |
242 the goal is to set all flags when building the array in | |
243 ipa_detect_param_modifications. */ | |
244 | |
245 static inline bool | |
246 ipa_is_param_modified (struct ipa_node_params *info, int i) | |
247 { | |
248 return info->params[i].modified; | |
249 } | |
250 | |
251 /* Return the called flag corresponding to the Ith formal parameter of the | |
252 function associated with INFO. Note that there is no setter method as the | |
253 goal is to set all flags when building the array in | |
254 ipa_detect_called_params. */ | |
255 | |
256 static inline bool | |
257 ipa_is_param_called (struct ipa_node_params *info, int i) | |
258 { | |
259 return info->params[i].called; | |
260 } | |
261 | |
262 /* Flag this node as having callers with variable number of arguments. */ | |
263 | |
264 static inline void | |
265 ipa_set_called_with_variable_arg (struct ipa_node_params *info) | |
266 { | |
267 info->called_with_var_arguments = 1; | |
268 } | |
269 | |
270 /* Have we detected this node was called with variable number of arguments? */ | |
271 | |
272 static inline bool | |
273 ipa_is_called_with_var_arguments (struct ipa_node_params *info) | |
274 { | |
275 return info->called_with_var_arguments; | |
276 } | |
277 | |
278 | |
279 | |
280 /* ipa_edge_args stores information related to a callsite and particularly | |
281 its arguments. It is pointed to by a field in the | |
282 callsite's corresponding cgraph_edge. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
283 typedef struct GTY(()) ipa_edge_args |
0 | 284 { |
285 /* Number of actual arguments in this callsite. When set to 0, | |
286 this callsite's parameters would not be analyzed by the different | |
287 stages of IPA CP. */ | |
288 int argument_count; | |
289 /* Array of the callsite's jump function of each parameter. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
290 struct ipa_jump_func GTY ((length ("%h.argument_count"))) *jump_functions; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
291 } ipa_edge_args_t; |
0 | 292 |
293 /* ipa_edge_args access functions. Please use these to access fields that | |
294 are or will be shared among various passes. */ | |
295 | |
296 /* Set the number of actual arguments. */ | |
297 | |
298 static inline void | |
299 ipa_set_cs_argument_count (struct ipa_edge_args *args, int count) | |
300 { | |
301 args->argument_count = count; | |
302 } | |
303 | |
304 /* Return the number of actual arguments. */ | |
305 | |
306 static inline int | |
307 ipa_get_cs_argument_count (struct ipa_edge_args *args) | |
308 { | |
309 return args->argument_count; | |
310 } | |
311 | |
312 /* Returns a pointer to the jump function for the ith argument. Please note | |
313 there is no setter function as jump functions are all set up in | |
314 ipa_compute_jump_functions. */ | |
315 | |
316 static inline struct ipa_jump_func * | |
317 ipa_get_ith_jump_func (struct ipa_edge_args *args, int i) | |
318 { | |
319 return &args->jump_functions[i]; | |
320 } | |
321 | |
322 /* Vectors need to have typedefs of structures. */ | |
323 typedef struct ipa_node_params ipa_node_params_t; | |
324 | |
325 /* Types of vectors holding the infos. */ | |
326 DEF_VEC_O (ipa_node_params_t); | |
327 DEF_VEC_ALLOC_O (ipa_node_params_t, heap); | |
328 DEF_VEC_O (ipa_edge_args_t); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
329 DEF_VEC_ALLOC_O (ipa_edge_args_t, gc); |
0 | 330 |
331 /* Vector where the parameter infos are actually stored. */ | |
332 extern VEC (ipa_node_params_t, heap) *ipa_node_params_vector; | |
333 /* Vector where the parameter infos are actually stored. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
334 extern GTY(()) VEC (ipa_edge_args_t, gc) *ipa_edge_args_vector; |
0 | 335 |
336 /* Return the associated parameter/argument info corresponding to the given | |
337 node/edge. */ | |
338 #define IPA_NODE_REF(NODE) (VEC_index (ipa_node_params_t, \ | |
339 ipa_node_params_vector, (NODE)->uid)) | |
340 #define IPA_EDGE_REF(EDGE) (VEC_index (ipa_edge_args_t, \ | |
341 ipa_edge_args_vector, (EDGE)->uid)) | |
342 /* This macro checks validity of index returned by | |
343 ipa_get_param_decl_index function. */ | |
344 #define IS_VALID_JUMP_FUNC_INDEX(I) ((I) != -1) | |
345 | |
346 /* Creating and freeing ipa_node_params and ipa_edge_args. */ | |
347 void ipa_create_all_node_params (void); | |
348 void ipa_create_all_edge_args (void); | |
349 void ipa_free_edge_args_substructures (struct ipa_edge_args *); | |
350 void ipa_free_node_params_substructures (struct ipa_node_params *); | |
351 void ipa_free_all_node_params (void); | |
352 void ipa_free_all_edge_args (void); | |
353 void free_all_ipa_structures_after_ipa_cp (void); | |
354 void free_all_ipa_structures_after_iinln (void); | |
355 void ipa_register_cgraph_hooks (void); | |
356 | |
357 /* This function ensures the array of node param infos is big enough to | |
358 accommodate a structure for all nodes and reallocates it if not. */ | |
359 | |
360 static inline void | |
361 ipa_check_create_node_params (void) | |
362 { | |
363 if (!ipa_node_params_vector) | |
364 ipa_node_params_vector = VEC_alloc (ipa_node_params_t, heap, | |
365 cgraph_max_uid); | |
366 | |
367 if (VEC_length (ipa_node_params_t, ipa_node_params_vector) | |
368 <= (unsigned) cgraph_max_uid) | |
369 VEC_safe_grow_cleared (ipa_node_params_t, heap, | |
370 ipa_node_params_vector, cgraph_max_uid + 1); | |
371 } | |
372 | |
373 /* This function ensures the array of edge arguments infos is big enough to | |
374 accommodate a structure for all edges and reallocates it if not. */ | |
375 | |
376 static inline void | |
377 ipa_check_create_edge_args (void) | |
378 { | |
379 if (!ipa_edge_args_vector) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
380 ipa_edge_args_vector = VEC_alloc (ipa_edge_args_t, gc, |
0 | 381 cgraph_edge_max_uid); |
382 | |
383 if (VEC_length (ipa_edge_args_t, ipa_edge_args_vector) | |
384 <= (unsigned) cgraph_edge_max_uid) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
385 VEC_safe_grow_cleared (ipa_edge_args_t, gc, ipa_edge_args_vector, |
0 | 386 cgraph_edge_max_uid + 1); |
387 } | |
388 | |
389 /* Returns true if the array of edge infos is large enough to accommodate an | |
390 info for EDGE. The main purpose of this function is that debug dumping | |
391 function can check info availability without causing reallocations. */ | |
392 | |
393 static inline bool | |
394 ipa_edge_args_info_available_for_edge_p (struct cgraph_edge *edge) | |
395 { | |
396 return ((unsigned) edge->uid < VEC_length (ipa_edge_args_t, | |
397 ipa_edge_args_vector)); | |
398 } | |
399 | |
400 /* A function list element. It is used to create a temporary worklist used in | |
401 the propagation stage of IPCP. (can be used for more IPA optimizations) */ | |
402 struct ipa_func_list | |
403 { | |
404 struct cgraph_node *node; | |
405 struct ipa_func_list *next; | |
406 }; | |
407 | |
408 /* ipa_func_list interface. */ | |
409 struct ipa_func_list *ipa_init_func_list (void); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
410 void ipa_push_func_to_list_1 (struct ipa_func_list **, struct cgraph_node *, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
411 struct ipa_node_params *); |
0 | 412 struct cgraph_node *ipa_pop_func_from_list (struct ipa_func_list **); |
413 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
414 /* Add cgraph NODE to the worklist WL if it is not already in one. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
415 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
416 static inline void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
417 ipa_push_func_to_list (struct ipa_func_list **wl, struct cgraph_node *node) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
418 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
419 struct ipa_node_params *info = IPA_NODE_REF (node); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
420 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
421 if (!info->node_enqueued) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
422 ipa_push_func_to_list_1 (wl, node, info); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
423 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
424 |
0 | 425 /* Callsite related calculations. */ |
426 void ipa_compute_jump_functions (struct cgraph_edge *); | |
427 void ipa_count_arguments (struct cgraph_edge *); | |
428 | |
429 /* Function formal parameters related computations. */ | |
430 void ipa_initialize_node_params (struct cgraph_node *node); | |
431 void ipa_detect_param_modifications (struct cgraph_node *); | |
432 void ipa_analyze_params_uses (struct cgraph_node *); | |
433 bool ipa_propagate_indirect_call_infos (struct cgraph_edge *cs, | |
434 VEC (cgraph_edge_p, heap) **new_edges); | |
435 | |
436 /* Debugging interface. */ | |
437 void ipa_print_node_params (FILE *, struct cgraph_node *node); | |
438 void ipa_print_all_params (FILE *); | |
439 void ipa_print_node_jump_functions (FILE *f, struct cgraph_node *node); | |
440 void ipa_print_all_jump_functions (FILE * f); | |
441 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
442 /* Structure to describe transformations of formal parameters and actual |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
443 arguments. Each instance describes one new parameter and they are meant to |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
444 be stored in a vector. Additionally, most users will probably want to store |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
445 adjustments about parameters that are being removed altogether so that SSA |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
446 names belonging to them can be replaced by SSA names of an artificial |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
447 variable. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
448 struct ipa_parm_adjustment |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
449 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
450 /* The original PARM_DECL itself, helpful for processing of the body of the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
451 function itself. Intended for traversing function bodies. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
452 ipa_modify_formal_parameters, ipa_modify_call_arguments and |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
453 ipa_combine_adjustments ignore this and use base_index. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
454 ipa_modify_formal_parameters actually sets this. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
455 tree base; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
456 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
457 /* Type of the new parameter. However, if by_ref is true, the real type will |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
458 be a pointer to this type. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
459 tree type; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
460 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
461 /* The new declaration when creating/replacing a parameter. Created by |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
462 ipa_modify_formal_parameters, useful for functions modifying the body |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
463 accordingly. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
464 tree reduction; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
465 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
466 /* New declaration of a substitute variable that we may use to replace all |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
467 non-default-def ssa names when a parm decl is going away. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
468 tree new_ssa_base; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
469 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
470 /* If non-NULL and the original parameter is to be removed (copy_param below |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
471 is NULL), this is going to be its nonlocalized vars value. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
472 tree nonlocal_value; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
473 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
474 /* Offset into the original parameter (for the cases when the new parameter |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
475 is a component of an original one). */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
476 HOST_WIDE_INT offset; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
477 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
478 /* Zero based index of the original parameter this one is based on. (ATM |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
479 there is no way to insert a new parameter out of the blue because there is |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
480 no need but if it arises the code can be easily exteded to do so.) */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
481 int base_index; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
482 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
483 /* This new parameter is an unmodified parameter at index base_index. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
484 unsigned copy_param : 1; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
485 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
486 /* This adjustment describes a parameter that is about to be removed |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
487 completely. Most users will probably need to book keep those so that they |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
488 don't leave behinfd any non default def ssa names belonging to them. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
489 unsigned remove_param : 1; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
490 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
491 /* The parameter is to be passed by reference. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
492 unsigned by_ref : 1; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
493 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
494 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
495 typedef struct ipa_parm_adjustment ipa_parm_adjustment_t; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
496 DEF_VEC_O (ipa_parm_adjustment_t); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
497 DEF_VEC_ALLOC_O (ipa_parm_adjustment_t, heap); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
498 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
499 typedef VEC (ipa_parm_adjustment_t, heap) *ipa_parm_adjustment_vec; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
500 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
501 VEC(tree, heap) *ipa_get_vector_of_formal_parms (tree fndecl); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
502 void ipa_modify_formal_parameters (tree fndecl, ipa_parm_adjustment_vec, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
503 const char *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
504 void ipa_modify_call_arguments (struct cgraph_edge *, gimple, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
505 ipa_parm_adjustment_vec); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
506 ipa_parm_adjustment_vec ipa_combine_adjustments (ipa_parm_adjustment_vec, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
507 ipa_parm_adjustment_vec); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
508 void ipa_dump_param_adjustments (FILE *, ipa_parm_adjustment_vec, tree); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
509 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
510 void ipa_prop_write_jump_functions (cgraph_node_set set); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
511 void ipa_prop_read_jump_functions (void); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
512 void ipa_update_after_lto_read (void); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
513 void lto_ipa_fixup_call_notes (struct cgraph_node *, gimple *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
514 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
515 /* From tree-sra.c: */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
516 bool build_ref_for_offset (tree *, tree, HOST_WIDE_INT, tree, bool); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
517 |
0 | 518 #endif /* IPA_PROP_H */ |