llvm / llvm/llvm-project

[X86][AVX512] suboptimal vXi1 codegen with avx512

Open
#198,162 10 comments 0 reactions 0 assignees View on GitHub
backend:X86 missed-optimization
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

https://avx512.godbolt.org/z/j9jPWrv4E
```llvm
define <8 x i32> @test(i1 %cmp2.13.i, <4 x i1> %0, <8 x i1> %1, i1 %cmp2.7.i, i1 %cmp2.8.i, i1 %cmp2.9.i, i1 %cmp2.10.i) {
entry:
%2 = insertelement <8 x i1> %1, i1 %cmp2.9.i, i64 0
%3 = insertelement <8 x i1> %2, i1 %cmp2.10.i, i64 1
%4 = insertelement <8 x i1> %3, i1 %cmp2.7.i, i64 2
%5 = insertelement <8 x i1> %4, i1 %cmp2.8.i, i64 3
%6 = insertelement <8 x i1> %5, i1 %cmp2.13.i, i64 4
%7 = insertelement <4 x i1> %0, i1 false, i64 0
%8 = zext <4 x i1> %7 to <4 x i32>
%9 = shufflevector <4 x i32> %8, <4 x i32> zeroinitializer, <8 x i32>
%10 = insertelement <8 x i1> %6, i1 true, i64 1
%11 = zext <8 x i1> %10 to <8 x i32>
%12 = or <8 x i32> %9, %11
ret <8 x i32> %12
}
```
-mcpu=x86-64-v3
```asm
.LCPI0_0:
.long 1 # 0x1
test: # @test
vpinsrw xmm1, xmm1, ecx, 0
mov eax, 1
vpinsrw xmm1, xmm1, eax, 1
vpinsrw xmm1, xmm1, esi, 2
vpinsrw xmm1, xmm1, edx, 3
vpinsrw xmm1, xmm1, edi, 4
vpxor xmm2, xmm2, xmm2
vpblendd xmm0, xmm0, xmm2, 1 # xmm0 = xmm2[0],xmm0[1,2,3]
vpbroadcastd ymm2, dword ptr [rip + .LCPI0_0] # ymm2 = [1,1,1,1,1,1,1,1]
vpand xmm0, xmm0, xmm2
vpmovzxwd ymm1, xmm1 # ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero
vpand ymm1, ymm1, ymm2
vpor ymm0, ymm0, ymm1
ret
```
-mcpu=x86-64-v4
```asm
test: # @test
vpslld xmm0, xmm0, 31
vpmovd2m k0, xmm0
vpsllw xmm0, xmm1, 15
vpmovw2m k1, xmm0
kmovd k2, ecx
kshiftlb k2, k2, 7
kshiftrb k2, k2, 7
kshiftrb k1, k1, 1
kshiftlb k1, k1, 1
korb k1, k1, k2
mov al, -3
kmovd k2, eax
kandb k1, k1, k2
kmovd k3, r8d
kshiftlb k3, k3, 7
kshiftrb k3, k3, 6
korb k1, k1, k3
mov al, -5
kmovd k3, eax
kandb k1, k1, k2
mov al, 1
kmovd k2, eax
kshiftlb k2, k2, 7
kshiftrb k2, k2, 6
korb k1, k1, k2
kandb k1, k1, k3
kmovd k2, esi
kshiftlb k2, k2, 7
kshiftrb k2, k2, 5
korb k1, k1, k2
mov al, -9
kmovd k2, eax
kandb k1, k1, k2
kmovd k2, edx
kshiftlb k2, k2, 7
kshiftrb k2, k2, 4
korb k1, k1, k2
mov al, -17
kmovd k2, eax
kandb k1, k1, k2
kmovd k2, edi
kshiftlb k2, k2, 7
kshiftrb k2, k2, 3
korb k1, k1, k2
kshiftrb k0, k0, 1
kshiftlb k0, k0, 1
vpmovm2d xmm0, k0
vpsrld xmm0, xmm0, 31
vpmovm2d ymm1, k1
vpsrld ymm1, ymm1, 31
vpor ymm0, ymm0, ymm1
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.