re PR target/9365 ([SH] segfault in gen_far_branch (config/sh/sh.c))
PR target/9365 * sh.c (gen_block_redirect): Add special handling of RETURN. (gen_far_branch) Don't call gen_stuff_delay_slot if there is no far branch target (i.e. it's a return). From-SVN: r75872
This commit is contained in:
parent
abbe8578d6
commit
f96540656c
@ -1,3 +1,10 @@
|
||||
2004-01-14 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
PR target/9365
|
||||
* sh.c (gen_block_redirect): Add special handling of RETURN.
|
||||
(gen_far_branch) Don't call gen_stuff_delay_slot if there is no
|
||||
far branch target (i.e. it's a return).
|
||||
|
||||
2004-01-14 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* regrename.c (find_oldest_value_reg): Fix a warning.
|
||||
|
@ -3368,6 +3368,14 @@ gen_block_redirect (rtx jump, int addr, int need_block)
|
||||
else if (recog_memoized (prev) == CODE_FOR_block_branch_redirect)
|
||||
need_block = 0;
|
||||
}
|
||||
if (GET_CODE (PATTERN (jump)) == RETURN)
|
||||
{
|
||||
if (! need_block)
|
||||
return prev;
|
||||
/* Reorg even does nasty things with return insns that cause branches
|
||||
to go out of range - see find_end_label and callers. */
|
||||
return emit_insn_before (gen_block_branch_redirect (GEN_INT (0)) , jump);
|
||||
}
|
||||
/* We can't use JUMP_LABEL here because it might be undefined
|
||||
when not optimizing. */
|
||||
dest = XEXP (SET_SRC (PATTERN (jump)), 0);
|
||||
@ -3535,6 +3543,11 @@ gen_far_branch (struct far_branch *bp)
|
||||
JUMP_LABEL (jump) = bp->far_label;
|
||||
if (! invert_jump (insn, label, 1))
|
||||
abort ();
|
||||
/* If we are branching around a jump (rather than a return), prevent
|
||||
reorg from using an insn from the jump target as the delay slot insn -
|
||||
when reorg did this, it pessimized code (we rather hide the delay slot)
|
||||
and it could cause branches to go out of range. */
|
||||
if (bp->far_label)
|
||||
(emit_insn_after
|
||||
(gen_stuff_delay_slot
|
||||
(GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))),
|
||||
|
Loading…
Reference in New Issue
Block a user