diff options
author | Richard Henderson <rth@redhat.com> | 2001-12-13 09:50:02 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-12-13 09:50:02 -0800 |
commit | 4a78c78760016fe03c0d578ece9a5cfee8a672fd (patch) | |
tree | 25855a02ec15bb86b5fc9eb76eceac385b393393 /gcc/emit-rtl.c | |
parent | 72dd53af504998e0dcdbbce221c67a4ad2c3b30b (diff) | |
download | gcc-4a78c78760016fe03c0d578ece9a5cfee8a672fd.zip gcc-4a78c78760016fe03c0d578ece9a5cfee8a672fd.tar.gz gcc-4a78c78760016fe03c0d578ece9a5cfee8a672fd.tar.bz2 |
emit-rtl.c (adjust_address_1): Don't adjust address if adjust is false.
* emit-rtl.c (adjust_address_1): Don't adjust address if adjust
is false.
From-SVN: r47978
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 72886d1..64a2624 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -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); |