Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / kshift.ll
blobf4efacc1946cff95c7bd23bd83c863b674601294
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefix=KNL
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl,avx512dq,avx512bw | FileCheck %s --check-prefix=SKX
5 define i8 @kshiftl_v8i1_1(<8 x i64> %x, <8 x i64> %y) {
6 ; KNL-LABEL: kshiftl_v8i1_1:
7 ; KNL:       # %bb.0:
8 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
9 ; KNL-NEXT:    kshiftlw $1, %k0, %k1
10 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
11 ; KNL-NEXT:    kmovw %k0, %eax
12 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
13 ; KNL-NEXT:    vzeroupper
14 ; KNL-NEXT:    retq
16 ; SKX-LABEL: kshiftl_v8i1_1:
17 ; SKX:       # %bb.0:
18 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
19 ; SKX-NEXT:    kshiftlb $1, %k0, %k1
20 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
21 ; SKX-NEXT:    kmovd %k0, %eax
22 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
23 ; SKX-NEXT:    vzeroupper
24 ; SKX-NEXT:    retq
25   %a = icmp eq <8 x i64> %x, zeroinitializer
26   %b = shufflevector <8 x i1> %a, <8 x i1> zeroinitializer, <8 x i32> <i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6>
27   %c = icmp eq <8 x i64> %y, zeroinitializer
28   %d = and <8 x i1> %b, %c
29   %e = bitcast <8 x i1> %d to i8
30   ret i8 %e
33 define i16 @kshiftl_v16i1_1(<16 x i32> %x, <16 x i32> %y) {
34 ; KNL-LABEL: kshiftl_v16i1_1:
35 ; KNL:       # %bb.0:
36 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k0
37 ; KNL-NEXT:    kshiftlw $1, %k0, %k1
38 ; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
39 ; KNL-NEXT:    kmovw %k0, %eax
40 ; KNL-NEXT:    # kill: def $ax killed $ax killed $eax
41 ; KNL-NEXT:    vzeroupper
42 ; KNL-NEXT:    retq
44 ; SKX-LABEL: kshiftl_v16i1_1:
45 ; SKX:       # %bb.0:
46 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k0
47 ; SKX-NEXT:    kshiftlw $1, %k0, %k1
48 ; SKX-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
49 ; SKX-NEXT:    kmovd %k0, %eax
50 ; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
51 ; SKX-NEXT:    vzeroupper
52 ; SKX-NEXT:    retq
53   %a = icmp eq <16 x i32> %x, zeroinitializer
54   %b = shufflevector <16 x i1> %a, <16 x i1> zeroinitializer, <16 x i32> <i32 16, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
55   %c = icmp eq <16 x i32> %y, zeroinitializer
56   %d = and <16 x i1> %b, %c
57   %e = bitcast <16 x i1> %d to i16
58   ret i16 %e
61 define i32 @kshiftl_v32i1_1(<32 x i16> %x, <32 x i16> %y) {
62 ; KNL-LABEL: kshiftl_v32i1_1:
63 ; KNL:       # %bb.0:
64 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
65 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
66 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm2, %ymm2
67 ; KNL-NEXT:    vpmovsxwd %ymm2, %zmm2
68 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k1
69 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0
70 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
71 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k2
72 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
73 ; KNL-NEXT:    vpternlogd $255, %zmm2, %zmm2, %zmm2 {%k1} {z}
74 ; KNL-NEXT:    valignd {{.*#+}} zmm0 = zmm0[15],zmm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
75 ; KNL-NEXT:    kshiftlw $1, %k2, %k1
76 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
77 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm2, %ymm2
78 ; KNL-NEXT:    vpmovsxwd %ymm2, %zmm2
79 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k2
80 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
81 ; KNL-NEXT:    vpmovsxwd %ymm1, %zmm1
82 ; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k0 {%k1}
83 ; KNL-NEXT:    kmovw %k0, %ecx
84 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k2}
85 ; KNL-NEXT:    kmovw %k0, %eax
86 ; KNL-NEXT:    shll $16, %eax
87 ; KNL-NEXT:    orl %ecx, %eax
88 ; KNL-NEXT:    vzeroupper
89 ; KNL-NEXT:    retq
91 ; SKX-LABEL: kshiftl_v32i1_1:
92 ; SKX:       # %bb.0:
93 ; SKX-NEXT:    vptestnmw %zmm0, %zmm0, %k0
94 ; SKX-NEXT:    kshiftld $1, %k0, %k1
95 ; SKX-NEXT:    vptestnmw %zmm1, %zmm1, %k0 {%k1}
96 ; SKX-NEXT:    kmovd %k0, %eax
97 ; SKX-NEXT:    vzeroupper
98 ; SKX-NEXT:    retq
99   %a = icmp eq <32 x i16> %x, zeroinitializer
100   %b = shufflevector <32 x i1> %a, <32 x i1> zeroinitializer, <32 x i32> <i32 32, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
101   %c = icmp eq <32 x i16> %y, zeroinitializer
102   %d = and <32 x i1> %b, %c
103   %e = bitcast <32 x i1> %d to i32
104   ret i32 %e
107 define i64 @kshiftl_v64i1_1(<64 x i8> %x, <64 x i8> %y) {
108 ; KNL-LABEL: kshiftl_v64i1_1:
109 ; KNL:       # %bb.0:
110 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
111 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm3
112 ; KNL-NEXT:    vpmovsxbd %xmm3, %zmm4
113 ; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k1
114 ; KNL-NEXT:    vextracti128 $1, %ymm3, %xmm3
115 ; KNL-NEXT:    vpmovsxbd %xmm3, %zmm3
116 ; KNL-NEXT:    vptestmd %zmm3, %zmm3, %k2
117 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0
118 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
119 ; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm3
120 ; KNL-NEXT:    vpmovsxbd %xmm3, %zmm3
121 ; KNL-NEXT:    vptestmd %zmm3, %zmm3, %k3
122 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
123 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k4
124 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k4} {z}
125 ; KNL-NEXT:    vpternlogd $255, %zmm3, %zmm3, %zmm3 {%k3} {z}
126 ; KNL-NEXT:    valignd {{.*#+}} zmm3 = zmm0[15],zmm3[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
127 ; KNL-NEXT:    vpternlogd $255, %zmm4, %zmm4, %zmm4 {%k2} {z}
128 ; KNL-NEXT:    valignd {{.*#+}} zmm0 = zmm4[15],zmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
129 ; KNL-NEXT:    vpternlogd $255, %zmm5, %zmm5, %zmm5 {%k1} {z}
130 ; KNL-NEXT:    valignd {{.*#+}} zmm4 = zmm5[15],zmm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
131 ; KNL-NEXT:    kshiftlw $1, %k1, %k3
132 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm5
133 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm5, %ymm5
134 ; KNL-NEXT:    vextracti128 $1, %ymm5, %xmm6
135 ; KNL-NEXT:    vpmovsxbd %xmm6, %zmm6
136 ; KNL-NEXT:    vptestmd %zmm6, %zmm6, %k1
137 ; KNL-NEXT:    vpmovsxbd %xmm5, %zmm5
138 ; KNL-NEXT:    vptestmd %zmm5, %zmm5, %k2
139 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm1, %ymm1
140 ; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm2
141 ; KNL-NEXT:    vpmovsxbd %xmm2, %zmm2
142 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k4
143 ; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
144 ; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k0 {%k3}
145 ; KNL-NEXT:    kmovw %k0, %eax
146 ; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k0 {%k4}
147 ; KNL-NEXT:    kmovw %k0, %ecx
148 ; KNL-NEXT:    shll $16, %ecx
149 ; KNL-NEXT:    orl %eax, %ecx
150 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k2}
151 ; KNL-NEXT:    kmovw %k0, %edx
152 ; KNL-NEXT:    vptestmd %zmm3, %zmm3, %k0 {%k1}
153 ; KNL-NEXT:    kmovw %k0, %eax
154 ; KNL-NEXT:    shll $16, %eax
155 ; KNL-NEXT:    orl %edx, %eax
156 ; KNL-NEXT:    shlq $32, %rax
157 ; KNL-NEXT:    orq %rcx, %rax
158 ; KNL-NEXT:    vzeroupper
159 ; KNL-NEXT:    retq
161 ; SKX-LABEL: kshiftl_v64i1_1:
162 ; SKX:       # %bb.0:
163 ; SKX-NEXT:    vptestnmb %zmm0, %zmm0, %k0
164 ; SKX-NEXT:    kshiftlq $1, %k0, %k1
165 ; SKX-NEXT:    vptestnmb %zmm1, %zmm1, %k0 {%k1}
166 ; SKX-NEXT:    kmovq %k0, %rax
167 ; SKX-NEXT:    vzeroupper
168 ; SKX-NEXT:    retq
169   %a = icmp eq <64 x i8> %x, zeroinitializer
170   %b = shufflevector <64 x i1> %a, <64 x i1> zeroinitializer, <64 x i32> <i32 64, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62>
171   %c = icmp eq <64 x i8> %y, zeroinitializer
172   %d = and <64 x i1> %b, %c
173   %e = bitcast <64 x i1> %d to i64
174   ret i64 %e
177 define i8 @kshiftl_v8i1_7(<8 x i64> %x, <8 x i64> %y) {
178 ; KNL-LABEL: kshiftl_v8i1_7:
179 ; KNL:       # %bb.0:
180 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
181 ; KNL-NEXT:    kshiftlw $7, %k0, %k1
182 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
183 ; KNL-NEXT:    kmovw %k0, %eax
184 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
185 ; KNL-NEXT:    vzeroupper
186 ; KNL-NEXT:    retq
188 ; SKX-LABEL: kshiftl_v8i1_7:
189 ; SKX:       # %bb.0:
190 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
191 ; SKX-NEXT:    kshiftlb $7, %k0, %k1
192 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
193 ; SKX-NEXT:    kmovd %k0, %eax
194 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
195 ; SKX-NEXT:    vzeroupper
196 ; SKX-NEXT:    retq
197   %a = icmp eq <8 x i64> %x, zeroinitializer
198   %b = shufflevector <8 x i1> zeroinitializer, <8 x i1> %a, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
199   %c = icmp eq <8 x i64> %y, zeroinitializer
200   %d = and <8 x i1> %b, %c
201   %e = bitcast <8 x i1> %d to i8
202   ret i8 %e
205 define i16 @kshiftl_v16i1_15(<16 x i32> %x, <16 x i32> %y) {
206 ; KNL-LABEL: kshiftl_v16i1_15:
207 ; KNL:       # %bb.0:
208 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k0
209 ; KNL-NEXT:    kshiftlw $15, %k0, %k1
210 ; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
211 ; KNL-NEXT:    kmovw %k0, %eax
212 ; KNL-NEXT:    # kill: def $ax killed $ax killed $eax
213 ; KNL-NEXT:    vzeroupper
214 ; KNL-NEXT:    retq
216 ; SKX-LABEL: kshiftl_v16i1_15:
217 ; SKX:       # %bb.0:
218 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k0
219 ; SKX-NEXT:    kshiftlw $15, %k0, %k1
220 ; SKX-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
221 ; SKX-NEXT:    kmovd %k0, %eax
222 ; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
223 ; SKX-NEXT:    vzeroupper
224 ; SKX-NEXT:    retq
225   %a = icmp eq <16 x i32> %x, zeroinitializer
226   %b = shufflevector <16 x i1> zeroinitializer, <16 x i1> %a, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
227   %c = icmp eq <16 x i32> %y, zeroinitializer
228   %d = and <16 x i1> %b, %c
229   %e = bitcast <16 x i1> %d to i16
230   ret i16 %e
233 define i32 @kshiftl_v32i1_31(<32 x i16> %x, <32 x i16> %y) {
234 ; KNL-LABEL: kshiftl_v32i1_31:
235 ; KNL:       # %bb.0:
236 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
237 ; KNL-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
238 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
239 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
240 ; KNL-NEXT:    kshiftlw $15, %k0, %k1
241 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm0
242 ; KNL-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
243 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
244 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
245 ; KNL-NEXT:    kmovw %k0, %eax
246 ; KNL-NEXT:    shll $16, %eax
247 ; KNL-NEXT:    vzeroupper
248 ; KNL-NEXT:    retq
250 ; SKX-LABEL: kshiftl_v32i1_31:
251 ; SKX:       # %bb.0:
252 ; SKX-NEXT:    vptestnmw %zmm0, %zmm0, %k0
253 ; SKX-NEXT:    kshiftld $31, %k0, %k1
254 ; SKX-NEXT:    vptestnmw %zmm1, %zmm1, %k0 {%k1}
255 ; SKX-NEXT:    kmovd %k0, %eax
256 ; SKX-NEXT:    vzeroupper
257 ; SKX-NEXT:    retq
258   %a = icmp eq <32 x i16> %x, zeroinitializer
259   %b = shufflevector <32 x i1> zeroinitializer, <32 x i1> %a, <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32>
260   %c = icmp eq <32 x i16> %y, zeroinitializer
261   %d = and <32 x i1> %b, %c
262   %e = bitcast <32 x i1> %d to i32
263   ret i32 %e
266 define i64 @kshiftl_v64i1_63(<64 x i8> %x, <64 x i8> %y) {
267 ; KNL-LABEL: kshiftl_v64i1_63:
268 ; KNL:       # %bb.0:
269 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
270 ; KNL-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
271 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
272 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
273 ; KNL-NEXT:    kshiftlw $15, %k0, %k1
274 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm0
275 ; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
276 ; KNL-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
277 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
278 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
279 ; KNL-NEXT:    kmovw %k0, %eax
280 ; KNL-NEXT:    movzwl %ax, %eax
281 ; KNL-NEXT:    shlq $48, %rax
282 ; KNL-NEXT:    vzeroupper
283 ; KNL-NEXT:    retq
285 ; SKX-LABEL: kshiftl_v64i1_63:
286 ; SKX:       # %bb.0:
287 ; SKX-NEXT:    vptestnmb %zmm0, %zmm0, %k0
288 ; SKX-NEXT:    kshiftlq $63, %k0, %k1
289 ; SKX-NEXT:    vptestnmb %zmm1, %zmm1, %k0 {%k1}
290 ; SKX-NEXT:    kmovq %k0, %rax
291 ; SKX-NEXT:    vzeroupper
292 ; SKX-NEXT:    retq
293   %a = icmp eq <64 x i8> %x, zeroinitializer
294   %b = shufflevector <64 x i1> zeroinitializer, <64 x i1> %a, <64 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64>
295   %c = icmp eq <64 x i8> %y, zeroinitializer
296   %d = and <64 x i1> %b, %c
297   %e = bitcast <64 x i1> %d to i64
298   ret i64 %e
301 define i8 @kshiftr_v8i1_1(<8 x i64> %x, <8 x i64> %y) {
302 ; KNL-LABEL: kshiftr_v8i1_1:
303 ; KNL:       # %bb.0:
304 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
305 ; KNL-NEXT:    kshiftlw $8, %k0, %k0
306 ; KNL-NEXT:    kshiftrw $9, %k0, %k1
307 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
308 ; KNL-NEXT:    kmovw %k0, %eax
309 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
310 ; KNL-NEXT:    vzeroupper
311 ; KNL-NEXT:    retq
313 ; SKX-LABEL: kshiftr_v8i1_1:
314 ; SKX:       # %bb.0:
315 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
316 ; SKX-NEXT:    kshiftrb $1, %k0, %k1
317 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
318 ; SKX-NEXT:    kmovd %k0, %eax
319 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
320 ; SKX-NEXT:    vzeroupper
321 ; SKX-NEXT:    retq
322   %a = icmp eq <8 x i64> %x, zeroinitializer
323   %b = shufflevector <8 x i1> %a, <8 x i1> zeroinitializer, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
324   %c = icmp eq <8 x i64> %y, zeroinitializer
325   %d = and <8 x i1> %b, %c
326   %e = bitcast <8 x i1> %d to i8
327   ret i8 %e
330 define i16 @kshiftr_v16i1_1(<16 x i32> %x, <16 x i32> %y) {
331 ; KNL-LABEL: kshiftr_v16i1_1:
332 ; KNL:       # %bb.0:
333 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k0
334 ; KNL-NEXT:    kshiftrw $1, %k0, %k1
335 ; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
336 ; KNL-NEXT:    kmovw %k0, %eax
337 ; KNL-NEXT:    # kill: def $ax killed $ax killed $eax
338 ; KNL-NEXT:    vzeroupper
339 ; KNL-NEXT:    retq
341 ; SKX-LABEL: kshiftr_v16i1_1:
342 ; SKX:       # %bb.0:
343 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k0
344 ; SKX-NEXT:    kshiftrw $1, %k0, %k1
345 ; SKX-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
346 ; SKX-NEXT:    kmovd %k0, %eax
347 ; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
348 ; SKX-NEXT:    vzeroupper
349 ; SKX-NEXT:    retq
350   %a = icmp eq <16 x i32> %x, zeroinitializer
351   %b = shufflevector <16 x i1> %a, <16 x i1> zeroinitializer, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
352   %c = icmp eq <16 x i32> %y, zeroinitializer
353   %d = and <16 x i1> %b, %c
354   %e = bitcast <16 x i1> %d to i16
355   ret i16 %e
358 define i32 @kshiftr_v32i1_1(<32 x i16> %x, <32 x i16> %y) {
359 ; KNL-LABEL: kshiftr_v32i1_1:
360 ; KNL:       # %bb.0:
361 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
362 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
363 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm2, %ymm2
364 ; KNL-NEXT:    vpmovsxwd %ymm2, %zmm2
365 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k1
366 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0
367 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
368 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k2
369 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
370 ; KNL-NEXT:    vpternlogd $255, %zmm2, %zmm2, %zmm2 {%k1} {z}
371 ; KNL-NEXT:    valignd {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm2[0]
372 ; KNL-NEXT:    kshiftrw $1, %k1, %k1
373 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm2
374 ; KNL-NEXT:    vpmovsxwd %ymm2, %zmm2
375 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k2
376 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm1
377 ; KNL-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
378 ; KNL-NEXT:    vpmovsxwd %ymm1, %zmm1
379 ; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k0 {%k1}
380 ; KNL-NEXT:    kmovw %k0, %ecx
381 ; KNL-NEXT:    shll $16, %ecx
382 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k2}
383 ; KNL-NEXT:    kmovw %k0, %eax
384 ; KNL-NEXT:    orl %ecx, %eax
385 ; KNL-NEXT:    vzeroupper
386 ; KNL-NEXT:    retq
388 ; SKX-LABEL: kshiftr_v32i1_1:
389 ; SKX:       # %bb.0:
390 ; SKX-NEXT:    vptestnmw %zmm0, %zmm0, %k0
391 ; SKX-NEXT:    kshiftrd $1, %k0, %k1
392 ; SKX-NEXT:    vptestnmw %zmm1, %zmm1, %k0 {%k1}
393 ; SKX-NEXT:    kmovd %k0, %eax
394 ; SKX-NEXT:    vzeroupper
395 ; SKX-NEXT:    retq
396   %a = icmp eq <32 x i16> %x, zeroinitializer
397   %b = shufflevector <32 x i1> %a, <32 x i1> zeroinitializer, <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32>
398   %c = icmp eq <32 x i16> %y, zeroinitializer
399   %d = and <32 x i1> %b, %c
400   %e = bitcast <32 x i1> %d to i32
401   ret i32 %e
404 define i64 @kshiftr_v64i1_1(<64 x i8> %x, <64 x i8> %y) {
405 ; KNL-LABEL: kshiftr_v64i1_1:
406 ; KNL:       # %bb.0:
407 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
408 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
409 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm3, %ymm3
410 ; KNL-NEXT:    vextracti128 $1, %ymm3, %xmm4
411 ; KNL-NEXT:    vpmovsxbd %xmm4, %zmm4
412 ; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k1
413 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
414 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm4
415 ; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k2
416 ; KNL-NEXT:    vpmovsxbd %xmm3, %zmm3
417 ; KNL-NEXT:    vptestmd %zmm3, %zmm3, %k3
418 ; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
419 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
420 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k4
421 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k4} {z}
422 ; KNL-NEXT:    vpternlogd $255, %zmm3, %zmm3, %zmm3 {%k3} {z}
423 ; KNL-NEXT:    valignd {{.*#+}} zmm4 = zmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm3[0]
424 ; KNL-NEXT:    vpternlogd $255, %zmm5, %zmm5, %zmm5 {%k2} {z}
425 ; KNL-NEXT:    valignd {{.*#+}} zmm0 = zmm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0]
426 ; KNL-NEXT:    vpternlogd $255, %zmm5, %zmm5, %zmm5 {%k1} {z}
427 ; KNL-NEXT:    valignd {{.*#+}} zmm3 = zmm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm5[0]
428 ; KNL-NEXT:    kshiftrw $1, %k1, %k3
429 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm1, %ymm5
430 ; KNL-NEXT:    vextracti128 $1, %ymm5, %xmm6
431 ; KNL-NEXT:    vpmovsxbd %xmm6, %zmm6
432 ; KNL-NEXT:    vptestmd %zmm6, %zmm6, %k1
433 ; KNL-NEXT:    vpmovsxbd %xmm5, %zmm5
434 ; KNL-NEXT:    vptestmd %zmm5, %zmm5, %k2
435 ; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm1
436 ; KNL-NEXT:    vpcmpeqb %ymm2, %ymm1, %ymm1
437 ; KNL-NEXT:    vpmovsxbd %xmm1, %zmm2
438 ; KNL-NEXT:    vptestmd %zmm2, %zmm2, %k4
439 ; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
440 ; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
441 ; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k0 {%k3}
442 ; KNL-NEXT:    kmovw %k0, %eax
443 ; KNL-NEXT:    shll $16, %eax
444 ; KNL-NEXT:    vptestmd %zmm3, %zmm3, %k0 {%k4}
445 ; KNL-NEXT:    kmovw %k0, %ecx
446 ; KNL-NEXT:    orl %eax, %ecx
447 ; KNL-NEXT:    shlq $32, %rcx
448 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k2}
449 ; KNL-NEXT:    kmovw %k0, %edx
450 ; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k0 {%k1}
451 ; KNL-NEXT:    kmovw %k0, %eax
452 ; KNL-NEXT:    shll $16, %eax
453 ; KNL-NEXT:    orl %edx, %eax
454 ; KNL-NEXT:    orq %rcx, %rax
455 ; KNL-NEXT:    vzeroupper
456 ; KNL-NEXT:    retq
458 ; SKX-LABEL: kshiftr_v64i1_1:
459 ; SKX:       # %bb.0:
460 ; SKX-NEXT:    vptestnmb %zmm0, %zmm0, %k0
461 ; SKX-NEXT:    kshiftrq $1, %k0, %k1
462 ; SKX-NEXT:    vptestnmb %zmm1, %zmm1, %k0 {%k1}
463 ; SKX-NEXT:    kmovq %k0, %rax
464 ; SKX-NEXT:    vzeroupper
465 ; SKX-NEXT:    retq
466   %a = icmp eq <64 x i8> %x, zeroinitializer
467   %b = shufflevector <64 x i1> %a, <64 x i1> zeroinitializer, <64 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64>
468   %c = icmp eq <64 x i8> %y, zeroinitializer
469   %d = and <64 x i1> %b, %c
470   %e = bitcast <64 x i1> %d to i64
471   ret i64 %e
474 define i8 @kshiftr_v8i1_7(<8 x i64> %x, <8 x i64> %y) {
475 ; KNL-LABEL: kshiftr_v8i1_7:
476 ; KNL:       # %bb.0:
477 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
478 ; KNL-NEXT:    kshiftlw $1, %k0, %k1
479 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
480 ; KNL-NEXT:    kmovw %k0, %eax
481 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
482 ; KNL-NEXT:    vzeroupper
483 ; KNL-NEXT:    retq
485 ; SKX-LABEL: kshiftr_v8i1_7:
486 ; SKX:       # %bb.0:
487 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
488 ; SKX-NEXT:    kshiftlb $1, %k0, %k1
489 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
490 ; SKX-NEXT:    kmovd %k0, %eax
491 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
492 ; SKX-NEXT:    vzeroupper
493 ; SKX-NEXT:    retq
494   %a = icmp eq <8 x i64> %x, zeroinitializer
495   %b = shufflevector <8 x i1> %a, <8 x i1> zeroinitializer, <8 x i32> <i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6>
496   %c = icmp eq <8 x i64> %y, zeroinitializer
497   %d = and <8 x i1> %b, %c
498   %e = bitcast <8 x i1> %d to i8
499   ret i8 %e
502 define i16 @kshiftr_v16i1_15(<16 x i32> %x, <16 x i32> %y) {
503 ; KNL-LABEL: kshiftr_v16i1_15:
504 ; KNL:       # %bb.0:
505 ; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k0
506 ; KNL-NEXT:    kshiftrw $15, %k0, %k1
507 ; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
508 ; KNL-NEXT:    kmovw %k0, %eax
509 ; KNL-NEXT:    # kill: def $ax killed $ax killed $eax
510 ; KNL-NEXT:    vzeroupper
511 ; KNL-NEXT:    retq
513 ; SKX-LABEL: kshiftr_v16i1_15:
514 ; SKX:       # %bb.0:
515 ; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k0
516 ; SKX-NEXT:    kshiftrw $15, %k0, %k1
517 ; SKX-NEXT:    vptestnmd %zmm1, %zmm1, %k0 {%k1}
518 ; SKX-NEXT:    kmovd %k0, %eax
519 ; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
520 ; SKX-NEXT:    vzeroupper
521 ; SKX-NEXT:    retq
522   %a = icmp eq <16 x i32> %x, zeroinitializer
523   %b = shufflevector <16 x i1> zeroinitializer, <16 x i1> %a, <16 x i32> <i32 31, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
524   %c = icmp eq <16 x i32> %y, zeroinitializer
525   %d = and <16 x i1> %b, %c
526   %e = bitcast <16 x i1> %d to i16
527   ret i16 %e
530 define i32 @kshiftr_v32i1_31(<32 x i16> %x, <32 x i16> %y) {
531 ; KNL-LABEL: kshiftr_v32i1_31:
532 ; KNL:       # %bb.0:
533 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0
534 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
535 ; KNL-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
536 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
537 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
538 ; KNL-NEXT:    kshiftrw $15, %k0, %k1
539 ; KNL-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm0
540 ; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
541 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
542 ; KNL-NEXT:    kmovw %k0, %eax
543 ; KNL-NEXT:    vzeroupper
544 ; KNL-NEXT:    retq
546 ; SKX-LABEL: kshiftr_v32i1_31:
547 ; SKX:       # %bb.0:
548 ; SKX-NEXT:    vptestnmw %zmm0, %zmm0, %k0
549 ; SKX-NEXT:    kshiftrd $31, %k0, %k1
550 ; SKX-NEXT:    vptestnmw %zmm1, %zmm1, %k0 {%k1}
551 ; SKX-NEXT:    kmovd %k0, %eax
552 ; SKX-NEXT:    vzeroupper
553 ; SKX-NEXT:    retq
554   %a = icmp eq <32 x i16> %x, zeroinitializer
555   %b = shufflevector <32 x i1> zeroinitializer, <32 x i1> %a, <32 x i32> <i32 63, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
556   %c = icmp eq <32 x i16> %y, zeroinitializer
557   %d = and <32 x i1> %b, %c
558   %e = bitcast <32 x i1> %d to i32
559   ret i32 %e
562 define i64 @kshiftr_v64i1_63(<64 x i8> %x, <64 x i8> %y) {
563 ; KNL-LABEL: kshiftr_v64i1_63:
564 ; KNL:       # %bb.0:
565 ; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm0
566 ; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
567 ; KNL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
568 ; KNL-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
569 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
570 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
571 ; KNL-NEXT:    kshiftrw $15, %k0, %k1
572 ; KNL-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm0
573 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
574 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
575 ; KNL-NEXT:    kmovw %k0, %eax
576 ; KNL-NEXT:    vzeroupper
577 ; KNL-NEXT:    retq
579 ; SKX-LABEL: kshiftr_v64i1_63:
580 ; SKX:       # %bb.0:
581 ; SKX-NEXT:    vptestnmb %zmm0, %zmm0, %k0
582 ; SKX-NEXT:    kshiftrq $63, %k0, %k1
583 ; SKX-NEXT:    vptestnmb %zmm1, %zmm1, %k0 {%k1}
584 ; SKX-NEXT:    kmovq %k0, %rax
585 ; SKX-NEXT:    vzeroupper
586 ; SKX-NEXT:    retq
587   %a = icmp eq <64 x i8> %x, zeroinitializer
588   %b = shufflevector <64 x i1> zeroinitializer, <64 x i1> %a, <64 x i32> <i32 127, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62>
589   %c = icmp eq <64 x i8> %y, zeroinitializer
590   %d = and <64 x i1> %b, %c
591   %e = bitcast <64 x i1> %d to i64
592   ret i64 %e
595 define i8 @kshiftl_v8i1_zu123u56(<8 x i64> %x, <8 x i64> %y) {
596 ; KNL-LABEL: kshiftl_v8i1_zu123u56:
597 ; KNL:       # %bb.0:
598 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
599 ; KNL-NEXT:    kshiftlw $1, %k0, %k1
600 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
601 ; KNL-NEXT:    kmovw %k0, %eax
602 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
603 ; KNL-NEXT:    vzeroupper
604 ; KNL-NEXT:    retq
606 ; SKX-LABEL: kshiftl_v8i1_zu123u56:
607 ; SKX:       # %bb.0:
608 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
609 ; SKX-NEXT:    kshiftlb $1, %k0, %k1
610 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
611 ; SKX-NEXT:    kmovd %k0, %eax
612 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
613 ; SKX-NEXT:    vzeroupper
614 ; SKX-NEXT:    retq
615   %a = icmp eq <8 x i64> %x, zeroinitializer
616   %b = shufflevector <8 x i1> %a, <8 x i1> zeroinitializer, <8 x i32> <i32 8, i32 undef, i32 1, i32 2, i32 3, i32 undef, i32 5, i32 6>
617   %c = icmp eq <8 x i64> %y, zeroinitializer
618   %d = and <8 x i1> %b, %c
619   %e = bitcast <8 x i1> %d to i8
620   ret i8 %e
623 define i8 @kshiftl_v8i1_u0123456(<8 x i64> %x, <8 x i64> %y) {
624 ; KNL-LABEL: kshiftl_v8i1_u0123456:
625 ; KNL:       # %bb.0:
626 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
627 ; KNL-NEXT:    kshiftlw $1, %k0, %k1
628 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
629 ; KNL-NEXT:    kmovw %k0, %eax
630 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
631 ; KNL-NEXT:    vzeroupper
632 ; KNL-NEXT:    retq
634 ; SKX-LABEL: kshiftl_v8i1_u0123456:
635 ; SKX:       # %bb.0:
636 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
637 ; SKX-NEXT:    kshiftlb $1, %k0, %k1
638 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
639 ; SKX-NEXT:    kmovd %k0, %eax
640 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
641 ; SKX-NEXT:    vzeroupper
642 ; SKX-NEXT:    retq
643   %a = icmp eq <8 x i64> %x, zeroinitializer
644   %b = shufflevector <8 x i1> %a, <8 x i1> undef, <8 x i32> <i32 undef, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6>
645   %c = icmp eq <8 x i64> %y, zeroinitializer
646   %d = and <8 x i1> %b, %c
647   %e = bitcast <8 x i1> %d to i8
648   ret i8 %e
651 define i8 @kshiftr_v8i1_1u3u567z(<8 x i64> %x, <8 x i64> %y) {
652 ; KNL-LABEL: kshiftr_v8i1_1u3u567z:
653 ; KNL:       # %bb.0:
654 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
655 ; KNL-NEXT:    kshiftlw $8, %k0, %k0
656 ; KNL-NEXT:    kshiftrw $9, %k0, %k1
657 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
658 ; KNL-NEXT:    kmovw %k0, %eax
659 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
660 ; KNL-NEXT:    vzeroupper
661 ; KNL-NEXT:    retq
663 ; SKX-LABEL: kshiftr_v8i1_1u3u567z:
664 ; SKX:       # %bb.0:
665 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
666 ; SKX-NEXT:    kshiftrb $1, %k0, %k1
667 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
668 ; SKX-NEXT:    kmovd %k0, %eax
669 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
670 ; SKX-NEXT:    vzeroupper
671 ; SKX-NEXT:    retq
672   %a = icmp eq <8 x i64> %x, zeroinitializer
673   %b = shufflevector <8 x i1> %a, <8 x i1> zeroinitializer, <8 x i32> <i32 1, i32 undef, i32 3, i32 undef, i32 5, i32 6, i32 7, i32 8>
674   %c = icmp eq <8 x i64> %y, zeroinitializer
675   %d = and <8 x i1> %b, %c
676   %e = bitcast <8 x i1> %d to i8
677   ret i8 %e
680 define i8 @kshiftr_v8i1_234567uu(<8 x i64> %x, <8 x i64> %y) {
681 ; KNL-LABEL: kshiftr_v8i1_234567uu:
682 ; KNL:       # %bb.0:
683 ; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k0
684 ; KNL-NEXT:    kshiftrw $2, %k0, %k1
685 ; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
686 ; KNL-NEXT:    kmovw %k0, %eax
687 ; KNL-NEXT:    # kill: def $al killed $al killed $eax
688 ; KNL-NEXT:    vzeroupper
689 ; KNL-NEXT:    retq
691 ; SKX-LABEL: kshiftr_v8i1_234567uu:
692 ; SKX:       # %bb.0:
693 ; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k0
694 ; SKX-NEXT:    kshiftrb $2, %k0, %k1
695 ; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k0 {%k1}
696 ; SKX-NEXT:    kmovd %k0, %eax
697 ; SKX-NEXT:    # kill: def $al killed $al killed $eax
698 ; SKX-NEXT:    vzeroupper
699 ; SKX-NEXT:    retq
700   %a = icmp eq <8 x i64> %x, zeroinitializer
701   %b = shufflevector <8 x i1> %a, <8 x i1> undef, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 10>
702   %c = icmp eq <8 x i64> %y, zeroinitializer
703   %d = and <8 x i1> %b, %c
704   %e = bitcast <8 x i1> %d to i8
705   ret i8 %e