From: Jim Wilson Date: Mon, 8 Jul 1996 23:33:15 +0000 (-0700) Subject: (note_mem_written): Varying structure memory access with X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5dbc84995425b0be71f35b477590dff30d5edba0;p=platform%2Fupstream%2Fgcc.git (note_mem_written): Varying structure memory access with AND address can alias scalars. From-SVN: r12417 --- diff --git a/gcc/cse.c b/gcc/cse.c index e2baf7d..ba816d7 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -7583,10 +7583,15 @@ note_mem_written (written, writes_ptr) and that's just as good as a structure element in implying that we need not invalidate scalar variables. However, we must allow QImode aliasing of scalars, because the - ANSI C standard allows character pointers to alias anything. */ + ANSI C standard allows character pointers to alias anything. + We must also allow AND addresses, because they may generate + accesses outside the object being referenced. This is used to + generate aligned addresses from unaligned addresses, for instance, + the alpha storeqi_unaligned pattern. */ if (! ((MEM_IN_STRUCT_P (written) || GET_CODE (XEXP (written, 0)) == PLUS) - && GET_MODE (written) != QImode)) + && GET_MODE (written) != QImode + && GET_CODE (XEXP (written, 0)) != AND)) writes_ptr->all = 1; writes_ptr->nonscalar = 1; }