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
This commit is contained in:
Richard Sandiford 2003-11-04 09:14:18 +00:00 committed by Richard Sandiford
parent 7807fcd903
commit 21e9fc4735
3 changed files with 8 additions and 16 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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