GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
tree-pass.h
Go to the documentation of this file.
1
/* Definitions for describing one tree-ssa optimization pass.
2
Copyright (C) 2004-2013 Free Software Foundation, Inc.
3
Contributed by Richard Henderson <rth@redhat.com>
4
5
This file is part of GCC.
6
7
GCC is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
10
any later version.
11
12
GCC is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3. If not see
19
<http://www.gnu.org/licenses/>. */
20
21
22
#ifndef GCC_TREE_PASS_H
23
#define GCC_TREE_PASS_H 1
24
25
#include "
timevar.h
"
26
#include "
dumpfile.h
"
27
28
/* Optimization pass type. */
29
enum
opt_pass_type
30
{
31
GIMPLE_PASS
,
32
RTL_PASS
,
33
SIMPLE_IPA_PASS
,
34
IPA_PASS
35
};
36
37
/* Metadata for a pass, non-varying across all instances of a pass. */
38
struct
pass_data
39
{
40
/* Optimization pass type. */
41
enum
opt_pass_type
type
;
42
43
/* Terse name of the pass used as a fragment of the dump file
44
name. If the name starts with a star, no dump happens. */
45
const
char
*
name
;
46
47
/* The -fopt-info optimization group flags as defined in dumpfile.h. */
48
unsigned
int
optinfo_flags
;
49
50
/* If true, this pass has its own implementation of the opt_pass::gate
51
method. */
52
bool
has_gate
;
53
54
/* If true, this pass has its own implementation of the opt_pass::execute
55
method. */
56
bool
has_execute
;
57
58
/* The timevar id associated with this pass. */
59
/* ??? Ideally would be dynamically assigned. */
60
timevar_id_t
tv_id
;
61
62
/* Sets of properties input and output from this pass. */
63
unsigned
int
properties_required
;
64
unsigned
int
properties_provided
;
65
unsigned
int
properties_destroyed
;
66
67
/* Flags indicating common sets things to do before and after. */
68
unsigned
int
todo_flags_start
;
69
unsigned
int
todo_flags_finish
;
70
};
71
72
namespace
gcc
73
{
74
class
context;
75
}
// namespace gcc
76
77
/* An instance of a pass. This is also "pass_data" to minimize the
78
changes in existing code. */
79
class
opt_pass
:
public
pass_data
80
{
81
public
:
82
virtual
~opt_pass
() { }
83
84
/* Create a copy of this pass.
85
86
Passes that can have multiple instances must provide their own
87
implementation of this, to ensure that any sharing of state between
88
this instance and the copy is "wired up" correctly.
89
90
The default implementation prints an error message and aborts. */
91
virtual
opt_pass
*
clone
();
92
93
/* If has_gate is set, this pass and all sub-passes are executed only if
94
the function returns true. */
95
virtual
bool
gate
();
96
97
/* This is the code to run. If has_execute is false, then there should
98
be sub-passes otherwise this pass does nothing.
99
The return value contains TODOs to execute in addition to those in
100
TODO_flags_finish. */
101
virtual
unsigned
int
execute
();
102
103
protected
:
104
opt_pass
(
const
pass_data
&,
gcc::context
*);
105
106
public
:
107
/* A list of sub-passes to run, dependent on gate predicate. */
108
struct
opt_pass
*
sub
;
109
110
/* Next in the list of passes to run, independent of gate predicate. */
111
struct
opt_pass
*
next
;
112
113
/* Static pass number, used as a fragment of the dump file name. */
114
int
static_pass_number
;
115
116
protected
:
117
gcc::context
*
ctxt_
;
118
};
119
120
/* Description of GIMPLE pass. */
121
class
gimple_opt_pass
:
public
opt_pass
122
{
123
protected
:
124
gimple_opt_pass
(
const
pass_data
&
data
,
gcc::context
*ctxt)
125
:
opt_pass
(data, ctxt)
126
{
127
}
128
};
129
130
/* Description of RTL pass. */
131
class
rtl_opt_pass
:
public
opt_pass
132
{
133
protected
:
134
rtl_opt_pass
(
const
pass_data
&
data
,
gcc::context
*ctxt)
135
:
opt_pass
(data, ctxt)
136
{
137
}
138
};
139
140
struct
varpool_node
;
141
struct
cgraph_node
;
142
struct
lto_symtab_encoder_d
;
143
144
/* Description of IPA pass with generate summary, write, execute, read and
145
transform stages. */
146
class
ipa_opt_pass_d
:
public
opt_pass
147
{
148
public
:
149
/* IPA passes can analyze function body and variable initializers
150
using this hook and produce summary. */
151
void (*
generate_summary
) (void);
152
153
/* This hook is used to serialize IPA summaries on disk. */
154
void (*
write_summary
) (void);
155
156
/* This hook is used to deserialize IPA summaries from disk. */
157
void (*
read_summary
) (void);
158
159
/* This hook is used to serialize IPA optimization summaries on disk. */
160
void (*
write_optimization_summary
) (void);
161
162
/* This hook is used to deserialize IPA summaries from disk. */
163
void (*
read_optimization_summary
) (void);
164
165
/* Hook to convert gimple stmt uids into true gimple statements. The second
166
parameter is an array of statements indexed by their uid. */
167
void (*
stmt_fixup
) (
struct
cgraph_node
*,
gimple
*);
168
169
/* Results of interprocedural propagation of an IPA pass is applied to
170
function body via this hook. */
171
unsigned
int
function_transform_todo_flags_start
;
172
unsigned
int (*
function_transform
) (
struct
cgraph_node
*);
173
void (*
variable_transform
) (
struct
varpool_node
*);
174
175
protected
:
176
ipa_opt_pass_d
(
const
pass_data
&
data
,
gcc::context
*ctxt,
177
void
(*
generate_summary
) (
void
),
178
void
(*
write_summary
) (
void
),
179
void
(*
read_summary
) (
void
),
180
void
(*
write_optimization_summary
) (
void
),
181
void
(*
read_optimization_summary
) (
void
),
182
void
(*
stmt_fixup
) (
struct
cgraph_node
*,
gimple
*),
183
unsigned
int
function_transform_todo_flags_start
,
184
unsigned
int
(*
function_transform
) (
struct
cgraph_node
*),
185
void
(*
variable_transform
) (
struct
varpool_node
*))
186
:
opt_pass
(data, ctxt),
187
generate_summary
(
generate_summary
),
188
write_summary
(
write_summary
),
189
read_summary
(
read_summary
),
190
write_optimization_summary
(
write_optimization_summary
),
191
read_optimization_summary
(
read_optimization_summary
),
192
stmt_fixup
(
stmt_fixup
),
193
function_transform_todo_flags_start(
194
function_transform_todo_flags_start),
195
function_transform
(
function_transform
),
196
variable_transform
(
variable_transform
)
197
{
198
}
199
};
200
201
/* Description of simple IPA pass. Simple IPA passes have just one execute
202
hook. */
203
class
simple_ipa_opt_pass
:
public
opt_pass
204
{
205
protected
:
206
simple_ipa_opt_pass
(
const
pass_data
& data,
gcc::context
*ctxt)
207
:
opt_pass
(data, ctxt)
208
{
209
}
210
};
211
212
/* Pass properties. */
213
#define PROP_gimple_any (1 << 0)
/* entire gimple grammar */
214
#define PROP_gimple_lcf (1 << 1)
/* lowered control flow */
215
#define PROP_gimple_leh (1 << 2)
/* lowered eh */
216
#define PROP_cfg (1 << 3)
217
#define PROP_ssa (1 << 5)
218
#define PROP_no_crit_edges (1 << 6)
219
#define PROP_rtl (1 << 7)
220
#define PROP_gimple_lomp (1 << 8)
/* lowered OpenMP directives */
221
#define PROP_cfglayout (1 << 9)
/* cfglayout mode on RTL */
222
#define PROP_gimple_lcx (1 << 10)
/* lowered complex */
223
#define PROP_loops (1 << 11)
/* preserve loop structures */
224
#define PROP_gimple_lvec (1 << 12)
/* lowered vector */
225
226
#define PROP_trees \
227
(PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
228
229
/* To-do flags. */
230
#define TODO_do_not_ggc_collect (1 << 1)
231
#define TODO_verify_ssa (1 << 2)
232
#define TODO_verify_flow (1 << 3)
233
#define TODO_verify_stmts (1 << 4)
234
#define TODO_cleanup_cfg (1 << 5)
235
#define TODO_dump_symtab (1 << 7)
236
#define TODO_remove_functions (1 << 8)
237
#define TODO_rebuild_frequencies (1 << 9)
238
#define TODO_verify_rtl_sharing (1 << 10)
239
240
/* To-do flags for calls to update_ssa. */
241
242
/* Update the SSA form inserting PHI nodes for newly exposed symbols
243
and virtual names marked for updating. When updating real names,
244
only insert PHI nodes for a real name O_j in blocks reached by all
245
the new and old definitions for O_j. If the iterated dominance
246
frontier for O_j is not pruned, we may end up inserting PHI nodes
247
in blocks that have one or more edges with no incoming definition
248
for O_j. This would lead to uninitialized warnings for O_j's
249
symbol. */
250
#define TODO_update_ssa (1 << 11)
251
252
/* Update the SSA form without inserting any new PHI nodes at all.
253
This is used by passes that have either inserted all the PHI nodes
254
themselves or passes that need only to patch use-def and def-def
255
chains for virtuals (e.g., DCE). */
256
#define TODO_update_ssa_no_phi (1 << 12)
257
258
/* Insert PHI nodes everywhere they are needed. No pruning of the
259
IDF is done. This is used by passes that need the PHI nodes for
260
O_j even if it means that some arguments will come from the default
261
definition of O_j's symbol.
262
263
WARNING: If you need to use this flag, chances are that your pass
264
may be doing something wrong. Inserting PHI nodes for an old name
265
where not all edges carry a new replacement may lead to silent
266
codegen errors or spurious uninitialized warnings. */
267
#define TODO_update_ssa_full_phi (1 << 13)
268
269
/* Passes that update the SSA form on their own may want to delegate
270
the updating of virtual names to the generic updater. Since FUD
271
chains are easier to maintain, this simplifies the work they need
272
to do. NOTE: If this flag is used, any OLD->NEW mappings for real
273
names are explicitly destroyed and only the symbols marked for
274
renaming are processed. */
275
#define TODO_update_ssa_only_virtuals (1 << 14)
276
277
/* Some passes leave unused local variables that can be removed from
278
cfun->local_decls. This reduces the size of dump files
279
and the memory footprint for VAR_DECLs. */
280
#define TODO_remove_unused_locals (1 << 15)
281
282
/* Call df_finish at the end of the pass. This is done after all of
283
the dumpers have been allowed to run so that they have access to
284
the instance before it is destroyed. */
285
#define TODO_df_finish (1 << 17)
286
287
/* Call df_verify at the end of the pass if checking is enabled. */
288
#define TODO_df_verify (1 << 18)
289
290
/* Internally used for the first instance of a pass. */
291
#define TODO_mark_first_instance (1 << 19)
292
293
/* Rebuild aliasing info. */
294
#define TODO_rebuild_alias (1 << 20)
295
296
/* Rebuild the addressable-vars bitmap and do register promotion. */
297
#define TODO_update_address_taken (1 << 21)
298
299
/* Rebuild the callgraph edges. */
300
#define TODO_rebuild_cgraph_edges (1 << 22)
301
302
/* Internally used in execute_function_todo(). */
303
#define TODO_update_ssa_any \
304
(TODO_update_ssa \
305
| TODO_update_ssa_no_phi \
306
| TODO_update_ssa_full_phi \
307
| TODO_update_ssa_only_virtuals)
308
309
#define TODO_verify_all \
310
(TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts)
311
312
313
/* Register pass info. */
314
315
enum
pass_positioning_ops
316
{
317
PASS_POS_INSERT_AFTER
,
/* Insert after the reference pass. */
318
PASS_POS_INSERT_BEFORE
,
/* Insert before the reference pass. */
319
PASS_POS_REPLACE
/* Replace the reference pass. */
320
};
321
322
struct
register_pass_info
323
{
324
struct
opt_pass
*
pass
;
/* New pass to register. */
325
const
char
*
reference_pass_name
;
/* Name of the reference pass for hooking
326
up the new pass. */
327
int
ref_pass_instance_number
;
/* Insert the pass at the specified
328
instance number of the reference pass.
329
Do it for every instance if it is 0. */
330
enum
pass_positioning_ops
pos_op
;
/* how to insert the new pass. */
331
};
332
333
extern
gimple_opt_pass
*
make_pass_mudflap_1
(
gcc::context
*ctxt);
334
extern
gimple_opt_pass
*
make_pass_mudflap_2
(
gcc::context
*ctxt);
335
extern
gimple_opt_pass
*
make_pass_asan
(
gcc::context
*ctxt);
336
extern
gimple_opt_pass
*
make_pass_asan_O0
(
gcc::context
*ctxt);
337
extern
gimple_opt_pass
*
make_pass_tsan
(
gcc::context
*ctxt);
338
extern
gimple_opt_pass
*
make_pass_tsan_O0
(
gcc::context
*ctxt);
339
extern
gimple_opt_pass
*
make_pass_lower_cf
(
gcc::context
*ctxt);
340
extern
gimple_opt_pass
*
make_pass_refactor_eh
(
gcc::context
*ctxt);
341
extern
gimple_opt_pass
*
make_pass_lower_eh
(
gcc::context
*ctxt);
342
extern
gimple_opt_pass
*
make_pass_lower_eh_dispatch
(
gcc::context
*ctxt);
343
extern
gimple_opt_pass
*
make_pass_lower_resx
(
gcc::context
*ctxt);
344
extern
gimple_opt_pass
*
make_pass_build_cfg
(
gcc::context
*ctxt);
345
extern
gimple_opt_pass
*
make_pass_early_tree_profile
(
gcc::context
*ctxt);
346
extern
gimple_opt_pass
*
make_pass_cleanup_eh
(
gcc::context
*ctxt);
347
extern
gimple_opt_pass
*
make_pass_sra
(
gcc::context
*ctxt);
348
extern
gimple_opt_pass
*
make_pass_sra_early
(
gcc::context
*ctxt);
349
extern
gimple_opt_pass
*
make_pass_early_ipa_sra
(
gcc::context
*ctxt);
350
extern
gimple_opt_pass
*
make_pass_tail_recursion
(
gcc::context
*ctxt);
351
extern
gimple_opt_pass
*
make_pass_tail_calls
(
gcc::context
*ctxt);
352
extern
gimple_opt_pass
*
make_pass_tree_loop
(
gcc::context
*ctxt);
353
extern
gimple_opt_pass
*
make_pass_tree_loop_init
(
gcc::context
*ctxt);
354
extern
gimple_opt_pass
*
make_pass_lim
(
gcc::context
*ctxt);
355
extern
gimple_opt_pass
*
make_pass_tree_unswitch
(
gcc::context
*ctxt);
356
extern
gimple_opt_pass
*
make_pass_predcom
(
gcc::context
*ctxt);
357
extern
gimple_opt_pass
*
make_pass_iv_canon
(
gcc::context
*ctxt);
358
extern
gimple_opt_pass
*
make_pass_scev_cprop
(
gcc::context
*ctxt);
359
extern
gimple_opt_pass
*
make_pass_empty_loop
(
gcc::context
*ctxt);
360
extern
gimple_opt_pass
*
make_pass_record_bounds
(
gcc::context
*ctxt);
361
extern
gimple_opt_pass
*
make_pass_graphite
(
gcc::context
*ctxt);
362
extern
gimple_opt_pass
*
make_pass_graphite_transforms
(
gcc::context
*ctxt);
363
extern
gimple_opt_pass
*
make_pass_if_conversion
(
gcc::context
*ctxt);
364
extern
gimple_opt_pass
*
make_pass_loop_distribution
(
gcc::context
*ctxt);
365
extern
gimple_opt_pass
*
make_pass_vectorize
(
gcc::context
*ctxt);
366
extern
gimple_opt_pass
*
make_pass_slp_vectorize
(
gcc::context
*ctxt);
367
extern
gimple_opt_pass
*
make_pass_complete_unroll
(
gcc::context
*ctxt);
368
extern
gimple_opt_pass
*
make_pass_complete_unrolli
(
gcc::context
*ctxt);
369
extern
gimple_opt_pass
*
make_pass_parallelize_loops
(
gcc::context
*ctxt);
370
extern
gimple_opt_pass
*
make_pass_loop_prefetch
(
gcc::context
*ctxt);
371
extern
gimple_opt_pass
*
make_pass_iv_optimize
(
gcc::context
*ctxt);
372
extern
gimple_opt_pass
*
make_pass_tree_loop_done
(
gcc::context
*ctxt);
373
extern
gimple_opt_pass
*
make_pass_ch
(
gcc::context
*ctxt);
374
extern
gimple_opt_pass
*
make_pass_ccp
(
gcc::context
*ctxt);
375
extern
gimple_opt_pass
*
make_pass_phi_only_cprop
(
gcc::context
*ctxt);
376
extern
gimple_opt_pass
*
make_pass_build_ssa
(
gcc::context
*ctxt);
377
extern
gimple_opt_pass
*
make_pass_build_alias
(
gcc::context
*ctxt);
378
extern
gimple_opt_pass
*
make_pass_build_ealias
(
gcc::context
*ctxt);
379
extern
gimple_opt_pass
*
make_pass_dominator
(
gcc::context
*ctxt);
380
extern
gimple_opt_pass
*
make_pass_dce
(
gcc::context
*ctxt);
381
extern
gimple_opt_pass
*
make_pass_dce_loop
(
gcc::context
*ctxt);
382
extern
gimple_opt_pass
*
make_pass_cd_dce
(
gcc::context
*ctxt);
383
extern
gimple_opt_pass
*
make_pass_call_cdce
(
gcc::context
*ctxt);
384
extern
gimple_opt_pass
*
make_pass_merge_phi
(
gcc::context
*ctxt);
385
extern
gimple_opt_pass
*
make_pass_split_crit_edges
(
gcc::context
*ctxt);
386
extern
gimple_opt_pass
*
make_pass_pre
(
gcc::context
*ctxt);
387
extern
unsigned
int
tail_merge_optimize
(
unsigned
int
);
388
extern
gimple_opt_pass
*
make_pass_profile
(
gcc::context
*ctxt);
389
extern
gimple_opt_pass
*
make_pass_strip_predict_hints
(
gcc::context
*ctxt);
390
extern
gimple_opt_pass
*
make_pass_lower_complex_O0
(
gcc::context
*ctxt);
391
extern
gimple_opt_pass
*
make_pass_lower_complex
(
gcc::context
*ctxt);
392
extern
gimple_opt_pass
*
make_pass_lower_vector
(
gcc::context
*ctxt);
393
extern
gimple_opt_pass
*
make_pass_lower_vector_ssa
(
gcc::context
*ctxt);
394
extern
gimple_opt_pass
*
make_pass_lower_omp
(
gcc::context
*ctxt);
395
extern
gimple_opt_pass
*
make_pass_diagnose_omp_blocks
(
gcc::context
*ctxt);
396
extern
gimple_opt_pass
*
make_pass_expand_omp
(
gcc::context
*ctxt);
397
extern
gimple_opt_pass
*
make_pass_expand_omp_ssa
(
gcc::context
*ctxt);
398
extern
gimple_opt_pass
*
make_pass_object_sizes
(
gcc::context
*ctxt);
399
extern
gimple_opt_pass
*
make_pass_strlen
(
gcc::context
*ctxt);
400
extern
gimple_opt_pass
*
make_pass_fold_builtins
(
gcc::context
*ctxt);
401
extern
gimple_opt_pass
*
make_pass_stdarg
(
gcc::context
*ctxt);
402
extern
gimple_opt_pass
*
make_pass_early_warn_uninitialized
(
gcc::context
*ctxt);
403
extern
gimple_opt_pass
*
make_pass_late_warn_uninitialized
(
gcc::context
*ctxt);
404
extern
gimple_opt_pass
*
make_pass_cse_reciprocals
(
gcc::context
*ctxt);
405
extern
gimple_opt_pass
*
make_pass_cse_sincos
(
gcc::context
*ctxt);
406
extern
gimple_opt_pass
*
make_pass_optimize_bswap
(
gcc::context
*ctxt);
407
extern
gimple_opt_pass
*
make_pass_optimize_widening_mul
(
gcc::context
*ctxt);
408
extern
gimple_opt_pass
*
make_pass_warn_function_return
(
gcc::context
*ctxt);
409
extern
gimple_opt_pass
*
make_pass_warn_function_noreturn
(
gcc::context
*ctxt);
410
extern
gimple_opt_pass
*
make_pass_cselim
(
gcc::context
*ctxt);
411
extern
gimple_opt_pass
*
make_pass_phiopt
(
gcc::context
*ctxt);
412
extern
gimple_opt_pass
*
make_pass_forwprop
(
gcc::context
*ctxt);
413
extern
gimple_opt_pass
*
make_pass_phiprop
(
gcc::context
*ctxt);
414
extern
gimple_opt_pass
*
make_pass_tree_ifcombine
(
gcc::context
*ctxt);
415
extern
gimple_opt_pass
*
make_pass_dse
(
gcc::context
*ctxt);
416
extern
gimple_opt_pass
*
make_pass_nrv
(
gcc::context
*ctxt);
417
extern
gimple_opt_pass
*
make_pass_rename_ssa_copies
(
gcc::context
*ctxt);
418
extern
gimple_opt_pass
*
make_pass_sink_code
(
gcc::context
*ctxt);
419
extern
gimple_opt_pass
*
make_pass_fre
(
gcc::context
*ctxt);
420
extern
gimple_opt_pass
*
make_pass_check_data_deps
(
gcc::context
*ctxt);
421
extern
gimple_opt_pass
*
make_pass_copy_prop
(
gcc::context
*ctxt);
422
extern
gimple_opt_pass
*
make_pass_vrp
(
gcc::context
*ctxt);
423
extern
gimple_opt_pass
*
make_pass_uncprop
(
gcc::context
*ctxt);
424
extern
gimple_opt_pass
*
make_pass_return_slot
(
gcc::context
*ctxt);
425
extern
gimple_opt_pass
*
make_pass_reassoc
(
gcc::context
*ctxt);
426
extern
gimple_opt_pass
*
make_pass_rebuild_cgraph_edges
(
gcc::context
*ctxt);
427
extern
gimple_opt_pass
*
make_pass_remove_cgraph_callee_edges
(
gcc::context
428
*ctxt);
429
extern
gimple_opt_pass
*
make_pass_build_cgraph_edges
(
gcc::context
*ctxt);
430
extern
gimple_opt_pass
*
make_pass_local_pure_const
(
gcc::context
*ctxt);
431
extern
gimple_opt_pass
*
make_pass_tracer
(
gcc::context
*ctxt);
432
extern
gimple_opt_pass
*
make_pass_warn_unused_result
(
gcc::context
*ctxt);
433
extern
gimple_opt_pass
*
make_pass_diagnose_tm_blocks
(
gcc::context
*ctxt);
434
extern
gimple_opt_pass
*
make_pass_lower_tm
(
gcc::context
*ctxt);
435
extern
gimple_opt_pass
*
make_pass_tm_init
(
gcc::context
*ctxt);
436
extern
gimple_opt_pass
*
make_pass_tm_mark
(
gcc::context
*ctxt);
437
extern
gimple_opt_pass
*
make_pass_tm_memopt
(
gcc::context
*ctxt);
438
extern
gimple_opt_pass
*
make_pass_tm_edges
(
gcc::context
*ctxt);
439
extern
gimple_opt_pass
*
make_pass_split_functions
(
gcc::context
*ctxt);
440
extern
gimple_opt_pass
*
make_pass_feedback_split_functions
(
gcc::context
*ctxt);
441
extern
gimple_opt_pass
*
make_pass_strength_reduction
(
gcc::context
*ctxt);
442
extern
gimple_opt_pass
*
make_pass_vtable_verify
(
gcc::context
*ctxt);
443
444
/* IPA Passes */
445
extern
simple_ipa_opt_pass
*
make_pass_ipa_lower_emutls
(
gcc::context
*ctxt);
446
extern
simple_ipa_opt_pass
447
*
make_pass_ipa_function_and_variable_visibility
(
gcc::context
*ctxt);
448
extern
simple_ipa_opt_pass
*
make_pass_ipa_tree_profile
(
gcc::context
*ctxt);
449
450
extern
simple_ipa_opt_pass
*
make_pass_early_local_passes
(
gcc::context
*ctxt);
451
452
extern
ipa_opt_pass_d
*
make_pass_ipa_whole_program_visibility
(
gcc::context
453
*ctxt);
454
extern
ipa_opt_pass_d
*
make_pass_ipa_lto_gimple_out
(
gcc::context
*ctxt);
455
extern
simple_ipa_opt_pass
*
make_pass_ipa_increase_alignment
(
gcc::context
456
*ctxt);
457
extern
ipa_opt_pass_d
*
make_pass_ipa_inline
(
gcc::context
*ctxt);
458
extern
simple_ipa_opt_pass
*
make_pass_ipa_free_lang_data
(
gcc::context
*ctxt);
459
extern
simple_ipa_opt_pass
*
make_pass_ipa_free_inline_summary
(
gcc::context
460
*ctxt);
461
extern
ipa_opt_pass_d
*
make_pass_ipa_cp
(
gcc::context
*ctxt);
462
extern
ipa_opt_pass_d
*
make_pass_ipa_reference
(
gcc::context
*ctxt);
463
extern
ipa_opt_pass_d
*
make_pass_ipa_pure_const
(
gcc::context
*ctxt);
464
extern
simple_ipa_opt_pass
*
make_pass_ipa_pta
(
gcc::context
*ctxt);
465
extern
ipa_opt_pass_d
*
make_pass_ipa_lto_finish_out
(
gcc::context
*ctxt);
466
extern
simple_ipa_opt_pass
*
make_pass_ipa_tm
(
gcc::context
*ctxt);
467
extern
ipa_opt_pass_d
*
make_pass_ipa_profile
(
gcc::context
*ctxt);
468
extern
ipa_opt_pass_d
*
make_pass_ipa_cdtor_merge
(
gcc::context
*ctxt);
469
470
extern
gimple_opt_pass
*
make_pass_cleanup_cfg_post_optimizing
(
gcc::context
471
*ctxt);
472
extern
gimple_opt_pass
*
make_pass_init_datastructures
(
gcc::context
*ctxt);
473
extern
gimple_opt_pass
*
make_pass_fixup_cfg
(
gcc::context
*ctxt);
474
475
extern
rtl_opt_pass
*
make_pass_expand
(
gcc::context
*ctxt);
476
extern
rtl_opt_pass
*
make_pass_instantiate_virtual_regs
(
gcc::context
*ctxt);
477
extern
rtl_opt_pass
*
make_pass_rtl_fwprop
(
gcc::context
*ctxt);
478
extern
rtl_opt_pass
*
make_pass_rtl_fwprop_addr
(
gcc::context
*ctxt);
479
extern
rtl_opt_pass
*
make_pass_jump
(
gcc::context
*ctxt);
480
extern
rtl_opt_pass
*
make_pass_jump2
(
gcc::context
*ctxt);
481
extern
rtl_opt_pass
*
make_pass_lower_subreg
(
gcc::context
*ctxt);
482
extern
rtl_opt_pass
*
make_pass_cse
(
gcc::context
*ctxt);
483
extern
rtl_opt_pass
*
make_pass_fast_rtl_dce
(
gcc::context
*ctxt);
484
extern
rtl_opt_pass
*
make_pass_ud_rtl_dce
(
gcc::context
*ctxt);
485
extern
rtl_opt_pass
*
make_pass_rtl_dce
(
gcc::context
*ctxt);
486
extern
rtl_opt_pass
*
make_pass_rtl_dse1
(
gcc::context
*ctxt);
487
extern
rtl_opt_pass
*
make_pass_rtl_dse2
(
gcc::context
*ctxt);
488
extern
rtl_opt_pass
*
make_pass_rtl_dse3
(
gcc::context
*ctxt);
489
extern
rtl_opt_pass
*
make_pass_rtl_cprop
(
gcc::context
*ctxt);
490
extern
rtl_opt_pass
*
make_pass_rtl_pre
(
gcc::context
*ctxt);
491
extern
rtl_opt_pass
*
make_pass_rtl_hoist
(
gcc::context
*ctxt);
492
extern
rtl_opt_pass
*
make_pass_rtl_store_motion
(
gcc::context
*ctxt);
493
extern
rtl_opt_pass
*
make_pass_cse_after_global_opts
(
gcc::context
*ctxt);
494
extern
rtl_opt_pass
*
make_pass_rtl_ifcvt
(
gcc::context
*ctxt);
495
496
extern
rtl_opt_pass
*
make_pass_into_cfg_layout_mode
(
gcc::context
*ctxt);
497
extern
rtl_opt_pass
*
make_pass_outof_cfg_layout_mode
(
gcc::context
*ctxt);
498
499
extern
rtl_opt_pass
*
make_pass_loop2
(
gcc::context
*ctxt);
500
extern
rtl_opt_pass
*
make_pass_rtl_loop_init
(
gcc::context
*ctxt);
501
extern
rtl_opt_pass
*
make_pass_rtl_move_loop_invariants
(
gcc::context
*ctxt);
502
extern
rtl_opt_pass
*
make_pass_rtl_unswitch
(
gcc::context
*ctxt);
503
extern
rtl_opt_pass
*
make_pass_rtl_unroll_and_peel_loops
(
gcc::context
*ctxt);
504
extern
rtl_opt_pass
*
make_pass_rtl_doloop
(
gcc::context
*ctxt);
505
extern
rtl_opt_pass
*
make_pass_rtl_loop_done
(
gcc::context
*ctxt);
506
507
extern
rtl_opt_pass
*
make_pass_web
(
gcc::context
*ctxt);
508
extern
rtl_opt_pass
*
make_pass_cse2
(
gcc::context
*ctxt);
509
extern
rtl_opt_pass
*
make_pass_df_initialize_opt
(
gcc::context
*ctxt);
510
extern
rtl_opt_pass
*
make_pass_df_initialize_no_opt
(
gcc::context
*ctxt);
511
extern
rtl_opt_pass
*
make_pass_reginfo_init
(
gcc::context
*ctxt);
512
extern
rtl_opt_pass
*
make_pass_inc_dec
(
gcc::context
*ctxt);
513
extern
rtl_opt_pass
*
make_pass_stack_ptr_mod
(
gcc::context
*ctxt);
514
extern
rtl_opt_pass
*
make_pass_initialize_regs
(
gcc::context
*ctxt);
515
extern
rtl_opt_pass
*
make_pass_combine
(
gcc::context
*ctxt);
516
extern
rtl_opt_pass
*
make_pass_if_after_combine
(
gcc::context
*ctxt);
517
extern
rtl_opt_pass
*
make_pass_ree
(
gcc::context
*ctxt);
518
extern
rtl_opt_pass
*
make_pass_partition_blocks
(
gcc::context
*ctxt);
519
extern
rtl_opt_pass
*
make_pass_match_asm_constraints
(
gcc::context
*ctxt);
520
extern
rtl_opt_pass
*
make_pass_regmove
(
gcc::context
*ctxt);
521
extern
rtl_opt_pass
*
make_pass_split_all_insns
(
gcc::context
*ctxt);
522
extern
rtl_opt_pass
*
make_pass_fast_rtl_byte_dce
(
gcc::context
*ctxt);
523
extern
rtl_opt_pass
*
make_pass_lower_subreg2
(
gcc::context
*ctxt);
524
extern
rtl_opt_pass
*
make_pass_mode_switching
(
gcc::context
*ctxt);
525
extern
rtl_opt_pass
*
make_pass_sms
(
gcc::context
*ctxt);
526
extern
rtl_opt_pass
*
make_pass_sched
(
gcc::context
*ctxt);
527
extern
rtl_opt_pass
*
make_pass_ira
(
gcc::context
*ctxt);
528
extern
rtl_opt_pass
*
make_pass_reload
(
gcc::context
*ctxt);
529
extern
rtl_opt_pass
*
make_pass_clean_state
(
gcc::context
*ctxt);
530
extern
rtl_opt_pass
*
make_pass_branch_prob
(
gcc::context
*ctxt);
531
extern
rtl_opt_pass
*
make_pass_value_profile_transformations
(
gcc::context
532
*ctxt);
533
extern
rtl_opt_pass
*
make_pass_postreload_cse
(
gcc::context
*ctxt);
534
extern
rtl_opt_pass
*
make_pass_gcse2
(
gcc::context
*ctxt);
535
extern
rtl_opt_pass
*
make_pass_split_after_reload
(
gcc::context
*ctxt);
536
extern
rtl_opt_pass
*
make_pass_branch_target_load_optimize1
(
gcc::context
537
*ctxt);
538
extern
rtl_opt_pass
*
make_pass_thread_prologue_and_epilogue
(
gcc::context
539
*ctxt);
540
extern
rtl_opt_pass
*
make_pass_stack_adjustments
(
gcc::context
*ctxt);
541
extern
rtl_opt_pass
*
make_pass_peephole2
(
gcc::context
*ctxt);
542
extern
rtl_opt_pass
*
make_pass_if_after_reload
(
gcc::context
*ctxt);
543
extern
rtl_opt_pass
*
make_pass_regrename
(
gcc::context
*ctxt);
544
extern
rtl_opt_pass
*
make_pass_cprop_hardreg
(
gcc::context
*ctxt);
545
extern
rtl_opt_pass
*
make_pass_reorder_blocks
(
gcc::context
*ctxt);
546
extern
rtl_opt_pass
*
make_pass_branch_target_load_optimize2
(
gcc::context
547
*ctxt);
548
extern
rtl_opt_pass
*
make_pass_leaf_regs
(
gcc::context
*ctxt);
549
extern
rtl_opt_pass
*
make_pass_split_before_sched2
(
gcc::context
*ctxt);
550
extern
rtl_opt_pass
*
make_pass_compare_elim_after_reload
(
gcc::context
*ctxt);
551
extern
rtl_opt_pass
*
make_pass_sched2
(
gcc::context
*ctxt);
552
extern
rtl_opt_pass
*
make_pass_stack_regs
(
gcc::context
*ctxt);
553
extern
rtl_opt_pass
*
make_pass_stack_regs_run
(
gcc::context
*ctxt);
554
extern
rtl_opt_pass
*
make_pass_df_finish
(
gcc::context
*ctxt);
555
extern
rtl_opt_pass
*
make_pass_compute_alignments
(
gcc::context
*ctxt);
556
extern
rtl_opt_pass
*
make_pass_duplicate_computed_gotos
(
gcc::context
*ctxt);
557
extern
rtl_opt_pass
*
make_pass_variable_tracking
(
gcc::context
*ctxt);
558
extern
rtl_opt_pass
*
make_pass_free_cfg
(
gcc::context
*ctxt);
559
extern
rtl_opt_pass
*
make_pass_machine_reorg
(
gcc::context
*ctxt);
560
extern
rtl_opt_pass
*
make_pass_cleanup_barriers
(
gcc::context
*ctxt);
561
extern
rtl_opt_pass
*
make_pass_delay_slots
(
gcc::context
*ctxt);
562
extern
rtl_opt_pass
*
make_pass_split_for_shorten_branches
(
gcc::context
*ctxt);
563
extern
rtl_opt_pass
*
make_pass_split_before_regstack
(
gcc::context
*ctxt);
564
extern
rtl_opt_pass
*
make_pass_convert_to_eh_region_ranges
(
gcc::context
*ctxt);
565
extern
rtl_opt_pass
*
make_pass_shorten_branches
(
gcc::context
*ctxt);
566
extern
rtl_opt_pass
*
make_pass_set_nothrow_function_flags
(
gcc::context
*ctxt);
567
extern
rtl_opt_pass
*
make_pass_dwarf2_frame
(
gcc::context
*ctxt);
568
extern
rtl_opt_pass
*
make_pass_final
(
gcc::context
*ctxt);
569
extern
rtl_opt_pass
*
make_pass_rtl_seqabstr
(
gcc::context
*ctxt);
570
extern
gimple_opt_pass
*
make_pass_release_ssa_names
(
gcc::context
*ctxt);
571
extern
gimple_opt_pass
*
make_pass_early_inline
(
gcc::context
*ctxt);
572
extern
gimple_opt_pass
*
make_pass_inline_parameters
(
gcc::context
*ctxt);
573
extern
gimple_opt_pass
*
make_pass_update_address_taken
(
gcc::context
*ctxt);
574
extern
gimple_opt_pass
*
make_pass_convert_switch
(
gcc::context
*ctxt);
575
576
/* Current optimization pass. */
577
extern
struct
opt_pass
*
current_pass
;
578
579
extern
bool
execute_one_pass
(
struct
opt_pass
*);
580
extern
void
execute_pass_list
(
struct
opt_pass
*);
581
extern
void
execute_ipa_pass_list
(
struct
opt_pass
*);
582
extern
void
execute_ipa_summary_passes
(
struct
ipa_opt_pass_d
*);
583
extern
void
execute_all_ipa_transforms
(
void
);
584
extern
void
execute_all_ipa_stmt_fixups
(
struct
cgraph_node
*,
gimple
*);
585
extern
bool
pass_init_dump_file
(
struct
opt_pass
*);
586
extern
void
pass_fini_dump_file
(
struct
opt_pass
*);
587
588
extern
const
char
*
get_current_pass_name
(
void
);
589
extern
void
print_current_pass
(FILE *);
590
extern
void
debug_pass
(
void
);
591
extern
void
ipa_write_summaries
(
void
);
592
extern
void
ipa_write_optimization_summaries
(
struct
lto_symtab_encoder_d
*);
593
extern
void
ipa_read_summaries
(
void
);
594
extern
void
ipa_read_optimization_summaries
(
void
);
595
extern
void
register_one_dump_file
(
struct
opt_pass
*);
596
extern
bool
function_called_by_processed_nodes_p
(
void
);
597
extern
void
register_pass
(
struct
register_pass_info
*);
598
599
/* Set to true if the pass is called the first time during compilation of the
600
current function. Note that using this information in the optimization
601
passes is considered not to be clean, and it should be avoided if possible.
602
This flag is currently used to prevent loops from being peeled repeatedly
603
in jump threading; it will be removed once we preserve loop structures
604
throughout the compilation -- we will be able to mark the affected loops
605
directly in jump threading, and avoid peeling them next time. */
606
extern
bool
first_pass_instance
;
607
608
/* Declare for plugins. */
609
extern
void
do_per_function_toporder
(
void
(*) (
void
*),
void
*);
610
611
extern
void
disable_pass
(
const
char
*);
612
extern
void
enable_pass
(
const
char
*);
613
extern
void
dump_passes
(
void
);
614
615
#endif
/* GCC_TREE_PASS_H */
gcc
tree-pass.h
Generated by
1.8.1.1