From 6fe9a05b73f4b5671a42b2a7e05d01329f7424e0 Mon Sep 17 00:00:00 2001 From: bernds Date: Wed, 5 Nov 2014 12:14:45 +0000 Subject: [PATCH] Reorganize post-ra pipeline for targets without register allocation. * passes.def (pass_compute_alignments, pass_duplicate_computed_gotos, pass_variable_tracking, pass_free_cfg, pass_machine_reorg, pass_cleanup_barriers, pass_delay_slots, pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges, pass_shorten_branches, pass_est_nothrow_function_flags, pass_dwarf2_frame, pass_final): Move outside of pass_postreload and into pass_late_compilation. (pass_late_compilation): Add. * passes.c (pass_data_late_compilation, pass_late_compilation, make_pass_late_compilation): New. * timevar.def (TV_LATE_COMPILATION): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217124 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 12 ++++++++++++ gcc/passes.c | 38 ++++++++++++++++++++++++++++++++++++++ gcc/passes.def | 3 +++ gcc/timevar.def | 1 + 4 files changed, 54 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 74e0b0f..922283e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2014-11-05 Bernd Schmidt + * passes.def (pass_compute_alignments, pass_duplicate_computed_gotos, + pass_variable_tracking, pass_free_cfg, pass_machine_reorg, + pass_cleanup_barriers, pass_delay_slots, + pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges, + pass_shorten_branches, pass_est_nothrow_function_flags, + pass_dwarf2_frame, pass_final): Move outside of pass_postreload and + into pass_late_compilation. + (pass_late_compilation): Add. + * passes.c (pass_data_late_compilation, pass_late_compilation, + make_pass_late_compilation): New. + * timevar.def (TV_LATE_COMPILATION): New. + * target.def (omit_struct_return_reg): New data hook. * doc/tm.texi.in: Add @hook TARGET_OMIT_STRUCT_RETURN_REG. * doc/tm.texi: Regenerate. diff --git a/gcc/passes.c b/gcc/passes.c index f9d15b8..9ec0ebf 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -576,6 +576,44 @@ make_pass_postreload (gcc::context *ctxt) return new pass_postreload (ctxt); } +namespace { + +const pass_data pass_data_late_compilation = +{ + RTL_PASS, /* type */ + "*all-late_compilation", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_LATE_COMPILATION, /* tv_id */ + PROP_rtl, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + 0, /* todo_flags_finish */ +}; + +class pass_late_compilation : public rtl_opt_pass +{ +public: + pass_late_compilation (gcc::context *ctxt) + : rtl_opt_pass (pass_data_late_compilation, ctxt) + {} + + /* opt_pass methods: */ + virtual bool gate (function *) + { + return reload_completed || targetm.no_register_allocation; + } + +}; // class pass_late_compilation + +} // anon namespace + +static rtl_opt_pass * +make_pass_late_compilation (gcc::context *ctxt) +{ + return new pass_late_compilation (ctxt); +} + /* Set the static pass number of pass PASS to ID and record that diff --git a/gcc/passes.def b/gcc/passes.def index 9c2542d..6f6a493 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -417,6 +417,9 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_split_before_regstack); NEXT_PASS (pass_stack_regs_run); POP_INSERT_PASSES () + POP_INSERT_PASSES () + NEXT_PASS (pass_late_compilation); + PUSH_INSERT_PASSES_WITHIN (pass_late_compilation) NEXT_PASS (pass_compute_alignments); NEXT_PASS (pass_variable_tracking); NEXT_PASS (pass_free_cfg); diff --git a/gcc/timevar.def b/gcc/timevar.def index 96b6069..b74cbb0 100644 --- a/gcc/timevar.def +++ b/gcc/timevar.def @@ -272,6 +272,7 @@ DEFTIMEVAR (TV_EARLY_LOCAL , "early local passes") DEFTIMEVAR (TV_OPTIMIZE , "unaccounted optimizations") DEFTIMEVAR (TV_REST_OF_COMPILATION , "rest of compilation") DEFTIMEVAR (TV_POSTRELOAD , "unaccounted post reload") +DEFTIMEVAR (TV_LATE_COMPILATION , "unaccounted late compilation") DEFTIMEVAR (TV_REMOVE_UNUSED , "remove unused locals") DEFTIMEVAR (TV_ADDRESS_TAKEN , "address taken") DEFTIMEVAR (TV_TODO , "unaccounted todo") -- 2.7.4