https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65056
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED Target Milestone|--- |10.0 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- GCC 8+ gets rid of the compare for andq and GCC produces: .L11: movq %r8, %rcx andq (%rdi,%rdx,8), %rcx movq %r9, %r8 jne .L10 .L3: subq $1, %rdx cmpq $-1, %rdx jne .L11 This was fixed by r8-3869. GCC 10+ gets rid of the compare for the subq and GCC produces: .L11: andq (%rdi,%rax,8), %rdx movq %rdx, %rcx movq $-1, %rdx jne .L10 .L3: subq $1, %rax jnb .L11 There was a lot of carry improvements for GCC 10 and that fixed that one.