re PR target/13819 (sh-elf broken; abort in sh_reorg())
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 23 Jan 2004 15:29:09 +0000 (15:29 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 23 Jan 2004 15:29:09 +0000 (15:29 +0000)
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

gcc/ChangeLog
gcc/config/sh/sh.c

index e1c07a0..413c01c 100644 (file)
@@ -1,3 +1,10 @@
+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>
 
        * i386.c (ix86_emit_restore_regs_using_mov):  Deal with large offsets.
index db67097..f745265 100644 (file)
@@ -4092,8 +4092,10 @@ sh_reorg (void)
                  if (GET_CODE (dst) == REG && FP_ANY_REGISTER_P (REGNO (dst)))
                    {
                      /* This must be an insn that clobbers r0.  */
-                     rtx clobber = XVECEXP (PATTERN (scan), 0,
-                                            XVECLEN (PATTERN (scan), 0) - 1);
+                     rtx *clobberp = &XVECEXP (PATTERN (scan), 0,
+                                               XVECLEN (PATTERN (scan), 0)
+                                               - 1);
+                     rtx clobber = *clobberp;
 
                      if (GET_CODE (clobber) != CLOBBER
                          || ! rtx_equal_p (XEXP (clobber, 0), r0_rtx))
@@ -4137,7 +4139,8 @@ sh_reorg (void)
                      last_float_addr = &XEXP (newsrc, 0);
 
                      /* 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;
                    }
                  /* This is a mova needing a label.  Create it.  */
@@ -6775,7 +6778,7 @@ sh_handle_sp_switch_attribute (tree *node, tree name, tree args,
     }
   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);
     }