https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95766
--- Comment #4 from Hongtao.liu <crazylht at gmail dot com> --- Simple case: cat test.c: int f(unsigned short a) { return a * 101; } gcc: f(unsigned short): movzwl %di, %eax imull $101, %eax, %eax ret llvm: f(unsigned short): # @f(unsigned short) imull $101, %edi, %eax retq GCC always does the conversion.