[llvm] b45e046 - [X86] Add non-uniform vector tests for 'one bit diff' comparison fold

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu May 26 03:13:34 PDT 2022


Author: Simon Pilgrim
Date: 2022-05-26T11:13:20+01:00
New Revision: b45e04685894a9d8467a291e2d9e8298330a5ab7

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

LOG: [X86] Add non-uniform vector tests for 'one bit diff' comparison fold

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/setcc-logic.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/setcc-logic.ll b/llvm/test/CodeGen/X86/setcc-logic.ll
index 3e7d7d32e0e7..af9335aecab1 100644
--- a/llvm/test/CodeGen/X86/setcc-logic.ll
+++ b/llvm/test/CodeGen/X86/setcc-logic.ll
@@ -523,6 +523,21 @@ define i1 @or_icmps_const_1bit_
diff (i8 %x) {
   ret i1 %r
 }
 
+define <4 x i32> @or_icmps_const_1bit_
diff _vec(<4 x i32> %x) {
+; CHECK-LABEL: or_icmps_const_1bit_
diff _vec:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [43,45,43,45]
+; CHECK-NEXT:    pcmpeqd %xmm0, %xmm1
+; CHECK-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-NEXT:    por %xmm1, %xmm0
+; CHECK-NEXT:    retq
+  %a = icmp eq <4 x i32> %x, <i32 43, i32 45, i32 43, i32 45>
+  %b = icmp eq <4 x i32> %x, <i32 45, i32 43, i32 45, i32 43>
+  %t = or <4 x i1> %a, %b
+  %r = sext <4 x i1> %t to <4 x i32>
+  ret <4 x i32> %r
+}
+
 define i1 @and_icmps_const_1bit_
diff (i32 %x) {
 ; CHECK-LABEL: and_icmps_const_1bit_
diff :
 ; CHECK:       # %bb.0:
@@ -536,6 +551,24 @@ define i1 @and_icmps_const_1bit_
diff (i32 %x) {
   ret i1 %r
 }
 
+define <4 x i32> @and_icmps_const_1bit_
diff _vec(<4 x i32> %x) {
+; CHECK-LABEL: and_icmps_const_1bit_
diff _vec:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [44,60,44,60]
+; CHECK-NEXT:    pcmpeqd %xmm0, %xmm1
+; CHECK-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-NEXT:    pcmpeqd %xmm2, %xmm2
+; CHECK-NEXT:    pxor %xmm0, %xmm2
+; CHECK-NEXT:    pandn %xmm2, %xmm1
+; CHECK-NEXT:    movdqa %xmm1, %xmm0
+; CHECK-NEXT:    retq
+  %a = icmp ne <4 x i32> %x, <i32 44, i32 60, i32 44, i32 60>
+  %b = icmp ne <4 x i32> %x, <i32 60, i32 44, i32 60, i32 44>
+  %t = and <4 x i1> %a, %b
+  %r = sext <4 x i1> %t to <4 x i32>
+  ret <4 x i32> %r
+}
+
 ; Negative test - extra use prevents optimization
 
 define i1 @or_icmps_const_1bit_
diff _extra_use(i8 %x, i8* %p) {


        


More information about the llvm-commits mailing list