From cf6186e9f26494264c27e6620f4b3860a079832a Mon Sep 17 00:00:00 2001 From: Joern Rennecke Date: Mon, 9 Feb 2015 23:47:11 +0000 Subject: [PATCH] re PR target/64761 (-freorder-blocks-and-partition causes some failures on SH) PR target/64761 Replace MD_REDIRECT_BRANCH with TARGET_CAN_FOLLOW_JUMP. Co-Authored-By: Kaz Kojima From-SVN: r220552 --- gcc/ChangeLog | 13 +++++++++++++ gcc/config/sh/sh-protos.h | 1 - gcc/config/sh/sh.c | 7 +++++-- gcc/config/sh/sh.h | 3 --- gcc/doc/tm.texi | 11 ----------- gcc/doc/tm.texi.in | 11 ----------- gcc/reorg.c | 4 +--- 7 files changed, 19 insertions(+), 31 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 328c37d0303..a1916347c4e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2015-02-09 Joern Rennecke + Kaz Kojima + + PR target/64761 + * config/sh/sh-protos.h (sh_can_redirect_branch): Don't declare. + * config/sh/sh.c (TARGET_CAN_FOLLOW_JUMP): Redefine. + (sh_can_redirect_branch): Rename to ... + (sh_can_follow_jump): ... this. Constify argument types. + * config/sh/sh.h (MD_CAN_REDIRECT_BRANCH): Don't define. + * doc/tm.texi.in (MD_CAN_REDIRECT_BRANCH): Remove documentation. + * reorg.c (steal_delay_list_from_target): Use targetm.can_follow_jump. + * doc/tm.texi: Regenerate. + 2015-02-09 Jakub Jelinek PR sanitizer/64981 diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h index 945a54f4f1b..3f72b072491 100644 --- a/gcc/config/sh/sh-protos.h +++ b/gcc/config/sh/sh-protos.h @@ -148,7 +148,6 @@ extern enum tls_model tls_symbolic_operand (rtx, machine_mode); extern bool system_reg_operand (rtx, machine_mode); extern bool reg_unused_after (rtx, rtx_insn *); extern int sh_insn_length_adjustment (rtx_insn *); -extern bool sh_can_redirect_branch (rtx_insn *, rtx_insn *); extern void sh_expand_unop_v2sf (enum rtx_code, rtx, rtx); extern void sh_expand_binop_v2sf (enum rtx_code, rtx, rtx, rtx); extern bool sh_expand_t_scc (rtx *); diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index a7427f56288..f8434d1fbcc 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -277,6 +277,7 @@ static int sh_variable_issue (FILE *, int, rtx_insn *, int); static bool sh_function_ok_for_sibcall (tree, tree); static bool sh_cannot_modify_jumps_p (void); +static bool sh_can_follow_jump (const rtx_insn *, const rtx_insn *); static reg_class_t sh_target_reg_class (void); static bool sh_optimize_target_register_callee_saved (bool); static bool sh_ms_bitfield_layout_p (const_tree); @@ -512,6 +513,8 @@ static const struct attribute_spec sh_attribute_table[] = #undef TARGET_CANNOT_MODIFY_JUMPS_P #define TARGET_CANNOT_MODIFY_JUMPS_P sh_cannot_modify_jumps_p +#undef TARGET_CAN_FOLLOW_JUMP +#define TARGET_CAN_FOLLOW_JUMP sh_can_follow_jump #undef TARGET_BRANCH_TARGET_REGISTER_CLASS #define TARGET_BRANCH_TARGET_REGISTER_CLASS sh_target_reg_class #undef TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED @@ -10822,8 +10825,8 @@ mark_constant_pool_use (rtx x) /* Return true if it's possible to redirect BRANCH1 to the destination of an unconditional jump BRANCH2. We only want to do this if the resulting branch will have a short displacement. */ -bool -sh_can_redirect_branch (rtx_insn *branch1, rtx_insn *branch2) +static bool +sh_can_follow_jump (const rtx_insn *branch1, const rtx_insn *branch2) { if (flag_expensive_optimizations && simplejump_p (branch2)) { diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 2de7381bd26..a9b7fa02ef3 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -2245,9 +2245,6 @@ extern int current_function_interrupt; #define EPILOGUE_USES(REGNO) ((TARGET_SH2E || TARGET_SH4) \ && (REGNO) == FPSCR_REG) -#define MD_CAN_REDIRECT_BRANCH(INSN, SEQ) \ - sh_can_redirect_branch ((INSN), (SEQ)) - #define DWARF_FRAME_RETURN_COLUMN \ (TARGET_SH5 ? DWARF_FRAME_REGNUM (PR_MEDIA_REG) : DWARF_FRAME_REGNUM (PR_REG)) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 9c81fdb98d4..048a28a1378 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -11107,17 +11107,6 @@ loops containing function calls or branch on table instructions. Take an instruction in @var{insn} and return @code{false} if the instruction is not appropriate as a combination of two or more instructions. The default is to accept all instructions. @end deftypefn -@defmac MD_CAN_REDIRECT_BRANCH (@var{branch1}, @var{branch2}) - -Take a branch insn in @var{branch1} and another in @var{branch2}. -Return true if redirecting @var{branch1} to the destination of -@var{branch2} is possible. - -On some targets, branches may have a limited range. Optimizing the -filling of delay slots can result in branches being redirected, and this -may in turn cause a branch offset to overflow. -@end defmac - @deftypefn {Target Hook} bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *@var{follower}, const rtx_insn *@var{followee}) FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. For example, on some targets, certain kinds of branches can't be made to follow through a hot/cold partitioning. @end deftypefn diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 0cee98a0d4a..edad99c6816 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -7982,17 +7982,6 @@ to by @var{ce_info}. @hook TARGET_LEGITIMATE_COMBINED_INSN -@defmac MD_CAN_REDIRECT_BRANCH (@var{branch1}, @var{branch2}) - -Take a branch insn in @var{branch1} and another in @var{branch2}. -Return true if redirecting @var{branch1} to the destination of -@var{branch2} is possible. - -On some targets, branches may have a limited range. Optimizing the -filling of delay slots can result in branches being redirected, and this -may in turn cause a branch offset to overflow. -@end defmac - @hook TARGET_CAN_FOLLOW_JUMP @hook TARGET_COMMUTATIVE_P diff --git a/gcc/reorg.c b/gcc/reorg.c index 2be34572d99..238791044c4 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -1156,13 +1156,11 @@ steal_delay_list_from_target (rtx_insn *insn, rtx condition, rtx_sequence *seq, || ! single_set (seq->insn (0))) return delay_list; -#ifdef MD_CAN_REDIRECT_BRANCH /* On some targets, branches with delay slots can have a limited displacement. Give the back end a chance to tell us we can't do this. */ - if (! MD_CAN_REDIRECT_BRANCH (insn, seq->insn (0))) + if (! targetm.can_follow_jump (insn, seq->insn (0))) return delay_list; -#endif redundant = XALLOCAVEC (bool, XVECLEN (seq, 0)); for (i = 1; i < seq->len (); i++) -- 2.30.2