https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113542
Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mkuvyrkov at gcc dot gnu.org --- Comment #3 from Maxim Kuvyrkov <mkuvyrkov at gcc dot gnu.org> --- Copy-pasting my comment from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111267#c15 : I've looked into the reason for the above failures, and it seems to be not an issue. After the patch fwprop1 decides to do an additional propagation, which was considered as "would increase complexity of pattern" before the patch. This results in change from "bics; mov" to "bic; subs". If I understand ARM assembler correctly, handling of sign was shifted from "bics" to "subs" instruction. This is the actual code: BEFORE: bics r0, r0, r1 @ 9 [c=4 l=4] *andsi_notsi_si_compare0_scratch mov r0, #1 @ 23 [c=4 l=4] *thumb2_movsi_vfp/1 it eq moveq r0, #0 @ 26 [c=8 l=4] *p *thumb2_movsi_vfp/2 bx lr @ 29 [c=8 l=4] *thumb2_return and AFTER: bic r0, r0, r1 @ 8 [c=4 l=4] andsi_notsi_si subs r0, r0, #0 @ 22 [c=4 l=4] cmpsi2_addneg/0 it ne movne r0, #1 @ 23 [c=8 l=4] *p *thumb2_movsi_vfp/2 bx lr @ 26 [c=8 l=4] *thumb2_return If I don't hear anything to the contrary, I'll update the testcase to accept both "bic" and "bics".