http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48696
--- Comment #10 from Jan Hubicka <hubicka at ucw dot cz> 2011-04-20 15:54:17 UTC --- > Actually the 4.0.4 compiler is x86_64, the code with -m32. The 4.0.3 > compiler is i586. > > /space/rguenther/install/gcc-4.0.3/libexec/gcc/i686-pc-linux-gnu/4.0.3/cc1 > -quiet -v t.c -quiet -dumpbase t.c -m32 -mtune=pentiumpro -auxbase t -O2 > -version -o t.s > > > /space/rguenther/install/gcc-4.0.4/libexec/gcc/x86_64-unknown-linux-gnu/4.0.4/cc1 > -quiet -v t.c -quiet -dumpbase t.c -m32 -mtune=k8 -auxbase t -O2 -version -o > t.s > > but no -march/tune combination makes the bug vanish for the 4.0.4 compiler > (maybe a HWI dependent "optimization") We do have i386 flag to disable instruction choice that change memory access size, it is X86_TUNE_MEMORY_MISMATCH_STALL and I remember myself adding code to check that we don't do instruction selection that changes memory access size (i.e. andl->andb promotion) unless when optimizing for size. This code seems to've evaporated from backend, so I guess it needs re-adding ;) It did not however work quite reliably since combiner actually does this kind of transform himself from time to time and I did not get approval to get target hook for that back then (in 2000 or so). Honza