[llvm] 54ec0a3 - [X86] Add test coverage for #215223 (#215502)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 03:00:21 PDT 2026


Author: Simon Pilgrim
Date: 2026-08-11T10:00:16Z
New Revision: 54ec0a39adafbb588ab6612a0824ef39e9e51ff4

URL: https://github.com/llvm/llvm-project/commit/54ec0a39adafbb588ab6612a0824ef39e9e51ff4
DIFF: https://github.com/llvm/llvm-project/commit/54ec0a39adafbb588ab6612a0824ef39e9e51ff4.diff

LOG: [X86] Add test coverage for #215223 (#215502)

Most concerning is the different (poison) result on SSE2 targets, but
the failure for SimplifyDemandedBits to correctly do its thing for AVX+
is terrible as well.

Added: 
    llvm/test/CodeGen/X86/pr215223.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/pr215223.ll b/llvm/test/CodeGen/X86/pr215223.ll
new file mode 100644
index 0000000000000..f0fd74acd308b
--- /dev/null
+++ b/llvm/test/CodeGen/X86/pr215223.ll
@@ -0,0 +1,73 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64    | FileCheck %s --check-prefixes=SSE2
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=SSE42
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=AVX2
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX512
+
+define i32 @PR215223(i64 %a0){
+; SSE2-LABEL: PR215223:
+; SSE2:       # %bb.0:
+; SSE2-NEXT:    retq
+;
+; SSE42-LABEL: PR215223:
+; SSE42:       # %bb.0:
+; SSE42-NEXT:    movl $1, %eax
+; SSE42-NEXT:    retq
+;
+; AVX2-LABEL: PR215223:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    cmpq $1, %rdi
+; AVX2-NEXT:    movl $1047803978, %eax # imm = 0x3E74384A
+; AVX2-NEXT:    sbbl $0, %eax
+; AVX2-NEXT:    vmovd %eax, %xmm0
+; AVX2-NEXT:    vpbroadcastd %xmm0, %xmm0
+; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
+; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
+; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3
+; AVX2-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX2-NEXT:    vpor %xmm1, %xmm3, %xmm1
+; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
+; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]
+; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
+; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
+; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovd %xmm0, %eax
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: PR215223:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    cmpq $1, %rdi
+; AVX512-NEXT:    movl $1047803978, %eax # imm = 0x3E74384A
+; AVX512-NEXT:    sbbl $0, %eax
+; AVX512-NEXT:    vpbroadcastd %eax, %xmm0
+; AVX512-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
+; AVX512-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
+; AVX512-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3
+; AVX512-NEXT:    vpor %xmm1, %xmm3, %xmm1
+; AVX512-NEXT:    vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX512-NEXT:    vpor %xmm2, %xmm0, %xmm0
+; AVX512-NEXT:    vpternlogd {{.*#+}} xmm0 = m32bcst & (xmm0 | xmm1)
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
+; AVX512-NEXT:    vpor %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
+; AVX512-NEXT:    vpor %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovd %xmm0, %eax
+; AVX512-NEXT:    retq
+  %i1 = icmp eq i64 %a0, 0
+  %i2 = select i1 %i1, i32 1047803977, i32 1047803978
+  %i3 = insertelement <4 x i32> poison, i32 %i2, i64 0
+  %i4 = shufflevector <4 x i32> %i3, <4 x i32> poison, <4 x i32> zeroinitializer
+  %i5 = lshr <4 x i32> %i4, <i32 0, i32 1, i32 2, i32 3>
+  %i6 = lshr <4 x i32> %i4, <i32 4, i32 5, i32 6, i32 7>
+  %i7 = lshr <4 x i32> %i4, <i32 8, i32 9, i32 10, i32 11>
+  %i8 = or <4 x i32> %i7, %i5
+  %i9 = lshr <4 x i32> %i4, <i32 12, i32 13, i32 14, i32 15>
+  %i10 = or <4 x i32> %i9, %i6
+  %i11 = or <4 x i32> %i10, %i8
+  %i12 = and <4 x i32> %i11, splat (i32 1)
+  %i13 = tail call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %i12)
+  ret i32 %i13
+}


        


More information about the llvm-commits mailing list