Commit 0f2b41b2 by Alexandre Oliva Committed by Alexandre Oliva

re PR target/13819 (sh-elf broken; abort in sh_reorg())

PR optimization/13819
* config/sh/sh.c (sh_reorg): Compensate for sharing of CLOBBERs
introduced by 2004-01-20's Jan Hubicka's copy_insn change.
(sh_handle_sp_switch_attribute): Remove warning.

From-SVN: r76425
parent f1184d57
2004-01-23 Alexandre Oliva <aoliva@redhat.com>
PR optimization/13819
* config/sh/sh.c (sh_reorg): Compensate for sharing of CLOBBERs
introduced by 2004-01-20's Jan Hubicka's copy_insn change.
(sh_handle_sp_switch_attribute): Remove warning.
2003-11-30 Jan Hubicka <jh@suse.cz> 2003-11-30 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_emit_restore_regs_using_mov): Deal with large offsets. * i386.c (ix86_emit_restore_regs_using_mov): Deal with large offsets.
......
...@@ -4092,8 +4092,10 @@ sh_reorg (void) ...@@ -4092,8 +4092,10 @@ sh_reorg (void)
if (GET_CODE (dst) == REG && FP_ANY_REGISTER_P (REGNO (dst))) if (GET_CODE (dst) == REG && FP_ANY_REGISTER_P (REGNO (dst)))
{ {
/* This must be an insn that clobbers r0. */ /* This must be an insn that clobbers r0. */
rtx clobber = XVECEXP (PATTERN (scan), 0, rtx *clobberp = &XVECEXP (PATTERN (scan), 0,
XVECLEN (PATTERN (scan), 0) - 1); XVECLEN (PATTERN (scan), 0)
- 1);
rtx clobber = *clobberp;
if (GET_CODE (clobber) != CLOBBER if (GET_CODE (clobber) != CLOBBER
|| ! rtx_equal_p (XEXP (clobber, 0), r0_rtx)) || ! rtx_equal_p (XEXP (clobber, 0), r0_rtx))
...@@ -4137,7 +4139,8 @@ sh_reorg (void) ...@@ -4137,7 +4139,8 @@ sh_reorg (void)
last_float_addr = &XEXP (newsrc, 0); last_float_addr = &XEXP (newsrc, 0);
/* Remove the clobber of r0. */ /* Remove the clobber of r0. */
XEXP (clobber, 0) = gen_rtx_SCRATCH (Pmode); *clobberp = gen_rtx_CLOBBER (GET_MODE (clobber),
gen_rtx_SCRATCH (Pmode));
RTX_UNCHANGING_P (newsrc) = 1; RTX_UNCHANGING_P (newsrc) = 1;
} }
/* This is a mova needing a label. Create it. */ /* This is a mova needing a label. Create it. */
...@@ -6775,7 +6778,7 @@ sh_handle_sp_switch_attribute (tree *node, tree name, tree args, ...@@ -6775,7 +6778,7 @@ sh_handle_sp_switch_attribute (tree *node, tree name, tree args,
} }
else else
{ {
char *s = ggc_strdup (TREE_STRING_POINTER (TREE_VALUE (args))); const char *s = ggc_strdup (TREE_STRING_POINTER (TREE_VALUE (args)));
sp_switch = gen_rtx_SYMBOL_REF (VOIDmode, s); sp_switch = gen_rtx_SYMBOL_REF (VOIDmode, s);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment