https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95246
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- On which version of LLVM did you see that? For me, gcc produces movzbl %dil, %edi movsbl %sil, %esi cmpl %esi, %edi setg %al while clang skips the first 2 lines (but still emits movl), assuming that the input is already signed/zero extended, which points at ABI conventions. The transformation you suggest doesn't seem right to me.