diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2013-05-06 19:02:12 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2013-05-06 19:02:12 +0000 |
commit | fb0d5c60f5cbc3ef3689af7ecac566526e31ea14 (patch) | |
tree | f55285f0494cd3a17b590e13db249b4831517104 /gcc/config/mips | |
parent | 6555abe0ef5f9e917f99874c37adcb9063873ca6 (diff) | |
download | gcc-fb0d5c60f5cbc3ef3689af7ecac566526e31ea14.zip gcc-fb0d5c60f5cbc3ef3689af7ecac566526e31ea14.tar.gz gcc-fb0d5c60f5cbc3ef3689af7ecac566526e31ea14.tar.bz2 |
mips.c: Include tree-pass.h.
* config/mips/mips.c: Include tree-pass.h.
(mips_reorg): Split in pre- and post-dbr_schedule parts.
(mips_machine_reorg2): Move mips_reorg post-dbr_schedule parts here.
(pass_mips_machine_reorg2): New machine specific pass.
(insert_pass_mips_machine_reorg2): New pass plugin definition.
(mips_option_override): Register the new pass.
* rtl.h (cleanup_barriers): Remove prototype.
(dbr_schedule): Likewise.
* jump.c (cleanup_barriers): Make static.
* reorg.c (dbr_schedule): Likewise.
From-SVN: r198640
Diffstat (limited to 'gcc/config/mips')
-rw-r--r-- | gcc/config/mips/mips.c | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 7545b60..ab18382 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic.h" #include "target-globals.h" #include "opts.h" +#include "tree-pass.h" /* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF. */ #define UNSPEC_ADDRESS_P(X) \ @@ -16368,12 +16369,14 @@ mips_reorg (void) mips_df_reorg (); free_bb_for_insn (); } +} - if (optimize > 0 && flag_delayed_branch) - { - cleanup_barriers (); - dbr_schedule (get_insns ()); - } +/* We use a machine specific pass to do a second machine dependent reorg + pass after delay branch scheduling. */ + +static unsigned int +mips_machine_reorg2 (void) +{ mips_reorg_process_insns (); if (!TARGET_MIPS16 && TARGET_EXPLICIT_RELOCS @@ -16386,6 +16389,34 @@ mips_reorg (void) mips_reorg_process_insns (); mips16_split_long_branches (); } + +struct rtl_opt_pass pass_mips_machine_reorg2 = +{ + { + RTL_PASS, + "mach2", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + NULL, /* gate */ + mips_machine_reorg2, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + TV_MACH_DEP, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_verify_rtl_sharing, /* todo_flags_finish */ + } +}; + +struct register_pass_info insert_pass_mips_machine_reorg2 = +{ + &pass_mips_machine_reorg2.pass, /* pass */ + "dbr", /* reference_pass_name */ + 1, /* ref_pass_instance_number */ + PASS_POS_INSERT_AFTER /* po_op */ +}; /* Implement TARGET_ASM_OUTPUT_MI_THUNK. Generate rtl rather than asm text in order to avoid duplicating too much logic from elsewhere. */ @@ -17161,6 +17192,11 @@ mips_option_override (void) Do all CPP-sensitive stuff in uncompressed mode; we'll switch modes later if required. */ mips_set_compression_mode (0); + + /* We register a second machine specific reorg pass after delay slot + filling. Registering the pass must be done at start up. It's + convenient to do it here. */ + register_pass (&insert_pass_mips_machine_reorg2); } /* Swap the register information for registers I and I + 1, which |