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.

Reply via email to