[llvm] X86: Add baseline test for computeKnownBits poison+vector handling (PR #213325)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 10 02:31:45 PDT 2026
================
@@ -0,0 +1,44 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s
+
+; Test that computeKnownBits treats poison elements aggressively.
+
+declare i32 @llvm.vector.reduce.or.v4i32(<4 x i32>)
+
+define i32 @poison_build_vector_known_bits(<4 x i32> %v) {
+; CHECK-LABEL: poison_build_vector_known_bits:
+; CHECK: # %bb.0:
+; CHECK-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-NEXT: packssdw %xmm0, %xmm0
+; CHECK-NEXT: packsswb %xmm0, %xmm0
+; CHECK-NEXT: psllw $5, %xmm0
+; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-NEXT: paddb %xmm0, %xmm0
+; CHECK-NEXT: paddb %xmm0, %xmm0
+; CHECK-NEXT: pxor %xmm1, %xmm1
+; CHECK-NEXT: pxor %xmm2, %xmm2
+; CHECK-NEXT: pcmpgtb %xmm0, %xmm2
+; CHECK-NEXT: movdqa {{.*#+}} xmm0 = [11,11,11,11,u,u,u,u,u,u,u,u,u,u,u,u]
+; CHECK-NEXT: movdqa %xmm0, %xmm3
+; CHECK-NEXT: paddb %xmm0, %xmm3
+; CHECK-NEXT: pand %xmm2, %xmm3
+; CHECK-NEXT: pandn %xmm0, %xmm2
+; CHECK-NEXT: por %xmm3, %xmm2
+; CHECK-NEXT: por %xmm0, %xmm2
+; CHECK-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
+; CHECK-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
+; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
+; CHECK-NEXT: por %xmm2, %xmm0
+; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
+; CHECK-NEXT: por %xmm0, %xmm1
+; CHECK-NEXT: movd %xmm1, %eax
+; CHECK-NEXT: retq
+ %icmp = icmp ugt <4 x i32> %v, splat (i32 -9)
+ %zext8 = zext <4 x i1> %icmp to <4 x i8>
+ %shl = shl <4 x i8> splat (i8 11), %zext8
+ %or = or <4 x i8> %shl, splat (i8 11)
+ %zext32 = zext <4 x i8> %or to <4 x i32>
+ %rdx = tail call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %zext32)
----------------
RKSimon wrote:
#199544 has landed - please can you merge/rebase to check the test still works as it should?
https://github.com/llvm/llvm-project/pull/213325
More information about the llvm-commits
mailing list