https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83304
--- Comment #3 from ktkachov at gcc dot gnu.org --- hmm, I'm getting some weird behaviour. I see the test failing in a testsuite run. When I try to build and run the test outside the testsuite harness it doesn't abort. However, the generated code between trunk (which fails in the testsuite) and trunk with r255384 reverted (which doesn't fail) differs greatly with the options: -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions -mthumb -march=armv8-a -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard clean trunk: main: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mvn r2, #126 push {lr} .L2: adds r3, r2, #1 cmp r3, #129 add r2, r2, #5 bne .L2 movs r0, #0 ldr pc, [sp], #4 trunk with r255384 reverted (which fails in the testsuite): main: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 push {r3, lr} mvn r3, #126 b .L2 .L4: mov r1, #1 it eq moveq r1, #0 cmp r2, #0 it ne movne r1, #0 cbnz r1, .L22 mov r1, #1 it eq moveq r1, #0 adds r0, r2, #1 and r0, r1, #1 it ne movne r0, #0 cbnz r0, .L22 adds r0, r3, #3 it eq moveq r2, #1 it ne movne r2, #0 it eq moveq r2, #0 cbnz r2, .L22 adds r1, r3, #4 it eq moveq r2, #1 it ne movne r2, #0 it eq moveq r2, #0 cbnz r2, .L22 adds r3, r3, #5 mov r2, #1 it eq moveq r2, #0 it ne movne r2, #0 cbnz r2, .L22 .L2: adds r2, r3, #1 cmp r2, #129 bne .L4 movs r0, #0 pop {r3, pc} .L22: bl abort