mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
6555abe0ef
commit
fb0d5c60f5
|
|
@ -1,3 +1,17 @@
|
||||||
|
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
|
||||||
#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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
/* 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);
|
||||||
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);
|
||||||
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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue