Issue 203756
Summary [SLP] masked load/store support
Labels new issue
Assignees
Reporter Andarwinux
    https://slp.godbolt.org/z/aqverE5ne

```c
void test(const int * restrict a, int * restrict b) {
    for (int i = 0; i < 16; ++i) {
        if (a[i] != 0)
            b[i] = a[i] * a[i];
 else
            b[i] = 1;
    }
}

void test_nonpow2(const int * restrict a, int * restrict b) {
    for (int i = 0; i < 13; ++i) {
 if (a[i] != 0)
            b[i] = a[i] * a[i];
        else
 b[i] = 1;
    }
}
```
-fno-unroll-loops LV:
```asm
.LCPI0_0:
 .long   1
test:
        vmovdqu64       zmm0, zmmword ptr [rdi]
 vpbroadcastd    zmm1, dword ptr [rip + .LCPI0_0]
        vptestmd        k1, zmm0, zmm0
        vpmulld zmm1 {k1}, zmm0, zmm0
        vmovdqu64 zmmword ptr [rsi], zmm1
        vzeroupper
        ret

.LCPI1_0:
 .long   1
test_nonpow2:
        mov     ax, 8191
        vpbroadcastd zmm1, dword ptr [rip + .LCPI1_0]
        kmovd   k1, eax
        vmovdqu32 zmm0 {k1} {z}, zmmword ptr [rdi]
        vptestmd        k2, zmm0, zmm0
        vpmulld zmm1 {k2}, zmm0, zmm0
        vmovdqu32       zmmword ptr [rsi] {k1}, zmm1
        vzeroupper
        ret
```
-funroll-loops SLP:
```asm
.LCPI0_0:
        .long   1
test:
        vmovdqu64 zmm0, zmmword ptr [rdi]
        vpbroadcastd    zmm1, dword ptr [rip + .LCPI0_0]
        vptestmd        k1, zmm0, zmm0
        vpmulld zmm1 {k1}, zmm0, zmm0
        vmovdqu64       zmmword ptr [rsi], zmm1
 vzeroupper
        ret

.LCPI1_0:
        .long   1
test_nonpow2:
 vmovdqu ymm0, ymmword ptr [rdi]
        vpbroadcastd    ymm1, dword ptr [rip + .LCPI1_0]
        mov     eax, dword ptr [rdi + 48]
        mov ecx, eax
        imul    ecx, eax
        test    eax, eax
        mov eax, 1
        vptestmd        k1, ymm0, ymm0
        vmovdqa ymm2, ymm1
 cmovne  eax, ecx
        vpmulld ymm2 {k1}, ymm0, ymm0
 vmovdqu ymmword ptr [rsi], ymm2
        vmovdqu xmm2, xmmword ptr [rdi + 32]
        vptestmd        k1, xmm2, xmm2
        vpmulld xmm1 {k1}, xmm2, xmm2
        vmovdqu xmmword ptr [rsi + 32], xmm1
        mov     dword ptr [rsi + 48], eax
        vzeroupper
        ret
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to