As noted in the BZ, we were passing a SEQUENCE to CROSSING_JUMP_P, which triggers an RTL checking failure. It's pretty obvious that we should have been passing in "delay_jump_insn" and doing so, of course, fixes the failure.
I haven't been able to put together a sparc64 system for testing under qemu, but I'm highly confident we've got the right fix.
I've committed this to the trunk. I'm removing the gcc-6 regression marker, but adding one for gcc-5 as I believe gcc-5 suffers from the same problem -- even if this testcase doesn't trigger.
Jeff
commit 295d529101bb79b4f876e119d8e3e8dbd43963d2 Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed Mar 16 16:58:12 2016 +0000 PR rtl-optimization/70024 * reorg.c (relax_delay_slots): Pass right argument to CROSSING_JUMP_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234262 138bc75d-0d04-0410-961f-82ee72b054a4 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b673443..ef16b27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-03-11 Jeff Law <l...@redhat.com> + + PR rtl-optimization/70024 + * reorg.c (relax_delay_slots): Pass right argument to CROSSING_JUMP_P. + 2016-03-16 Richard Henderson <r...@redhat.com> PR middle-end/70199 diff --git a/gcc/reorg.c b/gcc/reorg.c index a02141f..7b28821 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -3307,7 +3307,7 @@ relax_delay_slots (rtx_insn *first) reorg_redirect_jump (delay_jump_insn, trial); target_label = trial; if (crossing) - CROSSING_JUMP_P (insn) = 1; + CROSSING_JUMP_P (delay_jump_insn) = 1; } /* If the first insn at TARGET_LABEL is redundant with a previous