| 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