https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88490

--- Comment #1 from Daniel Fruzynski <bugzi...@poradnik-webmastera.com> ---
Ehh, small typo. This is correct version, also not vectorized:

[code]
struct S
{
    double* __restrict__ * __restrict__ d;
};

void test(S* __restrict__ s, int n, int k)
{
    if (n > k)
    {
        for (int i = 0; i < 2; ++i)
        {
            s->d[n][0] = s->d[k][0];
            s->d[n][1] = s->d[k][1];
        }
    }
}
[/code]

[asm]
test(S*, int, int):
        cmp     esi, edx
        jle     .L3
        mov     rax, QWORD PTR [rdi]
        movsx   rdx, edx
        mov     rdx, QWORD PTR [rax+rdx*8]
        movsx   rsi, esi
        vmovsd  xmm0, QWORD PTR [rdx]
        mov     rax, QWORD PTR [rax+rsi*8]
        vmovsd  QWORD PTR [rax], xmm0
        vmovsd  xmm0, QWORD PTR [rdx+8]
        vmovsd  QWORD PTR [rax+8], xmm0
        vmovsd  xmm0, QWORD PTR [rdx]
        vmovsd  QWORD PTR [rax], xmm0
        vmovsd  xmm0, QWORD PTR [rdx+8]
        vmovsd  QWORD PTR [rax+8], xmm0
.L3:
        ret
[/asm]

Reply via email to