diff options
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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; } |