llvm / llvm/llvm-project

[X86] failed to lower complex float16 fma as native instructions (LV patterns)

Open
#223,948 1 comment 0 reactions 1 assignee Claimed by @RKSimon View on GitHub
backend:X86 missed-optimization
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

> https://godbolt.org/z/oxofYc5EP
>
> Looks like patterns from LV still can't be handled?
>
> @Andarwinux Please can you raise that as a separate issue.

_Originally posted by @RKSimon in [#216290](https://github.com/llvm/llvm-project/issues/216290#issuecomment-5680204844)_

```c
#include

void fmaconj (_Complex _Float16 *restrict a,
_Complex _Float16 *restrict b,
_Complex _Float16 *restrict c, int n)
{
for (int i = 0; i < 16; i++)
c[i] += a[i] * ~b[i];
}
```
-O3 -march=znver6 -ffast-math -funroll-loops (Vectorized by SLP)
```asm
fmaconj:
vmovups zmm0, zmmword ptr [rdi]
vmovups zmm1, zmmword ptr [rdx]
vfcmaddcph zmm1, zmm0, zmmword ptr [rsi]
vmovups zmmword ptr [rdx], zmm1
vzeroupper
ret
```
-O3 -march=znver6 -ffast-math -fno-unroll-loops (Vectorized by LV)
```asm
.LCPI0_0:
.short 0
.short 32
.short 1
.short 33
.short 2
.short 34
.short 3
.short 35
.short 4
.short 36
.short 5
.short 37
.short 6
.short 38
.short 7
.short 39
.short 24
.short 56
.short 25
.short 57
.short 26
.short 58
.short 27
.short 59
.short 28
.short 60
.short 29
.short 61
.short 30
.short 62
.short 31
.short 63
fmaconj:
vmovdqu64 zmm0, zmmword ptr [rdi]
vmovdqu64 zmm2, zmmword ptr [rsi]
vmovdqu64 zmm4, zmmword ptr [rdx]
vpmovdw ymm1, zmm0
vpmovdw ymm3, zmm2
vpmovdw ymm5, zmm4
vpsrld zmm2, zmm2, 16
vpsrld zmm0, zmm0, 16
vpmovdw ymm2, zmm2
vpmovdw ymm0, zmm0
vfmadd231ph ymm5, ymm3, ymm1
vmulph ymm1, ymm1, ymm2
vfmadd231ph ymm5, ymm2, ymm0
vfmsub231ph ymm1, ymm3, ymm0
vpsrld zmm0, zmm4, 16
vmovdqa64 zmm2, zmmword ptr [rip + .LCPI0_0]
vpmovdw ymm0, zmm0
vaddph ymm0, ymm1, ymm0
vinsertf64x4 zmm1, zmm5, ymm5, 1
vinsertf64x4 zmm0, zmm0, ymm0, 1
vpermi2w zmm2, zmm1, zmm0
vmovdqu64 zmmword ptr [rdx], zmm2
vzeroupper
ret
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.