X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Ftree-pass.h;h=5ed86b4336b4db7d17364002a522bbca9d8686b7;hp=bc1ebda9a50190c45b662a06f5260adb4979704d;hb=bf464d9fc11dbe705920f1734b3a97482e81d90c;hpb=d60ec13d843da3d28b399506b230a144847cd44f diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index bc1ebda9a50..5ed86b4336b 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -1,5 +1,5 @@ /* Definitions for describing one tree-ssa optimization pass. - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Richard Henderson @@ -71,13 +71,15 @@ enum tree_dump_index #define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic message. */ -#define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree +#define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree dumper to print stmts. */ #define TDF_RHS_ONLY (1 << 17) /* a flag to only print the RHS of a gimple stmt. */ #define TDF_ASMNAME (1 << 18) /* display asm names of decls */ #define TDF_EH (1 << 19) /* display EH region number holding this gimple statement. */ +#define TDF_NOUID (1 << 20) /* omit UIDs from dumps. */ +#define TDF_ALIAS (1 << 21) /* display alias information */ /* In tree-dump.c */ @@ -166,6 +168,7 @@ struct rtl_opt_pass struct varpool_node; struct cgraph_node; struct cgraph_node_set_def; +struct varpool_node_set_def; /* Description of IPA pass with generate summary, write, execute, read and transform stages. */ @@ -178,14 +181,23 @@ struct ipa_opt_pass_d void (*generate_summary) (void); /* This hook is used to serialize IPA summaries on disk. */ - void (*write_summary) (struct cgraph_node_set_def *); + void (*write_summary) (struct cgraph_node_set_def *, + struct varpool_node_set_def *); - /* For most ipa passes, the information can only be deserialized in - one chunk. However, function bodies are read function at a time - as needed so both calls are necessary. */ + /* This hook is used to deserialize IPA summaries from disk. */ void (*read_summary) (void); - void (*function_read_summary) (struct cgraph_node *); - + + /* This hook is used to serialize IPA optimization summaries on disk. */ + void (*write_optimization_summary) (struct cgraph_node_set_def *, + struct varpool_node_set_def *); + + /* This hook is used to deserialize IPA summaries from disk. */ + void (*read_optimization_summary) (void); + + /* Hook to convert gimple stmt uids into true gimple statements. The second + parameter is an array of statements indexed by their uid. */ + void (*stmt_fixup) (struct cgraph_node *, gimple *); + /* Results of interprocedural propagation of an IPA pass is applied to function body via this hook. */ unsigned int function_transform_todo_flags_start; @@ -222,6 +234,7 @@ struct dump_file_info #define PROP_rtl (1 << 7) #define PROP_gimple_lomp (1 << 8) /* lowered OpenMP directives */ #define PROP_cfglayout (1 << 9) /* cfglayout mode on RTL */ +#define PROP_gimple_lcx (1 << 10) /* lowered complex */ #define PROP_trees \ (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp) @@ -229,11 +242,10 @@ struct dump_file_info /* To-do flags. */ #define TODO_dump_func (1 << 0) #define TODO_ggc_collect (1 << 1) -#define TODO_verify_ssa (1 << 2) +#define TODO_verify_ssa (1 << 2) #define TODO_verify_flow (1 << 3) #define TODO_verify_stmts (1 << 4) #define TODO_cleanup_cfg (1 << 5) -#define TODO_verify_loops (1 << 6) #define TODO_dump_cgraph (1 << 7) #define TODO_remove_functions (1 << 8) #define TODO_rebuild_frequencies (1 << 9) @@ -261,7 +273,7 @@ struct dump_file_info IDF is done. This is used by passes that need the PHI nodes for O_j even if it means that some arguments will come from the default definition of O_j's symbol (e.g., pass_linear_transform). - + WARNING: If you need to use this flag, chances are that your pass may be doing something wrong. Inserting PHI nodes for an old name where not all edges carry a new replacement may lead to silent @@ -308,14 +320,36 @@ struct dump_file_info #define TODO_verify_all \ (TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts) + +/* Register pass info. */ + +enum pass_positioning_ops +{ + PASS_POS_INSERT_AFTER, /* Insert after the reference pass. */ + PASS_POS_INSERT_BEFORE, /* Insert before the reference pass. */ + PASS_POS_REPLACE /* Replace the reference pass. */ +}; + +struct register_pass_info +{ + struct opt_pass *pass; /* New pass to register. */ + const char *reference_pass_name; /* Name of the reference pass for hooking + up the new pass. */ + int ref_pass_instance_number; /* Insert the pass at the specified + instance number of the reference pass. + Do it for every instance if it is 0. */ + enum pass_positioning_ops pos_op; /* how to insert the new pass. */ +}; + extern void tree_lowering_passes (tree decl); extern struct gimple_opt_pass pass_mudflap_1; extern struct gimple_opt_pass pass_mudflap_2; -extern struct gimple_opt_pass pass_remove_useless_stmts; extern struct gimple_opt_pass pass_lower_cf; extern struct gimple_opt_pass pass_refactor_eh; extern struct gimple_opt_pass pass_lower_eh; +extern struct gimple_opt_pass pass_lower_eh_dispatch; +extern struct gimple_opt_pass pass_lower_resx; extern struct gimple_opt_pass pass_build_cfg; extern struct gimple_opt_pass pass_tree_profile; extern struct gimple_opt_pass pass_early_tree_profile; @@ -325,6 +359,7 @@ extern struct gimple_opt_pass pass_cleanup_eh; extern struct gimple_opt_pass pass_fixup_cfg; extern struct gimple_opt_pass pass_sra; extern struct gimple_opt_pass pass_sra_early; +extern struct gimple_opt_pass pass_early_ipa_sra; extern struct gimple_opt_pass pass_tail_recursion; extern struct gimple_opt_pass pass_tail_calls; extern struct gimple_opt_pass pass_tree_loop; @@ -378,8 +413,8 @@ extern struct gimple_opt_pass pass_early_warn_uninitialized; extern struct gimple_opt_pass pass_late_warn_uninitialized; extern struct gimple_opt_pass pass_cse_reciprocals; extern struct gimple_opt_pass pass_cse_sincos; -extern struct gimple_opt_pass pass_convert_to_rsqrt; extern struct gimple_opt_pass pass_optimize_bswap; +extern struct gimple_opt_pass pass_optimize_widening_mul; extern struct gimple_opt_pass pass_warn_function_return; extern struct gimple_opt_pass pass_warn_function_noreturn; extern struct gimple_opt_pass pass_cselim; @@ -408,19 +443,26 @@ extern struct gimple_opt_pass pass_tracer; extern struct gimple_opt_pass pass_warn_unused_result; /* IPA Passes */ +extern struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility; +extern struct simple_ipa_opt_pass pass_ipa_early_inline; + +extern struct simple_ipa_opt_pass pass_early_local_passes; + +extern struct ipa_opt_pass_d pass_ipa_whole_program_visibility; +extern struct ipa_opt_pass_d pass_ipa_lto_gimple_out; +extern struct simple_ipa_opt_pass pass_ipa_increase_alignment; +extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg; extern struct ipa_opt_pass_d pass_ipa_inline; +extern struct simple_ipa_opt_pass pass_ipa_free_lang_data; extern struct ipa_opt_pass_d pass_ipa_cp; extern struct ipa_opt_pass_d pass_ipa_reference; extern struct ipa_opt_pass_d pass_ipa_pure_const; - -extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg; -extern struct simple_ipa_opt_pass pass_ipa_early_inline; extern struct simple_ipa_opt_pass pass_ipa_type_escape; extern struct simple_ipa_opt_pass pass_ipa_pta; extern struct simple_ipa_opt_pass pass_ipa_struct_reorg; -extern struct simple_ipa_opt_pass pass_early_local_passes; -extern struct simple_ipa_opt_pass pass_ipa_increase_alignment; -extern struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility; +extern struct ipa_opt_pass_d pass_ipa_lto_wpa_fixup; +extern struct ipa_opt_pass_d pass_ipa_lto_finish_out; +extern struct ipa_opt_pass_d pass_ipa_profile; extern struct gimple_opt_pass pass_all_optimizations; extern struct gimple_opt_pass pass_cleanup_cfg_post_optimizing; @@ -468,13 +510,12 @@ extern struct rtl_opt_pass pass_cse2; extern struct rtl_opt_pass pass_df_initialize_opt; extern struct rtl_opt_pass pass_df_initialize_no_opt; extern struct rtl_opt_pass pass_reginfo_init; -extern struct rtl_opt_pass pass_subregs_of_mode_init; -extern struct rtl_opt_pass pass_subregs_of_mode_finish; extern struct rtl_opt_pass pass_inc_dec; extern struct rtl_opt_pass pass_stack_ptr_mod; extern struct rtl_opt_pass pass_initialize_regs; extern struct rtl_opt_pass pass_combine; extern struct rtl_opt_pass pass_if_after_combine; +extern struct rtl_opt_pass pass_implicit_zee; extern struct rtl_opt_pass pass_partition_blocks; extern struct rtl_opt_pass pass_match_asm_constraints; extern struct rtl_opt_pass pass_regmove; @@ -529,18 +570,54 @@ extern struct gimple_opt_pass pass_update_address_taken; extern struct gimple_opt_pass pass_convert_switch; /* The root of the compilation pass tree, once constructed. */ -extern struct opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; +extern struct opt_pass *all_passes, *all_small_ipa_passes, *all_lowering_passes, + *all_regular_ipa_passes, *all_lto_gen_passes; + +/* Define a list of pass lists so that both passes.c and plugins can easily + find all the pass lists. */ +#define GCC_PASS_LISTS \ + DEF_PASS_LIST (all_lowering_passes) \ + DEF_PASS_LIST (all_small_ipa_passes) \ + DEF_PASS_LIST (all_regular_ipa_passes) \ + DEF_PASS_LIST (all_lto_gen_passes) \ + DEF_PASS_LIST (all_passes) + +#define DEF_PASS_LIST(LIST) PASS_LIST_NO_##LIST, +enum +{ + GCC_PASS_LISTS + PASS_LIST_NUM +}; +#undef DEF_PASS_LIST + +/* This is used by plugins, and should also be used in + passes.c:register_pass. */ +extern struct opt_pass **gcc_pass_lists[]; /* Current optimization pass. */ extern struct opt_pass *current_pass; extern struct opt_pass * get_pass_for_id (int); +extern bool execute_one_pass (struct opt_pass *); extern void execute_pass_list (struct opt_pass *); extern void execute_ipa_pass_list (struct opt_pass *); +extern void execute_ipa_summary_passes (struct ipa_opt_pass_d *); +extern void execute_all_ipa_transforms (void); +extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple *); +extern bool pass_init_dump_file (struct opt_pass *); +extern void pass_fini_dump_file (struct opt_pass *); + +extern const char *get_current_pass_name (void); extern void print_current_pass (FILE *); extern void debug_pass (void); +extern void ipa_write_summaries (void); +extern void ipa_write_optimization_summaries (struct cgraph_node_set_def *, + struct varpool_node_set_def *); +extern void ipa_read_summaries (void); +extern void ipa_read_optimization_summaries (void); extern void register_one_dump_file (struct opt_pass *); extern bool function_called_by_processed_nodes_p (void); +extern void register_pass (struct register_pass_info *); /* Set to true if the pass is called the first time during compilation of the current function. Note that using this information in the optimization @@ -551,4 +628,7 @@ extern bool function_called_by_processed_nodes_p (void); directly in jump threading, and avoid peeling them next time. */ extern bool first_pass_instance; +/* Declare for plugins. */ +extern void do_per_function_toporder (void (*) (void *), void *); + #endif /* GCC_TREE_PASS_H */