[llvm] [DAG] combineVSelectWithAllOnesOrZeros - missing freeze (PR #150388)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 28 05:45:30 PDT 2025


================
@@ -126,22 +126,30 @@ define <2 x i64> @var_shuffle_zero_v2i64(<2 x i64> %v, <2 x i64> %indices) nounw
 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
 ; SSE41-NEXT:    por %xmm3, %xmm2
 ; SSE41-NEXT:    por %xmm2, %xmm1
-; SSE41-NEXT:    pxor %xmm3, %xmm3
-; SSE41-NEXT:    pcmpeqq %xmm1, %xmm3
-; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]
-; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[2,3,2,3]
-; SSE41-NEXT:    movdqa %xmm3, %xmm0
-; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm4
-; SSE41-NEXT:    pandn %xmm4, %xmm2
+; SSE41-NEXT:    movq %xmm1, %rax
+; SSE41-NEXT:    andl $1, %eax
+; SSE41-NEXT:    pextrq $1, %xmm1, %rcx
+; SSE41-NEXT:    andl $1, %ecx
+; SSE41-NEXT:    movaps %xmm0, -24(%rsp)
+; SSE41-NEXT:    movq -24(%rsp,%rcx,8), %xmm0 # xmm0 = mem[0],zero
+; SSE41-NEXT:    movq -24(%rsp,%rax,8), %xmm1 # xmm1 = mem[0],zero
+; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
+; SSE41-NEXT:    pandn %xmm1, %xmm2
----------------
RKSimon wrote:

This is likely that the freeze is affecting the LowerBUILD_VECTORAsVariablePermute pattern matching

https://github.com/llvm/llvm-project/pull/150388


More information about the llvm-commits mailing list