diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-24 15:31:04 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-24 15:31:04 +0000 |
commit | d28edf0d1574ee7a8fce59e7f53b2dd0f9b462b5 (patch) | |
tree | f05a3f300306fc4f9d1ee7e63305439f7119b17f | |
parent | b42981f2a49545369b8f71a96124352f4431cb68 (diff) | |
download | gcc-d28edf0d1574ee7a8fce59e7f53b2dd0f9b462b5.tar.gz |
* emit-rtl.c (change_address, adjust_address_1, offset_address,
widen_memory_access): Return early when there is nothing to change.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76512 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 17 |
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 77bfc8784c8..54e0d4f1d84 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-01-24 Jan Hubicka <jh@suse.cz> + + * emit-rtl.c (change_address, adjust_address_1, offset_address, + widen_memory_access): Return early when there is nothing to change. + 2004-01-24 Jakub Jelinek <jakub@redhat.com> * simplify-rtx.c (simplify_relational_operation): Don't diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index f576e76ca75..294577c2d5c 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1872,6 +1872,10 @@ change_address (rtx memref, enum machine_mode mode, rtx addr) rtx new = change_address_1 (memref, mode, addr, 1); enum machine_mode mmode = GET_MODE (new); + /* If there are no changes, just return the original memory reference. */ + if (new == memref) + return new; + MEM_ATTRS (new) = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, mmode == BLKmode ? 0 : GEN_INT (GET_MODE_SIZE (mmode)), @@ -1898,6 +1902,11 @@ adjust_address_1 (rtx memref, enum machine_mode mode, HOST_WIDE_INT offset, rtx size = 0; unsigned int memalign = MEM_ALIGN (memref); + /* If there are no changes, just return the original memory reference. */ + if (mode == GET_MODE (memref) && !offset + && (!validate || memory_address_p (mode, addr))) + return memref; + /* ??? Prefer to create garbage instead of creating shared rtl. This may happen even if offset is nonzero -- consider (plus (plus reg reg) const_int) -- so do this always. */ @@ -1988,6 +1997,10 @@ offset_address (rtx memref, rtx offset, unsigned HOST_WIDE_INT pow2) update_temp_slot_address (XEXP (memref, 0), new); new = change_address_1 (memref, VOIDmode, new, 1); + /* If there are no changes, just return the original memory reference. */ + if (new == memref) + return new; + /* Update the alignment to reflect the offset. Reset the offset, which we don't know. */ MEM_ATTRS (new) @@ -2032,6 +2045,10 @@ widen_memory_access (rtx memref, enum machine_mode mode, HOST_WIDE_INT offset) rtx memoffset = MEM_OFFSET (new); unsigned int size = GET_MODE_SIZE (mode); + /* If there are no changes, just return the original memory reference. */ + if (new == memref) + return new; + /* If we don't know what offset we were at within the expression, then we can't know if we've overstepped the bounds. */ if (! memoffset) |