Mercurial > hg > CbC > CbC_gcc
annotate gcc/tree-pass.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 /* Definitions for describing one tree-ssa optimization pass. |
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
|
2 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
0 | 3 Free Software Foundation, Inc. |
4 Contributed by Richard Henderson <rth@redhat.com> | |
5 | |
6 This file is part of GCC. | |
7 | |
8 GCC is free software; you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
10 the Free Software Foundation; either version 3, or (at your option) | |
11 any later version. | |
12 | |
13 GCC is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GCC; see the file COPYING3. If not see | |
20 <http://www.gnu.org/licenses/>. */ | |
21 | |
22 | |
23 #ifndef GCC_TREE_PASS_H | |
24 #define GCC_TREE_PASS_H 1 | |
25 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
26 #include "timevar.h" |
0 | 27 |
28 /* Different tree dump places. When you add new tree dump places, | |
29 extend the DUMP_FILES array in tree-dump.c. */ | |
30 enum tree_dump_index | |
31 { | |
32 TDI_none, /* No dump */ | |
33 TDI_cgraph, /* dump function call graph. */ | |
34 TDI_tu, /* dump the whole translation unit. */ | |
35 TDI_class, /* dump class hierarchy. */ | |
36 TDI_original, /* dump each function before optimizing it */ | |
37 TDI_generic, /* dump each function after genericizing it */ | |
38 TDI_nested, /* dump each function after unnesting it */ | |
39 TDI_vcg, /* create a VCG graph file for each | |
40 function's flowgraph. */ | |
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
|
41 TDI_ada, /* dump declarations in Ada syntax. */ |
0 | 42 TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */ |
43 TDI_rtl_all, /* enable all the RTL dumps. */ | |
44 TDI_ipa_all, /* enable all the IPA dumps. */ | |
45 | |
46 TDI_end | |
47 }; | |
48 | |
49 /* Bit masks to control dumping. Not all values are applicable to | |
50 all dumps. Add new ones at the end. When you define new | |
51 values, extend the DUMP_OPTIONS array in tree-dump.c */ | |
52 #define TDF_ADDRESS (1 << 0) /* dump node addresses */ | |
53 #define TDF_SLIM (1 << 1) /* don't go wild following links */ | |
54 #define TDF_RAW (1 << 2) /* don't unparse the function */ | |
55 #define TDF_DETAILS (1 << 3) /* show more detailed info about | |
56 each pass */ | |
57 #define TDF_STATS (1 << 4) /* dump various statistics about | |
58 each pass */ | |
59 #define TDF_BLOCKS (1 << 5) /* display basic block boundaries */ | |
60 #define TDF_VOPS (1 << 6) /* display virtual operands */ | |
61 #define TDF_LINENO (1 << 7) /* display statement line numbers */ | |
62 #define TDF_UID (1 << 8) /* display decl UIDs */ | |
63 | |
64 #define TDF_TREE (1 << 9) /* is a tree dump */ | |
65 #define TDF_RTL (1 << 10) /* is a RTL dump */ | |
66 #define TDF_IPA (1 << 11) /* is an IPA dump */ | |
67 #define TDF_STMTADDR (1 << 12) /* Address of stmt. */ | |
68 | |
69 #define TDF_GRAPH (1 << 13) /* a graph dump is being emitted */ | |
70 #define TDF_MEMSYMS (1 << 14) /* display memory symbols in expr. | |
71 Implies TDF_VOPS. */ | |
72 | |
73 #define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic | |
74 message. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
75 #define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree |
0 | 76 dumper to print stmts. */ |
77 #define TDF_RHS_ONLY (1 << 17) /* a flag to only print the RHS of | |
78 a 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
|
79 #define TDF_ASMNAME (1 << 18) /* display asm names of decls */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
80 #define TDF_EH (1 << 19) /* display EH region number |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
81 holding this gimple statement. */ |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
82 #define TDF_NOUID (1 << 20) /* omit UIDs from dumps. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
83 #define TDF_ALIAS (1 << 21) /* display alias information */ |
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
|
84 #define TDF_ENUMERATE_LOCALS (1 << 22) /* Enumerate locals by uid. */ |
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
|
85 #define TDF_CSELIB (1 << 23) /* Dump cselib details. */ |
0 | 86 |
55
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 /* In tree-dump.c */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
89 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
90 extern char *get_dump_file_name (int); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 extern int dump_enabled_p (int); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 extern int dump_initialized_p (int); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
93 extern FILE *dump_begin (int, int *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
94 extern void dump_end (int, FILE *); |
0 | 95 extern void dump_node (const_tree, int, FILE *); |
96 extern int dump_switch_p (const char *); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
97 extern const char *dump_flag_name (int); |
0 | 98 |
99 /* Global variables used to communicate with passes. */ | |
100 extern FILE *dump_file; | |
101 extern int dump_flags; | |
102 extern const char *dump_file_name; | |
103 | |
104 /* Return the dump_file_info for the given phase. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
105 extern struct dump_file_info *get_dump_file_info (int); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
106 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 /* Optimization pass type. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
108 enum opt_pass_type |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
109 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
110 GIMPLE_PASS, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
111 RTL_PASS, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
112 SIMPLE_IPA_PASS, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
113 IPA_PASS |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
114 }; |
0 | 115 |
116 /* Describe one pass; this is the common part shared across different pass | |
117 types. */ | |
118 struct opt_pass | |
119 { | |
120 /* Optimization pass type. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
121 enum opt_pass_type type; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
122 |
0 | 123 /* Terse name of the pass used as a fragment of the dump file |
124 name. If the name starts with a star, no dump happens. */ | |
125 const char *name; | |
126 | |
127 /* If non-null, this pass and all sub-passes are executed only if | |
128 the function returns true. */ | |
129 bool (*gate) (void); | |
130 | |
131 /* This is the code to run. If null, then there should be sub-passes | |
132 otherwise this pass does nothing. The return value contains | |
133 TODOs to execute in addition to those in TODO_flags_finish. */ | |
134 unsigned int (*execute) (void); | |
135 | |
136 /* A list of sub-passes to run, dependent on gate predicate. */ | |
137 struct opt_pass *sub; | |
138 | |
139 /* Next in the list of passes to run, independent of gate predicate. */ | |
140 struct opt_pass *next; | |
141 | |
142 /* Static pass number, used as a fragment of the dump file name. */ | |
143 int static_pass_number; | |
144 | |
145 /* The timevar id associated with this pass. */ | |
146 /* ??? Ideally would be dynamically assigned. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
147 timevar_id_t tv_id; |
0 | 148 |
149 /* Sets of properties input and output from this pass. */ | |
150 unsigned int properties_required; | |
151 unsigned int properties_provided; | |
152 unsigned int properties_destroyed; | |
153 | |
154 /* Flags indicating common sets things to do before and after. */ | |
155 unsigned int todo_flags_start; | |
156 unsigned int todo_flags_finish; | |
157 }; | |
158 | |
159 /* Description of GIMPLE pass. */ | |
160 struct gimple_opt_pass | |
161 { | |
162 struct opt_pass pass; | |
163 }; | |
164 | |
165 /* Description of RTL pass. */ | |
166 struct rtl_opt_pass | |
167 { | |
168 struct opt_pass pass; | |
169 }; | |
170 | |
171 struct varpool_node; | |
172 struct cgraph_node; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
173 struct cgraph_node_set_def; |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
174 struct varpool_node_set_def; |
0 | 175 |
176 /* Description of IPA pass with generate summary, write, execute, read and | |
177 transform stages. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
178 struct ipa_opt_pass_d |
0 | 179 { |
180 struct opt_pass pass; | |
181 | |
182 /* IPA passes can analyze function body and variable initializers | |
183 using this hook and produce summary. */ | |
184 void (*generate_summary) (void); | |
185 | |
186 /* This hook is used to serialize IPA summaries on disk. */ | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
187 void (*write_summary) (struct cgraph_node_set_def *, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
188 struct varpool_node_set_def *); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
189 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
190 /* This hook is used to deserialize IPA summaries from disk. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
191 void (*read_summary) (void); |
0 | 192 |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
193 /* This hook is used to serialize IPA optimization summaries on disk. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
194 void (*write_optimization_summary) (struct cgraph_node_set_def *, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
195 struct varpool_node_set_def *); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
196 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
197 /* This hook is used to deserialize IPA summaries from disk. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
198 void (*read_optimization_summary) (void); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
199 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
200 /* Hook to convert gimple stmt uids into true gimple statements. The second |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
201 parameter is an array of statements indexed by their uid. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
202 void (*stmt_fixup) (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
|
203 |
0 | 204 /* Results of interprocedural propagation of an IPA pass is applied to |
205 function body via this hook. */ | |
206 unsigned int function_transform_todo_flags_start; | |
207 unsigned int (*function_transform) (struct cgraph_node *); | |
208 void (*variable_transform) (struct varpool_node *); | |
209 }; | |
210 | |
211 /* Description of simple IPA pass. Simple IPA passes have just one execute | |
212 hook. */ | |
213 struct simple_ipa_opt_pass | |
214 { | |
215 struct opt_pass pass; | |
216 }; | |
217 | |
218 /* Define a tree dump switch. */ | |
219 struct dump_file_info | |
220 { | |
221 const char *suffix; /* suffix to give output file. */ | |
222 const char *swtch; /* command line switch */ | |
223 const char *glob; /* command line glob */ | |
224 int flags; /* user flags */ | |
225 int state; /* state of play */ | |
226 int num; /* dump file number */ | |
227 }; | |
228 | |
229 /* Pass properties. */ | |
230 #define PROP_gimple_any (1 << 0) /* entire gimple grammar */ | |
231 #define PROP_gimple_lcf (1 << 1) /* lowered control flow */ | |
232 #define PROP_gimple_leh (1 << 2) /* lowered eh */ | |
233 #define PROP_cfg (1 << 3) | |
234 #define PROP_referenced_vars (1 << 4) | |
235 #define PROP_ssa (1 << 5) | |
236 #define PROP_no_crit_edges (1 << 6) | |
237 #define PROP_rtl (1 << 7) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
238 #define PROP_gimple_lomp (1 << 8) /* lowered OpenMP directives */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
239 #define PROP_cfglayout (1 << 9) /* cfglayout mode on RTL */ |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
240 #define PROP_gimple_lcx (1 << 10) /* lowered complex */ |
0 | 241 |
242 #define PROP_trees \ | |
243 (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp) | |
244 | |
245 /* To-do flags. */ | |
246 #define TODO_dump_func (1 << 0) | |
247 #define TODO_ggc_collect (1 << 1) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
248 #define TODO_verify_ssa (1 << 2) |
0 | 249 #define TODO_verify_flow (1 << 3) |
250 #define TODO_verify_stmts (1 << 4) | |
251 #define TODO_cleanup_cfg (1 << 5) | |
252 #define TODO_dump_cgraph (1 << 7) | |
253 #define TODO_remove_functions (1 << 8) | |
254 #define TODO_rebuild_frequencies (1 << 9) | |
255 #define TODO_verify_rtl_sharing (1 << 10) | |
256 | |
257 /* To-do flags for calls to update_ssa. */ | |
258 | |
259 /* Update the SSA form inserting PHI nodes for newly exposed symbols | |
260 and virtual names marked for updating. When updating real names, | |
261 only insert PHI nodes for a real name O_j in blocks reached by all | |
262 the new and old definitions for O_j. If the iterated dominance | |
263 frontier for O_j is not pruned, we may end up inserting PHI nodes | |
264 in blocks that have one or more edges with no incoming definition | |
265 for O_j. This would lead to uninitialized warnings for O_j's | |
266 symbol. */ | |
267 #define TODO_update_ssa (1 << 11) | |
268 | |
269 /* Update the SSA form without inserting any new PHI nodes at all. | |
270 This is used by passes that have either inserted all the PHI nodes | |
271 themselves or passes that need only to patch use-def and def-def | |
272 chains for virtuals (e.g., DCE). */ | |
273 #define TODO_update_ssa_no_phi (1 << 12) | |
274 | |
275 /* Insert PHI nodes everywhere they are needed. No pruning of the | |
276 IDF is done. This is used by passes that need the PHI nodes for | |
277 O_j even if it means that some arguments will come from the default | |
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
|
278 definition of O_j's symbol. |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
279 |
0 | 280 WARNING: If you need to use this flag, chances are that your pass |
281 may be doing something wrong. Inserting PHI nodes for an old name | |
282 where not all edges carry a new replacement may lead to silent | |
283 codegen errors or spurious uninitialized warnings. */ | |
284 #define TODO_update_ssa_full_phi (1 << 13) | |
285 | |
286 /* Passes that update the SSA form on their own may want to delegate | |
287 the updating of virtual names to the generic updater. Since FUD | |
288 chains are easier to maintain, this simplifies the work they need | |
289 to do. NOTE: If this flag is used, any OLD->NEW mappings for real | |
290 names are explicitly destroyed and only the symbols marked for | |
291 renaming are processed. */ | |
292 #define TODO_update_ssa_only_virtuals (1 << 14) | |
293 | |
294 /* Some passes leave unused local variables that can be removed from | |
295 cfun->local_decls. This reduces the size of dump files | |
296 and the memory footprint for VAR_DECLs. */ | |
297 #define TODO_remove_unused_locals (1 << 15) | |
298 | |
299 /* Call df_finish at the end of the pass. This is done after all of | |
300 the dumpers have been allowed to run so that they have access to | |
301 the instance before it is destroyed. */ | |
302 #define TODO_df_finish (1 << 17) | |
303 | |
304 /* Call df_verify at the end of the pass if checking is enabled. */ | |
305 #define TODO_df_verify (1 << 18) | |
306 | |
307 /* Internally used for the first instance of a pass. */ | |
308 #define TODO_mark_first_instance (1 << 19) | |
309 | |
310 /* Rebuild aliasing info. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
311 #define TODO_rebuild_alias (1 << 20) |
0 | 312 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
313 /* Rebuild the addressable-vars bitmap and do register promotion. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
314 #define TODO_update_address_taken (1 << 21) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
315 |
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
|
316 /* Rebuild the callgraph edges. */ |
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
|
317 #define TODO_rebuild_cgraph_edges (1 << 22) |
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
|
318 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
319 /* Internally used in execute_function_todo(). */ |
0 | 320 #define TODO_update_ssa_any \ |
321 (TODO_update_ssa \ | |
322 | TODO_update_ssa_no_phi \ | |
323 | TODO_update_ssa_full_phi \ | |
324 | TODO_update_ssa_only_virtuals) | |
325 | |
326 #define TODO_verify_all \ | |
327 (TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts) | |
328 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
329 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
330 /* Register pass info. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
331 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
332 enum pass_positioning_ops |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
333 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
334 PASS_POS_INSERT_AFTER, /* Insert after the reference pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
335 PASS_POS_INSERT_BEFORE, /* Insert before the reference pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
336 PASS_POS_REPLACE /* Replace the reference pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
337 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
338 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
339 struct register_pass_info |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
340 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
341 struct opt_pass *pass; /* New pass to register. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
342 const char *reference_pass_name; /* Name of the reference pass for hooking |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
343 up the new pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
344 int ref_pass_instance_number; /* Insert the pass at the specified |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
345 instance number of the reference pass. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
346 Do it for every instance if it is 0. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
347 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
348 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
349 |
0 | 350 extern void tree_lowering_passes (tree decl); |
351 | |
352 extern struct gimple_opt_pass pass_mudflap_1; | |
353 extern struct gimple_opt_pass pass_mudflap_2; | |
354 extern struct gimple_opt_pass pass_lower_cf; | |
355 extern struct gimple_opt_pass pass_refactor_eh; | |
356 extern struct gimple_opt_pass pass_lower_eh; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
357 extern struct gimple_opt_pass pass_lower_eh_dispatch; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
358 extern struct gimple_opt_pass pass_lower_resx; |
0 | 359 extern struct gimple_opt_pass pass_build_cfg; |
360 extern struct gimple_opt_pass pass_early_tree_profile; | |
361 extern struct gimple_opt_pass pass_referenced_vars; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
362 extern struct gimple_opt_pass pass_cleanup_eh; |
0 | 363 extern struct gimple_opt_pass pass_sra; |
364 extern struct gimple_opt_pass pass_sra_early; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
365 extern struct gimple_opt_pass pass_early_ipa_sra; |
0 | 366 extern struct gimple_opt_pass pass_tail_recursion; |
367 extern struct gimple_opt_pass pass_tail_calls; | |
368 extern struct gimple_opt_pass pass_tree_loop; | |
369 extern struct gimple_opt_pass pass_tree_loop_init; | |
370 extern struct gimple_opt_pass pass_lim; | |
371 extern struct gimple_opt_pass pass_tree_unswitch; | |
372 extern struct gimple_opt_pass pass_predcom; | |
373 extern struct gimple_opt_pass pass_iv_canon; | |
374 extern struct gimple_opt_pass pass_scev_cprop; | |
375 extern struct gimple_opt_pass pass_empty_loop; | |
376 extern struct gimple_opt_pass pass_record_bounds; | |
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
|
377 extern struct gimple_opt_pass pass_graphite; |
0 | 378 extern struct gimple_opt_pass pass_graphite_transforms; |
379 extern struct gimple_opt_pass pass_if_conversion; | |
380 extern struct gimple_opt_pass pass_loop_distribution; | |
381 extern struct gimple_opt_pass pass_vectorize; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
382 extern struct gimple_opt_pass pass_slp_vectorize; |
0 | 383 extern struct gimple_opt_pass pass_complete_unroll; |
384 extern struct gimple_opt_pass pass_complete_unrolli; | |
385 extern struct gimple_opt_pass pass_parallelize_loops; | |
386 extern struct gimple_opt_pass pass_loop_prefetch; | |
387 extern struct gimple_opt_pass pass_iv_optimize; | |
388 extern struct gimple_opt_pass pass_tree_loop_done; | |
389 extern struct gimple_opt_pass pass_ch; | |
390 extern struct gimple_opt_pass pass_ccp; | |
391 extern struct gimple_opt_pass pass_phi_only_cprop; | |
392 extern struct gimple_opt_pass pass_build_ssa; | |
393 extern struct gimple_opt_pass pass_build_alias; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
394 extern struct gimple_opt_pass pass_build_ealias; |
0 | 395 extern struct gimple_opt_pass pass_dominator; |
396 extern struct gimple_opt_pass pass_dce; | |
397 extern struct gimple_opt_pass pass_dce_loop; | |
398 extern struct gimple_opt_pass pass_cd_dce; | |
399 extern struct gimple_opt_pass pass_call_cdce; | |
400 extern struct gimple_opt_pass pass_merge_phi; | |
401 extern struct gimple_opt_pass pass_split_crit_edges; | |
402 extern struct gimple_opt_pass pass_pre; | |
403 extern struct gimple_opt_pass pass_profile; | |
404 extern struct gimple_opt_pass pass_strip_predict_hints; | |
405 extern struct gimple_opt_pass pass_lower_complex_O0; | |
406 extern struct gimple_opt_pass pass_lower_complex; | |
407 extern struct gimple_opt_pass pass_lower_vector; | |
408 extern struct gimple_opt_pass pass_lower_vector_ssa; | |
409 extern struct gimple_opt_pass pass_lower_omp; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
410 extern struct gimple_opt_pass pass_diagnose_omp_blocks; |
0 | 411 extern struct gimple_opt_pass pass_expand_omp; |
412 extern struct gimple_opt_pass pass_expand_omp_ssa; | |
413 extern struct gimple_opt_pass pass_object_sizes; | |
414 extern struct gimple_opt_pass pass_fold_builtins; | |
415 extern struct gimple_opt_pass pass_stdarg; | |
416 extern struct gimple_opt_pass pass_early_warn_uninitialized; | |
417 extern struct gimple_opt_pass pass_late_warn_uninitialized; | |
418 extern struct gimple_opt_pass pass_cse_reciprocals; | |
419 extern struct gimple_opt_pass pass_cse_sincos; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
420 extern struct gimple_opt_pass pass_optimize_bswap; |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
421 extern struct gimple_opt_pass pass_optimize_widening_mul; |
0 | 422 extern struct gimple_opt_pass pass_warn_function_return; |
423 extern struct gimple_opt_pass pass_warn_function_noreturn; | |
424 extern struct gimple_opt_pass pass_cselim; | |
425 extern struct gimple_opt_pass pass_phiopt; | |
426 extern struct gimple_opt_pass pass_forwprop; | |
427 extern struct gimple_opt_pass pass_phiprop; | |
428 extern struct gimple_opt_pass pass_tree_ifcombine; | |
429 extern struct gimple_opt_pass pass_dse; | |
430 extern struct gimple_opt_pass pass_nrv; | |
431 extern struct gimple_opt_pass pass_rename_ssa_copies; | |
432 extern struct gimple_opt_pass pass_rest_of_compilation; | |
433 extern struct gimple_opt_pass pass_sink_code; | |
434 extern struct gimple_opt_pass pass_fre; | |
435 extern struct gimple_opt_pass pass_check_data_deps; | |
436 extern struct gimple_opt_pass pass_copy_prop; | |
437 extern struct gimple_opt_pass pass_vrp; | |
438 extern struct gimple_opt_pass pass_uncprop; | |
439 extern struct gimple_opt_pass pass_return_slot; | |
440 extern struct gimple_opt_pass pass_reassoc; | |
441 extern struct gimple_opt_pass pass_rebuild_cgraph_edges; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
442 extern struct gimple_opt_pass pass_remove_cgraph_callee_edges; |
0 | 443 extern struct gimple_opt_pass pass_build_cgraph_edges; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
444 extern struct gimple_opt_pass pass_local_pure_const; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
445 extern struct gimple_opt_pass pass_tracer; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
446 extern struct gimple_opt_pass pass_warn_unused_result; |
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
|
447 extern struct gimple_opt_pass pass_split_functions; |
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
|
448 extern struct gimple_opt_pass pass_feedback_split_functions; |
0 | 449 |
450 /* IPA Passes */ | |
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
|
451 extern struct simple_ipa_opt_pass pass_ipa_lower_emutls; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
452 extern struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility; |
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
|
453 extern struct simple_ipa_opt_pass pass_ipa_tree_profile; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
454 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
455 extern struct simple_ipa_opt_pass pass_early_local_passes; |
0 | 456 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
457 extern struct ipa_opt_pass_d pass_ipa_whole_program_visibility; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
458 extern struct ipa_opt_pass_d pass_ipa_lto_gimple_out; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
459 extern struct simple_ipa_opt_pass pass_ipa_increase_alignment; |
0 | 460 extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
461 extern struct ipa_opt_pass_d pass_ipa_inline; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
462 extern struct simple_ipa_opt_pass pass_ipa_free_lang_data; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
463 extern struct ipa_opt_pass_d pass_ipa_cp; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
464 extern struct ipa_opt_pass_d pass_ipa_reference; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
465 extern struct ipa_opt_pass_d pass_ipa_pure_const; |
0 | 466 extern struct simple_ipa_opt_pass pass_ipa_type_escape; |
467 extern struct simple_ipa_opt_pass pass_ipa_pta; | |
468 extern struct simple_ipa_opt_pass pass_ipa_struct_reorg; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
469 extern struct ipa_opt_pass_d pass_ipa_lto_wpa_fixup; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
470 extern struct ipa_opt_pass_d pass_ipa_lto_finish_out; |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
471 extern struct ipa_opt_pass_d pass_ipa_profile; |
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
|
472 extern struct ipa_opt_pass_d pass_ipa_cdtor_merge; |
0 | 473 |
474 extern struct gimple_opt_pass pass_all_optimizations; | |
475 extern struct gimple_opt_pass pass_cleanup_cfg_post_optimizing; | |
476 extern struct gimple_opt_pass pass_init_datastructures; | |
477 extern struct gimple_opt_pass pass_fixup_cfg; | |
478 | |
479 extern struct rtl_opt_pass pass_expand; | |
480 extern struct rtl_opt_pass pass_init_function; | |
481 extern struct rtl_opt_pass pass_jump; | |
482 extern struct rtl_opt_pass pass_rtl_eh; | |
483 extern struct rtl_opt_pass pass_initial_value_sets; | |
484 extern struct rtl_opt_pass pass_unshare_all_rtl; | |
485 extern struct rtl_opt_pass pass_instantiate_virtual_regs; | |
486 extern struct rtl_opt_pass pass_rtl_fwprop; | |
487 extern struct rtl_opt_pass pass_rtl_fwprop_addr; | |
488 extern struct rtl_opt_pass pass_jump2; | |
489 extern struct rtl_opt_pass pass_lower_subreg; | |
490 extern struct rtl_opt_pass pass_cse; | |
491 extern struct rtl_opt_pass pass_fast_rtl_dce; | |
492 extern struct rtl_opt_pass pass_ud_rtl_dce; | |
493 extern struct rtl_opt_pass pass_rtl_dce; | |
494 extern struct rtl_opt_pass pass_rtl_dse1; | |
495 extern struct rtl_opt_pass pass_rtl_dse2; | |
496 extern struct rtl_opt_pass pass_rtl_dse3; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
497 extern struct rtl_opt_pass pass_rtl_cprop; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
498 extern struct rtl_opt_pass pass_rtl_pre; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
499 extern struct rtl_opt_pass pass_rtl_hoist; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
500 extern struct rtl_opt_pass pass_rtl_store_motion; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
501 extern struct rtl_opt_pass pass_cse_after_global_opts; |
0 | 502 extern struct rtl_opt_pass pass_rtl_ifcvt; |
503 | |
504 extern struct rtl_opt_pass pass_into_cfg_layout_mode; | |
505 extern struct rtl_opt_pass pass_outof_cfg_layout_mode; | |
506 | |
507 extern struct rtl_opt_pass pass_loop2; | |
508 extern struct rtl_opt_pass pass_rtl_loop_init; | |
509 extern struct rtl_opt_pass pass_rtl_move_loop_invariants; | |
510 extern struct rtl_opt_pass pass_rtl_unswitch; | |
511 extern struct rtl_opt_pass pass_rtl_unroll_and_peel_loops; | |
512 extern struct rtl_opt_pass pass_rtl_doloop; | |
513 extern struct rtl_opt_pass pass_rtl_loop_done; | |
514 | |
515 extern struct rtl_opt_pass pass_web; | |
516 extern struct rtl_opt_pass pass_cse2; | |
517 extern struct rtl_opt_pass pass_df_initialize_opt; | |
518 extern struct rtl_opt_pass pass_df_initialize_no_opt; | |
519 extern struct rtl_opt_pass pass_reginfo_init; | |
520 extern struct rtl_opt_pass pass_inc_dec; | |
521 extern struct rtl_opt_pass pass_stack_ptr_mod; | |
522 extern struct rtl_opt_pass pass_initialize_regs; | |
523 extern struct rtl_opt_pass pass_combine; | |
524 extern struct rtl_opt_pass pass_if_after_combine; | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
525 extern struct rtl_opt_pass pass_implicit_zee; |
0 | 526 extern struct rtl_opt_pass pass_partition_blocks; |
527 extern struct rtl_opt_pass pass_match_asm_constraints; | |
528 extern struct rtl_opt_pass pass_regmove; | |
529 extern struct rtl_opt_pass pass_split_all_insns; | |
530 extern struct rtl_opt_pass pass_fast_rtl_byte_dce; | |
531 extern struct rtl_opt_pass pass_lower_subreg2; | |
532 extern struct rtl_opt_pass pass_mode_switching; | |
533 extern struct rtl_opt_pass pass_sms; | |
534 extern struct rtl_opt_pass pass_sched; | |
535 extern struct rtl_opt_pass pass_ira; | |
536 extern struct rtl_opt_pass pass_postreload; | |
537 extern struct rtl_opt_pass pass_clean_state; | |
538 extern struct rtl_opt_pass pass_branch_prob; | |
539 extern struct rtl_opt_pass pass_value_profile_transformations; | |
540 extern struct rtl_opt_pass pass_postreload_cse; | |
541 extern struct rtl_opt_pass pass_gcse2; | |
542 extern struct rtl_opt_pass pass_split_after_reload; | |
543 extern struct rtl_opt_pass pass_branch_target_load_optimize1; | |
544 extern struct rtl_opt_pass pass_thread_prologue_and_epilogue; | |
545 extern struct rtl_opt_pass pass_stack_adjustments; | |
546 extern struct rtl_opt_pass pass_peephole2; | |
547 extern struct rtl_opt_pass pass_if_after_reload; | |
548 extern struct rtl_opt_pass pass_regrename; | |
549 extern struct rtl_opt_pass pass_cprop_hardreg; | |
550 extern struct rtl_opt_pass pass_reorder_blocks; | |
551 extern struct rtl_opt_pass pass_branch_target_load_optimize2; | |
552 extern struct rtl_opt_pass pass_leaf_regs; | |
553 extern struct rtl_opt_pass pass_split_before_sched2; | |
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
|
554 extern struct rtl_opt_pass pass_compare_elim_after_reload; |
0 | 555 extern struct rtl_opt_pass pass_sched2; |
556 extern struct rtl_opt_pass pass_stack_regs; | |
557 extern struct rtl_opt_pass pass_stack_regs_run; | |
558 extern struct rtl_opt_pass pass_df_finish; | |
559 extern struct rtl_opt_pass pass_compute_alignments; | |
560 extern struct rtl_opt_pass pass_duplicate_computed_gotos; | |
561 extern struct rtl_opt_pass pass_variable_tracking; | |
562 extern struct rtl_opt_pass pass_free_cfg; | |
563 extern struct rtl_opt_pass pass_machine_reorg; | |
564 extern struct rtl_opt_pass pass_cleanup_barriers; | |
565 extern struct rtl_opt_pass pass_delay_slots; | |
566 extern struct rtl_opt_pass pass_split_for_shorten_branches; | |
567 extern struct rtl_opt_pass pass_split_before_regstack; | |
568 extern struct rtl_opt_pass pass_convert_to_eh_region_ranges; | |
569 extern struct rtl_opt_pass pass_shorten_branches; | |
570 extern struct rtl_opt_pass pass_set_nothrow_function_flags; | |
571 extern struct rtl_opt_pass pass_final; | |
572 extern struct rtl_opt_pass pass_rtl_seqabstr; | |
573 extern struct gimple_opt_pass pass_release_ssa_names; | |
574 extern struct gimple_opt_pass pass_early_inline; | |
575 extern struct gimple_opt_pass pass_inline_parameters; | |
576 extern struct gimple_opt_pass pass_all_early_optimizations; | |
577 extern struct gimple_opt_pass pass_update_address_taken; | |
578 extern struct gimple_opt_pass pass_convert_switch; | |
579 | |
580 /* The root of the compilation pass tree, once constructed. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
581 extern struct opt_pass *all_passes, *all_small_ipa_passes, *all_lowering_passes, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
582 *all_regular_ipa_passes, *all_lto_gen_passes; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
583 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
584 /* Define a list of pass lists so that both passes.c and plugins can easily |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
585 find all the pass lists. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
586 #define GCC_PASS_LISTS \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
587 DEF_PASS_LIST (all_lowering_passes) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
588 DEF_PASS_LIST (all_small_ipa_passes) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
589 DEF_PASS_LIST (all_regular_ipa_passes) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
590 DEF_PASS_LIST (all_lto_gen_passes) \ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
591 DEF_PASS_LIST (all_passes) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
592 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
593 #define DEF_PASS_LIST(LIST) PASS_LIST_NO_##LIST, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
594 enum |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
595 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
596 GCC_PASS_LISTS |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
597 PASS_LIST_NUM |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
598 }; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
599 #undef DEF_PASS_LIST |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
600 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
601 /* This is used by plugins, and should also be used in |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
602 passes.c:register_pass. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
603 extern struct opt_pass **gcc_pass_lists[]; |
0 | 604 |
605 /* Current optimization pass. */ | |
606 extern struct opt_pass *current_pass; | |
607 | |
608 extern struct opt_pass * get_pass_for_id (int); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
609 extern bool execute_one_pass (struct opt_pass *); |
0 | 610 extern void execute_pass_list (struct opt_pass *); |
611 extern void execute_ipa_pass_list (struct opt_pass *); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
612 extern void execute_ipa_summary_passes (struct ipa_opt_pass_d *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
613 extern void execute_all_ipa_transforms (void); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
614 extern void execute_all_ipa_stmt_fixups (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
|
615 extern bool pass_init_dump_file (struct opt_pass *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
616 extern void pass_fini_dump_file (struct opt_pass *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
617 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
618 extern const char *get_current_pass_name (void); |
0 | 619 extern void print_current_pass (FILE *); |
620 extern void debug_pass (void); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
621 extern void ipa_write_summaries (void); |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
622 extern void ipa_write_optimization_summaries (struct cgraph_node_set_def *, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
623 struct varpool_node_set_def *); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
624 extern void ipa_read_summaries (void); |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
625 extern void ipa_read_optimization_summaries (void); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
626 extern void register_one_dump_file (struct opt_pass *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
627 extern bool function_called_by_processed_nodes_p (void); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
628 extern void register_pass (struct register_pass_info *); |
0 | 629 |
630 /* Set to true if the pass is called the first time during compilation of the | |
631 current function. Note that using this information in the optimization | |
632 passes is considered not to be clean, and it should be avoided if possible. | |
633 This flag is currently used to prevent loops from being peeled repeatedly | |
634 in jump threading; it will be removed once we preserve loop structures | |
635 throughout the compilation -- we will be able to mark the affected loops | |
636 directly in jump threading, and avoid peeling them next time. */ | |
637 extern bool first_pass_instance; | |
638 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
639 /* Declare for plugins. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
640 extern void do_per_function_toporder (void (*) (void *), void *); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
641 |
0 | 642 #endif /* GCC_TREE_PASS_H */ |