Fix rtl sharing problem reported by Daniel Bayer on gcc list.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 Feb 2004 06:49:58 +0000 (06:49 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 Feb 2004 06:49:58 +0000 (06:49 +0000)
* caller-save.c (insert_restore): Pass mem through copy_rtx.
(insert_save): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78010 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/caller-save.c

index 2b15336..00f6eff 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-17  James E Wilson  <wilson@specifixinc.com>
+
+       * caller-save.c (insert_restore): Pass mem through copy_rtx.
+       (insert_save): Likewise.
+
 2004-02-17  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/h8300/h8300.c (h8300_emit_stack_adjustment): Fix a
index c5ba0c5..028705b 100644 (file)
@@ -685,6 +685,8 @@ insert_restore (struct insn_chain *chain, int before_p, int regno,
       && save_mode [regno] != GET_MODE (mem)
       && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
     mem = adjust_address (mem, save_mode[regno], 0);
+  else
+    mem = copy_rtx (mem);
   pat = gen_rtx_SET (VOIDmode,
                     gen_rtx_REG (GET_MODE (mem),
                                  regno), mem);
@@ -757,6 +759,8 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
       && save_mode [regno] != GET_MODE (mem)
       && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
     mem = adjust_address (mem, save_mode[regno], 0);
+  else
+    mem = copy_rtx (mem);
   pat = gen_rtx_SET (VOIDmode, mem,
                     gen_rtx_REG (GET_MODE (mem),
                                  regno));