https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70566
--- Comment #7 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- (In reply to ktkachov from comment #6) > 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 Sounds like the peephole is missing a reg-dead check on the condition code value.