* cgraphunit.c (ipa_passes): Don't execute all_lto_gen_passes.
* lto-streamer-out.c (lto_output, produce_asm_for_decls): No longer
static.
(pass_data_ipa_lto_gimple_out, pass_ipa_lto_gimple_out,
make_pass_ipa_lto_gimple_out, pass_data_ipa_lto_finish_out,
pass_ipa_lto_finish_out, make_pass_ipa_lto_finish_out): Remove.
* lto-streamer.h (lto_output, produce_asm_for_decls): Declare.
* pass-manager.h (GCC_PASS_LISTS, class pass_manager):
Remove all_lto_gen_passes.
* passes.c (pass_manager::dump_passes): Remove its use.
(pass_manager::register_pass): Likewise.
(ipa_read_summaries, ipa_read_optimization_summaries): Likewise.
(pass_manager::pass_manager): Don't initialize or use it.
(write_lto): New static function.
(ipa_write_summaries_1, ipa_write_optimization_summaries): Use it
instead of using all_lto_gen_passes.
* passes.def (all_lto_gen_passes, pass_ipa_lto_gimple_out,
pass_ipa_lto_finish_out): Delete.
* tree-pass.h (make_pass_ipa_lto_gimple_out,
make_pass_ipa_lto_finish_out): Don't declare.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204984
138bc75d-0d04-0410-961f-
82ee72b054a4
+2013-11-18 Bernd Schmidt <bernds@codesourcery.com>
+
+ * cgraphunit.c (ipa_passes): Don't execute all_lto_gen_passes.
+ * lto-streamer-out.c (lto_output, produce_asm_for_decls): No longer
+ static.
+ (pass_data_ipa_lto_gimple_out, pass_ipa_lto_gimple_out,
+ make_pass_ipa_lto_gimple_out, pass_data_ipa_lto_finish_out,
+ pass_ipa_lto_finish_out, make_pass_ipa_lto_finish_out): Remove.
+ * lto-streamer.h (lto_output, produce_asm_for_decls): Declare.
+ * pass-manager.h (GCC_PASS_LISTS, class pass_manager):
+ Remove all_lto_gen_passes.
+ * passes.c (pass_manager::dump_passes): Remove its use.
+ (pass_manager::register_pass): Likewise.
+ (ipa_read_summaries, ipa_read_optimization_summaries): Likewise.
+ (pass_manager::pass_manager): Don't initialize or use it.
+ (write_lto): New static function.
+ (ipa_write_summaries_1, ipa_write_optimization_summaries): Use it
+ instead of using all_lto_gen_passes.
+ * passes.def (all_lto_gen_passes, pass_ipa_lto_gimple_out,
+ pass_ipa_lto_finish_out): Delete.
+ * tree-pass.h (make_pass_ipa_lto_gimple_out,
+ make_pass_ipa_lto_finish_out): Don't declare.
+
2013-11-18 Jeff Law <law@redhat.com>
* tree-ssa-threadupdate.c (redirection_data): Record two
blocks duplicated, then duplicate them.
(ssa_fix_duplicate_block_edges): Corresponding changes.
(ssa_fixup_template_block, thread_single_edge): Likewise.
-
+
2013-11-18 Marek Polacek <polacek@redhat.com>
* doc/invoke.texi: Extend -fsanitize=undefined documentation.
if (flag_generate_lto)
targetm.asm_out.lto_start ();
- execute_ipa_summary_passes ((struct ipa_opt_pass_d *)
- passes->all_lto_gen_passes);
-
if (!in_lto_p)
ipa_write_summaries ();
/* Main entry point from the pass manager. */
-static void
+void
lto_output (void)
{
struct lto_out_decl_state *decl_state;
#endif
}
-namespace {
-
-const pass_data pass_data_ipa_lto_gimple_out =
-{
- IPA_PASS, /* type */
- "lto_gimple_out", /* name */
- OPTGROUP_NONE, /* optinfo_flags */
- true, /* has_gate */
- false, /* has_execute */
- TV_IPA_LTO_GIMPLE_OUT, /* tv_id */
- 0, /* properties_required */
- 0, /* properties_provided */
- 0, /* properties_destroyed */
- 0, /* todo_flags_start */
- 0, /* todo_flags_finish */
-};
-
-class pass_ipa_lto_gimple_out : public ipa_opt_pass_d
-{
-public:
- pass_ipa_lto_gimple_out (gcc::context *ctxt)
- : ipa_opt_pass_d (pass_data_ipa_lto_gimple_out, ctxt,
- NULL, /* generate_summary */
- lto_output, /* write_summary */
- NULL, /* read_summary */
- lto_output, /* write_optimization_summary */
- NULL, /* read_optimization_summary */
- NULL, /* stmt_fixup */
- 0, /* function_transform_todo_flags_start */
- NULL, /* function_transform */
- NULL) /* variable_transform */
- {}
-
- /* opt_pass methods: */
- bool gate () { return gate_lto_out (); }
-
-}; // class pass_ipa_lto_gimple_out
-
-} // anon namespace
-
-ipa_opt_pass_d *
-make_pass_ipa_lto_gimple_out (gcc::context *ctxt)
-{
- return new pass_ipa_lto_gimple_out (ctxt);
-}
-
-
/* Write each node in encoded by ENCODER to OB, as well as those reachable
from it and required for correct representation of its semantics.
Each node in ENCODER must be a global declaration or a type. A node
this file to be written in to a section that can then be read in to
recover these on other side. */
-static void
+void
produce_asm_for_decls (void)
{
struct lto_out_decl_state *out_state;
lto_function_decl_states.release ();
destroy_output_block (ob);
}
-
-
-namespace {
-
-const pass_data pass_data_ipa_lto_finish_out =
-{
- IPA_PASS, /* type */
- "lto_decls_out", /* name */
- OPTGROUP_NONE, /* optinfo_flags */
- true, /* has_gate */
- false, /* has_execute */
- TV_IPA_LTO_DECL_OUT, /* tv_id */
- 0, /* properties_required */
- 0, /* properties_provided */
- 0, /* properties_destroyed */
- 0, /* todo_flags_start */
- 0, /* todo_flags_finish */
-};
-
-class pass_ipa_lto_finish_out : public ipa_opt_pass_d
-{
-public:
- pass_ipa_lto_finish_out (gcc::context *ctxt)
- : ipa_opt_pass_d (pass_data_ipa_lto_finish_out, ctxt,
- NULL, /* generate_summary */
- produce_asm_for_decls, /* write_summary */
- NULL, /* read_summary */
- produce_asm_for_decls, /* write_optimization_summary */
- NULL, /* read_optimization_summary */
- NULL, /* stmt_fixup */
- 0, /* function_transform_todo_flags_start */
- NULL, /* function_transform */
- NULL) /* variable_transform */
- {}
-
- /* opt_pass methods: */
- bool gate () { return gate_lto_out (); }
-
-}; // class pass_ipa_lto_finish_out
-
-} // anon namespace
-
-ipa_opt_pass_d *
-make_pass_ipa_lto_finish_out (gcc::context *ctxt)
-{
- return new pass_ipa_lto_finish_out (ctxt);
-}
extern void lto_output_tree (struct output_block *, tree, bool, bool);
extern void lto_output_toplevel_asms (void);
extern void produce_asm (struct output_block *ob, tree fn);
+extern void lto_output ();
+extern void produce_asm_for_decls ();
void lto_output_decl_state_streams (struct output_block *,
struct lto_out_decl_state *);
void lto_output_decl_state_refs (struct output_block *,
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,
opt_pass *all_small_ipa_passes;
opt_pass *all_lowering_passes;
opt_pass *all_regular_ipa_passes;
- opt_pass *all_lto_gen_passes;
opt_pass *all_late_ipa_passes;
/* A map from static pass id to optimization pass. */
dump_pass_list (all_lowering_passes, 1);
dump_pass_list (all_small_ipa_passes, 1);
dump_pass_list (all_regular_ipa_passes, 1);
- dump_pass_list (all_lto_gen_passes, 1);
dump_pass_list (all_late_ipa_passes, 1);
dump_pass_list (all_passes, 1);
if (!success || all_instances)
success |= position_pass (pass_info, &all_regular_ipa_passes);
if (!success || all_instances)
- success |= position_pass (pass_info, &all_lto_gen_passes);
- if (!success || all_instances)
success |= position_pass (pass_info, &all_late_ipa_passes);
if (!success || all_instances)
success |= position_pass (pass_info, &all_passes);
pass_manager::pass_manager (context *ctxt)
: all_passes (NULL), all_small_ipa_passes (NULL), all_lowering_passes (NULL),
- all_regular_ipa_passes (NULL), all_lto_gen_passes (NULL),
+ all_regular_ipa_passes (NULL),
all_late_ipa_passes (NULL), passes_by_id (NULL), passes_by_id_size (0),
m_ctxt (ctxt)
{
register_dump_files (all_regular_ipa_passes,
PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
| PROP_cfg);
- register_dump_files (all_lto_gen_passes,
- PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
- | PROP_cfg);
register_dump_files (all_late_ipa_passes,
PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh
| PROP_cfg);
while (pass);
}
+/* Write out all LTO data. */
+static void
+write_lto (void)
+{
+ timevar_push (TV_IPA_LTO_GIMPLE_OUT);
+ lto_output ();
+ timevar_pop (TV_IPA_LTO_GIMPLE_OUT);
+ timevar_push (TV_IPA_LTO_DECL_OUT);
+ produce_asm_for_decls ();
+ timevar_pop (TV_IPA_LTO_DECL_OUT);
+}
+
/* Same as execute_pass_list but assume that subpasses of IPA passes
are local passes. If SET is not NULL, write out summaries of only
those node in SET. */
gcc_assert (!flag_wpa);
ipa_write_summaries_2 (passes->all_regular_ipa_passes, state);
- ipa_write_summaries_2 (passes->all_lto_gen_passes, state);
+
+ write_lto ();
gcc_assert (lto_get_out_decl_state () == state);
lto_pop_out_decl_state ();
gcc_assert (flag_wpa);
pass_manager *passes = g->get_passes ();
ipa_write_optimization_summaries_1 (passes->all_regular_ipa_passes, state);
- ipa_write_optimization_summaries_1 (passes->all_lto_gen_passes, state);
+
+ write_lto ();
gcc_assert (lto_get_out_decl_state () == state);
lto_pop_out_decl_state ();
}
-/* Read all the summaries for all_regular_ipa_passes and all_lto_gen_passes. */
+/* Read all the summaries for all_regular_ipa_passes. */
void
ipa_read_summaries (void)
{
pass_manager *passes = g->get_passes ();
ipa_read_summaries_1 (passes->all_regular_ipa_passes);
- ipa_read_summaries_1 (passes->all_lto_gen_passes);
}
/* Same as execute_pass_list but assume that subpasses of IPA passes
}
}
-/* Read all the summaries for all_regular_ipa_passes and all_lto_gen_passes. */
+/* Read all the summaries for all_regular_ipa_passes. */
void
ipa_read_optimization_summaries (void)
{
pass_manager *passes = g->get_passes ();
ipa_read_optimization_summaries_1 (passes->all_regular_ipa_passes);
- ipa_read_optimization_summaries_1 (passes->all_lto_gen_passes);
}
/* Same as execute_pass_list but assume that subpasses of IPA passes
NEXT_PASS (pass_ipa_reference);
TERMINATE_PASS_LIST ()
- INSERT_PASSES_AFTER (all_lto_gen_passes)
- NEXT_PASS (pass_ipa_lto_gimple_out);
- NEXT_PASS (pass_ipa_lto_finish_out); /* This must be the last LTO pass. */
- TERMINATE_PASS_LIST ()
-
/* Simple IPA passes executed after the regular passes. In WHOPR mode the
passes are executed after partitioning and thus see just parts of the
compiled unit. */
extern ipa_opt_pass_d *make_pass_ipa_whole_program_visibility (gcc::context
*ctxt);
-extern ipa_opt_pass_d *make_pass_ipa_lto_gimple_out (gcc::context *ctxt);
extern simple_ipa_opt_pass *make_pass_ipa_increase_alignment (gcc::context
*ctxt);
extern ipa_opt_pass_d *make_pass_ipa_inline (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_reference (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_pure_const (gcc::context *ctxt);
extern simple_ipa_opt_pass *make_pass_ipa_pta (gcc::context *ctxt);
-extern ipa_opt_pass_d *make_pass_ipa_lto_finish_out (gcc::context *ctxt);
extern simple_ipa_opt_pass *make_pass_ipa_tm (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_profile (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_cdtor_merge (gcc::context *ctxt);