1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX12,AVX1
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX12,AVX2
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW
8 define i8 @v8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i64> %d) {
11 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8
12 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9
13 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10
14 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11
15 ; SSE-NEXT: pcmpgtq %xmm5, %xmm1
16 ; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
17 ; SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
18 ; SSE-NEXT: pcmpgtq %xmm4, %xmm0
19 ; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
20 ; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
21 ; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
22 ; SSE-NEXT: pcmpgtq %xmm7, %xmm3
23 ; SSE-NEXT: pcmpgtq %xmm6, %xmm2
24 ; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
25 ; SSE-NEXT: packssdw %xmm2, %xmm2
26 ; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm0[0,1,2,3],xmm2[4,5,6,7]
27 ; SSE-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm11
28 ; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm11[0,2,2,3]
29 ; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
30 ; SSE-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm10
31 ; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm10[0,2,2,3]
32 ; SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
33 ; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
34 ; SSE-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm9
35 ; SSE-NEXT: pcmpgtq {{[0-9]+}}(%rsp), %xmm8
36 ; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,2],xmm9[0,2]
37 ; SSE-NEXT: packssdw %xmm8, %xmm8
38 ; SSE-NEXT: pblendw {{.*#+}} xmm8 = xmm1[0,1,2,3],xmm8[4,5,6,7]
39 ; SSE-NEXT: pand %xmm2, %xmm8
40 ; SSE-NEXT: psllw $15, %xmm8
41 ; SSE-NEXT: psraw $15, %xmm8
42 ; SSE-NEXT: packsswb %xmm0, %xmm8
43 ; SSE-NEXT: pmovmskb %xmm8, %eax
44 ; SSE-NEXT: # kill: %al<def> %al<kill> %eax<kill>
49 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm8
50 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9
51 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm9, %xmm8
52 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
53 ; AVX1-NEXT: vpackssdw %xmm8, %xmm1, %xmm1
54 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
55 ; AVX1-NEXT: vpshufb %xmm8, %xmm1, %xmm9
56 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
57 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
58 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
59 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm0
60 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
61 ; AVX1-NEXT: vpshufb %xmm8, %xmm0, %xmm0
62 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm9[0]
63 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1
64 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm2
65 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1
66 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm2
67 ; AVX1-NEXT: vpackssdw %xmm1, %xmm2, %xmm1
68 ; AVX1-NEXT: vpshufb %xmm8, %xmm1, %xmm1
69 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm2
70 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3
71 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
72 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm3
73 ; AVX1-NEXT: vpackssdw %xmm2, %xmm3, %xmm2
74 ; AVX1-NEXT: vpshufb %xmm8, %xmm2, %xmm2
75 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
76 ; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0
77 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
78 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
79 ; AVX1-NEXT: # kill: %al<def> %al<kill> %eax<kill>
80 ; AVX1-NEXT: vzeroupper
85 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm1
86 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
87 ; AVX2-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
88 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
89 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
90 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm0
91 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
92 ; AVX2-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
93 ; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0
94 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
95 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm5, %ymm1
96 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
97 ; AVX2-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
98 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
99 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm2
100 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm4
101 ; AVX2-NEXT: vpackssdw %xmm4, %xmm2, %xmm2
102 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
103 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
104 ; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
105 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
106 ; AVX2-NEXT: vpmovmskb %xmm0, %eax
107 ; AVX2-NEXT: # kill: %al<def> %al<kill> %eax<kill>
108 ; AVX2-NEXT: vzeroupper
111 ; AVX512F-LABEL: v8i64:
113 ; AVX512F-NEXT: vpcmpgtq %zmm1, %zmm0, %k1
114 ; AVX512F-NEXT: vpcmpgtq %zmm3, %zmm2, %k0 {%k1}
115 ; AVX512F-NEXT: kmovw %k0, %eax
116 ; AVX512F-NEXT: # kill: %al<def> %al<kill> %eax<kill>
117 ; AVX512F-NEXT: vzeroupper
120 ; AVX512BW-LABEL: v8i64:
122 ; AVX512BW-NEXT: vpcmpgtq %zmm1, %zmm0, %k1
123 ; AVX512BW-NEXT: vpcmpgtq %zmm3, %zmm2, %k0 {%k1}
124 ; AVX512BW-NEXT: kmovd %k0, %eax
125 ; AVX512BW-NEXT: # kill: %al<def> %al<kill> %eax<kill>
126 ; AVX512BW-NEXT: vzeroupper
127 ; AVX512BW-NEXT: retq
128 %x0 = icmp sgt <8 x i64> %a, %b
129 %x1 = icmp sgt <8 x i64> %c, %d
130 %y = and <8 x i1> %x0, %x1
131 %res = bitcast <8 x i1> %y to i8
135 define i8 @v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x double> %d) {
138 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm8
139 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm9
140 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm10
141 ; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm11
142 ; SSE-NEXT: cmpltpd %xmm1, %xmm5
143 ; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[0,2,2,3]
144 ; SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm5[0,2,2,3,4,5,6,7]
145 ; SSE-NEXT: cmpltpd %xmm0, %xmm4
146 ; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,2,2,3]
147 ; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm4[0,2,2,3,4,5,6,7]
148 ; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
149 ; SSE-NEXT: cmpltpd %xmm3, %xmm7
150 ; SSE-NEXT: cmpltpd %xmm2, %xmm6
151 ; SSE-NEXT: shufps {{.*#+}} xmm6 = xmm6[0,2],xmm7[0,2]
152 ; SSE-NEXT: packssdw %xmm6, %xmm6
153 ; SSE-NEXT: pblendw {{.*#+}} xmm6 = xmm0[0,1,2,3],xmm6[4,5,6,7]
154 ; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm11
155 ; SSE-NEXT: shufps {{.*#+}} xmm11 = xmm11[0,2,2,3]
156 ; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm11[0,2,2,3,4,5,6,7]
157 ; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm10
158 ; SSE-NEXT: shufps {{.*#+}} xmm10 = xmm10[0,2,2,3]
159 ; SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm10[0,2,2,3,4,5,6,7]
160 ; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
161 ; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm9
162 ; SSE-NEXT: cmpltpd {{[0-9]+}}(%rsp), %xmm8
163 ; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,2],xmm9[0,2]
164 ; SSE-NEXT: packssdw %xmm8, %xmm8
165 ; SSE-NEXT: pblendw {{.*#+}} xmm8 = xmm1[0,1,2,3],xmm8[4,5,6,7]
166 ; SSE-NEXT: pand %xmm6, %xmm8
167 ; SSE-NEXT: psllw $15, %xmm8
168 ; SSE-NEXT: psraw $15, %xmm8
169 ; SSE-NEXT: packsswb %xmm0, %xmm8
170 ; SSE-NEXT: pmovmskb %xmm8, %eax
171 ; SSE-NEXT: # kill: %al<def> %al<kill> %eax<kill>
174 ; AVX12-LABEL: v8f64:
176 ; AVX12-NEXT: vcmpltpd %ymm1, %ymm3, %ymm1
177 ; AVX12-NEXT: vextractf128 $1, %ymm1, %xmm3
178 ; AVX12-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
179 ; AVX12-NEXT: vmovdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
180 ; AVX12-NEXT: vpshufb %xmm3, %xmm1, %xmm1
181 ; AVX12-NEXT: vcmpltpd %ymm0, %ymm2, %ymm0
182 ; AVX12-NEXT: vextractf128 $1, %ymm0, %xmm2
183 ; AVX12-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
184 ; AVX12-NEXT: vpshufb %xmm3, %xmm0, %xmm0
185 ; AVX12-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
186 ; AVX12-NEXT: vcmpltpd %ymm5, %ymm7, %ymm1
187 ; AVX12-NEXT: vextractf128 $1, %ymm1, %xmm2
188 ; AVX12-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
189 ; AVX12-NEXT: vpshufb %xmm3, %xmm1, %xmm1
190 ; AVX12-NEXT: vcmpltpd %ymm4, %ymm6, %ymm2
191 ; AVX12-NEXT: vextractf128 $1, %ymm2, %xmm4
192 ; AVX12-NEXT: vpackssdw %xmm4, %xmm2, %xmm2
193 ; AVX12-NEXT: vpshufb %xmm3, %xmm2, %xmm2
194 ; AVX12-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
195 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
196 ; AVX12-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
197 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
198 ; AVX12-NEXT: # kill: %al<def> %al<kill> %eax<kill>
199 ; AVX12-NEXT: vzeroupper
202 ; AVX512F-LABEL: v8f64:
204 ; AVX512F-NEXT: vcmpltpd %zmm0, %zmm1, %k1
205 ; AVX512F-NEXT: vcmpltpd %zmm2, %zmm3, %k0 {%k1}
206 ; AVX512F-NEXT: kmovw %k0, %eax
207 ; AVX512F-NEXT: # kill: %al<def> %al<kill> %eax<kill>
208 ; AVX512F-NEXT: vzeroupper
211 ; AVX512BW-LABEL: v8f64:
213 ; AVX512BW-NEXT: vcmpltpd %zmm0, %zmm1, %k1
214 ; AVX512BW-NEXT: vcmpltpd %zmm2, %zmm3, %k0 {%k1}
215 ; AVX512BW-NEXT: kmovd %k0, %eax
216 ; AVX512BW-NEXT: # kill: %al<def> %al<kill> %eax<kill>
217 ; AVX512BW-NEXT: vzeroupper
218 ; AVX512BW-NEXT: retq
219 %x0 = fcmp ogt <8 x double> %a, %b
220 %x1 = fcmp ogt <8 x double> %c, %d
221 %y = and <8 x i1> %x0, %x1
222 %res = bitcast <8 x i1> %y to i8
226 define i32 @v32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i16> %d) {
229 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8
230 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9
231 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10
232 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11
233 ; SSE-NEXT: pcmpgtw %xmm5, %xmm1
234 ; SSE-NEXT: pcmpgtw %xmm4, %xmm0
235 ; SSE-NEXT: packsswb %xmm1, %xmm0
236 ; SSE-NEXT: pcmpgtw %xmm7, %xmm3
237 ; SSE-NEXT: pcmpgtw %xmm6, %xmm2
238 ; SSE-NEXT: packsswb %xmm3, %xmm2
239 ; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm11
240 ; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm10
241 ; SSE-NEXT: packsswb %xmm11, %xmm10
242 ; SSE-NEXT: pand %xmm0, %xmm10
243 ; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm9
244 ; SSE-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm8
245 ; SSE-NEXT: packsswb %xmm9, %xmm8
246 ; SSE-NEXT: pand %xmm2, %xmm8
247 ; SSE-NEXT: pmovmskb %xmm10, %ecx
248 ; SSE-NEXT: pmovmskb %xmm8, %eax
249 ; SSE-NEXT: shll $16, %eax
250 ; SSE-NEXT: orl %ecx, %eax
253 ; AVX1-LABEL: v32i16:
255 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm8
256 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9
257 ; AVX1-NEXT: vpcmpgtw %xmm8, %xmm9, %xmm8
258 ; AVX1-NEXT: vpcmpgtw %xmm3, %xmm1, %xmm1
259 ; AVX1-NEXT: vpacksswb %xmm8, %xmm1, %xmm8
260 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
261 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
262 ; AVX1-NEXT: vpcmpgtw %xmm3, %xmm1, %xmm1
263 ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm0, %xmm0
264 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
265 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1
266 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm2
267 ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1
268 ; AVX1-NEXT: vpcmpgtw %xmm7, %xmm5, %xmm2
269 ; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
270 ; AVX1-NEXT: vpand %xmm1, %xmm8, %xmm1
271 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm2
272 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3
273 ; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2
274 ; AVX1-NEXT: vpcmpgtw %xmm6, %xmm4, %xmm3
275 ; AVX1-NEXT: vpacksswb %xmm2, %xmm3, %xmm2
276 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
277 ; AVX1-NEXT: vpmovmskb %xmm0, %ecx
278 ; AVX1-NEXT: vpmovmskb %xmm1, %eax
279 ; AVX1-NEXT: shll $16, %eax
280 ; AVX1-NEXT: orl %ecx, %eax
281 ; AVX1-NEXT: vzeroupper
284 ; AVX2-LABEL: v32i16:
286 ; AVX2-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1
287 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
288 ; AVX2-NEXT: vpacksswb %xmm3, %xmm1, %xmm1
289 ; AVX2-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0
290 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
291 ; AVX2-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
292 ; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
293 ; AVX2-NEXT: vpcmpgtw %ymm7, %ymm5, %ymm1
294 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
295 ; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm1
296 ; AVX2-NEXT: vpcmpgtw %ymm6, %ymm4, %ymm2
297 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3
298 ; AVX2-NEXT: vpacksswb %xmm3, %xmm2, %xmm2
299 ; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm1
300 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
301 ; AVX2-NEXT: vpmovmskb %ymm0, %eax
302 ; AVX2-NEXT: vzeroupper
305 ; AVX512F-LABEL: v32i16:
307 ; AVX512F-NEXT: pushq %rbp
308 ; AVX512F-NEXT: .cfi_def_cfa_offset 16
309 ; AVX512F-NEXT: .cfi_offset %rbp, -16
310 ; AVX512F-NEXT: movq %rsp, %rbp
311 ; AVX512F-NEXT: .cfi_def_cfa_register %rbp
312 ; AVX512F-NEXT: andq $-32, %rsp
313 ; AVX512F-NEXT: subq $32, %rsp
314 ; AVX512F-NEXT: vpcmpgtw %ymm3, %ymm1, %ymm1
315 ; AVX512F-NEXT: vpmovsxwd %ymm1, %zmm1
316 ; AVX512F-NEXT: vpslld $31, %zmm1, %zmm1
317 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0
318 ; AVX512F-NEXT: kshiftlw $14, %k0, %k1
319 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
320 ; AVX512F-NEXT: kmovw %k1, %eax
321 ; AVX512F-NEXT: kshiftlw $15, %k0, %k1
322 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
323 ; AVX512F-NEXT: kmovw %k1, %ecx
324 ; AVX512F-NEXT: vmovd %ecx, %xmm1
325 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
326 ; AVX512F-NEXT: kshiftlw $13, %k0, %k1
327 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
328 ; AVX512F-NEXT: kmovw %k1, %eax
329 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
330 ; AVX512F-NEXT: kshiftlw $12, %k0, %k1
331 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
332 ; AVX512F-NEXT: kmovw %k1, %eax
333 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
334 ; AVX512F-NEXT: kshiftlw $11, %k0, %k1
335 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
336 ; AVX512F-NEXT: kmovw %k1, %eax
337 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
338 ; AVX512F-NEXT: kshiftlw $10, %k0, %k1
339 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
340 ; AVX512F-NEXT: kmovw %k1, %eax
341 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
342 ; AVX512F-NEXT: kshiftlw $9, %k0, %k1
343 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
344 ; AVX512F-NEXT: kmovw %k1, %eax
345 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
346 ; AVX512F-NEXT: kshiftlw $8, %k0, %k1
347 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
348 ; AVX512F-NEXT: kmovw %k1, %eax
349 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1
350 ; AVX512F-NEXT: kshiftlw $7, %k0, %k1
351 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
352 ; AVX512F-NEXT: kmovw %k1, %eax
353 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1
354 ; AVX512F-NEXT: kshiftlw $6, %k0, %k1
355 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
356 ; AVX512F-NEXT: kmovw %k1, %eax
357 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1
358 ; AVX512F-NEXT: kshiftlw $5, %k0, %k1
359 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
360 ; AVX512F-NEXT: kmovw %k1, %eax
361 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1
362 ; AVX512F-NEXT: kshiftlw $4, %k0, %k1
363 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
364 ; AVX512F-NEXT: kmovw %k1, %eax
365 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1
366 ; AVX512F-NEXT: kshiftlw $3, %k0, %k1
367 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
368 ; AVX512F-NEXT: kmovw %k1, %eax
369 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1
370 ; AVX512F-NEXT: kshiftlw $2, %k0, %k1
371 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
372 ; AVX512F-NEXT: kmovw %k1, %eax
373 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1
374 ; AVX512F-NEXT: kshiftlw $1, %k0, %k1
375 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
376 ; AVX512F-NEXT: kmovw %k1, %eax
377 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1
378 ; AVX512F-NEXT: kshiftrw $15, %k0, %k0
379 ; AVX512F-NEXT: kmovw %k0, %eax
380 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1
381 ; AVX512F-NEXT: vpcmpgtw %ymm2, %ymm0, %ymm0
382 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0
383 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
384 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
385 ; AVX512F-NEXT: kshiftlw $14, %k0, %k1
386 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
387 ; AVX512F-NEXT: kmovw %k1, %eax
388 ; AVX512F-NEXT: kshiftlw $15, %k0, %k1
389 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
390 ; AVX512F-NEXT: kmovw %k1, %ecx
391 ; AVX512F-NEXT: vmovd %ecx, %xmm0
392 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
393 ; AVX512F-NEXT: kshiftlw $13, %k0, %k1
394 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
395 ; AVX512F-NEXT: kmovw %k1, %eax
396 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
397 ; AVX512F-NEXT: kshiftlw $12, %k0, %k1
398 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
399 ; AVX512F-NEXT: kmovw %k1, %eax
400 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
401 ; AVX512F-NEXT: kshiftlw $11, %k0, %k1
402 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
403 ; AVX512F-NEXT: kmovw %k1, %eax
404 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
405 ; AVX512F-NEXT: kshiftlw $10, %k0, %k1
406 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
407 ; AVX512F-NEXT: kmovw %k1, %eax
408 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
409 ; AVX512F-NEXT: kshiftlw $9, %k0, %k1
410 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
411 ; AVX512F-NEXT: kmovw %k1, %eax
412 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
413 ; AVX512F-NEXT: kshiftlw $8, %k0, %k1
414 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
415 ; AVX512F-NEXT: kmovw %k1, %eax
416 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
417 ; AVX512F-NEXT: kshiftlw $7, %k0, %k1
418 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
419 ; AVX512F-NEXT: kmovw %k1, %eax
420 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
421 ; AVX512F-NEXT: kshiftlw $6, %k0, %k1
422 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
423 ; AVX512F-NEXT: kmovw %k1, %eax
424 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
425 ; AVX512F-NEXT: kshiftlw $5, %k0, %k1
426 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
427 ; AVX512F-NEXT: kmovw %k1, %eax
428 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
429 ; AVX512F-NEXT: kshiftlw $4, %k0, %k1
430 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
431 ; AVX512F-NEXT: kmovw %k1, %eax
432 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
433 ; AVX512F-NEXT: kshiftlw $3, %k0, %k1
434 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
435 ; AVX512F-NEXT: kmovw %k1, %eax
436 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
437 ; AVX512F-NEXT: kshiftlw $2, %k0, %k1
438 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
439 ; AVX512F-NEXT: kmovw %k1, %eax
440 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
441 ; AVX512F-NEXT: kshiftlw $1, %k0, %k1
442 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
443 ; AVX512F-NEXT: kmovw %k1, %eax
444 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
445 ; AVX512F-NEXT: kshiftrw $15, %k0, %k0
446 ; AVX512F-NEXT: kmovw %k0, %eax
447 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
448 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
449 ; AVX512F-NEXT: vpcmpgtw %ymm7, %ymm5, %ymm1
450 ; AVX512F-NEXT: vpmovsxwd %ymm1, %zmm1
451 ; AVX512F-NEXT: vpslld $31, %zmm1, %zmm1
452 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0
453 ; AVX512F-NEXT: kshiftlw $14, %k0, %k1
454 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
455 ; AVX512F-NEXT: kmovw %k1, %eax
456 ; AVX512F-NEXT: kshiftlw $15, %k0, %k1
457 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
458 ; AVX512F-NEXT: kmovw %k1, %ecx
459 ; AVX512F-NEXT: vmovd %ecx, %xmm1
460 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
461 ; AVX512F-NEXT: kshiftlw $13, %k0, %k1
462 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
463 ; AVX512F-NEXT: kmovw %k1, %eax
464 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
465 ; AVX512F-NEXT: kshiftlw $12, %k0, %k1
466 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
467 ; AVX512F-NEXT: kmovw %k1, %eax
468 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
469 ; AVX512F-NEXT: kshiftlw $11, %k0, %k1
470 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
471 ; AVX512F-NEXT: kmovw %k1, %eax
472 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
473 ; AVX512F-NEXT: kshiftlw $10, %k0, %k1
474 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
475 ; AVX512F-NEXT: kmovw %k1, %eax
476 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
477 ; AVX512F-NEXT: kshiftlw $9, %k0, %k1
478 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
479 ; AVX512F-NEXT: kmovw %k1, %eax
480 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
481 ; AVX512F-NEXT: kshiftlw $8, %k0, %k1
482 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
483 ; AVX512F-NEXT: kmovw %k1, %eax
484 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1
485 ; AVX512F-NEXT: kshiftlw $7, %k0, %k1
486 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
487 ; AVX512F-NEXT: kmovw %k1, %eax
488 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1
489 ; AVX512F-NEXT: kshiftlw $6, %k0, %k1
490 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
491 ; AVX512F-NEXT: kmovw %k1, %eax
492 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1
493 ; AVX512F-NEXT: kshiftlw $5, %k0, %k1
494 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
495 ; AVX512F-NEXT: kmovw %k1, %eax
496 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1
497 ; AVX512F-NEXT: kshiftlw $4, %k0, %k1
498 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
499 ; AVX512F-NEXT: kmovw %k1, %eax
500 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1
501 ; AVX512F-NEXT: kshiftlw $3, %k0, %k1
502 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
503 ; AVX512F-NEXT: kmovw %k1, %eax
504 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1
505 ; AVX512F-NEXT: kshiftlw $2, %k0, %k1
506 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
507 ; AVX512F-NEXT: kmovw %k1, %eax
508 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1
509 ; AVX512F-NEXT: kshiftlw $1, %k0, %k1
510 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
511 ; AVX512F-NEXT: kmovw %k1, %eax
512 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1
513 ; AVX512F-NEXT: kshiftrw $15, %k0, %k0
514 ; AVX512F-NEXT: kmovw %k0, %eax
515 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1
516 ; AVX512F-NEXT: vpcmpgtw %ymm6, %ymm4, %ymm2
517 ; AVX512F-NEXT: vpmovsxwd %ymm2, %zmm2
518 ; AVX512F-NEXT: vpslld $31, %zmm2, %zmm2
519 ; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k0
520 ; AVX512F-NEXT: kshiftlw $14, %k0, %k1
521 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
522 ; AVX512F-NEXT: kmovw %k1, %eax
523 ; AVX512F-NEXT: kshiftlw $15, %k0, %k1
524 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
525 ; AVX512F-NEXT: kmovw %k1, %ecx
526 ; AVX512F-NEXT: vmovd %ecx, %xmm2
527 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm2, %xmm2
528 ; AVX512F-NEXT: kshiftlw $13, %k0, %k1
529 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
530 ; AVX512F-NEXT: kmovw %k1, %eax
531 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm2, %xmm2
532 ; AVX512F-NEXT: kshiftlw $12, %k0, %k1
533 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
534 ; AVX512F-NEXT: kmovw %k1, %eax
535 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm2, %xmm2
536 ; AVX512F-NEXT: kshiftlw $11, %k0, %k1
537 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
538 ; AVX512F-NEXT: kmovw %k1, %eax
539 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm2, %xmm2
540 ; AVX512F-NEXT: kshiftlw $10, %k0, %k1
541 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
542 ; AVX512F-NEXT: kmovw %k1, %eax
543 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm2, %xmm2
544 ; AVX512F-NEXT: kshiftlw $9, %k0, %k1
545 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
546 ; AVX512F-NEXT: kmovw %k1, %eax
547 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm2, %xmm2
548 ; AVX512F-NEXT: kshiftlw $8, %k0, %k1
549 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
550 ; AVX512F-NEXT: kmovw %k1, %eax
551 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm2, %xmm2
552 ; AVX512F-NEXT: kshiftlw $7, %k0, %k1
553 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
554 ; AVX512F-NEXT: kmovw %k1, %eax
555 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm2, %xmm2
556 ; AVX512F-NEXT: kshiftlw $6, %k0, %k1
557 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
558 ; AVX512F-NEXT: kmovw %k1, %eax
559 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm2, %xmm2
560 ; AVX512F-NEXT: kshiftlw $5, %k0, %k1
561 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
562 ; AVX512F-NEXT: kmovw %k1, %eax
563 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm2, %xmm2
564 ; AVX512F-NEXT: kshiftlw $4, %k0, %k1
565 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
566 ; AVX512F-NEXT: kmovw %k1, %eax
567 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm2, %xmm2
568 ; AVX512F-NEXT: kshiftlw $3, %k0, %k1
569 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
570 ; AVX512F-NEXT: kmovw %k1, %eax
571 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm2, %xmm2
572 ; AVX512F-NEXT: kshiftlw $2, %k0, %k1
573 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
574 ; AVX512F-NEXT: kmovw %k1, %eax
575 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm2, %xmm2
576 ; AVX512F-NEXT: kshiftlw $1, %k0, %k1
577 ; AVX512F-NEXT: kshiftrw $15, %k1, %k1
578 ; AVX512F-NEXT: kmovw %k1, %eax
579 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm2, %xmm2
580 ; AVX512F-NEXT: kshiftrw $15, %k0, %k0
581 ; AVX512F-NEXT: kmovw %k0, %eax
582 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm2, %xmm2
583 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm1
584 ; AVX512F-NEXT: vpand %ymm1, %ymm0, %ymm0
585 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
586 ; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
587 ; AVX512F-NEXT: vpslld $31, %zmm1, %zmm1
588 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0
589 ; AVX512F-NEXT: kmovw %k0, {{[0-9]+}}(%rsp)
590 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
591 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
592 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
593 ; AVX512F-NEXT: kmovw %k0, (%rsp)
594 ; AVX512F-NEXT: movl (%rsp), %eax
595 ; AVX512F-NEXT: movq %rbp, %rsp
596 ; AVX512F-NEXT: popq %rbp
597 ; AVX512F-NEXT: vzeroupper
600 ; AVX512BW-LABEL: v32i16:
602 ; AVX512BW-NEXT: vpcmpgtw %zmm1, %zmm0, %k1
603 ; AVX512BW-NEXT: vpcmpgtw %zmm3, %zmm2, %k0 {%k1}
604 ; AVX512BW-NEXT: kmovd %k0, %eax
605 ; AVX512BW-NEXT: vzeroupper
606 ; AVX512BW-NEXT: retq
607 %x0 = icmp sgt <32 x i16> %a, %b
608 %x1 = icmp sgt <32 x i16> %c, %d
609 %y = and <32 x i1> %x0, %x1
610 %res = bitcast <32 x i1> %y to i32
614 define i16 @v16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i32> %d) {
617 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8
618 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9
619 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10
620 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11
621 ; SSE-NEXT: pcmpgtd %xmm7, %xmm3
622 ; SSE-NEXT: pcmpgtd %xmm6, %xmm2
623 ; SSE-NEXT: packssdw %xmm3, %xmm2
624 ; SSE-NEXT: pcmpgtd %xmm5, %xmm1
625 ; SSE-NEXT: pcmpgtd %xmm4, %xmm0
626 ; SSE-NEXT: packssdw %xmm1, %xmm0
627 ; SSE-NEXT: packsswb %xmm2, %xmm0
628 ; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm11
629 ; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm10
630 ; SSE-NEXT: packssdw %xmm11, %xmm10
631 ; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm9
632 ; SSE-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm8
633 ; SSE-NEXT: packssdw %xmm9, %xmm8
634 ; SSE-NEXT: packsswb %xmm10, %xmm8
635 ; SSE-NEXT: pand %xmm0, %xmm8
636 ; SSE-NEXT: pmovmskb %xmm8, %eax
637 ; SSE-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
640 ; AVX1-LABEL: v16i32:
642 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm8
643 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9
644 ; AVX1-NEXT: vpcmpgtd %xmm8, %xmm9, %xmm8
645 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm1
646 ; AVX1-NEXT: vpackssdw %xmm8, %xmm1, %xmm8
647 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
648 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
649 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm1
650 ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm0
651 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
652 ; AVX1-NEXT: vpacksswb %xmm8, %xmm0, %xmm0
653 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1
654 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm2
655 ; AVX1-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1
656 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm5, %xmm2
657 ; AVX1-NEXT: vpackssdw %xmm1, %xmm2, %xmm1
658 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm2
659 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3
660 ; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
661 ; AVX1-NEXT: vpcmpgtd %xmm6, %xmm4, %xmm3
662 ; AVX1-NEXT: vpackssdw %xmm2, %xmm3, %xmm2
663 ; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
664 ; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0
665 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
666 ; AVX1-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
667 ; AVX1-NEXT: vzeroupper
670 ; AVX2-LABEL: v16i32:
672 ; AVX2-NEXT: vpcmpgtd %ymm3, %ymm1, %ymm1
673 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
674 ; AVX2-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
675 ; AVX2-NEXT: vpcmpgtd %ymm2, %ymm0, %ymm0
676 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
677 ; AVX2-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
678 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
679 ; AVX2-NEXT: vpcmpgtd %ymm7, %ymm5, %ymm1
680 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
681 ; AVX2-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
682 ; AVX2-NEXT: vpcmpgtd %ymm6, %ymm4, %ymm2
683 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3
684 ; AVX2-NEXT: vpackssdw %xmm3, %xmm2, %xmm2
685 ; AVX2-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
686 ; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
687 ; AVX2-NEXT: vpmovmskb %xmm0, %eax
688 ; AVX2-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
689 ; AVX2-NEXT: vzeroupper
692 ; AVX512F-LABEL: v16i32:
694 ; AVX512F-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
695 ; AVX512F-NEXT: vpcmpgtd %zmm3, %zmm2, %k0 {%k1}
696 ; AVX512F-NEXT: kmovw %k0, %eax
697 ; AVX512F-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
698 ; AVX512F-NEXT: vzeroupper
701 ; AVX512BW-LABEL: v16i32:
703 ; AVX512BW-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
704 ; AVX512BW-NEXT: vpcmpgtd %zmm3, %zmm2, %k0 {%k1}
705 ; AVX512BW-NEXT: kmovd %k0, %eax
706 ; AVX512BW-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
707 ; AVX512BW-NEXT: vzeroupper
708 ; AVX512BW-NEXT: retq
709 %x0 = icmp sgt <16 x i32> %a, %b
710 %x1 = icmp sgt <16 x i32> %c, %d
711 %y = and <16 x i1> %x0, %x1
712 %res = bitcast <16 x i1> %y to i16
716 define i16 @v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x float> %d) {
719 ; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm8
720 ; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm9
721 ; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm10
722 ; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11
723 ; SSE-NEXT: cmpltps %xmm3, %xmm7
724 ; SSE-NEXT: cmpltps %xmm2, %xmm6
725 ; SSE-NEXT: packssdw %xmm7, %xmm6
726 ; SSE-NEXT: cmpltps %xmm1, %xmm5
727 ; SSE-NEXT: cmpltps %xmm0, %xmm4
728 ; SSE-NEXT: packssdw %xmm5, %xmm4
729 ; SSE-NEXT: packsswb %xmm6, %xmm4
730 ; SSE-NEXT: cmpltps {{[0-9]+}}(%rsp), %xmm11
731 ; SSE-NEXT: cmpltps {{[0-9]+}}(%rsp), %xmm10
732 ; SSE-NEXT: packssdw %xmm11, %xmm10
733 ; SSE-NEXT: cmpltps {{[0-9]+}}(%rsp), %xmm9
734 ; SSE-NEXT: cmpltps {{[0-9]+}}(%rsp), %xmm8
735 ; SSE-NEXT: packssdw %xmm9, %xmm8
736 ; SSE-NEXT: packsswb %xmm10, %xmm8
737 ; SSE-NEXT: pand %xmm4, %xmm8
738 ; SSE-NEXT: pmovmskb %xmm8, %eax
739 ; SSE-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
742 ; AVX12-LABEL: v16f32:
744 ; AVX12-NEXT: vcmpltps %ymm1, %ymm3, %ymm1
745 ; AVX12-NEXT: vextractf128 $1, %ymm1, %xmm3
746 ; AVX12-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
747 ; AVX12-NEXT: vcmpltps %ymm0, %ymm2, %ymm0
748 ; AVX12-NEXT: vextractf128 $1, %ymm0, %xmm2
749 ; AVX12-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
750 ; AVX12-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
751 ; AVX12-NEXT: vcmpltps %ymm5, %ymm7, %ymm1
752 ; AVX12-NEXT: vextractf128 $1, %ymm1, %xmm2
753 ; AVX12-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
754 ; AVX12-NEXT: vcmpltps %ymm4, %ymm6, %ymm2
755 ; AVX12-NEXT: vextractf128 $1, %ymm2, %xmm3
756 ; AVX12-NEXT: vpackssdw %xmm3, %xmm2, %xmm2
757 ; AVX12-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
758 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
759 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
760 ; AVX12-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
761 ; AVX12-NEXT: vzeroupper
764 ; AVX512F-LABEL: v16f32:
766 ; AVX512F-NEXT: vcmpltps %zmm0, %zmm1, %k1
767 ; AVX512F-NEXT: vcmpltps %zmm2, %zmm3, %k0 {%k1}
768 ; AVX512F-NEXT: kmovw %k0, %eax
769 ; AVX512F-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
770 ; AVX512F-NEXT: vzeroupper
773 ; AVX512BW-LABEL: v16f32:
775 ; AVX512BW-NEXT: vcmpltps %zmm0, %zmm1, %k1
776 ; AVX512BW-NEXT: vcmpltps %zmm2, %zmm3, %k0 {%k1}
777 ; AVX512BW-NEXT: kmovd %k0, %eax
778 ; AVX512BW-NEXT: # kill: %ax<def> %ax<kill> %eax<kill>
779 ; AVX512BW-NEXT: vzeroupper
780 ; AVX512BW-NEXT: retq
781 %x0 = fcmp ogt <16 x float> %a, %b
782 %x1 = fcmp ogt <16 x float> %c, %d
783 %y = and <16 x i1> %x0, %x1
784 %res = bitcast <16 x i1> %y to i16
788 define i64 @v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i8> %d) {
791 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11
792 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10
793 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9
794 ; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8
795 ; SSE-NEXT: pcmpgtb %xmm6, %xmm2
796 ; SSE-NEXT: pcmpgtb %xmm7, %xmm3
797 ; SSE-NEXT: pcmpgtb %xmm4, %xmm0
798 ; SSE-NEXT: pcmpgtb %xmm5, %xmm1
799 ; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm8
800 ; SSE-NEXT: pand %xmm2, %xmm8
801 ; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm9
802 ; SSE-NEXT: pand %xmm3, %xmm9
803 ; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm10
804 ; SSE-NEXT: pand %xmm0, %xmm10
805 ; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm11
806 ; SSE-NEXT: pand %xmm1, %xmm11
807 ; SSE-NEXT: pextrb $15, %xmm11, %eax
808 ; SSE-NEXT: andb $1, %al
809 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
810 ; SSE-NEXT: pextrb $14, %xmm11, %eax
811 ; SSE-NEXT: andb $1, %al
812 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
813 ; SSE-NEXT: pextrb $13, %xmm11, %eax
814 ; SSE-NEXT: andb $1, %al
815 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
816 ; SSE-NEXT: pextrb $12, %xmm11, %eax
817 ; SSE-NEXT: andb $1, %al
818 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
819 ; SSE-NEXT: pextrb $11, %xmm11, %eax
820 ; SSE-NEXT: andb $1, %al
821 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
822 ; SSE-NEXT: pextrb $10, %xmm11, %eax
823 ; SSE-NEXT: andb $1, %al
824 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
825 ; SSE-NEXT: pextrb $9, %xmm11, %eax
826 ; SSE-NEXT: andb $1, %al
827 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
828 ; SSE-NEXT: pextrb $8, %xmm11, %eax
829 ; SSE-NEXT: andb $1, %al
830 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
831 ; SSE-NEXT: pextrb $7, %xmm11, %eax
832 ; SSE-NEXT: andb $1, %al
833 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
834 ; SSE-NEXT: pextrb $6, %xmm11, %eax
835 ; SSE-NEXT: andb $1, %al
836 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
837 ; SSE-NEXT: pextrb $5, %xmm11, %eax
838 ; SSE-NEXT: andb $1, %al
839 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
840 ; SSE-NEXT: pextrb $4, %xmm11, %eax
841 ; SSE-NEXT: andb $1, %al
842 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
843 ; SSE-NEXT: pextrb $3, %xmm11, %eax
844 ; SSE-NEXT: andb $1, %al
845 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
846 ; SSE-NEXT: pextrb $2, %xmm11, %eax
847 ; SSE-NEXT: andb $1, %al
848 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
849 ; SSE-NEXT: pextrb $1, %xmm11, %eax
850 ; SSE-NEXT: andb $1, %al
851 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
852 ; SSE-NEXT: pextrb $0, %xmm11, %eax
853 ; SSE-NEXT: andb $1, %al
854 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
855 ; SSE-NEXT: pextrb $15, %xmm10, %eax
856 ; SSE-NEXT: andb $1, %al
857 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
858 ; SSE-NEXT: pextrb $14, %xmm10, %eax
859 ; SSE-NEXT: andb $1, %al
860 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
861 ; SSE-NEXT: pextrb $13, %xmm10, %eax
862 ; SSE-NEXT: andb $1, %al
863 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
864 ; SSE-NEXT: pextrb $12, %xmm10, %eax
865 ; SSE-NEXT: andb $1, %al
866 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
867 ; SSE-NEXT: pextrb $11, %xmm10, %eax
868 ; SSE-NEXT: andb $1, %al
869 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
870 ; SSE-NEXT: pextrb $10, %xmm10, %eax
871 ; SSE-NEXT: andb $1, %al
872 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
873 ; SSE-NEXT: pextrb $9, %xmm10, %eax
874 ; SSE-NEXT: andb $1, %al
875 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
876 ; SSE-NEXT: pextrb $8, %xmm10, %eax
877 ; SSE-NEXT: andb $1, %al
878 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
879 ; SSE-NEXT: pextrb $7, %xmm10, %eax
880 ; SSE-NEXT: andb $1, %al
881 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
882 ; SSE-NEXT: pextrb $6, %xmm10, %eax
883 ; SSE-NEXT: andb $1, %al
884 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
885 ; SSE-NEXT: pextrb $5, %xmm10, %eax
886 ; SSE-NEXT: andb $1, %al
887 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
888 ; SSE-NEXT: pextrb $4, %xmm10, %eax
889 ; SSE-NEXT: andb $1, %al
890 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
891 ; SSE-NEXT: pextrb $3, %xmm10, %eax
892 ; SSE-NEXT: andb $1, %al
893 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
894 ; SSE-NEXT: pextrb $2, %xmm10, %eax
895 ; SSE-NEXT: andb $1, %al
896 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
897 ; SSE-NEXT: pextrb $1, %xmm10, %eax
898 ; SSE-NEXT: andb $1, %al
899 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
900 ; SSE-NEXT: pextrb $0, %xmm10, %eax
901 ; SSE-NEXT: andb $1, %al
902 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
903 ; SSE-NEXT: pextrb $15, %xmm9, %eax
904 ; SSE-NEXT: andb $1, %al
905 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
906 ; SSE-NEXT: pextrb $14, %xmm9, %eax
907 ; SSE-NEXT: andb $1, %al
908 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
909 ; SSE-NEXT: pextrb $13, %xmm9, %eax
910 ; SSE-NEXT: andb $1, %al
911 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
912 ; SSE-NEXT: pextrb $12, %xmm9, %eax
913 ; SSE-NEXT: andb $1, %al
914 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
915 ; SSE-NEXT: pextrb $11, %xmm9, %eax
916 ; SSE-NEXT: andb $1, %al
917 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
918 ; SSE-NEXT: pextrb $10, %xmm9, %eax
919 ; SSE-NEXT: andb $1, %al
920 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
921 ; SSE-NEXT: pextrb $9, %xmm9, %eax
922 ; SSE-NEXT: andb $1, %al
923 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
924 ; SSE-NEXT: pextrb $8, %xmm9, %eax
925 ; SSE-NEXT: andb $1, %al
926 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
927 ; SSE-NEXT: pextrb $7, %xmm9, %eax
928 ; SSE-NEXT: andb $1, %al
929 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
930 ; SSE-NEXT: pextrb $6, %xmm9, %eax
931 ; SSE-NEXT: andb $1, %al
932 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
933 ; SSE-NEXT: pextrb $5, %xmm9, %eax
934 ; SSE-NEXT: andb $1, %al
935 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
936 ; SSE-NEXT: pextrb $4, %xmm9, %eax
937 ; SSE-NEXT: andb $1, %al
938 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
939 ; SSE-NEXT: pextrb $3, %xmm9, %eax
940 ; SSE-NEXT: andb $1, %al
941 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
942 ; SSE-NEXT: pextrb $2, %xmm9, %eax
943 ; SSE-NEXT: andb $1, %al
944 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
945 ; SSE-NEXT: pextrb $1, %xmm9, %eax
946 ; SSE-NEXT: andb $1, %al
947 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
948 ; SSE-NEXT: pextrb $0, %xmm9, %eax
949 ; SSE-NEXT: andb $1, %al
950 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
951 ; SSE-NEXT: pextrb $15, %xmm8, %eax
952 ; SSE-NEXT: andb $1, %al
953 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
954 ; SSE-NEXT: pextrb $14, %xmm8, %eax
955 ; SSE-NEXT: andb $1, %al
956 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
957 ; SSE-NEXT: pextrb $13, %xmm8, %eax
958 ; SSE-NEXT: andb $1, %al
959 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
960 ; SSE-NEXT: pextrb $12, %xmm8, %eax
961 ; SSE-NEXT: andb $1, %al
962 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
963 ; SSE-NEXT: pextrb $11, %xmm8, %eax
964 ; SSE-NEXT: andb $1, %al
965 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
966 ; SSE-NEXT: pextrb $10, %xmm8, %eax
967 ; SSE-NEXT: andb $1, %al
968 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
969 ; SSE-NEXT: pextrb $9, %xmm8, %eax
970 ; SSE-NEXT: andb $1, %al
971 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
972 ; SSE-NEXT: pextrb $8, %xmm8, %eax
973 ; SSE-NEXT: andb $1, %al
974 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
975 ; SSE-NEXT: pextrb $7, %xmm8, %eax
976 ; SSE-NEXT: andb $1, %al
977 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
978 ; SSE-NEXT: pextrb $6, %xmm8, %eax
979 ; SSE-NEXT: andb $1, %al
980 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
981 ; SSE-NEXT: pextrb $5, %xmm8, %eax
982 ; SSE-NEXT: andb $1, %al
983 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
984 ; SSE-NEXT: pextrb $4, %xmm8, %eax
985 ; SSE-NEXT: andb $1, %al
986 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
987 ; SSE-NEXT: pextrb $3, %xmm8, %eax
988 ; SSE-NEXT: andb $1, %al
989 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
990 ; SSE-NEXT: pextrb $2, %xmm8, %eax
991 ; SSE-NEXT: andb $1, %al
992 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
993 ; SSE-NEXT: pextrb $1, %xmm8, %eax
994 ; SSE-NEXT: andb $1, %al
995 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
996 ; SSE-NEXT: pextrb $0, %xmm8, %eax
997 ; SSE-NEXT: andb $1, %al
998 ; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp)
999 ; SSE-NEXT: movl -{{[0-9]+}}(%rsp), %eax
1000 ; SSE-NEXT: shll $16, %eax
1001 ; SSE-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
1002 ; SSE-NEXT: orl %eax, %ecx
1003 ; SSE-NEXT: movl -{{[0-9]+}}(%rsp), %edx
1004 ; SSE-NEXT: shll $16, %edx
1005 ; SSE-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
1006 ; SSE-NEXT: orl %edx, %eax
1007 ; SSE-NEXT: shlq $32, %rax
1008 ; SSE-NEXT: orq %rcx, %rax
1011 ; AVX1-LABEL: v64i8:
1013 ; AVX1-NEXT: pushq %rbp
1014 ; AVX1-NEXT: .cfi_def_cfa_offset 16
1015 ; AVX1-NEXT: .cfi_offset %rbp, -16
1016 ; AVX1-NEXT: movq %rsp, %rbp
1017 ; AVX1-NEXT: .cfi_def_cfa_register %rbp
1018 ; AVX1-NEXT: andq $-32, %rsp
1019 ; AVX1-NEXT: subq $64, %rsp
1020 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm8
1021 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9
1022 ; AVX1-NEXT: vpcmpgtb %xmm8, %xmm9, %xmm8
1023 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm1
1024 ; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm1, %ymm8
1025 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
1026 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1027 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm1
1028 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm0
1029 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1
1030 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm0
1031 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm2
1032 ; AVX1-NEXT: vpcmpgtb %xmm0, %xmm2, %xmm0
1033 ; AVX1-NEXT: vpcmpgtb %xmm7, %xmm5, %xmm2
1034 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
1035 ; AVX1-NEXT: vandps %ymm0, %ymm8, %ymm0
1036 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm2
1037 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm3
1038 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2
1039 ; AVX1-NEXT: vpcmpgtb %xmm6, %xmm4, %xmm3
1040 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1041 ; AVX1-NEXT: vandps %ymm2, %ymm1, %ymm1
1042 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1043 ; AVX1-NEXT: vpextrb $15, %xmm2, %eax
1044 ; AVX1-NEXT: andb $1, %al
1045 ; AVX1-NEXT: movb %al, (%rsp)
1046 ; AVX1-NEXT: vpextrb $14, %xmm2, %eax
1047 ; AVX1-NEXT: andb $1, %al
1048 ; AVX1-NEXT: movb %al, (%rsp)
1049 ; AVX1-NEXT: vpextrb $13, %xmm2, %eax
1050 ; AVX1-NEXT: andb $1, %al
1051 ; AVX1-NEXT: movb %al, (%rsp)
1052 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
1053 ; AVX1-NEXT: andb $1, %al
1054 ; AVX1-NEXT: movb %al, (%rsp)
1055 ; AVX1-NEXT: vpextrb $11, %xmm2, %eax
1056 ; AVX1-NEXT: andb $1, %al
1057 ; AVX1-NEXT: movb %al, (%rsp)
1058 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
1059 ; AVX1-NEXT: andb $1, %al
1060 ; AVX1-NEXT: movb %al, (%rsp)
1061 ; AVX1-NEXT: vpextrb $9, %xmm2, %eax
1062 ; AVX1-NEXT: andb $1, %al
1063 ; AVX1-NEXT: movb %al, (%rsp)
1064 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
1065 ; AVX1-NEXT: andb $1, %al
1066 ; AVX1-NEXT: movb %al, (%rsp)
1067 ; AVX1-NEXT: vpextrb $7, %xmm2, %eax
1068 ; AVX1-NEXT: andb $1, %al
1069 ; AVX1-NEXT: movb %al, (%rsp)
1070 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
1071 ; AVX1-NEXT: andb $1, %al
1072 ; AVX1-NEXT: movb %al, (%rsp)
1073 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax
1074 ; AVX1-NEXT: andb $1, %al
1075 ; AVX1-NEXT: movb %al, (%rsp)
1076 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
1077 ; AVX1-NEXT: andb $1, %al
1078 ; AVX1-NEXT: movb %al, (%rsp)
1079 ; AVX1-NEXT: vpextrb $3, %xmm2, %eax
1080 ; AVX1-NEXT: andb $1, %al
1081 ; AVX1-NEXT: movb %al, (%rsp)
1082 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
1083 ; AVX1-NEXT: andb $1, %al
1084 ; AVX1-NEXT: movb %al, (%rsp)
1085 ; AVX1-NEXT: vpextrb $1, %xmm2, %eax
1086 ; AVX1-NEXT: andb $1, %al
1087 ; AVX1-NEXT: movb %al, (%rsp)
1088 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
1089 ; AVX1-NEXT: andb $1, %al
1090 ; AVX1-NEXT: movb %al, (%rsp)
1091 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
1092 ; AVX1-NEXT: andb $1, %al
1093 ; AVX1-NEXT: movb %al, (%rsp)
1094 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
1095 ; AVX1-NEXT: andb $1, %al
1096 ; AVX1-NEXT: movb %al, (%rsp)
1097 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
1098 ; AVX1-NEXT: andb $1, %al
1099 ; AVX1-NEXT: movb %al, (%rsp)
1100 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
1101 ; AVX1-NEXT: andb $1, %al
1102 ; AVX1-NEXT: movb %al, (%rsp)
1103 ; AVX1-NEXT: vpextrb $11, %xmm1, %eax
1104 ; AVX1-NEXT: andb $1, %al
1105 ; AVX1-NEXT: movb %al, (%rsp)
1106 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
1107 ; AVX1-NEXT: andb $1, %al
1108 ; AVX1-NEXT: movb %al, (%rsp)
1109 ; AVX1-NEXT: vpextrb $9, %xmm1, %eax
1110 ; AVX1-NEXT: andb $1, %al
1111 ; AVX1-NEXT: movb %al, (%rsp)
1112 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
1113 ; AVX1-NEXT: andb $1, %al
1114 ; AVX1-NEXT: movb %al, (%rsp)
1115 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
1116 ; AVX1-NEXT: andb $1, %al
1117 ; AVX1-NEXT: movb %al, (%rsp)
1118 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
1119 ; AVX1-NEXT: andb $1, %al
1120 ; AVX1-NEXT: movb %al, (%rsp)
1121 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
1122 ; AVX1-NEXT: andb $1, %al
1123 ; AVX1-NEXT: movb %al, (%rsp)
1124 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
1125 ; AVX1-NEXT: andb $1, %al
1126 ; AVX1-NEXT: movb %al, (%rsp)
1127 ; AVX1-NEXT: vpextrb $3, %xmm1, %eax
1128 ; AVX1-NEXT: andb $1, %al
1129 ; AVX1-NEXT: movb %al, (%rsp)
1130 ; AVX1-NEXT: vpextrb $2, %xmm1, %eax
1131 ; AVX1-NEXT: andb $1, %al
1132 ; AVX1-NEXT: movb %al, (%rsp)
1133 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax
1134 ; AVX1-NEXT: andb $1, %al
1135 ; AVX1-NEXT: movb %al, (%rsp)
1136 ; AVX1-NEXT: vpextrb $0, %xmm1, %eax
1137 ; AVX1-NEXT: andb $1, %al
1138 ; AVX1-NEXT: movb %al, (%rsp)
1139 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1140 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
1141 ; AVX1-NEXT: andb $1, %al
1142 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1143 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
1144 ; AVX1-NEXT: andb $1, %al
1145 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1146 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
1147 ; AVX1-NEXT: andb $1, %al
1148 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1149 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
1150 ; AVX1-NEXT: andb $1, %al
1151 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1152 ; AVX1-NEXT: vpextrb $11, %xmm1, %eax
1153 ; AVX1-NEXT: andb $1, %al
1154 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1155 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
1156 ; AVX1-NEXT: andb $1, %al
1157 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1158 ; AVX1-NEXT: vpextrb $9, %xmm1, %eax
1159 ; AVX1-NEXT: andb $1, %al
1160 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1161 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
1162 ; AVX1-NEXT: andb $1, %al
1163 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1164 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
1165 ; AVX1-NEXT: andb $1, %al
1166 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1167 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
1168 ; AVX1-NEXT: andb $1, %al
1169 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1170 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
1171 ; AVX1-NEXT: andb $1, %al
1172 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1173 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
1174 ; AVX1-NEXT: andb $1, %al
1175 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1176 ; AVX1-NEXT: vpextrb $3, %xmm1, %eax
1177 ; AVX1-NEXT: andb $1, %al
1178 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1179 ; AVX1-NEXT: vpextrb $2, %xmm1, %eax
1180 ; AVX1-NEXT: andb $1, %al
1181 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1182 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax
1183 ; AVX1-NEXT: andb $1, %al
1184 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1185 ; AVX1-NEXT: vpextrb $0, %xmm1, %eax
1186 ; AVX1-NEXT: andb $1, %al
1187 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1188 ; AVX1-NEXT: vpextrb $15, %xmm0, %eax
1189 ; AVX1-NEXT: andb $1, %al
1190 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1191 ; AVX1-NEXT: vpextrb $14, %xmm0, %eax
1192 ; AVX1-NEXT: andb $1, %al
1193 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1194 ; AVX1-NEXT: vpextrb $13, %xmm0, %eax
1195 ; AVX1-NEXT: andb $1, %al
1196 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1197 ; AVX1-NEXT: vpextrb $12, %xmm0, %eax
1198 ; AVX1-NEXT: andb $1, %al
1199 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1200 ; AVX1-NEXT: vpextrb $11, %xmm0, %eax
1201 ; AVX1-NEXT: andb $1, %al
1202 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1203 ; AVX1-NEXT: vpextrb $10, %xmm0, %eax
1204 ; AVX1-NEXT: andb $1, %al
1205 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1206 ; AVX1-NEXT: vpextrb $9, %xmm0, %eax
1207 ; AVX1-NEXT: andb $1, %al
1208 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1209 ; AVX1-NEXT: vpextrb $8, %xmm0, %eax
1210 ; AVX1-NEXT: andb $1, %al
1211 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1212 ; AVX1-NEXT: vpextrb $7, %xmm0, %eax
1213 ; AVX1-NEXT: andb $1, %al
1214 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1215 ; AVX1-NEXT: vpextrb $6, %xmm0, %eax
1216 ; AVX1-NEXT: andb $1, %al
1217 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1218 ; AVX1-NEXT: vpextrb $5, %xmm0, %eax
1219 ; AVX1-NEXT: andb $1, %al
1220 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1221 ; AVX1-NEXT: vpextrb $4, %xmm0, %eax
1222 ; AVX1-NEXT: andb $1, %al
1223 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1224 ; AVX1-NEXT: vpextrb $3, %xmm0, %eax
1225 ; AVX1-NEXT: andb $1, %al
1226 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1227 ; AVX1-NEXT: vpextrb $2, %xmm0, %eax
1228 ; AVX1-NEXT: andb $1, %al
1229 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1230 ; AVX1-NEXT: vpextrb $1, %xmm0, %eax
1231 ; AVX1-NEXT: andb $1, %al
1232 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1233 ; AVX1-NEXT: vpextrb $0, %xmm0, %eax
1234 ; AVX1-NEXT: andb $1, %al
1235 ; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp)
1236 ; AVX1-NEXT: movl (%rsp), %ecx
1237 ; AVX1-NEXT: movl {{[0-9]+}}(%rsp), %eax
1238 ; AVX1-NEXT: shlq $32, %rax
1239 ; AVX1-NEXT: orq %rcx, %rax
1240 ; AVX1-NEXT: movq %rbp, %rsp
1241 ; AVX1-NEXT: popq %rbp
1242 ; AVX1-NEXT: vzeroupper
1245 ; AVX2-LABEL: v64i8:
1247 ; AVX2-NEXT: pushq %rbp
1248 ; AVX2-NEXT: .cfi_def_cfa_offset 16
1249 ; AVX2-NEXT: .cfi_offset %rbp, -16
1250 ; AVX2-NEXT: movq %rsp, %rbp
1251 ; AVX2-NEXT: .cfi_def_cfa_register %rbp
1252 ; AVX2-NEXT: andq $-32, %rsp
1253 ; AVX2-NEXT: subq $64, %rsp
1254 ; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm1
1255 ; AVX2-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm2
1256 ; AVX2-NEXT: vpcmpgtb %ymm7, %ymm5, %ymm0
1257 ; AVX2-NEXT: vpand %ymm0, %ymm1, %ymm0
1258 ; AVX2-NEXT: vpcmpgtb %ymm6, %ymm4, %ymm1
1259 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1
1260 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
1261 ; AVX2-NEXT: vpextrb $15, %xmm2, %eax
1262 ; AVX2-NEXT: andb $1, %al
1263 ; AVX2-NEXT: movb %al, (%rsp)
1264 ; AVX2-NEXT: vpextrb $14, %xmm2, %eax
1265 ; AVX2-NEXT: andb $1, %al
1266 ; AVX2-NEXT: movb %al, (%rsp)
1267 ; AVX2-NEXT: vpextrb $13, %xmm2, %eax
1268 ; AVX2-NEXT: andb $1, %al
1269 ; AVX2-NEXT: movb %al, (%rsp)
1270 ; AVX2-NEXT: vpextrb $12, %xmm2, %eax
1271 ; AVX2-NEXT: andb $1, %al
1272 ; AVX2-NEXT: movb %al, (%rsp)
1273 ; AVX2-NEXT: vpextrb $11, %xmm2, %eax
1274 ; AVX2-NEXT: andb $1, %al
1275 ; AVX2-NEXT: movb %al, (%rsp)
1276 ; AVX2-NEXT: vpextrb $10, %xmm2, %eax
1277 ; AVX2-NEXT: andb $1, %al
1278 ; AVX2-NEXT: movb %al, (%rsp)
1279 ; AVX2-NEXT: vpextrb $9, %xmm2, %eax
1280 ; AVX2-NEXT: andb $1, %al
1281 ; AVX2-NEXT: movb %al, (%rsp)
1282 ; AVX2-NEXT: vpextrb $8, %xmm2, %eax
1283 ; AVX2-NEXT: andb $1, %al
1284 ; AVX2-NEXT: movb %al, (%rsp)
1285 ; AVX2-NEXT: vpextrb $7, %xmm2, %eax
1286 ; AVX2-NEXT: andb $1, %al
1287 ; AVX2-NEXT: movb %al, (%rsp)
1288 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
1289 ; AVX2-NEXT: andb $1, %al
1290 ; AVX2-NEXT: movb %al, (%rsp)
1291 ; AVX2-NEXT: vpextrb $5, %xmm2, %eax
1292 ; AVX2-NEXT: andb $1, %al
1293 ; AVX2-NEXT: movb %al, (%rsp)
1294 ; AVX2-NEXT: vpextrb $4, %xmm2, %eax
1295 ; AVX2-NEXT: andb $1, %al
1296 ; AVX2-NEXT: movb %al, (%rsp)
1297 ; AVX2-NEXT: vpextrb $3, %xmm2, %eax
1298 ; AVX2-NEXT: andb $1, %al
1299 ; AVX2-NEXT: movb %al, (%rsp)
1300 ; AVX2-NEXT: vpextrb $2, %xmm2, %eax
1301 ; AVX2-NEXT: andb $1, %al
1302 ; AVX2-NEXT: movb %al, (%rsp)
1303 ; AVX2-NEXT: vpextrb $1, %xmm2, %eax
1304 ; AVX2-NEXT: andb $1, %al
1305 ; AVX2-NEXT: movb %al, (%rsp)
1306 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
1307 ; AVX2-NEXT: andb $1, %al
1308 ; AVX2-NEXT: movb %al, (%rsp)
1309 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
1310 ; AVX2-NEXT: andb $1, %al
1311 ; AVX2-NEXT: movb %al, (%rsp)
1312 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
1313 ; AVX2-NEXT: andb $1, %al
1314 ; AVX2-NEXT: movb %al, (%rsp)
1315 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
1316 ; AVX2-NEXT: andb $1, %al
1317 ; AVX2-NEXT: movb %al, (%rsp)
1318 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
1319 ; AVX2-NEXT: andb $1, %al
1320 ; AVX2-NEXT: movb %al, (%rsp)
1321 ; AVX2-NEXT: vpextrb $11, %xmm1, %eax
1322 ; AVX2-NEXT: andb $1, %al
1323 ; AVX2-NEXT: movb %al, (%rsp)
1324 ; AVX2-NEXT: vpextrb $10, %xmm1, %eax
1325 ; AVX2-NEXT: andb $1, %al
1326 ; AVX2-NEXT: movb %al, (%rsp)
1327 ; AVX2-NEXT: vpextrb $9, %xmm1, %eax
1328 ; AVX2-NEXT: andb $1, %al
1329 ; AVX2-NEXT: movb %al, (%rsp)
1330 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
1331 ; AVX2-NEXT: andb $1, %al
1332 ; AVX2-NEXT: movb %al, (%rsp)
1333 ; AVX2-NEXT: vpextrb $7, %xmm1, %eax
1334 ; AVX2-NEXT: andb $1, %al
1335 ; AVX2-NEXT: movb %al, (%rsp)
1336 ; AVX2-NEXT: vpextrb $6, %xmm1, %eax
1337 ; AVX2-NEXT: andb $1, %al
1338 ; AVX2-NEXT: movb %al, (%rsp)
1339 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax
1340 ; AVX2-NEXT: andb $1, %al
1341 ; AVX2-NEXT: movb %al, (%rsp)
1342 ; AVX2-NEXT: vpextrb $4, %xmm1, %eax
1343 ; AVX2-NEXT: andb $1, %al
1344 ; AVX2-NEXT: movb %al, (%rsp)
1345 ; AVX2-NEXT: vpextrb $3, %xmm1, %eax
1346 ; AVX2-NEXT: andb $1, %al
1347 ; AVX2-NEXT: movb %al, (%rsp)
1348 ; AVX2-NEXT: vpextrb $2, %xmm1, %eax
1349 ; AVX2-NEXT: andb $1, %al
1350 ; AVX2-NEXT: movb %al, (%rsp)
1351 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax
1352 ; AVX2-NEXT: andb $1, %al
1353 ; AVX2-NEXT: movb %al, (%rsp)
1354 ; AVX2-NEXT: vpextrb $0, %xmm1, %eax
1355 ; AVX2-NEXT: andb $1, %al
1356 ; AVX2-NEXT: movb %al, (%rsp)
1357 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1358 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
1359 ; AVX2-NEXT: andb $1, %al
1360 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1361 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
1362 ; AVX2-NEXT: andb $1, %al
1363 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1364 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
1365 ; AVX2-NEXT: andb $1, %al
1366 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1367 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
1368 ; AVX2-NEXT: andb $1, %al
1369 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1370 ; AVX2-NEXT: vpextrb $11, %xmm1, %eax
1371 ; AVX2-NEXT: andb $1, %al
1372 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1373 ; AVX2-NEXT: vpextrb $10, %xmm1, %eax
1374 ; AVX2-NEXT: andb $1, %al
1375 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1376 ; AVX2-NEXT: vpextrb $9, %xmm1, %eax
1377 ; AVX2-NEXT: andb $1, %al
1378 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1379 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
1380 ; AVX2-NEXT: andb $1, %al
1381 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1382 ; AVX2-NEXT: vpextrb $7, %xmm1, %eax
1383 ; AVX2-NEXT: andb $1, %al
1384 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1385 ; AVX2-NEXT: vpextrb $6, %xmm1, %eax
1386 ; AVX2-NEXT: andb $1, %al
1387 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1388 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax
1389 ; AVX2-NEXT: andb $1, %al
1390 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1391 ; AVX2-NEXT: vpextrb $4, %xmm1, %eax
1392 ; AVX2-NEXT: andb $1, %al
1393 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1394 ; AVX2-NEXT: vpextrb $3, %xmm1, %eax
1395 ; AVX2-NEXT: andb $1, %al
1396 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1397 ; AVX2-NEXT: vpextrb $2, %xmm1, %eax
1398 ; AVX2-NEXT: andb $1, %al
1399 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1400 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax
1401 ; AVX2-NEXT: andb $1, %al
1402 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1403 ; AVX2-NEXT: vpextrb $0, %xmm1, %eax
1404 ; AVX2-NEXT: andb $1, %al
1405 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1406 ; AVX2-NEXT: vpextrb $15, %xmm0, %eax
1407 ; AVX2-NEXT: andb $1, %al
1408 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1409 ; AVX2-NEXT: vpextrb $14, %xmm0, %eax
1410 ; AVX2-NEXT: andb $1, %al
1411 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1412 ; AVX2-NEXT: vpextrb $13, %xmm0, %eax
1413 ; AVX2-NEXT: andb $1, %al
1414 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1415 ; AVX2-NEXT: vpextrb $12, %xmm0, %eax
1416 ; AVX2-NEXT: andb $1, %al
1417 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1418 ; AVX2-NEXT: vpextrb $11, %xmm0, %eax
1419 ; AVX2-NEXT: andb $1, %al
1420 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1421 ; AVX2-NEXT: vpextrb $10, %xmm0, %eax
1422 ; AVX2-NEXT: andb $1, %al
1423 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1424 ; AVX2-NEXT: vpextrb $9, %xmm0, %eax
1425 ; AVX2-NEXT: andb $1, %al
1426 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1427 ; AVX2-NEXT: vpextrb $8, %xmm0, %eax
1428 ; AVX2-NEXT: andb $1, %al
1429 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1430 ; AVX2-NEXT: vpextrb $7, %xmm0, %eax
1431 ; AVX2-NEXT: andb $1, %al
1432 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1433 ; AVX2-NEXT: vpextrb $6, %xmm0, %eax
1434 ; AVX2-NEXT: andb $1, %al
1435 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1436 ; AVX2-NEXT: vpextrb $5, %xmm0, %eax
1437 ; AVX2-NEXT: andb $1, %al
1438 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1439 ; AVX2-NEXT: vpextrb $4, %xmm0, %eax
1440 ; AVX2-NEXT: andb $1, %al
1441 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1442 ; AVX2-NEXT: vpextrb $3, %xmm0, %eax
1443 ; AVX2-NEXT: andb $1, %al
1444 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1445 ; AVX2-NEXT: vpextrb $2, %xmm0, %eax
1446 ; AVX2-NEXT: andb $1, %al
1447 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1448 ; AVX2-NEXT: vpextrb $1, %xmm0, %eax
1449 ; AVX2-NEXT: andb $1, %al
1450 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1451 ; AVX2-NEXT: vpextrb $0, %xmm0, %eax
1452 ; AVX2-NEXT: andb $1, %al
1453 ; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp)
1454 ; AVX2-NEXT: movl (%rsp), %ecx
1455 ; AVX2-NEXT: movl {{[0-9]+}}(%rsp), %eax
1456 ; AVX2-NEXT: shlq $32, %rax
1457 ; AVX2-NEXT: orq %rcx, %rax
1458 ; AVX2-NEXT: movq %rbp, %rsp
1459 ; AVX2-NEXT: popq %rbp
1460 ; AVX2-NEXT: vzeroupper
1463 ; AVX512F-LABEL: v64i8:
1465 ; AVX512F-NEXT: pushq %rbp
1466 ; AVX512F-NEXT: .cfi_def_cfa_offset 16
1467 ; AVX512F-NEXT: .cfi_offset %rbp, -16
1468 ; AVX512F-NEXT: movq %rsp, %rbp
1469 ; AVX512F-NEXT: .cfi_def_cfa_register %rbp
1470 ; AVX512F-NEXT: andq $-32, %rsp
1471 ; AVX512F-NEXT: subq $64, %rsp
1472 ; AVX512F-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm1
1473 ; AVX512F-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0
1474 ; AVX512F-NEXT: vpcmpgtb %ymm7, %ymm5, %ymm2
1475 ; AVX512F-NEXT: vpand %ymm2, %ymm1, %ymm1
1476 ; AVX512F-NEXT: vpcmpgtb %ymm6, %ymm4, %ymm2
1477 ; AVX512F-NEXT: vpand %ymm2, %ymm0, %ymm0
1478 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm2
1479 ; AVX512F-NEXT: vpmovsxbd %xmm2, %zmm2
1480 ; AVX512F-NEXT: vpslld $31, %zmm2, %zmm2
1481 ; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k0
1482 ; AVX512F-NEXT: kmovw %k0, {{[0-9]+}}(%rsp)
1483 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
1484 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
1485 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
1486 ; AVX512F-NEXT: kmovw %k0, (%rsp)
1487 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm0
1488 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
1489 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
1490 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
1491 ; AVX512F-NEXT: kmovw %k0, {{[0-9]+}}(%rsp)
1492 ; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm0
1493 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
1494 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
1495 ; AVX512F-NEXT: kmovw %k0, {{[0-9]+}}(%rsp)
1496 ; AVX512F-NEXT: movl (%rsp), %ecx
1497 ; AVX512F-NEXT: movl {{[0-9]+}}(%rsp), %eax
1498 ; AVX512F-NEXT: shlq $32, %rax
1499 ; AVX512F-NEXT: orq %rcx, %rax
1500 ; AVX512F-NEXT: movq %rbp, %rsp
1501 ; AVX512F-NEXT: popq %rbp
1502 ; AVX512F-NEXT: vzeroupper
1503 ; AVX512F-NEXT: retq
1505 ; AVX512BW-LABEL: v64i8:
1507 ; AVX512BW-NEXT: vpcmpgtb %zmm1, %zmm0, %k1
1508 ; AVX512BW-NEXT: vpcmpgtb %zmm3, %zmm2, %k0 {%k1}
1509 ; AVX512BW-NEXT: kmovq %k0, %rax
1510 ; AVX512BW-NEXT: vzeroupper
1511 ; AVX512BW-NEXT: retq
1512 %x0 = icmp sgt <64 x i8> %a, %b
1513 %x1 = icmp sgt <64 x i8> %c, %d
1514 %y = and <64 x i1> %x0, %x1
1515 %res = bitcast <64 x i1> %y to i64