https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85758
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- Direct translation would be (from clang): andl %ecx, %edx addl %edx, %edi xorl %ecx, %edx addl %edx, %esi With -mbmi, I get andn %ecx, %edx, %eax andl %ecx, %edx addl %eax, %esi addl %edx, %edi which is comparable to the original (andn has a longer encoding, but the operations are less dependent) We could use opi:cs in the transformation if that really helps...