This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Your change to adjust_address_1
- From: Richard Henderson <rth at redhat dot com>
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 13 Dec 2001 09:47:26 -0800
- Subject: Re: Your change to adjust_address_1
- References: <10112131527.AA06226@vlsi1.ultra.nyu.edu>
On Thu, Dec 13, 2001 at 10:27:53AM -0500, Richard Kenner wrote:
> You eliminated all references to the parameter ADJUST: that can't be right!
Good point.
r~
* emit-rtl.c (adjust_address_1): Don't adjust address if adjust
is false.
Index: emit-rtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
retrieving revision 1.238
diff -u -p -r1.238 emit-rtl.c
--- emit-rtl.c 2001/12/12 18:10:56 1.238
+++ emit-rtl.c 2001/12/13 17:45:24
@@ -1967,20 +1967,23 @@ adjust_address_1 (memref, mode, offset,
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);