OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [tree-pass.h] - Blame information for rev 280

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.