http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47800
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-02-18 15:19:16 UTC --- Created attachment 23395 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=23395 gcc46-pr47800-2.patch Or just do the first insn completely in QI/HImode and the second in SImode, as done in this patch. The assembly in the testcase happens to be identical because even for the QImode move gcc decides to emit it as movzbl, but that doesn't have to be always. IMHO if we leave garbage in the upper bits, it shouldn't matter, as from the lea only the low 8 or 16 bits are meaningful anyway for QI/HImode.