diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2003-11-04 09:14:18 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2003-11-04 09:14:18 +0000 |
commit | 21e9fc4735eca1010ac051b76cd361943f3e6d4a (patch) | |
tree | 794f7f482bbd70e6e9a2a4361659acc02fe2a1e8 /gcc | |
parent | 7807fcd903c2a016ee64a6ac6ce66443e801791f (diff) | |
download | gcc-21e9fc4735eca1010ac051b76cd361943f3e6d4a.zip gcc-21e9fc4735eca1010ac051b76cd361943f3e6d4a.tar.gz gcc-21e9fc4735eca1010ac051b76cd361943f3e6d4a.tar.bz2 |
emit-rtl.c (copy_rtx_if_shared): Don't allow MEMs with constant addresses to be shared.
* emit-rtl.c (copy_rtx_if_shared): Don't allow MEMs with constant
addresses to be shared.
(force_const_mem): Return a copy of the pool entry.
From-SVN: r73248
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 14 | ||||
-rw-r--r-- | gcc/varasm.c | 4 |
3 files changed, 8 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3af769..e26d5c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-11-04 Richard Sandiford <rsandifo@redhat.com> + + * emit-rtl.c (copy_rtx_if_shared): Don't allow MEMs with constant + addresses to be shared. + (force_const_mem): Return a copy of the pool entry. + 2003-11-03 Andreas Jaeger <aj@suse.de> * Makefile.in (GCC_CFLAGS): Remove @WERROR@ again. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 1f355e8..9c50e23 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -2690,20 +2690,6 @@ copy_rtx_if_shared (rtx orig) /* The chain of insns is not being copied. */ return x; - case MEM: - /* A MEM is allowed to be shared if its address is constant. - - We used to allow sharing of MEMs which referenced - virtual_stack_vars_rtx or virtual_incoming_args_rtx, but - that can lose. instantiate_virtual_regs will not unshare - the MEMs, and combine may change the structure of the address - because it looks safe and profitable in one context, but - in some other context it creates unrecognizable RTL. */ - if (CONSTANT_ADDRESS_P (XEXP (x, 0))) - return x; - - break; - default: break; } diff --git a/gcc/varasm.c b/gcc/varasm.c index 791b8ad..21b76b9 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2915,7 +2915,7 @@ force_const_mem (enum machine_mode mode, rtx x) hash = const_hash_rtx (mode, x); for (desc = const_rtx_hash_table[hash]; desc; desc = desc->next) if (compare_constant_rtx (mode, x, desc)) - return desc->rtl; + return copy_rtx (desc->rtl); /* No constant equal to X is known to have been output. Make a constant descriptor to enter X in the hash table @@ -2983,7 +2983,7 @@ force_const_mem (enum machine_mode mode, rtx x) SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL; current_function_uses_const_pool = 1; - return def; + return copy_rtx (def); } /* Given a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true, return a pointer to |