[llvm] [DAG] expandVecReduce - widen sub-legal vectors to not prematurely scalarize later reduction levels (PR #194672)
Phoebe Wang via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 28 20:34:38 PDT 2026
================
@@ -94,28 +100,38 @@ define i32 @extract_last_active_v2i32(<2 x i32> %a, <2 x i1> %c) {
define i32 @extract_last_active_v3i32(<3 x i32> %a, <3 x i1> %c) {
; CHECK-LABEL: extract_last_active_v3i32:
; CHECK: # %bb.0:
+; CHECK-NEXT: movd %esi, %xmm2
+; CHECK-NEXT: movd %edi, %xmm1
+; CHECK-NEXT: movdqa %xmm1, %xmm3
+; CHECK-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; CHECK-NEXT: movd %edx, %xmm2
+; CHECK-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
; CHECK-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
-; CHECK-NEXT: movd %edx, %xmm0
-; CHECK-NEXT: movd %esi, %xmm1
-; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,0],xmm0[0,1]
-; CHECK-NEXT: pslld $31, %xmm1
-; CHECK-NEXT: psrad $31, %xmm1
-; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
+; CHECK-NEXT: pslld $31, %xmm3
+; CHECK-NEXT: psrad $31, %xmm3
+; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; CHECK-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
+; CHECK-NEXT: movdqa %xmm3, %xmm4
+; CHECK-NEXT: por %xmm0, %xmm4
+; CHECK-NEXT: pshufd {{.*#+}} xmm5 = xmm3[2,3,2,3]
+; CHECK-NEXT: por %xmm5, %xmm0
+; CHECK-NEXT: pcmpgtd %xmm0, %xmm4
+; CHECK-NEXT: pand %xmm4, %xmm3
+; CHECK-NEXT: pandn %xmm5, %xmm4
+; CHECK-NEXT: por %xmm3, %xmm4
+; CHECK-NEXT: movd %xmm4, %eax
+; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,1,1]
; CHECK-NEXT: movd %xmm0, %ecx
-; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
-; CHECK-NEXT: movd %xmm0, %eax
; CHECK-NEXT: cmpl %ecx, %eax
; CHECK-NEXT: cmoval %eax, %ecx
-; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]
-; CHECK-NEXT: movd %xmm0, %eax
-; CHECK-NEXT: cmpl %eax, %ecx
-; CHECK-NEXT: cmovbel %eax, %ecx
-; CHECK-NEXT: orl %esi, %edi
-; CHECK-NEXT: orl %edx, %edi
-; CHECK-NEXT: andb $1, %dil
+; CHECK-NEXT: andl $3, %ecx
+; CHECK-NEXT: por %xmm2, %xmm1
+; CHECK-NEXT: movd %xmm1, %edx
+; CHECK-NEXT: orl %esi, %edx
+; CHECK-NEXT: andb $1, %dl
; CHECK-NEXT: xorl %eax, %eax
-; CHECK-NEXT: cmpb $1, %dil
+; CHECK-NEXT: cmpb $1, %dl
----------------
phoebewang wrote:
`isPow2VectorType` doesn't prevent here?
https://github.com/llvm/llvm-project/pull/194672
More information about the llvm-commits
mailing list