diff -up gcc/cse.c.orig gcc/cse.c --- gcc/cse.c.orig 2003-08-11 00:02:24.000000000 +0200 +++ gcc/cse.c 2003-07-31 23:49:21.000000000 +0200 @@ -6682,7 +6682,8 @@ invalidate_skipped_set (dest, set, data) a BLKmode or nonscalar memory reference or a reference to a variable address. */ && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode - || cse_rtx_varies_p (XEXP (dest, 0), 0))) + || cse_rtx_varies_p (XEXP (dest, 0), 0)) + && !MEM_EXPR (dest)) { invalidate_memory (); return;