[llvm] 659e1b7 - [X86] Add more test case for folding select on vXi1

via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 16 06:26:09 PST 2023


Author: Luo, Yuanke
Date: 2023-01-16T22:25:59+08:00
New Revision: 659e1b7bb09eba04ce90cc072279263b61c63156

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

LOG: [X86] Add more test case for folding select on vXi1

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/fold-select.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/fold-select.ll b/llvm/test/CodeGen/X86/fold-select.ll
index ed622d8558802..0d7927fa1e64a 100644
--- a/llvm/test/CodeGen/X86/fold-select.ll
+++ b/llvm/test/CodeGen/X86/fold-select.ll
@@ -23,6 +23,49 @@ define <8 x float> @select_and_v8i1(<8 x i1> %a, <8 x i1> %b, <8 x i1> %c, <8 x
   ret <8 x float> %t4
 }
 
+define <8 x float> @select_and_v8i1_2(i8 %m1, i8 %m2, i8 %m3, <8 x float> %d) {
+; CHECK-LABEL: select_and_v8i1_2:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    kmovd %edi, %k0
+; CHECK-NEXT:    andl %edx, %esi
+; CHECK-NEXT:    kmovd %edx, %k1
+; CHECK-NEXT:    kandb %k0, %k1, %k1
+; CHECK-NEXT:    kmovd %esi, %k2
+; CHECK-NEXT:    kandnb %k2, %k0, %k0
+; CHECK-NEXT:    korb %k0, %k1, %k1
+; CHECK-NEXT:    vbroadcastss {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
+; CHECK-NEXT:    vmovaps %ymm0, %ymm1 {%k1}
+; CHECK-NEXT:    vmovaps %ymm1, %ymm0
+; CHECK-NEXT:    retq
+  %a = bitcast i8 %m1 to <8 x i1>
+  %b = bitcast i8 %m2 to <8 x i1>
+  %c = bitcast i8 %m3 to <8 x i1>
+  %t2 = select <8 x i1> %a, <8 x i1> <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>, <8 x i1> %b
+  %t3 = and <8 x i1> %c, %t2
+  %t4= select <8 x i1> %t3, <8 x float> %d, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+  ret <8 x float> %t4
+}
+
+define <8 x float> @select_and_v8i1_3(<8 x i16> %m1, <8 x i16> %m2, <8 x i16> %m3, <8 x float> %d) {
+; CHECK-LABEL: select_and_v8i1_3:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    vpcmpeqw %xmm2, %xmm1, %k1
+; CHECK-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 {%k1}
+; CHECK-NEXT:    vpcmpeqw %xmm2, %xmm0, %k1 {%k1}
+; CHECK-NEXT:    vpcmpneqw %xmm1, %xmm0, %k1 {%k1}
+; CHECK-NEXT:    korb %k1, %k0, %k1
+; CHECK-NEXT:    vbroadcastss {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
+; CHECK-NEXT:    vmovaps %ymm3, %ymm0 {%k1}
+; CHECK-NEXT:    retq
+  %a = icmp eq <8 x i16> %m1, %m2
+  %b = icmp eq <8 x i16> %m1, %m3
+  %c = icmp eq <8 x i16> %m2, %m3
+  %t2 = select <8 x i1> %a, <8 x i1> <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>, <8 x i1> %b
+  %t3 = and <8 x i1> %c, %t2
+  %t4= select <8 x i1> %t3, <8 x float> %d, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+  ret <8 x float> %t4
+}
+
 define <8 x float> @select_or_v8i1(<8 x i1> %a, <8 x i1> %b, <8 x i1> %c, <8 x float> %d) {
 ; CHECK-LABEL: select_or_v8i1:
 ; CHECK:       # %bb.0:
@@ -44,3 +87,47 @@ define <8 x float> @select_or_v8i1(<8 x i1> %a, <8 x i1> %b, <8 x i1> %c, <8 x f
   %t4= select <8 x i1> %t3, <8 x float> %d, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
   ret <8 x float> %t4
 }
+
+define <8 x float> @select_or_v8i1_2(i8 %m1, i8 %m2, i8 %m3, <8 x float> %d) {
+; CHECK-LABEL: select_or_v8i1_2:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    kmovd %edi, %k0
+; CHECK-NEXT:    orl %edx, %esi
+; CHECK-NEXT:    kmovd %edx, %k1
+; CHECK-NEXT:    kandb %k0, %k1, %k1
+; CHECK-NEXT:    kmovd %esi, %k2
+; CHECK-NEXT:    kandnb %k2, %k0, %k0
+; CHECK-NEXT:    korb %k0, %k1, %k1
+; CHECK-NEXT:    vbroadcastss {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
+; CHECK-NEXT:    vmovaps %ymm0, %ymm1 {%k1}
+; CHECK-NEXT:    vmovaps %ymm1, %ymm0
+; CHECK-NEXT:    retq
+  %a = bitcast i8 %m1 to <8 x i1>
+  %b = bitcast i8 %m2 to <8 x i1>
+  %c = bitcast i8 %m3 to <8 x i1>
+  %t2 = select <8 x i1> %a, <8 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x i1> %b
+  %t3 = or <8 x i1> %c, %t2
+  %t4= select <8 x i1> %t3, <8 x float> %d, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+  ret <8 x float> %t4
+}
+
+define <8 x float> @select_or_v8i1_3(<8 x i16> %m1, <8 x i16> %m2, <8 x i16> %m3, <8 x float> %d) {
+; CHECK-LABEL: select_or_v8i1_3:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    vpcmpeqw %xmm2, %xmm0, %k0
+; CHECK-NEXT:    vpcmpeqw %xmm2, %xmm1, %k1
+; CHECK-NEXT:    korb %k0, %k1, %k2
+; CHECK-NEXT:    vpcmpneqw %xmm1, %xmm0, %k0 {%k2}
+; CHECK-NEXT:    vpcmpeqw %xmm1, %xmm0, %k1 {%k1}
+; CHECK-NEXT:    korb %k0, %k1, %k1
+; CHECK-NEXT:    vbroadcastss {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
+; CHECK-NEXT:    vmovaps %ymm3, %ymm0 {%k1}
+; CHECK-NEXT:    retq
+  %a = icmp eq <8 x i16> %m1, %m2
+  %b = icmp eq <8 x i16> %m1, %m3
+  %c = icmp eq <8 x i16> %m2, %m3
+  %t2 = select <8 x i1> %a, <8 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x i1> %b
+  %t3 = or <8 x i1> %c, %t2
+  %t4= select <8 x i1> %t3, <8 x float> %d, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+  ret <8 x float> %t4
+}


        


More information about the llvm-commits mailing list