From 4e417af354507747882f17d09c616d6e572ab0ee Mon Sep 17 00:00:00 2001 From: Kaz Kojima Date: Mon, 4 May 2015 23:25:58 +0000 Subject: [PATCH] re PR target/65987 ([SH] Wrong jump generated for gcc.dg/tree-prof/va-arg-pack-1.c with -fprofile-use) PR target/65987 * config/sh/sh.c (output_far_jump, split_branches): Take into account sectiion crossing jumps. From-SVN: r222783 --- gcc/ChangeLog | 6 ++++++ gcc/config/sh/sh.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 116a6d64359..75a6d9ec5c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-05-04 Kaz Kojima + + PR target/65987 + * config/sh/sh.c (output_far_jump): Take into account crossing jumps. + (split_branches): Likewise. + 2015-05-04 Sandra Loosemore * common.opt (fdelete-null-pointer-checks): Init to -1. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 1cf6ed0a9ca..a4c9c4c0ba2 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/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 ( XEXP (SET_SRC (PATTERN (insn)), 0)); dest_uid = get_dest_uid (far_label, max_uid); -- 2.30.2