[patch committed SH] Fix PR target/65987
Kaz Kojima
kkojima@rr.iij4u.or.jp
Mon May 4 23:28:00 GMT 2015
I've committed the attached patch to fix PR target/65987
which is a 6 regression. The recent stdarg change reveals
the target problem for section crossing jumps.
Some SH specific jump optimizations don't take into account
such jumps. The attached patch is a minimal fix to solve
the above PR. Tested on sh4-unknown-linux-gnu.
Regards,
kaz
--
2015-05-04 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/65987
* config/sh/sh.c (output_far_jump): Take into account crossing jumps.
(split_branches): Likewise.
diff --git a/config/sh/sh.c b/config/sh/sh.c
index 1cf6ed0..a4c9c4c 100644
--- a/config/sh/sh.c
+++ b/config/sh/sh.c
@@ -2747,7 +2747,8 @@ output_far_jump (rtx_insn *insn, rtx op)
if (TARGET_SH2
&& offset >= -32764
- && offset - get_attr_length (insn) <= 32766)
+ && offset - get_attr_length (insn) <= 32766
+ && ! CROSSING_JUMP_P (insn))
{
far = 0;
jump = "mov.w %O0,%1" "\n"
@@ -6753,6 +6754,13 @@ split_branches (rtx_insn *first)
if (type == TYPE_JUMP)
{
+ if (CROSSING_JUMP_P (insn))
+ {
+ emit_insn_before (gen_block_branch_redirect (const0_rtx),
+ insn);
+ continue;
+ }
+
far_label = as_a <rtx_insn *> (
XEXP (SET_SRC (PATTERN (insn)), 0));
dest_uid = get_dest_uid (far_label, max_uid);
More information about the Gcc-patches
mailing list