https://gcc.gnu.org/bugzilla/show_bug.cgi?id=12395
--- Comment #18 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This is what is produced (at least for 7.3.0): movl a(%rip), %edx movl $0, %eax leal 2(%rdx), %ecx cmpl $-1, %edx cmovne %ecx, %eax movl %eax, a(%rip) ret