From: Richard Henderson Date: Wed, 12 Dec 2001 18:10:56 +0000 (-0800) Subject: emit-rtl.c (adjust_address_1): Always copy address to avoid shared rtl. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d14419e437a6ae85159ffc6c5b04d092c7b1b63a;p=gcc.git emit-rtl.c (adjust_address_1): Always copy address to avoid shared rtl. * emit-rtl.c (adjust_address_1): Always copy address to avoid shared rtl. From-SVN: r47942 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 319e07efb8c..ed8c11b95fe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-12 Richard Henderson + + * emit-rtl.c (adjust_address_1): Always copy address to avoid + shared rtl. + Wed Dec 12 07:37:52 2001 Olivier Hainque * stmt.c (expand_end_case): Do subtraction of lower bound as trees diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 7c7dfd3f172..72886d16a79 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1966,15 +1966,17 @@ adjust_address_1 (memref, mode, offset, validate, adjust) rtx size = 0; unsigned int memalign = MEM_ALIGN (memref); - if (adjust == 0 || offset == 0) - /* ??? Prefer to create garbage instead of creating shared rtl. */ - addr = copy_rtx (addr); + /* ??? Prefer to create garbage instead of creating shared rtl. + This may happen even if adjust is non-zero -- consider + (plus (plus reg reg) const_int) -- so do this always. */ + addr = copy_rtx (addr); + /* If MEMREF is a LO_SUM and the offset is within the alignment of the object, we can merge it into the LO_SUM. */ - else if (GET_MODE (memref) != BLKmode && GET_CODE (addr) == LO_SUM - && offset >= 0 - && (unsigned HOST_WIDE_INT) offset - < GET_MODE_ALIGNMENT (GET_MODE (memref)) / BITS_PER_UNIT) + if (GET_MODE (memref) != BLKmode && GET_CODE (addr) == LO_SUM + && offset >= 0 + && (unsigned HOST_WIDE_INT) offset + < GET_MODE_ALIGNMENT (GET_MODE (memref)) / BITS_PER_UNIT) addr = gen_rtx_LO_SUM (Pmode, XEXP (addr, 0), plus_constant (XEXP (addr, 1), offset)); else