https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70566
--- Comment #8 from ktkachov at gcc dot gnu.org --- (In reply to Richard Earnshaw from comment #7) > (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. Yep, that seems to do the trick. I'll test a patch. Thanks Richard.