[Bug middle-end/88490] New: Missed autovectorization when indices are different
bugzilla@poradnik-webmastera.com
gcc-bugzilla@gcc.gnu.org
Thu Dec 13 18:06:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88490
Bug ID: 88490
Summary: Missed autovectorization when indices are different
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: bugzilla@poradnik-webmastera.com
Target Milestone: ---
Code below reads and writes data using different indices what is checked by
"if" above loop. This can be autovectorized, as both memory areas do not
overlap. Code compiled with -O3 -march=skylake-avx512
[code]
struct S
{
double* __restrict__ * __restrict__ d;
};
void test(S* __restrict__ s, int n, int k)
{
if (n > k)
{
for (int n = 0; n < 2; ++n)
{
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 rcx, QWORD PTR [rdi]
movsx rdx, edx
mov rax, QWORD PTR [rcx+rdx*8]
mov rdx, QWORD PTR [rcx]
vmovsd xmm0, QWORD PTR [rax]
vmovsd QWORD PTR [rdx], xmm0
vmovsd xmm0, QWORD PTR [rax+8]
vmovsd QWORD PTR [rdx+8], xmm0
vmovsd xmm0, QWORD PTR [rax]
mov rdx, QWORD PTR [rcx+8]
vmovsd QWORD PTR [rdx], xmm0
vmovsd xmm0, QWORD PTR [rax+8]
vmovsd QWORD PTR [rdx+8], xmm0
.L3:
ret
[/asm]
More information about the Gcc-bugs
mailing list