https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107772
--- Comment #2 from Avi Kivity <avi at scylladb dot com> --- I expect something like this: f(int*, int*): cmp rdi, rsi je .L10 .L4: cmp DWORD PTR [rsi], 0 jne .L14 .L3 add rsi, 4 cmp rsi, rdi jne .L4 .L10 ret .section .text.cold .L14: push rsi push rdi mov rax, DWORD PTR [rsi] call g(int) pop rdi pop rsi mov DWORD PTR [rsi], eax jmp .L3