]> gcc.gnu.org Git - gcc.git/blame - gcc/tree-pass.h
backport: configure: Regenerate.
[gcc.git] / gcc / tree-pass.h
CommitLineData
6de9cd9a 1/* Definitions for describing one tree-ssa optimization pass.
fa10beec
RW
2 Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation,
3 Inc.
6de9cd9a
DN
4 Contributed by Richard Henderson <rth@redhat.com>
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
9dcd6f09 10the Free Software Foundation; either version 3, or (at your option)
6de9cd9a
DN
11any later version.
12
13GCC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
9dcd6f09
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
6de9cd9a
DN
21
22
23#ifndef GCC_TREE_PASS_H
24#define GCC_TREE_PASS_H 1
25
ef330312
PB
26/* In tree-dump.c */
27
28/* Different tree dump places. When you add new tree dump places,
29 extend the DUMP_FILES array in tree-dump.c. */
30enum tree_dump_index
31{
32 TDI_none, /* No dump */
bbbe4e7b 33 TDI_cgraph, /* dump function call graph. */
ef330312
PB
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 */
ef330312
PB
39 TDI_vcg, /* create a VCG graph file for each
40 function's flowgraph. */
41 TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */
42 TDI_rtl_all, /* enable all the RTL dumps. */
43 TDI_ipa_all, /* enable all the IPA dumps. */
44
ef330312
PB
45 TDI_end
46};
47
48/* Bit masks to control dumping. Not all values are applicable to
49 all dumps. Add new ones at the end. When you define new
50 values, extend the DUMP_OPTIONS array in tree-dump.c */
51#define TDF_ADDRESS (1 << 0) /* dump node addresses */
52#define TDF_SLIM (1 << 1) /* don't go wild following links */
53#define TDF_RAW (1 << 2) /* don't unparse the function */
54#define TDF_DETAILS (1 << 3) /* show more detailed info about
55 each pass */
56#define TDF_STATS (1 << 4) /* dump various statistics about
57 each pass */
58#define TDF_BLOCKS (1 << 5) /* display basic block boundaries */
59#define TDF_VOPS (1 << 6) /* display virtual operands */
60#define TDF_LINENO (1 << 7) /* display statement line numbers */
61#define TDF_UID (1 << 8) /* display decl UIDs */
62
63#define TDF_TREE (1 << 9) /* is a tree dump */
64#define TDF_RTL (1 << 10) /* is a RTL dump */
65#define TDF_IPA (1 << 11) /* is an IPA dump */
66#define TDF_STMTADDR (1 << 12) /* Address of stmt. */
67
5e34206b 68#define TDF_GRAPH (1 << 13) /* a graph dump is being emitted */
38635499
DN
69#define TDF_MEMSYMS (1 << 14) /* display memory symbols in expr.
70 Implies TDF_VOPS. */
5e34206b 71
438d798f
SM
72#define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic
73 message. */
3e894af1 74#define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree
726a989a
RB
75 dumper to print stmts. */
76#define TDF_RHS_ONLY (1 << 17) /* a flag to only print the RHS of
77 a gimple stmt. */
438d798f 78
ef330312
PB
79extern char *get_dump_file_name (enum tree_dump_index);
80extern int dump_enabled_p (enum tree_dump_index);
81extern int dump_initialized_p (enum tree_dump_index);
82extern FILE *dump_begin (enum tree_dump_index, int *);
83extern void dump_end (enum tree_dump_index, FILE *);
58f9752a 84extern void dump_node (const_tree, int, FILE *);
ef330312
PB
85extern int dump_switch_p (const char *);
86extern const char *dump_flag_name (enum tree_dump_index);
87
6de9cd9a
DN
88/* Global variables used to communicate with passes. */
89extern FILE *dump_file;
90extern int dump_flags;
9f8628ba 91extern const char *dump_file_name;
6de9cd9a 92
9f8628ba
PB
93/* Return the dump_file_info for the given phase. */
94extern struct dump_file_info *get_dump_file_info (enum tree_dump_index);
95
8ddbbcae
JH
96/* Describe one pass; this is the common part shared across different pass
97 types. */
98struct opt_pass
6de9cd9a 99{
8ddbbcae
JH
100 /* Optimization pass type. */
101 enum opt_pass_type {
102 GIMPLE_PASS,
103 RTL_PASS,
17653c00
JH
104 SIMPLE_IPA_PASS,
105 IPA_PASS
8ddbbcae 106 } type;
8e352cd3
BS
107 /* Terse name of the pass used as a fragment of the dump file
108 name. If the name starts with a star, no dump happens. */
6de9cd9a
DN
109 const char *name;
110
111 /* If non-null, this pass and all sub-passes are executed only if
112 the function returns true. */
113 bool (*gate) (void);
114
115 /* This is the code to run. If null, then there should be sub-passes
c2924966
DB
116 otherwise this pass does nothing. The return value contains
117 TODOs to execute in addition to those in TODO_flags_finish. */
118 unsigned int (*execute) (void);
6de9cd9a
DN
119
120 /* A list of sub-passes to run, dependent on gate predicate. */
8ddbbcae 121 struct opt_pass *sub;
6de9cd9a
DN
122
123 /* Next in the list of passes to run, independent of gate predicate. */
8ddbbcae 124 struct opt_pass *next;
6de9cd9a
DN
125
126 /* Static pass number, used as a fragment of the dump file name. */
b3fade83 127 int static_pass_number;
6de9cd9a
DN
128
129 /* The timevar id associated with this pass. */
130 /* ??? Ideally would be dynamically assigned. */
131 unsigned int tv_id;
132
133 /* Sets of properties input and output from this pass. */
134 unsigned int properties_required;
135 unsigned int properties_provided;
136 unsigned int properties_destroyed;
137
138 /* Flags indicating common sets things to do before and after. */
139 unsigned int todo_flags_start;
140 unsigned int todo_flags_finish;
8ddbbcae
JH
141};
142
17653c00 143/* Description of GIMPLE pass. */
8ddbbcae
JH
144struct gimple_opt_pass
145{
146 struct opt_pass pass;
147};
9f8628ba 148
fa10beec 149/* Description of RTL pass. */
8ddbbcae
JH
150struct rtl_opt_pass
151{
152 struct opt_pass pass;
153};
154
17653c00
JH
155struct varpool_node;
156struct cgraph_node;
157
158/* Description of IPA pass with generate summary, write, execute, read and
159 transform stages. */
160struct ipa_opt_pass
161{
162 struct opt_pass pass;
163
1920df6c
KZ
164 /* IPA passes can analyze function body and variable initializers
165 using this hook and produce summary. */
166 void (*generate_summary) (void);
167
168 /* This hook is used to serialize IPA summaries on disk. */
169 void (*write_summary) (void);
17653c00 170
1920df6c
KZ
171 /* For most ipa passes, the information can only be deserialized in
172 one chunk. However, function bodies are read function at a time
173 as needed so both calls are necessary. */
174 void (*read_summary) (void);
175 void (*function_read_summary) (struct cgraph_node *);
176
17653c00
JH
177 /* Results of interprocedural propagation of an IPA pass is applied to
178 function body via this hook. */
179 unsigned int function_transform_todo_flags_start;
180 unsigned int (*function_transform) (struct cgraph_node *);
181 void (*variable_transform) (struct varpool_node *);
17653c00
JH
182};
183
184/* Description of simple IPA pass. Simple IPA passes have just one execute
8ddbbcae
JH
185 hook. */
186struct simple_ipa_opt_pass
187{
188 struct opt_pass pass;
9f8628ba
PB
189};
190
191/* Define a tree dump switch. */
192struct dump_file_info
193{
194 const char *suffix; /* suffix to give output file. */
195 const char *swtch; /* command line switch */
f46fe224 196 const char *glob; /* command line glob */
9f8628ba
PB
197 int flags; /* user flags */
198 int state; /* state of play */
199 int num; /* dump file number */
6de9cd9a
DN
200};
201
202/* Pass properties. */
203#define PROP_gimple_any (1 << 0) /* entire gimple grammar */
204#define PROP_gimple_lcf (1 << 1) /* lowered control flow */
205#define PROP_gimple_leh (1 << 2) /* lowered eh */
206#define PROP_cfg (1 << 3)
207#define PROP_referenced_vars (1 << 4)
7b0e48fb
DB
208#define PROP_ssa (1 << 5)
209#define PROP_no_crit_edges (1 << 6)
210#define PROP_rtl (1 << 7)
211#define PROP_alias (1 << 8)
212#define PROP_gimple_lomp (1 << 9) /* lowered OpenMP directives */
2f8e398b
PB
213
214#define PROP_trees \
bbbe4e7b 215 (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
6de9cd9a
DN
216
217/* To-do flags. */
0bca51f0
DN
218#define TODO_dump_func (1 << 0)
219#define TODO_ggc_collect (1 << 1)
220#define TODO_verify_ssa (1 << 2)
221#define TODO_verify_flow (1 << 3)
222#define TODO_verify_stmts (1 << 4)
223#define TODO_cleanup_cfg (1 << 5)
224#define TODO_verify_loops (1 << 6)
b4861090 225#define TODO_dump_cgraph (1 << 7)
f4b3ca72 226#define TODO_remove_functions (1 << 8)
45a80bb9 227#define TODO_rebuild_frequencies (1 << 9)
a36b8a1e 228#define TODO_verify_rtl_sharing (1 << 10)
0bca51f0
DN
229
230/* To-do flags for calls to update_ssa. */
231
232/* Update the SSA form inserting PHI nodes for newly exposed symbols
233 and virtual names marked for updating. When updating real names,
234 only insert PHI nodes for a real name O_j in blocks reached by all
235 the new and old definitions for O_j. If the iterated dominance
236 frontier for O_j is not pruned, we may end up inserting PHI nodes
237 in blocks that have one or more edges with no incoming definition
238 for O_j. This would lead to uninitialized warnings for O_j's
239 symbol. */
a36b8a1e 240#define TODO_update_ssa (1 << 11)
0bca51f0
DN
241
242/* Update the SSA form without inserting any new PHI nodes at all.
243 This is used by passes that have either inserted all the PHI nodes
244 themselves or passes that need only to patch use-def and def-def
245 chains for virtuals (e.g., DCE). */
a36b8a1e 246#define TODO_update_ssa_no_phi (1 << 12)
0bca51f0 247
0fa2e4df 248/* Insert PHI nodes everywhere they are needed. No pruning of the
0bca51f0
DN
249 IDF is done. This is used by passes that need the PHI nodes for
250 O_j even if it means that some arguments will come from the default
251 definition of O_j's symbol (e.g., pass_linear_transform).
252
253 WARNING: If you need to use this flag, chances are that your pass
254 may be doing something wrong. Inserting PHI nodes for an old name
255 where not all edges carry a new replacement may lead to silent
256 codegen errors or spurious uninitialized warnings. */
a36b8a1e 257#define TODO_update_ssa_full_phi (1 << 13)
0bca51f0
DN
258
259/* Passes that update the SSA form on their own may want to delegate
260 the updating of virtual names to the generic updater. Since FUD
261 chains are easier to maintain, this simplifies the work they need
262 to do. NOTE: If this flag is used, any OLD->NEW mappings for real
263 names are explicitly destroyed and only the symbols marked for
264 renaming are processed. */
a36b8a1e 265#define TODO_update_ssa_only_virtuals (1 << 14)
0bca51f0 266
3f519b35 267/* Some passes leave unused local variables that can be removed from
cb91fab0
JH
268 cfun->local_decls. This reduces the size of dump files
269 and the memory footprint for VAR_DECLs. */
a36b8a1e 270#define TODO_remove_unused_locals (1 << 15)
3f519b35 271
bbbe4e7b
PB
272/* Internally used for the first in a sequence of passes. It is set
273 for the passes that are handed to register_dump_files. */
a36b8a1e 274#define TODO_set_props (1 << 16)
bbbe4e7b 275
6fb5fa3c
DB
276/* Call df_finish at the end of the pass. This is done after all of
277 the dumpers have been allowed to run so that they have access to
278 the instance before it is destroyed. */
a36b8a1e 279#define TODO_df_finish (1 << 17)
6fb5fa3c 280
0d475361 281/* Call df_verify at the end of the pass if checking is enabled. */
a36b8a1e 282#define TODO_df_verify (1 << 18)
0d475361 283
b02b9b53 284/* Internally used for the first instance of a pass. */
a36b8a1e 285#define TODO_mark_first_instance (1 << 19)
b02b9b53 286
7b0e48fb 287/* Rebuild aliasing info. */
a36b8a1e 288#define TODO_rebuild_alias (1 << 20)
7b0e48fb 289
0bca51f0
DN
290#define TODO_update_ssa_any \
291 (TODO_update_ssa \
292 | TODO_update_ssa_no_phi \
293 | TODO_update_ssa_full_phi \
294 | TODO_update_ssa_only_virtuals)
6de9cd9a
DN
295
296#define TODO_verify_all \
297 (TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts)
298
e21aff8a 299extern void tree_lowering_passes (tree decl);
b4861090 300
8ddbbcae
JH
301extern struct gimple_opt_pass pass_mudflap_1;
302extern struct gimple_opt_pass pass_mudflap_2;
303extern struct gimple_opt_pass pass_remove_useless_stmts;
304extern struct gimple_opt_pass pass_lower_cf;
305extern struct gimple_opt_pass pass_refactor_eh;
306extern struct gimple_opt_pass pass_lower_eh;
307extern struct gimple_opt_pass pass_build_cfg;
308extern struct gimple_opt_pass pass_tree_profile;
309extern struct gimple_opt_pass pass_early_tree_profile;
310extern struct gimple_opt_pass pass_cleanup_cfg;
311extern struct gimple_opt_pass pass_referenced_vars;
312extern struct gimple_opt_pass pass_sra;
313extern struct gimple_opt_pass pass_sra_early;
314extern struct gimple_opt_pass pass_tail_recursion;
315extern struct gimple_opt_pass pass_tail_calls;
316extern struct gimple_opt_pass pass_tree_loop;
317extern struct gimple_opt_pass pass_tree_loop_init;
318extern struct gimple_opt_pass pass_lim;
319extern struct gimple_opt_pass pass_tree_unswitch;
320extern struct gimple_opt_pass pass_predcom;
321extern struct gimple_opt_pass pass_iv_canon;
322extern struct gimple_opt_pass pass_scev_cprop;
323extern struct gimple_opt_pass pass_empty_loop;
324extern struct gimple_opt_pass pass_record_bounds;
f8bf9252 325extern struct gimple_opt_pass pass_graphite_transforms;
8ddbbcae
JH
326extern struct gimple_opt_pass pass_if_conversion;
327extern struct gimple_opt_pass pass_loop_distribution;
328extern struct gimple_opt_pass pass_vectorize;
329extern struct gimple_opt_pass pass_complete_unroll;
d6e840ee 330extern struct gimple_opt_pass pass_complete_unrolli;
8ddbbcae
JH
331extern struct gimple_opt_pass pass_parallelize_loops;
332extern struct gimple_opt_pass pass_loop_prefetch;
333extern struct gimple_opt_pass pass_iv_optimize;
334extern struct gimple_opt_pass pass_tree_loop_done;
335extern struct gimple_opt_pass pass_ch;
336extern struct gimple_opt_pass pass_ccp;
337extern struct gimple_opt_pass pass_phi_only_cprop;
338extern struct gimple_opt_pass pass_build_ssa;
339extern struct gimple_opt_pass pass_del_ssa;
340extern struct gimple_opt_pass pass_build_alias;
341extern struct gimple_opt_pass pass_dominator;
342extern struct gimple_opt_pass pass_dce;
343extern struct gimple_opt_pass pass_dce_loop;
344extern struct gimple_opt_pass pass_cd_dce;
c2699190 345extern struct gimple_opt_pass pass_call_cdce;
8ddbbcae
JH
346extern struct gimple_opt_pass pass_merge_phi;
347extern struct gimple_opt_pass pass_split_crit_edges;
348extern struct gimple_opt_pass pass_pre;
349extern struct gimple_opt_pass pass_profile;
7299cb99 350extern struct gimple_opt_pass pass_strip_predict_hints;
8ddbbcae
JH
351extern struct gimple_opt_pass pass_lower_complex_O0;
352extern struct gimple_opt_pass pass_lower_complex;
353extern struct gimple_opt_pass pass_lower_vector;
354extern struct gimple_opt_pass pass_lower_vector_ssa;
355extern struct gimple_opt_pass pass_lower_omp;
356extern struct gimple_opt_pass pass_expand_omp;
357extern struct gimple_opt_pass pass_expand_omp_ssa;
358extern struct gimple_opt_pass pass_object_sizes;
359extern struct gimple_opt_pass pass_fold_builtins;
360extern struct gimple_opt_pass pass_stdarg;
361extern struct gimple_opt_pass pass_early_warn_uninitialized;
362extern struct gimple_opt_pass pass_late_warn_uninitialized;
363extern struct gimple_opt_pass pass_cse_reciprocals;
364extern struct gimple_opt_pass pass_cse_sincos;
365extern struct gimple_opt_pass pass_convert_to_rsqrt;
366extern struct gimple_opt_pass pass_warn_function_return;
367extern struct gimple_opt_pass pass_warn_function_noreturn;
368extern struct gimple_opt_pass pass_cselim;
369extern struct gimple_opt_pass pass_phiopt;
370extern struct gimple_opt_pass pass_forwprop;
371extern struct gimple_opt_pass pass_phiprop;
372extern struct gimple_opt_pass pass_tree_ifcombine;
373extern struct gimple_opt_pass pass_dse;
374extern struct gimple_opt_pass pass_simple_dse;
375extern struct gimple_opt_pass pass_nrv;
376extern struct gimple_opt_pass pass_mark_used_blocks;
377extern struct gimple_opt_pass pass_rename_ssa_copies;
8ddbbcae
JH
378extern struct gimple_opt_pass pass_rest_of_compilation;
379extern struct gimple_opt_pass pass_sink_code;
380extern struct gimple_opt_pass pass_fre;
381extern struct gimple_opt_pass pass_linear_transform;
382extern struct gimple_opt_pass pass_check_data_deps;
383extern struct gimple_opt_pass pass_copy_prop;
8ddbbcae 384extern struct gimple_opt_pass pass_vrp;
8ddbbcae
JH
385extern struct gimple_opt_pass pass_uncprop;
386extern struct gimple_opt_pass pass_return_slot;
387extern struct gimple_opt_pass pass_reassoc;
388extern struct gimple_opt_pass pass_rebuild_cgraph_edges;
389extern struct gimple_opt_pass pass_build_cgraph_edges;
390extern struct gimple_opt_pass pass_reset_cc_flags;
6de9cd9a 391
012309e6 392/* IPA Passes */
17653c00 393extern struct ipa_opt_pass pass_ipa_inline;
129a37fc 394extern struct ipa_opt_pass pass_ipa_cp;
812dbce5
JH
395extern struct ipa_opt_pass pass_ipa_reference;
396extern struct ipa_opt_pass pass_ipa_pure_const;
17653c00 397
8ddbbcae 398extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg;
8ddbbcae 399extern struct simple_ipa_opt_pass pass_ipa_early_inline;
8ddbbcae
JH
400extern struct simple_ipa_opt_pass pass_ipa_type_escape;
401extern struct simple_ipa_opt_pass pass_ipa_pta;
402extern struct simple_ipa_opt_pass pass_ipa_struct_reorg;
403extern struct simple_ipa_opt_pass pass_early_local_passes;
404extern struct simple_ipa_opt_pass pass_ipa_increase_alignment;
405extern struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility;
406
407extern struct gimple_opt_pass pass_all_optimizations;
408extern struct gimple_opt_pass pass_cleanup_cfg_post_optimizing;
409extern struct gimple_opt_pass pass_free_cfg_annotations;
410extern struct gimple_opt_pass pass_free_datastructures;
411extern struct gimple_opt_pass pass_init_datastructures;
412extern struct gimple_opt_pass pass_fixup_cfg;
413
e3b5732b 414extern struct rtl_opt_pass pass_expand;
8ddbbcae
JH
415extern struct rtl_opt_pass pass_init_function;
416extern struct rtl_opt_pass pass_jump;
417extern struct rtl_opt_pass pass_rtl_eh;
418extern struct rtl_opt_pass pass_initial_value_sets;
419extern struct rtl_opt_pass pass_unshare_all_rtl;
420extern struct rtl_opt_pass pass_instantiate_virtual_regs;
421extern struct rtl_opt_pass pass_rtl_fwprop;
422extern struct rtl_opt_pass pass_rtl_fwprop_addr;
423extern struct rtl_opt_pass pass_jump2;
424extern struct rtl_opt_pass pass_lower_subreg;
425extern struct rtl_opt_pass pass_cse;
426extern struct rtl_opt_pass pass_fast_rtl_dce;
427extern struct rtl_opt_pass pass_ud_rtl_dce;
428extern struct rtl_opt_pass pass_rtl_dce;
429extern struct rtl_opt_pass pass_rtl_dse1;
430extern struct rtl_opt_pass pass_rtl_dse2;
431extern struct rtl_opt_pass pass_rtl_dse3;
432extern struct rtl_opt_pass pass_gcse;
433extern struct rtl_opt_pass pass_jump_bypass;
434extern struct rtl_opt_pass pass_profiling;
435extern struct rtl_opt_pass pass_rtl_ifcvt;
436extern struct gimple_opt_pass pass_tracer;
437
438extern struct rtl_opt_pass pass_into_cfg_layout_mode;
439extern struct rtl_opt_pass pass_outof_cfg_layout_mode;
440
441extern struct rtl_opt_pass pass_loop2;
442extern struct rtl_opt_pass pass_rtl_loop_init;
443extern struct rtl_opt_pass pass_rtl_move_loop_invariants;
444extern struct rtl_opt_pass pass_rtl_unswitch;
445extern struct rtl_opt_pass pass_rtl_unroll_and_peel_loops;
446extern struct rtl_opt_pass pass_rtl_doloop;
447extern struct rtl_opt_pass pass_rtl_loop_done;
448
449extern struct rtl_opt_pass pass_web;
450extern struct rtl_opt_pass pass_cse2;
451extern struct rtl_opt_pass pass_df_initialize_opt;
452extern struct rtl_opt_pass pass_df_initialize_no_opt;
453extern struct rtl_opt_pass pass_regclass_init;
454extern struct rtl_opt_pass pass_subregs_of_mode_init;
455extern struct rtl_opt_pass pass_subregs_of_mode_finish;
456extern struct rtl_opt_pass pass_inc_dec;
457extern struct rtl_opt_pass pass_stack_ptr_mod;
458extern struct rtl_opt_pass pass_initialize_regs;
459extern struct rtl_opt_pass pass_combine;
460extern struct rtl_opt_pass pass_if_after_combine;
461extern struct rtl_opt_pass pass_partition_blocks;
462extern struct rtl_opt_pass pass_match_asm_constraints;
463extern struct rtl_opt_pass pass_regmove;
464extern struct rtl_opt_pass pass_split_all_insns;
cc806ac1 465extern struct rtl_opt_pass pass_fast_rtl_byte_dce;
8ddbbcae
JH
466extern struct rtl_opt_pass pass_lower_subreg2;
467extern struct rtl_opt_pass pass_mode_switching;
468extern struct rtl_opt_pass pass_see;
469extern struct rtl_opt_pass pass_sms;
470extern struct rtl_opt_pass pass_sched;
471extern struct rtl_opt_pass pass_local_alloc;
472extern struct rtl_opt_pass pass_global_alloc;
058e97ec 473extern struct rtl_opt_pass pass_ira;
8ddbbcae
JH
474extern struct rtl_opt_pass pass_postreload;
475extern struct rtl_opt_pass pass_clean_state;
476extern struct rtl_opt_pass pass_branch_prob;
477extern struct rtl_opt_pass pass_value_profile_transformations;
478extern struct rtl_opt_pass pass_postreload_cse;
479extern struct rtl_opt_pass pass_gcse2;
480extern struct rtl_opt_pass pass_split_after_reload;
481extern struct rtl_opt_pass pass_branch_target_load_optimize1;
482extern struct rtl_opt_pass pass_thread_prologue_and_epilogue;
483extern struct rtl_opt_pass pass_stack_adjustments;
484extern struct rtl_opt_pass pass_peephole2;
485extern struct rtl_opt_pass pass_if_after_reload;
486extern struct rtl_opt_pass pass_regrename;
487extern struct rtl_opt_pass pass_cprop_hardreg;
488extern struct rtl_opt_pass pass_reorder_blocks;
489extern struct rtl_opt_pass pass_branch_target_load_optimize2;
490extern struct rtl_opt_pass pass_leaf_regs;
491extern struct rtl_opt_pass pass_split_before_sched2;
492extern struct rtl_opt_pass pass_sched2;
493extern struct rtl_opt_pass pass_stack_regs;
494extern struct rtl_opt_pass pass_stack_regs_run;
495extern struct rtl_opt_pass pass_df_finish;
496extern struct rtl_opt_pass pass_compute_alignments;
497extern struct rtl_opt_pass pass_duplicate_computed_gotos;
498extern struct rtl_opt_pass pass_variable_tracking;
499extern struct rtl_opt_pass pass_free_cfg;
500extern struct rtl_opt_pass pass_machine_reorg;
501extern struct rtl_opt_pass pass_cleanup_barriers;
502extern struct rtl_opt_pass pass_delay_slots;
503extern struct rtl_opt_pass pass_split_for_shorten_branches;
504extern struct rtl_opt_pass pass_split_before_regstack;
505extern struct rtl_opt_pass pass_convert_to_eh_region_ranges;
506extern struct rtl_opt_pass pass_shorten_branches;
507extern struct rtl_opt_pass pass_set_nothrow_function_flags;
508extern struct rtl_opt_pass pass_final;
509extern struct rtl_opt_pass pass_rtl_seqabstr;
510extern struct gimple_opt_pass pass_release_ssa_names;
511extern struct gimple_opt_pass pass_early_inline;
512extern struct gimple_opt_pass pass_inline_parameters;
8ddbbcae
JH
513extern struct gimple_opt_pass pass_all_early_optimizations;
514extern struct gimple_opt_pass pass_update_address_taken;
b6e99746 515extern struct gimple_opt_pass pass_convert_switch;
ef330312
PB
516
517/* The root of the compilation pass tree, once constructed. */
8ddbbcae 518extern struct opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes;
ef330312 519
9fe0cb7d
RG
520/* Current optimization pass. */
521extern struct opt_pass *current_pass;
522
523extern struct opt_pass * get_pass_for_id (int);
8ddbbcae
JH
524extern void execute_pass_list (struct opt_pass *);
525extern void execute_ipa_pass_list (struct opt_pass *);
6fb5fa3c
DB
526extern void print_current_pass (FILE *);
527extern void debug_pass (void);
b4861090 528
b02b9b53
ZD
529/* Set to true if the pass is called the first time during compilation of the
530 current function. Note that using this information in the optimization
531 passes is considered not to be clean, and it should be avoided if possible.
532 This flag is currently used to prevent loops from being peeled repeatedly
533 in jump threading; it will be removed once we preserve loop structures
534 throughout the compilation -- we will be able to mark the affected loops
535 directly in jump threading, and avoid peeling them next time. */
536extern bool first_pass_instance;
537
6de9cd9a 538#endif /* GCC_TREE_PASS_H */
This page took 1.927319 seconds and 5 git commands to generate.