From 6f5b55f8df605d1bc15f2f0266ecb3e5957297de Mon Sep 17 00:00:00 2001 From: wilson Date: Wed, 18 Feb 2004 06:49:58 +0000 Subject: [PATCH] Fix rtl sharing problem reported by Daniel Bayer on gcc list. * 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 | 5 +++++ gcc/caller-save.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2b15336..00f6eff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-02-17 James E Wilson + + * caller-save.c (insert_restore): Pass mem through copy_rtx. + (insert_save): Likewise. + 2004-02-17 Kazu Hirata * config/h8300/h8300.c (h8300_emit_stack_adjustment): Fix a diff --git a/gcc/caller-save.c b/gcc/caller-save.c index c5ba0c5..028705b 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -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)); -- 2.7.4