Commit fb0d5c60 by Steven Bosscher

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
parent 6555abe0
2013-05-06 Steven Bosscher <steven@gcc.gnu.org>
* 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.
2013-05-06 Richard Biener <rguenther@suse.de> 2013-05-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/57185 PR tree-optimization/57185
......
...@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic.h" #include "diagnostic.h"
#include "target-globals.h" #include "target-globals.h"
#include "opts.h" #include "opts.h"
#include "tree-pass.h"
/* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF. */ /* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF. */
#define UNSPEC_ADDRESS_P(X) \ #define UNSPEC_ADDRESS_P(X) \
...@@ -16368,12 +16369,14 @@ mips_reorg (void) ...@@ -16368,12 +16369,14 @@ mips_reorg (void)
mips_df_reorg (); mips_df_reorg ();
free_bb_for_insn (); free_bb_for_insn ();
} }
}
if (optimize > 0 && flag_delayed_branch) /* We use a machine specific pass to do a second machine dependent reorg
{ pass after delay branch scheduling. */
cleanup_barriers ();
dbr_schedule (get_insns ()); static unsigned int
} mips_machine_reorg2 (void)
{
mips_reorg_process_insns (); mips_reorg_process_insns ();
if (!TARGET_MIPS16 if (!TARGET_MIPS16
&& TARGET_EXPLICIT_RELOCS && TARGET_EXPLICIT_RELOCS
...@@ -16386,6 +16389,34 @@ mips_reorg (void) ...@@ -16386,6 +16389,34 @@ mips_reorg (void)
mips_reorg_process_insns (); mips_reorg_process_insns ();
mips16_split_long_branches (); 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 /* Implement TARGET_ASM_OUTPUT_MI_THUNK. Generate rtl rather than asm text
in order to avoid duplicating too much logic from elsewhere. */ in order to avoid duplicating too much logic from elsewhere. */
...@@ -17161,6 +17192,11 @@ mips_option_override (void) ...@@ -17161,6 +17192,11 @@ mips_option_override (void)
Do all CPP-sensitive stuff in uncompressed mode; we'll switch modes Do all CPP-sensitive stuff in uncompressed mode; we'll switch modes
later if required. */ later if required. */
mips_set_compression_mode (0); 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 /* Swap the register information for registers I and I + 1, which
......
...@@ -118,7 +118,7 @@ rebuild_jump_labels_chain (rtx chain) ...@@ -118,7 +118,7 @@ rebuild_jump_labels_chain (rtx chain)
This simple pass moves barriers and removes duplicates so that the This simple pass moves barriers and removes duplicates so that the
old code is happy. old code is happy.
*/ */
unsigned int static unsigned int
cleanup_barriers (void) cleanup_barriers (void)
{ {
rtx insn, next, prev; rtx insn, next, prev;
......
...@@ -3585,7 +3585,7 @@ make_return_insns (rtx first) ...@@ -3585,7 +3585,7 @@ make_return_insns (rtx first)
/* Try to find insns to place in delay slots. */ /* Try to find insns to place in delay slots. */
void static void
dbr_schedule (rtx first) dbr_schedule (rtx first)
{ {
rtx insn, next, epilogue_insn = 0; rtx insn, next, epilogue_insn = 0;
......
...@@ -1930,7 +1930,6 @@ extern enum rtx_code swap_condition (enum rtx_code); ...@@ -1930,7 +1930,6 @@ extern enum rtx_code swap_condition (enum rtx_code);
extern enum rtx_code unsigned_condition (enum rtx_code); extern enum rtx_code unsigned_condition (enum rtx_code);
extern enum rtx_code signed_condition (enum rtx_code); extern enum rtx_code signed_condition (enum rtx_code);
extern void mark_jump_label (rtx, rtx, int); extern void mark_jump_label (rtx, rtx, int);
extern unsigned int cleanup_barriers (void);
/* In jump.c */ /* In jump.c */
extern rtx delete_related_insns (rtx); extern rtx delete_related_insns (rtx);
...@@ -2674,9 +2673,6 @@ extern void reg_scan (rtx, unsigned int); ...@@ -2674,9 +2673,6 @@ extern void reg_scan (rtx, unsigned int);
extern void fix_register (const char *, int, int); extern void fix_register (const char *, int, int);
extern bool invalid_mode_change_p (unsigned int, enum reg_class); extern bool invalid_mode_change_p (unsigned int, enum reg_class);
/* In reorg.c */
extern void dbr_schedule (rtx);
/* In reload1.c */ /* In reload1.c */
extern int function_invariant_p (const_rtx); extern int function_invariant_p (const_rtx);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment