[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