Issue 207889
Summary [X86][[LV] suboptimal byte dot-product vectorization
Labels backend:X86, vectorizers
Assignees
Reporter Andarwinux
    found from https://github.com/gcc-mirror/gcc/commit/5be7b70e769e6e992dbf631cd37e24bd9da9e05e

https://godbolt.org/z/vqGT58Mv4

```c++
char *fn_c, *fn_d;
int fn() {
  int res = 0;
  for (int i = 0; i < 64; ++i)
 res += fn_c[i] * fn_d[i];
  return res;
}
```
gcc:
```asm
"fn()":
 mov rax, QWORD PTR "fn_c"[rip]
  vpxor xmm3, xmm3, xmm3
  vmovdqu8 zmm0, ZMMWORD PTR [rax]
  mov rax, QWORD PTR "fn_d"[rip]
  vmovdqu8 zmm1, ZMMWORD PTR [rax]
  vpmovsxbw zmm4, ymm0
  vextracti64x4 ymm0, zmm0, 0x1
 vpmovsxbw zmm0, ymm0
  vpmovsxbw zmm5, ymm1
  vextracti64x4 ymm1, zmm1, 0x1
  vpmovsxbw zmm2, ymm1
  vmovdqa32 zmm1, zmm3
  vpdpwssd zmm3, zmm0, zmm2
  vpdpwssd zmm1, zmm4, zmm5
  vpaddd zmm1, zmm1, zmm3
  vextracti32x8 ymm0, zmm1, 0x1
  vpaddd ymm0, ymm0, ymm1
  vextracti32x4 xmm1, ymm0, 0x1
 vpaddd xmm0, xmm1, xmm0
  vpshufd xmm1, xmm0, 238
  vpaddd xmm1, xmm1, xmm0
  vpshufd xmm0, xmm1, 85
  vpaddd xmm0, xmm0, xmm1
  vmovd eax, xmm0
  vzeroupper
  ret
"fn_d":
  .zero 8
"fn_c":
  .zero 8
```
clang:
```asm
fn():
  mov rax, qword ptr [rip + fn_c]
  mov rcx, qword ptr [rip + fn_d]
  vpmovsxbw ymm4, xmmword ptr [rcx + 16]
  vpmovsxbw ymm5, xmmword ptr [rax + 16]
  vpmovsxbw ymm7, xmmword ptr [rcx]
 vpmovsxbw ymm6, xmmword ptr [rax]
  vpmovsxbw ymm2, xmmword ptr [rcx + 32]
 vpmovsxbw ymm3, xmmword ptr [rax + 32]
  vpmovsxbw ymm0, xmmword ptr [rcx + 48]
  vpmovsxbw ymm1, xmmword ptr [rax + 48]
  vpmaddwd ymm4, ymm4, ymm5
 {vex} vpdpwssd ymm4, ymm7, ymm6
  {vex} vpdpwssd ymm4, ymm2, ymm3
  {vex} vpdpwssd ymm4, ymm0, ymm1
  vextracti128 xmm0, ymm4, 1
  vpaddd xmm0, xmm4, xmm0
  vpshufd xmm1, xmm0, 238
  vpaddd xmm0, xmm0, xmm1
  vpshufd xmm1, xmm0, 85
  vpaddd xmm0, xmm0, xmm1
  vmovd eax, xmm0
  vzeroupper
 ret

fn_c:
  .quad 0

fn_d:
  .quad 0
```
clang generated more memory loads and failed to emit zmm vpdpwssd.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to