[llvm] 0e4ecfa - [X86] Add test for PR38788 missing PTEST fold

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 13 05:45:22 PST 2022


Author: Simon Pilgrim
Date: 2022-02-13T13:43:42Z
New Revision: 0e4ecfaf5a29ca146cbcc08ed38e7b7565d4580f

URL: https://github.com/llvm/llvm-project/commit/0e4ecfaf5a29ca146cbcc08ed38e7b7565d4580f
DIFF: https://github.com/llvm/llvm-project/commit/0e4ecfaf5a29ca146cbcc08ed38e7b7565d4580f.diff

LOG: [X86] Add test for PR38788 missing PTEST fold

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/combine-ptest.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/combine-ptest.ll b/llvm/test/CodeGen/X86/combine-ptest.ll
index 33691308fd93..1957f49f7214 100644
--- a/llvm/test/CodeGen/X86/combine-ptest.ll
+++ b/llvm/test/CodeGen/X86/combine-ptest.ll
@@ -416,6 +416,54 @@ define i32 @ptestz_v2i64_concat(<4 x i64> %c, <4 x i64> %d, i32 %a, i32 %b) {
   ret i32 %t9
 }
 
+; FIXME: Foldable to ptest(xor(%0,%1),xor(%0,%1))
+define i1 @PR38788_0(<4 x i32> %0, <4 x i32> %1) {
+; CHECK-LABEL: PR38788_0:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
+; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
+; CHECK-NEXT:    vptest %xmm1, %xmm0
+; CHECK-NEXT:    setb %al
+; CHECK-NEXT:    retq
+  %3 = icmp eq <4 x i32> %0, %1
+  %4 = sext <4 x i1> %3 to <4 x i32>
+  %5 = bitcast <4 x i32> %4 to <2 x i64>
+  %6 = tail call i32 @llvm.x86.sse41.ptestc(<2 x i64> %5, <2 x i64> <i64 -1, i64 -1>)
+  %7 = icmp eq i32 %6, 1
+  ret i1 %7
+}
+
+define i1 @PR38788_1(<16 x i16> %0, <16 x i16> %1) {
+; AVX1-LABEL: PR38788_1:
+; AVX1:       # %bb.0:
+; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
+; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
+; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm3, %xmm2
+; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
+; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
+; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
+; AVX1-NEXT:    vptest %ymm1, %ymm0
+; AVX1-NEXT:    setae %al
+; AVX1-NEXT:    vzeroupper
+; AVX1-NEXT:    retq
+;
+; AVX2-LABEL: PR38788_1:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
+; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
+; AVX2-NEXT:    vptest %ymm1, %ymm0
+; AVX2-NEXT:    setae %al
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+  %3 = icmp eq <16 x i16> %0, %1
+  %4 = sext <16 x i1> %3 to <16 x i16>
+  %5 = bitcast <16 x i16> %4 to <4 x i64>
+  %6 = tail call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %5, <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1>)
+  %7 = icmp eq i32 %6, 0
+  ret i1 %7
+}
+
 declare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) nounwind readnone
 declare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone
 declare i32 @llvm.x86.sse41.ptestnzc(<2 x i64>, <2 x i64>) nounwind readnone


        


More information about the llvm-commits mailing list