OSDN Git Service

* config/rs6000/rs6000-protos.h
[pf3gnuchains/gcc-fork.git] / gcc / tree-pass.h
index 2cbe3e4..5ed86b4 100644 (file)
@@ -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 <rth@redhat.com>
 
@@ -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
@@ -333,7 +345,6 @@ 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;
@@ -402,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;
@@ -451,6 +462,7 @@ extern struct simple_ipa_opt_pass pass_ipa_pta;
 extern struct simple_ipa_opt_pass pass_ipa_struct_reorg;
 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;
@@ -498,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;
@@ -562,21 +573,48 @@ extern struct gimple_opt_pass pass_convert_switch;
 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_summaries_of_cgraph_node_set (
-             struct cgraph_node_set_def *);
+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 *);
@@ -590,4 +628,7 @@ extern void register_pass (struct register_pass_info *);
    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 */