https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94838
--- Comment #3 from Gabriel Ravier <gabravier at gmail dot com> --- This also occurs on i68* : f(bool, int*): xor eax, eax ; Already 0 cmp BYTE PTR [esp+4], 0 je .L1 mov eax, DWORD PTR [esp+8] ; Could use different caller-saved register such as ecx or edx mov eax, DWORD PTR [eax] test eax, eax setne al movzx eax, al ; This could then be avoided since eax would already be 0 .L1: ret