[Bug target/70566] [4.9/5/6 Regression] Bad ARM code generated for evaluating unsigned int bitfield value

ktkachov at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 7 09:50:00 GMT 2016


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.


More information about the Gcc-bugs mailing list