Issue 204228
Summary [X86][AArch64] failed to lower complex float16 as native instructions
Labels new issue
Assignees
Reporter Andarwinux
    https://dzone.com/articles/vectorization-in-llvm-and-gcc-for-intel-cpus-and-g
https://godbolt.org/z/6TGGP1Ev6
```c
#include <complex.h>

void fmaconj (_Complex _Float16 a[restrict 16],
 _Complex _Float16 b[restrict 16],
              _Complex _Float16 c[restrict 16])
{
  for (int i = 0; i < 16; i++)
  c[i] += a[i] * ~b[i];
}

```
gcc avx512fp16
```asm
"fmaconj":
        vmovdqu16 zmm0, ZMMWORD PTR [rdx]
        vmovdqu16       zmm1, ZMMWORD PTR [rdi]
 vfcmaddcph      zmm0, zmm1, ZMMWORD PTR [rsi]
        vmovdqu16 ZMMWORD PTR [rdx], zmm0
        vzeroupper
        ret
```
clang avx512fp16
```asm
fmaconj:
        vmovdqu64       zmm0, zmmword ptr [rdi]
        vmovdqu64       zmm1, zmmword ptr [rsi]
        vpshufb zmm2, zmm1, zmmword ptr [rip + .LCPI0_0]
        vprold  zmm3, zmm0, 16
 vpshufb zmm1, zmm1, zmmword ptr [rip + .LCPI0_1]
        vmulph  zmm1, zmm3, zmm1
        vfmsubadd231ph  zmm1, zmm0, zmm2
        vaddph  zmm0, zmm1, zmmword ptr [rdx]
        vmovups zmmword ptr [rdx], zmm0
 vzeroupper
        ret
```
gcc aarch64
```asm
fmaconj:
        ldp q22, q25, [x0]
        ldp     q21, q24, [x1]
        ldp     q20, q23, [x2]
        ldp     q28, q31, [x0, 32]
        ldp     q26, q29, [x2, 32]
        fcmla   v20.8h, v21.8h, v22.8h, #0
        fcmla   v23.8h, v24.8h, v25.8h, #0
        fcmla   v20.8h, v21.8h, v22.8h, #270
 fcmla   v23.8h, v24.8h, v25.8h, #270
        str     q20, [x2]
        ldp q27, q30, [x1, 32]
        fcmla   v26.8h, v27.8h, v28.8h, #0
 fcmla   v29.8h, v30.8h, v31.8h, #0
        fcmla   v26.8h, v27.8h, v28.8h, #270
        fcmla   v29.8h, v30.8h, v31.8h, #270
        stp     q23, q26, [x2, 16]
        str     q29, [x2, 48]
        ret
```
clang aarch64
```asm
fmaconj:
        ldp     q0, q1, [x0]
        ldp     q2, q3, [x1]
        ldp     q4, q5, [x0, #32]
        ldp     q6, q7, [x1, #32]
        uzp1    v16.8h, v2.8h, v0.8h
        uzp2    v17.8h, v0.8h, v0.8h
        uzp1    v20.8h, v3.8h, v0.8h
        uzp1    v18.8h, v0.8h, v0.8h
        uzp2    v19.8h, v2.8h, v0.8h
        fmul    v16.8h, v16.8h, v17.8h
        uzp2    v17.8h, v1.8h, v0.8h
        fmul    v17.8h, v20.8h, v17.8h
        uzp1    v20.8h, v6.8h, v0.8h
        fmls    v16.8h, v18.8h, v19.8h
        uzp1    v18.8h, v1.8h, v0.8h
        uzp2    v19.8h, v3.8h, v0.8h
        fmul    v1.8h, v3.8h, v1.8h
        fmls    v17.8h, v18.8h, v19.8h
        uzp2    v18.8h, v4.8h, v0.8h
        uzp1    v19.8h, v4.8h, v0.8h
        fmul    v18.8h, v20.8h, v18.8h
        uzp2    v20.8h, v6.8h, v0.8h
        fmls    v18.8h, v19.8h, v20.8h
        uzp1    v19.8h, v7.8h, v0.8h
        uzp2    v20.8h, v5.8h, v0.8h
        fmul    v0.8h, v2.8h, v0.8h
        fmul    v2.8h, v6.8h, v4.8h
        ldp     q3, q4, [x2]
 fmul    v19.8h, v19.8h, v20.8h
        faddp   v0.8h, v0.8h, v0.8h
 zip1    v0.8h, v0.8h, v16.8h
        faddp   v1.8h, v1.8h, v0.8h
 faddp   v2.8h, v2.8h, v0.8h
        fadd    v0.8h, v0.8h, v3.8h
 zip1    v1.8h, v1.8h, v17.8h
        uzp1    v3.8h, v5.8h, v0.8h
 zip1    v2.8h, v2.8h, v18.8h
        fadd    v1.8h, v1.8h, v4.8h
 stp     q0, q1, [x2]
        uzp2    v0.8h, v7.8h, v0.8h
        fmls v19.8h, v3.8h, v0.8h
        ldp     q0, q1, [x2, #32]
        fadd v0.8h, v2.8h, v0.8h
        fmul    v2.8h, v7.8h, v5.8h
        faddp v2.8h, v2.8h, v0.8h
        zip1    v2.8h, v2.8h, v19.8h
        fadd v1.8h, v2.8h, v1.8h
        stp     q0, q1, [x2, #32]
        ret
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to