From 835126657b0fcfa7515b819c156751dfc10c9d5a Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Tue, 31 Aug 1999 06:28:16 +0000 Subject: [PATCH] emit-rtl.c (copy_rtx_if_shared): A MEM which references virtual_stack_vars_rtx or virtual_incoming_args_rtx can... * emit-rtl.c (copy_rtx_if_shared): A MEM which references virtual_stack_vars_rtx or virtual_incoming_args_rtx can not be shared. From-SVN: r29001 --- gcc/ChangeLog | 10 ++++++---- gcc/emit-rtl.c | 16 +++++++++------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0279ec06289..caf5c004d45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -42,10 +42,6 @@ Mon Aug 30 16:07:49 1999 Richard Henderson * flow.c (new_insn_dead_notes): Use sets_reg_or_subreg not mark_set_resources. -Mon Aug 30 16:36:33 1999 Jeffrey A Law (law@cygnus.com) - - * invoke.texi: Fix typo. - Mon Aug 30 12:23:53 1999 Jim Wilson * fixinc/Makefile.in (subdir): New. @@ -54,6 +50,12 @@ Mon Aug 30 12:23:53 1999 Jim Wilson Mon Aug 30 01:02:09 1999 Jeffrey A Law (law@cygnus.com) + * emit-rtl.c (copy_rtx_if_shared): A MEM which references + virtual_stack_vars_rtx or virtual_incoming_args_rtx can not + be shared. + + * invoke.texi: Fix typo. + * dwarf2out.c (mem_loc_descriptor): New argument MODE. All callers changed. Handle autoincrement addressing modes. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index b028556cb16..79c179ceb63 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1678,16 +1678,18 @@ copy_rtx_if_shared (orig) return x; case MEM: - /* A MEM is allowed to be shared if its address is constant - or is a constant plus one of the special registers. */ - if (CONSTANT_ADDRESS_P (XEXP (x, 0)) - || XEXP (x, 0) == virtual_stack_vars_rtx - || XEXP (x, 0) == virtual_incoming_args_rtx) + /* 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; if (GET_CODE (XEXP (x, 0)) == PLUS - && (XEXP (XEXP (x, 0), 0) == virtual_stack_vars_rtx - || XEXP (XEXP (x, 0), 0) == virtual_incoming_args_rtx) && CONSTANT_ADDRESS_P (XEXP (XEXP (x, 0), 1))) { /* This MEM can appear in more than one place, -- 2.30.2