emit-rtl.c (adjust_address_1): Always copy address to avoid shared rtl.
authorRichard Henderson <rth@redhat.com>
Wed, 12 Dec 2001 18:10:56 +0000 (10:10 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 12 Dec 2001 18:10:56 +0000 (10:10 -0800)
        * emit-rtl.c (adjust_address_1): Always copy address to avoid
        shared rtl.

From-SVN: r47942

gcc/ChangeLog
gcc/emit-rtl.c

index 319e07efb8c7465dd369b279c0c2adf973c803c5..ed8c11b95fee265519b5995a31169a3ac8cc787c 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-12  Richard Henderson  <rth@redhat.com>
+
+       * emit-rtl.c (adjust_address_1): Always copy address to avoid
+       shared rtl.
+
 Wed Dec 12 07:37:52 2001  Olivier Hainque <hainque@act-europe.fr>
 
        * stmt.c (expand_end_case): Do subtraction of lower bound as trees
index 7c7dfd3f1722ee64a96ac1f5f812dfef018610c0..72886d16a7983a7c213fb5387d578d61592a9d7f 100644 (file)
@@ -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