Given following program: unsigned char var; int main() { return var; } And compiled using: pu32-elf-gcc -O3 -c -save-temps test.c Unnecessary zero-extension gets generated after a memory byte load which already zero-extend. LOAD_EXTEND_OP has been defined as follow: #define LOAD_EXTEND_OP(M) ZERO_EXTEND Find complete port at: https://github.com/fontamsoc/gcc/commit/45840063 And machine description at: https://github.com/fontamsoc/gcc/blob/45840063/gcc/config/pu32/pu32.md Any idea what else can be tried to prevent the unnecessary zero-extension ?