OSDN Git Service

* emit-rtl.c (adjust_address_1): Don't adjust address if adjust
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Dec 2001 17:50:02 +0000 (17:50 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Dec 2001 17:50:02 +0000 (17:50 +0000)
        is false.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47978 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/emit-rtl.c

index 664087a..ab1f260 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-13  Richard Henderson  <rth@redhat.com>
+
+       * emit-rtl.c (adjust_address_1): Don't adjust address if adjust
+       is false.
+
 2001-12-13  Richard Earnshaw  <rearnsha@arm.com>
 
        * collect2.c (COLLECT_SHARED_INIT_FUNC)
index 72886d1..64a2624 100644 (file)
@@ -1967,20 +1967,23 @@ adjust_address_1 (memref, mode, offset, validate, adjust)
   unsigned int memalign = MEM_ALIGN (memref);
 
   /* ??? Prefer to create garbage instead of creating shared rtl.
-     This may happen even if adjust is non-zero -- consider
+     This may happen even if offset 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.  */
-  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
-    addr = plus_constant (addr, offset);
+  if (adjust)
+    {
+      /* If MEMREF is a LO_SUM and the offset is within the alignment of the
+        object, we can merge it into the LO_SUM.  */
+      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
+       addr = plus_constant (addr, offset);
+    }
 
   new = change_address_1 (memref, mode, addr, validate);