[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / commute-fcmp.ll
blob30a504236da72cbc38014467284ddcf416bed687
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2 -disable-peephole | FileCheck %s --check-prefix=SSE
3 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 -disable-peephole | FileCheck %s --check-prefix=AVX
4 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512vl -disable-peephole | FileCheck %s --check-prefix=AVX512
7 ; Float Comparisons
8 ; Only equal/not-equal/ordered/unordered can be safely commuted
11 define <4 x i32> @commute_cmpps_eq(<4 x float>* %a0, <4 x float> %a1) {
12 ; SSE-LABEL: commute_cmpps_eq:
13 ; SSE:       # BB#0:
14 ; SSE-NEXT:    cmpeqps (%rdi), %xmm0
15 ; SSE-NEXT:    retq
17 ; AVX-LABEL: commute_cmpps_eq:
18 ; AVX:       # BB#0:
19 ; AVX-NEXT:    vcmpeqps (%rdi), %xmm0, %xmm0
20 ; AVX-NEXT:    retq
22 ; AVX512-LABEL: commute_cmpps_eq:
23 ; AVX512:       # BB#0:
24 ; AVX512-NEXT:    vcmpeqps (%rdi), %xmm0, %k1
25 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
26 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
27 ; AVX512-NEXT:    retq
28   %1 = load <4 x float>, <4 x float>* %a0
29   %2 = fcmp oeq <4 x float> %1, %a1
30   %3 = sext <4 x i1> %2 to <4 x i32>
31   ret <4 x i32> %3
34 define <4 x i32> @commute_cmpps_ne(<4 x float>* %a0, <4 x float> %a1) {
35 ; SSE-LABEL: commute_cmpps_ne:
36 ; SSE:       # BB#0:
37 ; SSE-NEXT:    cmpneqps (%rdi), %xmm0
38 ; SSE-NEXT:    retq
40 ; AVX-LABEL: commute_cmpps_ne:
41 ; AVX:       # BB#0:
42 ; AVX-NEXT:    vcmpneqps (%rdi), %xmm0, %xmm0
43 ; AVX-NEXT:    retq
45 ; AVX512-LABEL: commute_cmpps_ne:
46 ; AVX512:       # BB#0:
47 ; AVX512-NEXT:    vcmpneqps (%rdi), %xmm0, %k1
48 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
49 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
50 ; AVX512-NEXT:    retq
51   %1 = load <4 x float>, <4 x float>* %a0
52   %2 = fcmp une <4 x float> %1, %a1
53   %3 = sext <4 x i1> %2 to <4 x i32>
54   ret <4 x i32> %3
57 define <4 x i32> @commute_cmpps_ord(<4 x float>* %a0, <4 x float> %a1) {
58 ; SSE-LABEL: commute_cmpps_ord:
59 ; SSE:       # BB#0:
60 ; SSE-NEXT:    cmpordps (%rdi), %xmm0
61 ; SSE-NEXT:    retq
63 ; AVX-LABEL: commute_cmpps_ord:
64 ; AVX:       # BB#0:
65 ; AVX-NEXT:    vcmpordps (%rdi), %xmm0, %xmm0
66 ; AVX-NEXT:    retq
68 ; AVX512-LABEL: commute_cmpps_ord:
69 ; AVX512:       # BB#0:
70 ; AVX512-NEXT:    vcmpordps (%rdi), %xmm0, %k1
71 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
72 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
73 ; AVX512-NEXT:    retq
74   %1 = load <4 x float>, <4 x float>* %a0
75   %2 = fcmp ord <4 x float> %1, %a1
76   %3 = sext <4 x i1> %2 to <4 x i32>
77   ret <4 x i32> %3
80 define <4 x i32> @commute_cmpps_uno(<4 x float>* %a0, <4 x float> %a1) {
81 ; SSE-LABEL: commute_cmpps_uno:
82 ; SSE:       # BB#0:
83 ; SSE-NEXT:    cmpunordps (%rdi), %xmm0
84 ; SSE-NEXT:    retq
86 ; AVX-LABEL: commute_cmpps_uno:
87 ; AVX:       # BB#0:
88 ; AVX-NEXT:    vcmpunordps (%rdi), %xmm0, %xmm0
89 ; AVX-NEXT:    retq
91 ; AVX512-LABEL: commute_cmpps_uno:
92 ; AVX512:       # BB#0:
93 ; AVX512-NEXT:    vcmpunordps (%rdi), %xmm0, %k1
94 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
95 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
96 ; AVX512-NEXT:    retq
97   %1 = load <4 x float>, <4 x float>* %a0
98   %2 = fcmp uno <4 x float> %1, %a1
99   %3 = sext <4 x i1> %2 to <4 x i32>
100   ret <4 x i32> %3
103 define <4 x i32> @commute_cmpps_ueq(<4 x float>* %a0, <4 x float> %a1) {
104 ; SSE-LABEL: commute_cmpps_ueq:
105 ; SSE:       # BB#0:
106 ; SSE-NEXT:    movaps (%rdi), %xmm1
107 ; SSE-NEXT:    movaps %xmm1, %xmm2
108 ; SSE-NEXT:    cmpeqps %xmm0, %xmm2
109 ; SSE-NEXT:    cmpunordps %xmm1, %xmm0
110 ; SSE-NEXT:    orps %xmm2, %xmm0
111 ; SSE-NEXT:    retq
113 ; AVX-LABEL: commute_cmpps_ueq:
114 ; AVX:       # BB#0:
115 ; AVX-NEXT:    vmovaps (%rdi), %xmm1
116 ; AVX-NEXT:    vcmpeq_uqps %xmm0, %xmm1, %xmm0
117 ; AVX-NEXT:    retq
119 ; AVX512-LABEL: commute_cmpps_ueq:
120 ; AVX512:       # BB#0:
121 ; AVX512-NEXT:    vmovaps (%rdi), %xmm1
122 ; AVX512-NEXT:    vcmpeq_uqps %xmm0, %xmm1, %k1
123 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
124 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
125 ; AVX512-NEXT:    retq
126   %1 = load <4 x float>, <4 x float>* %a0
127   %2 = fcmp ueq <4 x float> %1, %a1
128   %3 = sext <4 x i1> %2 to <4 x i32>
129   ret <4 x i32> %3
132 define <4 x i32> @commute_cmpps_one(<4 x float>* %a0, <4 x float> %a1) {
133 ; SSE-LABEL: commute_cmpps_one:
134 ; SSE:       # BB#0:
135 ; SSE-NEXT:    movaps (%rdi), %xmm1
136 ; SSE-NEXT:    movaps %xmm1, %xmm2
137 ; SSE-NEXT:    cmpneqps %xmm0, %xmm2
138 ; SSE-NEXT:    cmpordps %xmm1, %xmm0
139 ; SSE-NEXT:    andps %xmm2, %xmm0
140 ; SSE-NEXT:    retq
142 ; AVX-LABEL: commute_cmpps_one:
143 ; AVX:       # BB#0:
144 ; AVX-NEXT:    vmovaps (%rdi), %xmm1
145 ; AVX-NEXT:    vcmpneq_oqps %xmm0, %xmm1, %xmm0
146 ; AVX-NEXT:    retq
148 ; AVX512-LABEL: commute_cmpps_one:
149 ; AVX512:       # BB#0:
150 ; AVX512-NEXT:    vmovaps (%rdi), %xmm1
151 ; AVX512-NEXT:    vcmpneq_oqps %xmm0, %xmm1, %k1
152 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
153 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
154 ; AVX512-NEXT:    retq
155   %1 = load <4 x float>, <4 x float>* %a0
156   %2 = fcmp one <4 x float> %1, %a1
157   %3 = sext <4 x i1> %2 to <4 x i32>
158   ret <4 x i32> %3
161 define <4 x i32> @commute_cmpps_lt(<4 x float>* %a0, <4 x float> %a1) {
162 ; SSE-LABEL: commute_cmpps_lt:
163 ; SSE:       # BB#0:
164 ; SSE-NEXT:    movaps (%rdi), %xmm1
165 ; SSE-NEXT:    cmpltps %xmm0, %xmm1
166 ; SSE-NEXT:    movaps %xmm1, %xmm0
167 ; SSE-NEXT:    retq
169 ; AVX-LABEL: commute_cmpps_lt:
170 ; AVX:       # BB#0:
171 ; AVX-NEXT:    vmovaps (%rdi), %xmm1
172 ; AVX-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0
173 ; AVX-NEXT:    retq
175 ; AVX512-LABEL: commute_cmpps_lt:
176 ; AVX512:       # BB#0:
177 ; AVX512-NEXT:    vmovaps (%rdi), %xmm1
178 ; AVX512-NEXT:    vcmpltps %xmm0, %xmm1, %k1
179 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
180 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
181 ; AVX512-NEXT:    retq
182   %1 = load <4 x float>, <4 x float>* %a0
183   %2 = fcmp olt <4 x float> %1, %a1
184   %3 = sext <4 x i1> %2 to <4 x i32>
185   ret <4 x i32> %3
188 define <4 x i32> @commute_cmpps_le(<4 x float>* %a0, <4 x float> %a1) {
189 ; SSE-LABEL: commute_cmpps_le:
190 ; SSE:       # BB#0:
191 ; SSE-NEXT:    movaps (%rdi), %xmm1
192 ; SSE-NEXT:    cmpleps %xmm0, %xmm1
193 ; SSE-NEXT:    movaps %xmm1, %xmm0
194 ; SSE-NEXT:    retq
196 ; AVX-LABEL: commute_cmpps_le:
197 ; AVX:       # BB#0:
198 ; AVX-NEXT:    vmovaps (%rdi), %xmm1
199 ; AVX-NEXT:    vcmpleps %xmm0, %xmm1, %xmm0
200 ; AVX-NEXT:    retq
202 ; AVX512-LABEL: commute_cmpps_le:
203 ; AVX512:       # BB#0:
204 ; AVX512-NEXT:    vmovaps (%rdi), %xmm1
205 ; AVX512-NEXT:    vcmpleps %xmm0, %xmm1, %k1
206 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
207 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
208 ; AVX512-NEXT:    retq
209   %1 = load <4 x float>, <4 x float>* %a0
210   %2 = fcmp ole <4 x float> %1, %a1
211   %3 = sext <4 x i1> %2 to <4 x i32>
212   ret <4 x i32> %3
215 define <8 x i32> @commute_cmpps_eq_ymm(<8 x float>* %a0, <8 x float> %a1) {
216 ; SSE-LABEL: commute_cmpps_eq_ymm:
217 ; SSE:       # BB#0:
218 ; SSE-NEXT:    cmpeqps (%rdi), %xmm0
219 ; SSE-NEXT:    cmpeqps 16(%rdi), %xmm1
220 ; SSE-NEXT:    retq
222 ; AVX-LABEL: commute_cmpps_eq_ymm:
223 ; AVX:       # BB#0:
224 ; AVX-NEXT:    vcmpeqps (%rdi), %ymm0, %ymm0
225 ; AVX-NEXT:    retq
227 ; AVX512-LABEL: commute_cmpps_eq_ymm:
228 ; AVX512:       # BB#0:
229 ; AVX512-NEXT:    vcmpeqps (%rdi), %ymm0, %k1
230 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
231 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
232 ; AVX512-NEXT:    retq
233   %1 = load <8 x float>, <8 x float>* %a0
234   %2 = fcmp oeq <8 x float> %1, %a1
235   %3 = sext <8 x i1> %2 to <8 x i32>
236   ret <8 x i32> %3
239 define <8 x i32> @commute_cmpps_ne_ymm(<8 x float>* %a0, <8 x float> %a1) {
240 ; SSE-LABEL: commute_cmpps_ne_ymm:
241 ; SSE:       # BB#0:
242 ; SSE-NEXT:    cmpneqps (%rdi), %xmm0
243 ; SSE-NEXT:    cmpneqps 16(%rdi), %xmm1
244 ; SSE-NEXT:    retq
246 ; AVX-LABEL: commute_cmpps_ne_ymm:
247 ; AVX:       # BB#0:
248 ; AVX-NEXT:    vcmpneqps (%rdi), %ymm0, %ymm0
249 ; AVX-NEXT:    retq
251 ; AVX512-LABEL: commute_cmpps_ne_ymm:
252 ; AVX512:       # BB#0:
253 ; AVX512-NEXT:    vcmpneqps (%rdi), %ymm0, %k1
254 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
255 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
256 ; AVX512-NEXT:    retq
257   %1 = load <8 x float>, <8 x float>* %a0
258   %2 = fcmp une <8 x float> %1, %a1
259   %3 = sext <8 x i1> %2 to <8 x i32>
260   ret <8 x i32> %3
263 define <8 x i32> @commute_cmpps_ord_ymm(<8 x float>* %a0, <8 x float> %a1) {
264 ; SSE-LABEL: commute_cmpps_ord_ymm:
265 ; SSE:       # BB#0:
266 ; SSE-NEXT:    cmpordps (%rdi), %xmm0
267 ; SSE-NEXT:    cmpordps 16(%rdi), %xmm1
268 ; SSE-NEXT:    retq
270 ; AVX-LABEL: commute_cmpps_ord_ymm:
271 ; AVX:       # BB#0:
272 ; AVX-NEXT:    vcmpordps (%rdi), %ymm0, %ymm0
273 ; AVX-NEXT:    retq
275 ; AVX512-LABEL: commute_cmpps_ord_ymm:
276 ; AVX512:       # BB#0:
277 ; AVX512-NEXT:    vcmpordps (%rdi), %ymm0, %k1
278 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
279 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
280 ; AVX512-NEXT:    retq
281   %1 = load <8 x float>, <8 x float>* %a0
282   %2 = fcmp ord <8 x float> %1, %a1
283   %3 = sext <8 x i1> %2 to <8 x i32>
284   ret <8 x i32> %3
287 define <8 x i32> @commute_cmpps_uno_ymm(<8 x float>* %a0, <8 x float> %a1) {
288 ; SSE-LABEL: commute_cmpps_uno_ymm:
289 ; SSE:       # BB#0:
290 ; SSE-NEXT:    cmpunordps (%rdi), %xmm0
291 ; SSE-NEXT:    cmpunordps 16(%rdi), %xmm1
292 ; SSE-NEXT:    retq
294 ; AVX-LABEL: commute_cmpps_uno_ymm:
295 ; AVX:       # BB#0:
296 ; AVX-NEXT:    vcmpunordps (%rdi), %ymm0, %ymm0
297 ; AVX-NEXT:    retq
299 ; AVX512-LABEL: commute_cmpps_uno_ymm:
300 ; AVX512:       # BB#0:
301 ; AVX512-NEXT:    vcmpunordps (%rdi), %ymm0, %k1
302 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
303 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
304 ; AVX512-NEXT:    retq
305   %1 = load <8 x float>, <8 x float>* %a0
306   %2 = fcmp uno <8 x float> %1, %a1
307   %3 = sext <8 x i1> %2 to <8 x i32>
308   ret <8 x i32> %3
311 define <8 x i32> @commute_cmpps_ueq_ymm(<8 x float>* %a0, <8 x float> %a1) {
312 ; SSE-LABEL: commute_cmpps_ueq_ymm:
313 ; SSE:       # BB#0:
314 ; SSE-NEXT:    movaps (%rdi), %xmm2
315 ; SSE-NEXT:    movaps 16(%rdi), %xmm3
316 ; SSE-NEXT:    movaps %xmm2, %xmm4
317 ; SSE-NEXT:    cmpeqps %xmm0, %xmm4
318 ; SSE-NEXT:    cmpunordps %xmm2, %xmm0
319 ; SSE-NEXT:    orps %xmm4, %xmm0
320 ; SSE-NEXT:    movaps %xmm3, %xmm2
321 ; SSE-NEXT:    cmpeqps %xmm1, %xmm2
322 ; SSE-NEXT:    cmpunordps %xmm3, %xmm1
323 ; SSE-NEXT:    orps %xmm2, %xmm1
324 ; SSE-NEXT:    retq
326 ; AVX-LABEL: commute_cmpps_ueq_ymm:
327 ; AVX:       # BB#0:
328 ; AVX-NEXT:    vmovaps (%rdi), %ymm1
329 ; AVX-NEXT:    vcmpeq_uqps %ymm0, %ymm1, %ymm0
330 ; AVX-NEXT:    retq
332 ; AVX512-LABEL: commute_cmpps_ueq_ymm:
333 ; AVX512:       # BB#0:
334 ; AVX512-NEXT:    vmovaps (%rdi), %ymm1
335 ; AVX512-NEXT:    vcmpeq_uqps %ymm0, %ymm1, %k1
336 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
337 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
338 ; AVX512-NEXT:    retq
339   %1 = load <8 x float>, <8 x float>* %a0
340   %2 = fcmp ueq <8 x float> %1, %a1
341   %3 = sext <8 x i1> %2 to <8 x i32>
342   ret <8 x i32> %3
345 define <8 x i32> @commute_cmpps_one_ymm(<8 x float>* %a0, <8 x float> %a1) {
346 ; SSE-LABEL: commute_cmpps_one_ymm:
347 ; SSE:       # BB#0:
348 ; SSE-NEXT:    movaps (%rdi), %xmm2
349 ; SSE-NEXT:    movaps 16(%rdi), %xmm3
350 ; SSE-NEXT:    movaps %xmm2, %xmm4
351 ; SSE-NEXT:    cmpneqps %xmm0, %xmm4
352 ; SSE-NEXT:    cmpordps %xmm2, %xmm0
353 ; SSE-NEXT:    andps %xmm4, %xmm0
354 ; SSE-NEXT:    movaps %xmm3, %xmm2
355 ; SSE-NEXT:    cmpneqps %xmm1, %xmm2
356 ; SSE-NEXT:    cmpordps %xmm3, %xmm1
357 ; SSE-NEXT:    andps %xmm2, %xmm1
358 ; SSE-NEXT:    retq
360 ; AVX-LABEL: commute_cmpps_one_ymm:
361 ; AVX:       # BB#0:
362 ; AVX-NEXT:    vmovaps (%rdi), %ymm1
363 ; AVX-NEXT:    vcmpneq_oqps %ymm0, %ymm1, %ymm0
364 ; AVX-NEXT:    retq
366 ; AVX512-LABEL: commute_cmpps_one_ymm:
367 ; AVX512:       # BB#0:
368 ; AVX512-NEXT:    vmovaps (%rdi), %ymm1
369 ; AVX512-NEXT:    vcmpneq_oqps %ymm0, %ymm1, %k1
370 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
371 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
372 ; AVX512-NEXT:    retq
373   %1 = load <8 x float>, <8 x float>* %a0
374   %2 = fcmp one <8 x float> %1, %a1
375   %3 = sext <8 x i1> %2 to <8 x i32>
376   ret <8 x i32> %3
379 define <8 x i32> @commute_cmpps_lt_ymm(<8 x float>* %a0, <8 x float> %a1) {
380 ; SSE-LABEL: commute_cmpps_lt_ymm:
381 ; SSE:       # BB#0:
382 ; SSE-NEXT:    movaps (%rdi), %xmm2
383 ; SSE-NEXT:    movaps 16(%rdi), %xmm3
384 ; SSE-NEXT:    cmpltps %xmm0, %xmm2
385 ; SSE-NEXT:    cmpltps %xmm1, %xmm3
386 ; SSE-NEXT:    movaps %xmm2, %xmm0
387 ; SSE-NEXT:    movaps %xmm3, %xmm1
388 ; SSE-NEXT:    retq
390 ; AVX-LABEL: commute_cmpps_lt_ymm:
391 ; AVX:       # BB#0:
392 ; AVX-NEXT:    vmovaps (%rdi), %ymm1
393 ; AVX-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
394 ; AVX-NEXT:    retq
396 ; AVX512-LABEL: commute_cmpps_lt_ymm:
397 ; AVX512:       # BB#0:
398 ; AVX512-NEXT:    vmovaps (%rdi), %ymm1
399 ; AVX512-NEXT:    vcmpltps %ymm0, %ymm1, %k1
400 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
401 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
402 ; AVX512-NEXT:    retq
403   %1 = load <8 x float>, <8 x float>* %a0
404   %2 = fcmp olt <8 x float> %1, %a1
405   %3 = sext <8 x i1> %2 to <8 x i32>
406   ret <8 x i32> %3
409 define <8 x i32> @commute_cmpps_le_ymm(<8 x float>* %a0, <8 x float> %a1) {
410 ; SSE-LABEL: commute_cmpps_le_ymm:
411 ; SSE:       # BB#0:
412 ; SSE-NEXT:    movaps (%rdi), %xmm2
413 ; SSE-NEXT:    movaps 16(%rdi), %xmm3
414 ; SSE-NEXT:    cmpleps %xmm0, %xmm2
415 ; SSE-NEXT:    cmpleps %xmm1, %xmm3
416 ; SSE-NEXT:    movaps %xmm2, %xmm0
417 ; SSE-NEXT:    movaps %xmm3, %xmm1
418 ; SSE-NEXT:    retq
420 ; AVX-LABEL: commute_cmpps_le_ymm:
421 ; AVX:       # BB#0:
422 ; AVX-NEXT:    vmovaps (%rdi), %ymm1
423 ; AVX-NEXT:    vcmpleps %ymm0, %ymm1, %ymm0
424 ; AVX-NEXT:    retq
426 ; AVX512-LABEL: commute_cmpps_le_ymm:
427 ; AVX512:       # BB#0:
428 ; AVX512-NEXT:    vmovaps (%rdi), %ymm1
429 ; AVX512-NEXT:    vcmpleps %ymm0, %ymm1, %k1
430 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
431 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
432 ; AVX512-NEXT:    retq
433   %1 = load <8 x float>, <8 x float>* %a0
434   %2 = fcmp ole <8 x float> %1, %a1
435   %3 = sext <8 x i1> %2 to <8 x i32>
436   ret <8 x i32> %3
440 ; Double Comparisons
441 ; Only equal/not-equal/ordered/unordered can be safely commuted
444 define <2 x i64> @commute_cmppd_eq(<2 x double>* %a0, <2 x double> %a1) {
445 ; SSE-LABEL: commute_cmppd_eq:
446 ; SSE:       # BB#0:
447 ; SSE-NEXT:    cmpeqpd (%rdi), %xmm0
448 ; SSE-NEXT:    retq
450 ; AVX-LABEL: commute_cmppd_eq:
451 ; AVX:       # BB#0:
452 ; AVX-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0
453 ; AVX-NEXT:    retq
455 ; AVX512-LABEL: commute_cmppd_eq:
456 ; AVX512:       # BB#0:
457 ; AVX512-NEXT:    vcmpeqpd (%rdi), %xmm0, %k1
458 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
459 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
460 ; AVX512-NEXT:    retq
461   %1 = load <2 x double>, <2 x double>* %a0
462   %2 = fcmp oeq <2 x double> %1, %a1
463   %3 = sext <2 x i1> %2 to <2 x i64>
464   ret <2 x i64> %3
467 define <2 x i64> @commute_cmppd_ne(<2 x double>* %a0, <2 x double> %a1) {
468 ; SSE-LABEL: commute_cmppd_ne:
469 ; SSE:       # BB#0:
470 ; SSE-NEXT:    cmpneqpd (%rdi), %xmm0
471 ; SSE-NEXT:    retq
473 ; AVX-LABEL: commute_cmppd_ne:
474 ; AVX:       # BB#0:
475 ; AVX-NEXT:    vcmpneqpd (%rdi), %xmm0, %xmm0
476 ; AVX-NEXT:    retq
478 ; AVX512-LABEL: commute_cmppd_ne:
479 ; AVX512:       # BB#0:
480 ; AVX512-NEXT:    vcmpneqpd (%rdi), %xmm0, %k1
481 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
482 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
483 ; AVX512-NEXT:    retq
484   %1 = load <2 x double>, <2 x double>* %a0
485   %2 = fcmp une <2 x double> %1, %a1
486   %3 = sext <2 x i1> %2 to <2 x i64>
487   ret <2 x i64> %3
490 define <2 x i64> @commute_cmppd_ord(<2 x double>* %a0, <2 x double> %a1) {
491 ; SSE-LABEL: commute_cmppd_ord:
492 ; SSE:       # BB#0:
493 ; SSE-NEXT:    cmpordpd (%rdi), %xmm0
494 ; SSE-NEXT:    retq
496 ; AVX-LABEL: commute_cmppd_ord:
497 ; AVX:       # BB#0:
498 ; AVX-NEXT:    vcmpordpd (%rdi), %xmm0, %xmm0
499 ; AVX-NEXT:    retq
501 ; AVX512-LABEL: commute_cmppd_ord:
502 ; AVX512:       # BB#0:
503 ; AVX512-NEXT:    vcmpordpd (%rdi), %xmm0, %k1
504 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
505 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
506 ; AVX512-NEXT:    retq
507   %1 = load <2 x double>, <2 x double>* %a0
508   %2 = fcmp ord <2 x double> %1, %a1
509   %3 = sext <2 x i1> %2 to <2 x i64>
510   ret <2 x i64> %3
513 define <2 x i64> @commute_cmppd_ueq(<2 x double>* %a0, <2 x double> %a1) {
514 ; SSE-LABEL: commute_cmppd_ueq:
515 ; SSE:       # BB#0:
516 ; SSE-NEXT:    movapd (%rdi), %xmm1
517 ; SSE-NEXT:    movapd %xmm1, %xmm2
518 ; SSE-NEXT:    cmpeqpd %xmm0, %xmm2
519 ; SSE-NEXT:    cmpunordpd %xmm1, %xmm0
520 ; SSE-NEXT:    orpd %xmm2, %xmm0
521 ; SSE-NEXT:    retq
523 ; AVX-LABEL: commute_cmppd_ueq:
524 ; AVX:       # BB#0:
525 ; AVX-NEXT:    vmovapd (%rdi), %xmm1
526 ; AVX-NEXT:    vcmpeq_uqpd %xmm0, %xmm1, %xmm0
527 ; AVX-NEXT:    retq
529 ; AVX512-LABEL: commute_cmppd_ueq:
530 ; AVX512:       # BB#0:
531 ; AVX512-NEXT:    vmovapd (%rdi), %xmm1
532 ; AVX512-NEXT:    vcmpeq_uqpd %xmm0, %xmm1, %k1
533 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
534 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
535 ; AVX512-NEXT:    retq
536   %1 = load <2 x double>, <2 x double>* %a0
537   %2 = fcmp ueq <2 x double> %1, %a1
538   %3 = sext <2 x i1> %2 to <2 x i64>
539   ret <2 x i64> %3
542 define <2 x i64> @commute_cmppd_one(<2 x double>* %a0, <2 x double> %a1) {
543 ; SSE-LABEL: commute_cmppd_one:
544 ; SSE:       # BB#0:
545 ; SSE-NEXT:    movapd (%rdi), %xmm1
546 ; SSE-NEXT:    movapd %xmm1, %xmm2
547 ; SSE-NEXT:    cmpneqpd %xmm0, %xmm2
548 ; SSE-NEXT:    cmpordpd %xmm1, %xmm0
549 ; SSE-NEXT:    andpd %xmm2, %xmm0
550 ; SSE-NEXT:    retq
552 ; AVX-LABEL: commute_cmppd_one:
553 ; AVX:       # BB#0:
554 ; AVX-NEXT:    vmovapd (%rdi), %xmm1
555 ; AVX-NEXT:    vcmpneq_oqpd %xmm0, %xmm1, %xmm0
556 ; AVX-NEXT:    retq
558 ; AVX512-LABEL: commute_cmppd_one:
559 ; AVX512:       # BB#0:
560 ; AVX512-NEXT:    vmovapd (%rdi), %xmm1
561 ; AVX512-NEXT:    vcmpneq_oqpd %xmm0, %xmm1, %k1
562 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
563 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
564 ; AVX512-NEXT:    retq
565   %1 = load <2 x double>, <2 x double>* %a0
566   %2 = fcmp one <2 x double> %1, %a1
567   %3 = sext <2 x i1> %2 to <2 x i64>
568   ret <2 x i64> %3
571 define <2 x i64> @commute_cmppd_uno(<2 x double>* %a0, <2 x double> %a1) {
572 ; SSE-LABEL: commute_cmppd_uno:
573 ; SSE:       # BB#0:
574 ; SSE-NEXT:    cmpunordpd (%rdi), %xmm0
575 ; SSE-NEXT:    retq
577 ; AVX-LABEL: commute_cmppd_uno:
578 ; AVX:       # BB#0:
579 ; AVX-NEXT:    vcmpunordpd (%rdi), %xmm0, %xmm0
580 ; AVX-NEXT:    retq
582 ; AVX512-LABEL: commute_cmppd_uno:
583 ; AVX512:       # BB#0:
584 ; AVX512-NEXT:    vcmpunordpd (%rdi), %xmm0, %k1
585 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
586 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
587 ; AVX512-NEXT:    retq
588   %1 = load <2 x double>, <2 x double>* %a0
589   %2 = fcmp uno <2 x double> %1, %a1
590   %3 = sext <2 x i1> %2 to <2 x i64>
591   ret <2 x i64> %3
594 define <2 x i64> @commute_cmppd_lt(<2 x double>* %a0, <2 x double> %a1) {
595 ; SSE-LABEL: commute_cmppd_lt:
596 ; SSE:       # BB#0:
597 ; SSE-NEXT:    movapd (%rdi), %xmm1
598 ; SSE-NEXT:    cmpltpd %xmm0, %xmm1
599 ; SSE-NEXT:    movapd %xmm1, %xmm0
600 ; SSE-NEXT:    retq
602 ; AVX-LABEL: commute_cmppd_lt:
603 ; AVX:       # BB#0:
604 ; AVX-NEXT:    vmovapd (%rdi), %xmm1
605 ; AVX-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0
606 ; AVX-NEXT:    retq
608 ; AVX512-LABEL: commute_cmppd_lt:
609 ; AVX512:       # BB#0:
610 ; AVX512-NEXT:    vmovapd (%rdi), %xmm1
611 ; AVX512-NEXT:    vcmpltpd %xmm0, %xmm1, %k1
612 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
613 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
614 ; AVX512-NEXT:    retq
615   %1 = load <2 x double>, <2 x double>* %a0
616   %2 = fcmp olt <2 x double> %1, %a1
617   %3 = sext <2 x i1> %2 to <2 x i64>
618   ret <2 x i64> %3
621 define <2 x i64> @commute_cmppd_le(<2 x double>* %a0, <2 x double> %a1) {
622 ; SSE-LABEL: commute_cmppd_le:
623 ; SSE:       # BB#0:
624 ; SSE-NEXT:    movapd (%rdi), %xmm1
625 ; SSE-NEXT:    cmplepd %xmm0, %xmm1
626 ; SSE-NEXT:    movapd %xmm1, %xmm0
627 ; SSE-NEXT:    retq
629 ; AVX-LABEL: commute_cmppd_le:
630 ; AVX:       # BB#0:
631 ; AVX-NEXT:    vmovapd (%rdi), %xmm1
632 ; AVX-NEXT:    vcmplepd %xmm0, %xmm1, %xmm0
633 ; AVX-NEXT:    retq
635 ; AVX512-LABEL: commute_cmppd_le:
636 ; AVX512:       # BB#0:
637 ; AVX512-NEXT:    vmovapd (%rdi), %xmm1
638 ; AVX512-NEXT:    vcmplepd %xmm0, %xmm1, %k1
639 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
640 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
641 ; AVX512-NEXT:    retq
642   %1 = load <2 x double>, <2 x double>* %a0
643   %2 = fcmp ole <2 x double> %1, %a1
644   %3 = sext <2 x i1> %2 to <2 x i64>
645   ret <2 x i64> %3
648 define <4 x i64> @commute_cmppd_eq_ymmm(<4 x double>* %a0, <4 x double> %a1) {
649 ; SSE-LABEL: commute_cmppd_eq_ymmm:
650 ; SSE:       # BB#0:
651 ; SSE-NEXT:    cmpeqpd (%rdi), %xmm0
652 ; SSE-NEXT:    cmpeqpd 16(%rdi), %xmm1
653 ; SSE-NEXT:    retq
655 ; AVX-LABEL: commute_cmppd_eq_ymmm:
656 ; AVX:       # BB#0:
657 ; AVX-NEXT:    vcmpeqpd (%rdi), %ymm0, %ymm0
658 ; AVX-NEXT:    retq
660 ; AVX512-LABEL: commute_cmppd_eq_ymmm:
661 ; AVX512:       # BB#0:
662 ; AVX512-NEXT:    vcmpeqpd (%rdi), %ymm0, %k1
663 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
664 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
665 ; AVX512-NEXT:    retq
666   %1 = load <4 x double>, <4 x double>* %a0
667   %2 = fcmp oeq <4 x double> %1, %a1
668   %3 = sext <4 x i1> %2 to <4 x i64>
669   ret <4 x i64> %3
672 define <4 x i64> @commute_cmppd_ne_ymmm(<4 x double>* %a0, <4 x double> %a1) {
673 ; SSE-LABEL: commute_cmppd_ne_ymmm:
674 ; SSE:       # BB#0:
675 ; SSE-NEXT:    cmpneqpd (%rdi), %xmm0
676 ; SSE-NEXT:    cmpneqpd 16(%rdi), %xmm1
677 ; SSE-NEXT:    retq
679 ; AVX-LABEL: commute_cmppd_ne_ymmm:
680 ; AVX:       # BB#0:
681 ; AVX-NEXT:    vcmpneqpd (%rdi), %ymm0, %ymm0
682 ; AVX-NEXT:    retq
684 ; AVX512-LABEL: commute_cmppd_ne_ymmm:
685 ; AVX512:       # BB#0:
686 ; AVX512-NEXT:    vcmpneqpd (%rdi), %ymm0, %k1
687 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
688 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
689 ; AVX512-NEXT:    retq
690   %1 = load <4 x double>, <4 x double>* %a0
691   %2 = fcmp une <4 x double> %1, %a1
692   %3 = sext <4 x i1> %2 to <4 x i64>
693   ret <4 x i64> %3
696 define <4 x i64> @commute_cmppd_ord_ymmm(<4 x double>* %a0, <4 x double> %a1) {
697 ; SSE-LABEL: commute_cmppd_ord_ymmm:
698 ; SSE:       # BB#0:
699 ; SSE-NEXT:    cmpordpd (%rdi), %xmm0
700 ; SSE-NEXT:    cmpordpd 16(%rdi), %xmm1
701 ; SSE-NEXT:    retq
703 ; AVX-LABEL: commute_cmppd_ord_ymmm:
704 ; AVX:       # BB#0:
705 ; AVX-NEXT:    vcmpordpd (%rdi), %ymm0, %ymm0
706 ; AVX-NEXT:    retq
708 ; AVX512-LABEL: commute_cmppd_ord_ymmm:
709 ; AVX512:       # BB#0:
710 ; AVX512-NEXT:    vcmpordpd (%rdi), %ymm0, %k1
711 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
712 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
713 ; AVX512-NEXT:    retq
714   %1 = load <4 x double>, <4 x double>* %a0
715   %2 = fcmp ord <4 x double> %1, %a1
716   %3 = sext <4 x i1> %2 to <4 x i64>
717   ret <4 x i64> %3
720 define <4 x i64> @commute_cmppd_uno_ymmm(<4 x double>* %a0, <4 x double> %a1) {
721 ; SSE-LABEL: commute_cmppd_uno_ymmm:
722 ; SSE:       # BB#0:
723 ; SSE-NEXT:    cmpunordpd (%rdi), %xmm0
724 ; SSE-NEXT:    cmpunordpd 16(%rdi), %xmm1
725 ; SSE-NEXT:    retq
727 ; AVX-LABEL: commute_cmppd_uno_ymmm:
728 ; AVX:       # BB#0:
729 ; AVX-NEXT:    vcmpunordpd (%rdi), %ymm0, %ymm0
730 ; AVX-NEXT:    retq
732 ; AVX512-LABEL: commute_cmppd_uno_ymmm:
733 ; AVX512:       # BB#0:
734 ; AVX512-NEXT:    vcmpunordpd (%rdi), %ymm0, %k1
735 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
736 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
737 ; AVX512-NEXT:    retq
738   %1 = load <4 x double>, <4 x double>* %a0
739   %2 = fcmp uno <4 x double> %1, %a1
740   %3 = sext <4 x i1> %2 to <4 x i64>
741   ret <4 x i64> %3
744 define <4 x i64> @commute_cmppd_ueq_ymmm(<4 x double>* %a0, <4 x double> %a1) {
745 ; SSE-LABEL: commute_cmppd_ueq_ymmm:
746 ; SSE:       # BB#0:
747 ; SSE-NEXT:    movapd (%rdi), %xmm2
748 ; SSE-NEXT:    movapd 16(%rdi), %xmm3
749 ; SSE-NEXT:    movapd %xmm2, %xmm4
750 ; SSE-NEXT:    cmpeqpd %xmm0, %xmm4
751 ; SSE-NEXT:    cmpunordpd %xmm2, %xmm0
752 ; SSE-NEXT:    orpd %xmm4, %xmm0
753 ; SSE-NEXT:    movapd %xmm3, %xmm2
754 ; SSE-NEXT:    cmpeqpd %xmm1, %xmm2
755 ; SSE-NEXT:    cmpunordpd %xmm3, %xmm1
756 ; SSE-NEXT:    orpd %xmm2, %xmm1
757 ; SSE-NEXT:    retq
759 ; AVX-LABEL: commute_cmppd_ueq_ymmm:
760 ; AVX:       # BB#0:
761 ; AVX-NEXT:    vmovapd (%rdi), %ymm1
762 ; AVX-NEXT:    vcmpeq_uqpd %ymm0, %ymm1, %ymm0
763 ; AVX-NEXT:    retq
765 ; AVX512-LABEL: commute_cmppd_ueq_ymmm:
766 ; AVX512:       # BB#0:
767 ; AVX512-NEXT:    vmovapd (%rdi), %ymm1
768 ; AVX512-NEXT:    vcmpeq_uqpd %ymm0, %ymm1, %k1
769 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
770 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
771 ; AVX512-NEXT:    retq
772   %1 = load <4 x double>, <4 x double>* %a0
773   %2 = fcmp ueq <4 x double> %1, %a1
774   %3 = sext <4 x i1> %2 to <4 x i64>
775   ret <4 x i64> %3
778 define <4 x i64> @commute_cmppd_one_ymmm(<4 x double>* %a0, <4 x double> %a1) {
779 ; SSE-LABEL: commute_cmppd_one_ymmm:
780 ; SSE:       # BB#0:
781 ; SSE-NEXT:    movapd (%rdi), %xmm2
782 ; SSE-NEXT:    movapd 16(%rdi), %xmm3
783 ; SSE-NEXT:    movapd %xmm2, %xmm4
784 ; SSE-NEXT:    cmpneqpd %xmm0, %xmm4
785 ; SSE-NEXT:    cmpordpd %xmm2, %xmm0
786 ; SSE-NEXT:    andpd %xmm4, %xmm0
787 ; SSE-NEXT:    movapd %xmm3, %xmm2
788 ; SSE-NEXT:    cmpneqpd %xmm1, %xmm2
789 ; SSE-NEXT:    cmpordpd %xmm3, %xmm1
790 ; SSE-NEXT:    andpd %xmm2, %xmm1
791 ; SSE-NEXT:    retq
793 ; AVX-LABEL: commute_cmppd_one_ymmm:
794 ; AVX:       # BB#0:
795 ; AVX-NEXT:    vmovapd (%rdi), %ymm1
796 ; AVX-NEXT:    vcmpneq_oqpd %ymm0, %ymm1, %ymm0
797 ; AVX-NEXT:    retq
799 ; AVX512-LABEL: commute_cmppd_one_ymmm:
800 ; AVX512:       # BB#0:
801 ; AVX512-NEXT:    vmovapd (%rdi), %ymm1
802 ; AVX512-NEXT:    vcmpneq_oqpd %ymm0, %ymm1, %k1
803 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
804 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
805 ; AVX512-NEXT:    retq
806   %1 = load <4 x double>, <4 x double>* %a0
807   %2 = fcmp one <4 x double> %1, %a1
808   %3 = sext <4 x i1> %2 to <4 x i64>
809   ret <4 x i64> %3
812 define <4 x i64> @commute_cmppd_lt_ymmm(<4 x double>* %a0, <4 x double> %a1) {
813 ; SSE-LABEL: commute_cmppd_lt_ymmm:
814 ; SSE:       # BB#0:
815 ; SSE-NEXT:    movapd (%rdi), %xmm2
816 ; SSE-NEXT:    movapd 16(%rdi), %xmm3
817 ; SSE-NEXT:    cmpltpd %xmm0, %xmm2
818 ; SSE-NEXT:    cmpltpd %xmm1, %xmm3
819 ; SSE-NEXT:    movapd %xmm2, %xmm0
820 ; SSE-NEXT:    movapd %xmm3, %xmm1
821 ; SSE-NEXT:    retq
823 ; AVX-LABEL: commute_cmppd_lt_ymmm:
824 ; AVX:       # BB#0:
825 ; AVX-NEXT:    vmovapd (%rdi), %ymm1
826 ; AVX-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
827 ; AVX-NEXT:    retq
829 ; AVX512-LABEL: commute_cmppd_lt_ymmm:
830 ; AVX512:       # BB#0:
831 ; AVX512-NEXT:    vmovapd (%rdi), %ymm1
832 ; AVX512-NEXT:    vcmpltpd %ymm0, %ymm1, %k1
833 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
834 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
835 ; AVX512-NEXT:    retq
836   %1 = load <4 x double>, <4 x double>* %a0
837   %2 = fcmp olt <4 x double> %1, %a1
838   %3 = sext <4 x i1> %2 to <4 x i64>
839   ret <4 x i64> %3
842 define <4 x i64> @commute_cmppd_le_ymmm(<4 x double>* %a0, <4 x double> %a1) {
843 ; SSE-LABEL: commute_cmppd_le_ymmm:
844 ; SSE:       # BB#0:
845 ; SSE-NEXT:    movapd (%rdi), %xmm2
846 ; SSE-NEXT:    movapd 16(%rdi), %xmm3
847 ; SSE-NEXT:    cmplepd %xmm0, %xmm2
848 ; SSE-NEXT:    cmplepd %xmm1, %xmm3
849 ; SSE-NEXT:    movapd %xmm2, %xmm0
850 ; SSE-NEXT:    movapd %xmm3, %xmm1
851 ; SSE-NEXT:    retq
853 ; AVX-LABEL: commute_cmppd_le_ymmm:
854 ; AVX:       # BB#0:
855 ; AVX-NEXT:    vmovapd (%rdi), %ymm1
856 ; AVX-NEXT:    vcmplepd %ymm0, %ymm1, %ymm0
857 ; AVX-NEXT:    retq
859 ; AVX512-LABEL: commute_cmppd_le_ymmm:
860 ; AVX512:       # BB#0:
861 ; AVX512-NEXT:    vmovapd (%rdi), %ymm1
862 ; AVX512-NEXT:    vcmplepd %ymm0, %ymm1, %k1
863 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
864 ; AVX512-NEXT:    vmovdqa64 %ymm0, %ymm0 {%k1} {z}
865 ; AVX512-NEXT:    retq
866   %1 = load <4 x double>, <4 x double>* %a0
867   %2 = fcmp ole <4 x double> %1, %a1
868   %3 = sext <4 x i1> %2 to <4 x i64>
869   ret <4 x i64> %3