[llvm] [X86] Add TuningSlowPDEP/PEXT flags and control vector PDEP/PEXT scalarization with them (PR #218980)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 26 10:51:16 PDT 2026
================
@@ -350,30 +522,109 @@ define <8 x i32> @pext_v8i32(<8 x i32> %val, <8 x i32> %mask) nounwind {
}
define <4 x i64> @pext_v4i64(<4 x i64> %val, <4 x i64> %mask) nounwind {
-; AVX2-LABEL: pext_v4i64:
-; AVX2: # %bb.0:
-; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
-; AVX2-NEXT: vpextrq $1, %xmm2, %rax
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
-; AVX2-NEXT: pextq %rax, %rcx, %rax
-; AVX2-NEXT: vmovq %rax, %xmm4
-; AVX2-NEXT: vmovq %xmm2, %rax
-; AVX2-NEXT: vmovq %xmm3, %rcx
-; AVX2-NEXT: pextq %rax, %rcx, %rax
-; AVX2-NEXT: vmovq %rax, %xmm2
-; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
-; AVX2-NEXT: vpextrq $1, %xmm1, %rax
-; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
-; AVX2-NEXT: pextq %rax, %rcx, %rax
-; AVX2-NEXT: vmovq %rax, %xmm3
-; AVX2-NEXT: vmovq %xmm1, %rax
-; AVX2-NEXT: vmovq %xmm0, %rcx
-; AVX2-NEXT: pextq %rax, %rcx, %rax
-; AVX2-NEXT: vmovq %rax, %xmm0
-; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
-; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
-; AVX2-NEXT: retq
+; AVX2-FAST-LABEL: pext_v4i64:
+; AVX2-FAST: # %bb.0:
+; AVX2-FAST-NEXT: vextracti128 $1, %ymm1, %xmm2
+; AVX2-FAST-NEXT: vpextrq $1, %xmm2, %rax
+; AVX2-FAST-NEXT: vextracti128 $1, %ymm0, %xmm3
+; AVX2-FAST-NEXT: vpextrq $1, %xmm3, %rcx
+; AVX2-FAST-NEXT: pextq %rax, %rcx, %rax
+; AVX2-FAST-NEXT: vmovq %rax, %xmm4
+; AVX2-FAST-NEXT: vmovq %xmm2, %rax
+; AVX2-FAST-NEXT: vmovq %xmm3, %rcx
+; AVX2-FAST-NEXT: pextq %rax, %rcx, %rax
+; AVX2-FAST-NEXT: vmovq %rax, %xmm2
+; AVX2-FAST-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
+; AVX2-FAST-NEXT: vpextrq $1, %xmm1, %rax
+; AVX2-FAST-NEXT: vpextrq $1, %xmm0, %rcx
+; AVX2-FAST-NEXT: pextq %rax, %rcx, %rax
+; AVX2-FAST-NEXT: vmovq %rax, %xmm3
+; AVX2-FAST-NEXT: vmovq %xmm1, %rax
+; AVX2-FAST-NEXT: vmovq %xmm0, %rcx
+; AVX2-FAST-NEXT: pextq %rax, %rcx, %rax
+; AVX2-FAST-NEXT: vmovq %rax, %xmm0
+; AVX2-FAST-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
+; AVX2-FAST-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-FAST-NEXT: retq
+;
+; AVX2-SLOW-LABEL: pext_v4i64:
+; AVX2-SLOW: # %bb.0:
+; AVX2-SLOW-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
+; AVX2-SLOW-NEXT: vpxor %ymm2, %ymm1, %ymm2
+; AVX2-SLOW-NEXT: vpaddq %ymm2, %ymm2, %ymm3
+; AVX2-SLOW-NEXT: movq $-1, %rax
+; AVX2-SLOW-NEXT: vmovq %rax, %xmm2
+; AVX2-SLOW-NEXT: vpbroadcastq %xmm2, %ymm2
+; AVX2-SLOW-NEXT: vpclmulqdq $1, %ymm2, %ymm3, %ymm4
----------------
Andarwinux wrote:
This doesn't match reality. cpu with slow-pext have no vpclmulqdq, so the actual sequence will be longer than this.
https://github.com/llvm/llvm-project/pull/218980
More information about the llvm-commits
mailing list