https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81803
--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > I have just noticed this which seems curious. Is the 39 -> 40 combine really > a valid transformation? It seems we've lost the sign extension and we're > just putting a 32-bit value into a 64-bit register without trying to clear > the upper bits anymore? Yes, for WORD_REGISTER_OPERATIONS architectures the combiner can do things like that, although there might be bugs lurking of course.