https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70566
--- Comment #6 from ktkachov at gcc dot gnu.org --- Ah, on second glance the peephole looks correct in itself, but the second branch following the bmi uses an incorrect condition code. So we have: tst r3, #2 bne .L3 beq .L6 being transformed into: ldrb r3, [r0] @ zero_extendqisi2 lsls r3, r3, #30 bmi .L3 beq .L6 The beq needs to be updated to be the opposite of bmi. That is, bpl