https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91060
--- Comment #4 from Christophe Lyon <clyon at gcc dot gnu.org> --- Unfortunately, it's still failing as of r273133. It fails at the very first check: v1 = 2 + v0; check (short, 8, v0, v1, 2, +, l); The generated code for main is: main: @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 movw r3, #:lower16:.LANCHOR0 vldr d16, .L6 vldr d17, .L6+8 movt r3, #:upper16:.LANCHOR0 vmov.i16 q9, #2 @ v8hi ldr r0, [r3] str lr, [sp, #-4]! sub sp, sp, #20 vmov.16 d16[0], r0 sxth r1, r0 vadd.i16 q0, q8, q9 add ip, r1, #2 vmov.s16 r2, d0[3] cmp ip, r2 vst1.64 {d0-d1}, [sp:64] bne .L2 vmov.s16 r3, d0[2] cmp r3, #3 bne .L2 vmov.s16 r0, d0[1] cmp r0, #4 bne .L2 vmov.s16 r1, d0[0] cmp r1, #5 bne .L2 vmov.s16 ip, d1[3] cmp ip, #6 bne .L2 vmov.s16 r2, d1[2] cmp r2, #7 bne .L2 vmov.s16 r3, d1[1] cmp r3, #8 bne .L2 vmov.s16 r0, d1[0] cmp r0, #9 bne .L2 mov r0, #0 add sp, sp, #20 @ sp needed ldr pc, [sp], #4 .L2: bl abort .L7: .align 3 .L6: .short 1 .short 1 .short 2 .short 3 .short 4 .short 5 .short 6 .short 7 .size main, .-main And the QEMU execution trace with CPU regs before TB execution: IN: main 0x00010350: e3013024 movw r3, #4132 ; 0x1024 0x00010354: eddf0b27 vldr d16, [pc, #156] ; 0x103f8 0x00010358: eddf1b28 vldr d17, [pc, #160] ; 0x10400 0x0001035c: e3403002 movt r3, #2 ; 0x2 0x00010360: f2c02852 vmov.i16 q9, #2 ; 0x0002 0x00010364: e5930000 ldr r0, [r3] 0x00010368: e52de004 push {lr} ; (str lr, [sp, #-4]!) 0x0001036c: e24dd014 sub sp, sp, #20 ; 0x14 0x00010370: ee000bb0 vmov.16 d16[0], r0 0x00010374: e6bf1070 sxth r1, r0 0x00010378: f21008e2 vadd.i16 q0, q8, q9 0x0001037c: e281c002 add ip, r1, #2 ; 0x2 0x00010380: ee302b70 vmov.s16 r2, d0[3] 0x00010384: e15c0002 cmp ip, r2 0x00010388: f40d0adf vst1.64 {d0-d1}, [sp, :64] 0x0001038c: 1a000017 bne 0x103f0 R00=00000001 R01=40800534 R02=4080053c R03=00010350 R04=000104f8 R05=00000000 R06=00010408 R07=00000000 R08=00000000 R09=00000000 R10=40832000 R11=00000000 R12=00000000 R13=408003e8 R14=408b9808 R15=00010350 PSR=60070210 -ZC- A S usr32 ---------------- IN: main 0x00010390: ee303b30 vmov.s16 r3, d0[2] 0x00010394: e3530003 cmp r3, #3 ; 0x3 0x00010398: 1a000014 bne 0x103f0 R00=00000001 R01=00000001 R02=00000003 R03=00021024 R04=000104f8 R05=00000000 R06=00010408 R07=00000000 R08=00000000 R09=00000000 R10=40832000 R11=00000000 R12=00000003 R13=408003d0 R14=408b9808 R15=00010390 PSR=60070210 -ZC- A S usr32 ---------------- IN: main 0x0001039c: ee100b70 vmov.s16 r0, d0[1] 0x000103a0: e3500004 cmp r0, #4 ; 0x4 0x000103a4: 1a000011 bne 0x103f0 R00=00000001 R01=00000001 R02=00000003 R03=00000003 R04=000104f8 R05=00000000 R06=00010408 R07=00000000 R08=00000000 R09=00000000 R10=40832000 R11=00000000 R12=00000003 R13=408003d0 R14=408b9808 R15=0001039c PSR=60070210 -ZC- A S usr32 ---------------- IN: main 0x000103a8: ee101b30 vmov.s16 r1, d0[0] 0x000103ac: e3510005 cmp r1, #5 ; 0x5 0x000103b0: 1a00000e bne 0x103f0 R00=00000004 R01=00000001 R02=00000003 R03=00000003 R04=000104f8 R05=00000000 R06=00010408 R07=00000000 R08=00000000 R09=00000000 R10=40832000 R11=00000000 R12=00000003 R13=408003d0 R14=408b9808 R15=000103a8 PSR=60070210 -ZC- A S usr32 ---------------- IN: main 0x000103f0: ebffffd2 bl 0x10340 (abort) R00=00000004 R01=00000003 R02=00000003 R03=00000003 (****) R04=000104f8 R05=00000000 R06=00010408 R07=00000000 R08=00000000 R09=00000000 R10=40832000 R11=00000000 R12=00000003 R13=408003d0 R14=408b9808 R15=000103f0 PSR=80070210 N--- A S usr32 From (****) we can see that R1 contains 3 instead of the expected 5.