[llvm] [DAG] Add computeKnownBits(FREEZE(X)) handling (PR #214095)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 4 23:52:13 PDT 2026


================
@@ -886,3 +886,86 @@ define i32 @freeze_vselect_demanded(<4 x i32> %csrc, <2 x i32> %a, <2 x i32> %b,
   %ext = extractelement <4 x i32> %fr, i64 0
   ret i32 %ext
 }
+
+; checks ComputeKnownBits works on FREEZE that can't be removed
+; vselect has multiple poison operands so  visitFREEZE can't drop
+; escape store so demanded-elts can't drop
+; known bits from lshr must reach final add folded into or
+define <2 x i64> @freeze_vselect_knownbits(<8 x i32> %csrc, <4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d, ptr %escape) {
+; X86-LABEL: freeze_vselect_knownbits:
+; X86:       # %bb.0:
+; X86-NEXT:    pushl %ebp
+; X86-NEXT:    .cfi_def_cfa_offset 8
+; X86-NEXT:    .cfi_offset %ebp, -8
+; X86-NEXT:    movl %esp, %ebp
+; X86-NEXT:    .cfi_def_cfa_register %ebp
+; X86-NEXT:    andl $-16, %esp
+; X86-NEXT:    subl $16, %esp
+; X86-NEXT:    movl 40(%ebp), %eax
+; X86-NEXT:    vmovdqa 24(%ebp), %xmm3
+; X86-NEXT:    vmovdqa 8(%ebp), %xmm4
+; X86-NEXT:    vbroadcastss {{.*#+}} xmm5 = [2147483647,2147483647,2147483647,2147483647]
+; X86-NEXT:    vpaddd %xmm5, %xmm0, %xmm6
+; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0
+; X86-NEXT:    vpxor %xmm7, %xmm7, %xmm7
+; X86-NEXT:    vpcmpgtd %xmm7, %xmm6, %xmm6
+; X86-NEXT:    vpackssdw %xmm6, %xmm6, %xmm6
+; X86-NEXT:    vpcmpgtd %xmm7, %xmm0, %xmm0
+; X86-NEXT:    vpaddd %xmm5, %xmm1, %xmm1
+; X86-NEXT:    vpsubd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2, %xmm2
+; X86-NEXT:    vpsrld $28, %xmm4, %xmm4
+; X86-NEXT:    vpsrld $28, %xmm3, %xmm3
+; X86-NEXT:    vblendvps %xmm0, %xmm4, %xmm3, %xmm0
+; X86-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm6[0,0,1,1,2,2,3,3]
+; X86-NEXT:    vblendvps %xmm3, %xmm1, %xmm2, %xmm1
+; X86-NEXT:    vmovaps %xmm0, 16(%eax)
+; X86-NEXT:    vmovaps %xmm1, (%eax)
+; X86-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0 # [16,0,16,0]
+; X86-NEXT:    movl %ebp, %esp
+; X86-NEXT:    popl %ebp
+; X86-NEXT:    .cfi_def_cfa %esp, 4
+; X86-NEXT:    vzeroupper
+; X86-NEXT:    retl
+;
+; X64-LABEL: freeze_vselect_knownbits:
+; X64:       # %bb.0:
+; X64-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [2147483647,2147483647,2147483647,2147483647]
+; X64-NEXT:    vpaddd %xmm5, %xmm0, %xmm6
+; X64-NEXT:    vpxor %xmm7, %xmm7, %xmm7
+; X64-NEXT:    vpcmpgtd %xmm7, %xmm6, %xmm6
+; X64-NEXT:    vextracti128 $1, %ymm0, %xmm0
+; X64-NEXT:    vpcmpgtd %xmm7, %xmm0, %xmm0
+; X64-NEXT:    vpackssdw %xmm0, %xmm6, %xmm0
+; X64-NEXT:    vpmovsxwd %xmm0, %ymm0
+; X64-NEXT:    vpaddd %xmm5, %xmm1, %xmm1
+; X64-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
+; X64-NEXT:    vpsubd %xmm5, %xmm2, %xmm2
+; X64-NEXT:    vpsrld $28, %xmm3, %xmm3
+; X64-NEXT:    vpsrld $28, %xmm4, %xmm4
+; X64-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
+; X64-NEXT:    vinserti128 $1, %xmm4, %ymm2, %ymm2
+; X64-NEXT:    vblendvps %ymm0, %ymm1, %ymm2, %ymm0
+; X64-NEXT:    vmovaps %ymm0, (%rdi)
+; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0
+; X64-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; X64-NEXT:    vzeroupper
+; X64-NEXT:    retq
+  %poisonable.src = add nsw <8 x i32> %csrc, splat (i32 2147483647)
----------------
arsenm wrote:

Can this be reduced 

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


More information about the llvm-commits mailing list