llvm.org GIT mirror llvm / 1f90a25
[X86][SSE] Dropped -mcpu from bitcast+setcc mask tests Use triple and attribute only for consistency git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307176 91177308-0d34-0410-b5e6-96231b3b80d8 Simon Pilgrim 2 years ago
2 changed file(s) with 130 addition(s) and 130 deletion(s). Raw diff Collapse all Expand all
0 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+sse2 < %s | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
2 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+ssse3 < %s | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
3 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx < %s | FileCheck %s --check-prefixes=AVX12,AVX1
4 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx2 < %s | FileCheck %s --check-prefixes=AVX12,AVX2
5 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx512f,+avx512vl,+avx512bw < %s | FileCheck %s --check-prefixes=AVX512
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
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,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512
66
77 define i8 @v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i16> %d) {
88 ; SSE2-LABEL: v8i16:
9 ; SSE2: ## BB#0:
9 ; SSE2: # BB#0:
1010 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm0
1111 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
1212 ; SSE2-NEXT: pand %xmm0, %xmm2
1313 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm2
1414 ; SSE2-NEXT: packuswb %xmm2, %xmm2
1515 ; SSE2-NEXT: pmovmskb %xmm2, %eax
16 ; SSE2-NEXT: ## kill: %AL %AL %EAX
16 ; SSE2-NEXT: # kill: %AL %AL %EAX
1717 ; SSE2-NEXT: retq
1818 ;
1919 ; SSSE3-LABEL: v8i16:
20 ; SSSE3: ## BB#0:
20 ; SSSE3: # BB#0:
2121 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm0
2222 ; SSSE3-NEXT: pcmpgtw %xmm3, %xmm2
2323 ; SSSE3-NEXT: pand %xmm0, %xmm2
2424 ; SSSE3-NEXT: pshufb {{.*#+}} xmm2 = xmm2[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
2525 ; SSSE3-NEXT: pmovmskb %xmm2, %eax
26 ; SSSE3-NEXT: ## kill: %AL %AL %EAX
26 ; SSSE3-NEXT: # kill: %AL %AL %EAX
2727 ; SSSE3-NEXT: retq
2828 ;
2929 ; AVX12-LABEL: v8i16:
30 ; AVX12: ## BB#0:
30 ; AVX12: # BB#0:
3131 ; AVX12-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
3232 ; AVX12-NEXT: vpcmpgtw %xmm3, %xmm2, %xmm1
3333 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
3434 ; AVX12-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
3535 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
36 ; AVX12-NEXT: ## kill: %AL %AL %EAX
36 ; AVX12-NEXT: # kill: %AL %AL %EAX
3737 ; AVX12-NEXT: retq
3838 ;
3939 ; AVX512-LABEL: v8i16:
40 ; AVX512: ## BB#0:
40 ; AVX512: # BB#0:
4141 ; AVX512-NEXT: vpcmpgtw %xmm1, %xmm0, %k1
4242 ; AVX512-NEXT: vpcmpgtw %xmm3, %xmm2, %k0 {%k1}
4343 ; AVX512-NEXT: kmovd %k0, %eax
44 ; AVX512-NEXT: ## kill: %AL %AL %EAX
44 ; AVX512-NEXT: # kill: %AL %AL %EAX
4545 ; AVX512-NEXT: retq
4646 %x0 = icmp sgt <8 x i16> %a, %b
4747 %x1 = icmp sgt <8 x i16> %c, %d
5252
5353 define i4 @v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {
5454 ; SSE2-SSSE3-LABEL: v4i32:
55 ; SSE2-SSSE3: ## BB#0:
55 ; SSE2-SSSE3: # BB#0:
5656 ; SSE2-SSSE3-NEXT: pcmpgtd %xmm1, %xmm0
5757 ; SSE2-SSSE3-NEXT: pcmpgtd %xmm3, %xmm2
5858 ; SSE2-SSSE3-NEXT: pand %xmm0, %xmm2
5959 ; SSE2-SSSE3-NEXT: movmskps %xmm2, %eax
60 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
60 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
6161 ; SSE2-SSSE3-NEXT: retq
6262 ;
6363 ; AVX12-LABEL: v4i32:
64 ; AVX12: ## BB#0:
64 ; AVX12: # BB#0:
6565 ; AVX12-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
6666 ; AVX12-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
6767 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
6868 ; AVX12-NEXT: vmovmskps %xmm0, %eax
69 ; AVX12-NEXT: ## kill: %AL %AL %EAX
69 ; AVX12-NEXT: # kill: %AL %AL %EAX
7070 ; AVX12-NEXT: retq
7171 ;
7272 ; AVX512-LABEL: v4i32:
73 ; AVX512: ## BB#0:
73 ; AVX512: # BB#0:
7474 ; AVX512-NEXT: vpcmpgtd %xmm1, %xmm0, %k1
7575 ; AVX512-NEXT: vpcmpgtd %xmm3, %xmm2, %k0 {%k1}
7676 ; AVX512-NEXT: kmovd %k0, %eax
8686
8787 define i4 @v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d) {
8888 ; SSE2-SSSE3-LABEL: v4f32:
89 ; SSE2-SSSE3: ## BB#0:
89 ; SSE2-SSSE3: # BB#0:
9090 ; SSE2-SSSE3-NEXT: cmpltps %xmm0, %xmm1
9191 ; SSE2-SSSE3-NEXT: cmpltps %xmm2, %xmm3
9292 ; SSE2-SSSE3-NEXT: andps %xmm1, %xmm3
9393 ; SSE2-SSSE3-NEXT: movmskps %xmm3, %eax
94 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
94 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
9595 ; SSE2-SSSE3-NEXT: retq
9696 ;
9797 ; AVX12-LABEL: v4f32:
98 ; AVX12: ## BB#0:
98 ; AVX12: # BB#0:
9999 ; AVX12-NEXT: vcmpltps %xmm0, %xmm1, %xmm0
100100 ; AVX12-NEXT: vcmpltps %xmm2, %xmm3, %xmm1
101101 ; AVX12-NEXT: vandps %xmm1, %xmm0, %xmm0
102102 ; AVX12-NEXT: vmovmskps %xmm0, %eax
103 ; AVX12-NEXT: ## kill: %AL %AL %EAX
103 ; AVX12-NEXT: # kill: %AL %AL %EAX
104104 ; AVX12-NEXT: retq
105105 ;
106106 ; AVX512-LABEL: v4f32:
107 ; AVX512: ## BB#0:
107 ; AVX512: # BB#0:
108108 ; AVX512-NEXT: vcmpltps %xmm0, %xmm1, %k1
109109 ; AVX512-NEXT: vcmpltps %xmm2, %xmm3, %k0 {%k1}
110110 ; AVX512-NEXT: kmovd %k0, %eax
120120
121121 define i16 @v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {
122122 ; SSE2-SSSE3-LABEL: v16i8:
123 ; SSE2-SSSE3: ## BB#0:
123 ; SSE2-SSSE3: # BB#0:
124124 ; SSE2-SSSE3-NEXT: pcmpgtb %xmm1, %xmm0
125125 ; SSE2-SSSE3-NEXT: pcmpgtb %xmm3, %xmm2
126126 ; SSE2-SSSE3-NEXT: pand %xmm0, %xmm2
127127 ; SSE2-SSSE3-NEXT: pmovmskb %xmm2, %eax
128 ; SSE2-SSSE3-NEXT: ## kill: %AX %AX %EAX
128 ; SSE2-SSSE3-NEXT: # kill: %AX %AX %EAX
129129 ; SSE2-SSSE3-NEXT: retq
130130 ;
131131 ; AVX12-LABEL: v16i8:
132 ; AVX12: ## BB#0:
132 ; AVX12: # BB#0:
133133 ; AVX12-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
134134 ; AVX12-NEXT: vpcmpgtb %xmm3, %xmm2, %xmm1
135135 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
136136 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
137 ; AVX12-NEXT: ## kill: %AX %AX %EAX
137 ; AVX12-NEXT: # kill: %AX %AX %EAX
138138 ; AVX12-NEXT: retq
139139 ;
140140 ; AVX512-LABEL: v16i8:
141 ; AVX512: ## BB#0:
141 ; AVX512: # BB#0:
142142 ; AVX512-NEXT: vpcmpgtb %xmm1, %xmm0, %k1
143143 ; AVX512-NEXT: vpcmpgtb %xmm3, %xmm2, %k0 {%k1}
144144 ; AVX512-NEXT: kmovd %k0, %eax
145 ; AVX512-NEXT: ## kill: %AX %AX %EAX
145 ; AVX512-NEXT: # kill: %AX %AX %EAX
146146 ; AVX512-NEXT: retq
147147 %x0 = icmp sgt <16 x i8> %a, %b
148148 %x1 = icmp sgt <16 x i8> %c, %d
153153
154154 define i2 @v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d) {
155155 ; SSE2-SSSE3-LABEL: v2i8:
156 ; SSE2-SSSE3: ## BB#0:
156 ; SSE2-SSSE3: # BB#0:
157157 ; SSE2-SSSE3-NEXT: psllq $56, %xmm2
158158 ; SSE2-SSSE3-NEXT: movdqa %xmm2, %xmm4
159159 ; SSE2-SSSE3-NEXT: psrad $31, %xmm4
205205 ; SSE2-SSSE3-NEXT: por %xmm2, %xmm0
206206 ; SSE2-SSSE3-NEXT: pand %xmm1, %xmm0
207207 ; SSE2-SSSE3-NEXT: movmskpd %xmm0, %eax
208 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
208 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
209209 ; SSE2-SSSE3-NEXT: retq
210210 ;
211211 ; AVX1-LABEL: v2i8:
212 ; AVX1: ## BB#0:
212 ; AVX1: # BB#0:
213213 ; AVX1-NEXT: vpsllq $56, %xmm3, %xmm3
214214 ; AVX1-NEXT: vpsrad $31, %xmm3, %xmm4
215215 ; AVX1-NEXT: vpsrad $24, %xmm3, %xmm3
234234 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
235235 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
236236 ; AVX1-NEXT: vmovmskpd %xmm0, %eax
237 ; AVX1-NEXT: ## kill: %AL %AL %EAX
237 ; AVX1-NEXT: # kill: %AL %AL %EAX
238238 ; AVX1-NEXT: retq
239239 ;
240240 ; AVX2-LABEL: v2i8:
241 ; AVX2: ## BB#0:
241 ; AVX2: # BB#0:
242242 ; AVX2-NEXT: vpsllq $56, %xmm3, %xmm3
243243 ; AVX2-NEXT: vpsrad $31, %xmm3, %xmm4
244244 ; AVX2-NEXT: vpsrad $24, %xmm3, %xmm3
263263 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
264264 ; AVX2-NEXT: vpand %xmm2, %xmm0, %xmm0
265265 ; AVX2-NEXT: vmovmskpd %xmm0, %eax
266 ; AVX2-NEXT: ## kill: %AL %AL %EAX
266 ; AVX2-NEXT: # kill: %AL %AL %EAX
267267 ; AVX2-NEXT: retq
268268 ;
269269 ; AVX512-LABEL: v2i8:
270 ; AVX512: ## BB#0:
270 ; AVX512: # BB#0:
271271 ; AVX512-NEXT: vpsllq $56, %xmm3, %xmm3
272272 ; AVX512-NEXT: vpsraq $56, %xmm3, %xmm3
273273 ; AVX512-NEXT: vpsllq $56, %xmm2, %xmm2
291291
292292 define i2 @v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d) {
293293 ; SSE2-SSSE3-LABEL: v2i16:
294 ; SSE2-SSSE3: ## BB#0:
294 ; SSE2-SSSE3: # BB#0:
295295 ; SSE2-SSSE3-NEXT: psllq $48, %xmm2
296296 ; SSE2-SSSE3-NEXT: movdqa %xmm2, %xmm4
297297 ; SSE2-SSSE3-NEXT: psrad $31, %xmm4
343343 ; SSE2-SSSE3-NEXT: por %xmm2, %xmm0
344344 ; SSE2-SSSE3-NEXT: pand %xmm1, %xmm0
345345 ; SSE2-SSSE3-NEXT: movmskpd %xmm0, %eax
346 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
346 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
347347 ; SSE2-SSSE3-NEXT: retq
348348 ;
349349 ; AVX1-LABEL: v2i16:
350 ; AVX1: ## BB#0:
350 ; AVX1: # BB#0:
351351 ; AVX1-NEXT: vpsllq $48, %xmm3, %xmm3
352352 ; AVX1-NEXT: vpsrad $31, %xmm3, %xmm4
353353 ; AVX1-NEXT: vpsrad $16, %xmm3, %xmm3
372372 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
373373 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
374374 ; AVX1-NEXT: vmovmskpd %xmm0, %eax
375 ; AVX1-NEXT: ## kill: %AL %AL %EAX
375 ; AVX1-NEXT: # kill: %AL %AL %EAX
376376 ; AVX1-NEXT: retq
377377 ;
378378 ; AVX2-LABEL: v2i16:
379 ; AVX2: ## BB#0:
379 ; AVX2: # BB#0:
380380 ; AVX2-NEXT: vpsllq $48, %xmm3, %xmm3
381381 ; AVX2-NEXT: vpsrad $31, %xmm3, %xmm4
382382 ; AVX2-NEXT: vpsrad $16, %xmm3, %xmm3
401401 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
402402 ; AVX2-NEXT: vpand %xmm2, %xmm0, %xmm0
403403 ; AVX2-NEXT: vmovmskpd %xmm0, %eax
404 ; AVX2-NEXT: ## kill: %AL %AL %EAX
404 ; AVX2-NEXT: # kill: %AL %AL %EAX
405405 ; AVX2-NEXT: retq
406406 ;
407407 ; AVX512-LABEL: v2i16:
408 ; AVX512: ## BB#0:
408 ; AVX512: # BB#0:
409409 ; AVX512-NEXT: vpsllq $48, %xmm3, %xmm3
410410 ; AVX512-NEXT: vpsraq $48, %xmm3, %xmm3
411411 ; AVX512-NEXT: vpsllq $48, %xmm2, %xmm2
429429
430430 define i2 @v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d) {
431431 ; SSE2-SSSE3-LABEL: v2i32:
432 ; SSE2-SSSE3: ## BB#0:
432 ; SSE2-SSSE3: # BB#0:
433433 ; SSE2-SSSE3-NEXT: psllq $32, %xmm2
434434 ; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,3,2,3]
435435 ; SSE2-SSSE3-NEXT: psrad $31, %xmm2
473473 ; SSE2-SSSE3-NEXT: por %xmm2, %xmm0
474474 ; SSE2-SSSE3-NEXT: pand %xmm3, %xmm0
475475 ; SSE2-SSSE3-NEXT: movmskpd %xmm0, %eax
476 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
476 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
477477 ; SSE2-SSSE3-NEXT: retq
478478 ;
479479 ; AVX1-LABEL: v2i32:
480 ; AVX1: ## BB#0:
480 ; AVX1: # BB#0:
481481 ; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3
482482 ; AVX1-NEXT: vpsrad $31, %xmm3, %xmm4
483483 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
498498 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
499499 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
500500 ; AVX1-NEXT: vmovmskpd %xmm0, %eax
501 ; AVX1-NEXT: ## kill: %AL %AL %EAX
501 ; AVX1-NEXT: # kill: %AL %AL %EAX
502502 ; AVX1-NEXT: retq
503503 ;
504504 ; AVX2-LABEL: v2i32:
505 ; AVX2: ## BB#0:
505 ; AVX2: # BB#0:
506506 ; AVX2-NEXT: vpsllq $32, %xmm3, %xmm3
507507 ; AVX2-NEXT: vpsrad $31, %xmm3, %xmm4
508508 ; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
523523 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
524524 ; AVX2-NEXT: vpand %xmm2, %xmm0, %xmm0
525525 ; AVX2-NEXT: vmovmskpd %xmm0, %eax
526 ; AVX2-NEXT: ## kill: %AL %AL %EAX
526 ; AVX2-NEXT: # kill: %AL %AL %EAX
527527 ; AVX2-NEXT: retq
528528 ;
529529 ; AVX512-LABEL: v2i32:
530 ; AVX512: ## BB#0:
530 ; AVX512: # BB#0:
531531 ; AVX512-NEXT: vpsllq $32, %xmm3, %xmm3
532532 ; AVX512-NEXT: vpsraq $32, %xmm3, %xmm3
533533 ; AVX512-NEXT: vpsllq $32, %xmm2, %xmm2
551551
552552 define i2 @v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d) {
553553 ; SSE2-SSSE3-LABEL: v2i64:
554 ; SSE2-SSSE3: ## BB#0:
554 ; SSE2-SSSE3: # BB#0:
555555 ; SSE2-SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
556556 ; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm1
557557 ; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm0
575575 ; SSE2-SSSE3-NEXT: por %xmm2, %xmm0
576576 ; SSE2-SSSE3-NEXT: pand %xmm1, %xmm0
577577 ; SSE2-SSSE3-NEXT: movmskpd %xmm0, %eax
578 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
578 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
579579 ; SSE2-SSSE3-NEXT: retq
580580 ;
581581 ; AVX12-LABEL: v2i64:
582 ; AVX12: ## BB#0:
582 ; AVX12: # BB#0:
583583 ; AVX12-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
584584 ; AVX12-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm1
585585 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
586586 ; AVX12-NEXT: vmovmskpd %xmm0, %eax
587 ; AVX12-NEXT: ## kill: %AL %AL %EAX
587 ; AVX12-NEXT: # kill: %AL %AL %EAX
588588 ; AVX12-NEXT: retq
589589 ;
590590 ; AVX512-LABEL: v2i64:
591 ; AVX512: ## BB#0:
591 ; AVX512: # BB#0:
592592 ; AVX512-NEXT: vpcmpgtq %xmm1, %xmm0, %k1
593593 ; AVX512-NEXT: vpcmpgtq %xmm3, %xmm2, %k0 {%k1}
594594 ; AVX512-NEXT: kmovd %k0, %eax
604604
605605 define i2 @v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {
606606 ; SSE2-SSSE3-LABEL: v2f64:
607 ; SSE2-SSSE3: ## BB#0:
607 ; SSE2-SSSE3: # BB#0:
608608 ; SSE2-SSSE3-NEXT: cmpltpd %xmm0, %xmm1
609609 ; SSE2-SSSE3-NEXT: cmpltpd %xmm2, %xmm3
610610 ; SSE2-SSSE3-NEXT: andpd %xmm1, %xmm3
611611 ; SSE2-SSSE3-NEXT: movmskpd %xmm3, %eax
612 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
612 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
613613 ; SSE2-SSSE3-NEXT: retq
614614 ;
615615 ; AVX12-LABEL: v2f64:
616 ; AVX12: ## BB#0:
616 ; AVX12: # BB#0:
617617 ; AVX12-NEXT: vcmpltpd %xmm0, %xmm1, %xmm0
618618 ; AVX12-NEXT: vcmpltpd %xmm2, %xmm3, %xmm1
619619 ; AVX12-NEXT: vandpd %xmm1, %xmm0, %xmm0
620620 ; AVX12-NEXT: vmovmskpd %xmm0, %eax
621 ; AVX12-NEXT: ## kill: %AL %AL %EAX
621 ; AVX12-NEXT: # kill: %AL %AL %EAX
622622 ; AVX12-NEXT: retq
623623 ;
624624 ; AVX512-LABEL: v2f64:
625 ; AVX512: ## BB#0:
625 ; AVX512: # BB#0:
626626 ; AVX512-NEXT: vcmpltpd %xmm0, %xmm1, %k1
627627 ; AVX512-NEXT: vcmpltpd %xmm2, %xmm3, %k0 {%k1}
628628 ; AVX512-NEXT: kmovd %k0, %eax
638638
639639 define i4 @v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i8> %d) {
640640 ; SSE2-SSSE3-LABEL: v4i8:
641 ; SSE2-SSSE3: ## BB#0:
641 ; SSE2-SSSE3: # BB#0:
642642 ; SSE2-SSSE3-NEXT: pslld $24, %xmm3
643643 ; SSE2-SSSE3-NEXT: psrad $24, %xmm3
644644 ; SSE2-SSSE3-NEXT: pslld $24, %xmm2
651651 ; SSE2-SSSE3-NEXT: pcmpgtd %xmm1, %xmm0
652652 ; SSE2-SSSE3-NEXT: pand %xmm2, %xmm0
653653 ; SSE2-SSSE3-NEXT: movmskps %xmm0, %eax
654 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
654 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
655655 ; SSE2-SSSE3-NEXT: retq
656656 ;
657657 ; AVX12-LABEL: v4i8:
658 ; AVX12: ## BB#0:
658 ; AVX12: # BB#0:
659659 ; AVX12-NEXT: vpslld $24, %xmm3, %xmm3
660660 ; AVX12-NEXT: vpsrad $24, %xmm3, %xmm3
661661 ; AVX12-NEXT: vpslld $24, %xmm2, %xmm2
668668 ; AVX12-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
669669 ; AVX12-NEXT: vpand %xmm2, %xmm0, %xmm0
670670 ; AVX12-NEXT: vmovmskps %xmm0, %eax
671 ; AVX12-NEXT: ## kill: %AL %AL %EAX
671 ; AVX12-NEXT: # kill: %AL %AL %EAX
672672 ; AVX12-NEXT: retq
673673 ;
674674 ; AVX512-LABEL: v4i8:
675 ; AVX512: ## BB#0:
675 ; AVX512: # BB#0:
676676 ; AVX512-NEXT: vpslld $24, %xmm3, %xmm3
677677 ; AVX512-NEXT: vpsrad $24, %xmm3, %xmm3
678678 ; AVX512-NEXT: vpslld $24, %xmm2, %xmm2
696696
697697 define i4 @v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i16> %d) {
698698 ; SSE2-SSSE3-LABEL: v4i16:
699 ; SSE2-SSSE3: ## BB#0:
699 ; SSE2-SSSE3: # BB#0:
700700 ; SSE2-SSSE3-NEXT: pslld $16, %xmm3
701701 ; SSE2-SSSE3-NEXT: psrad $16, %xmm3
702702 ; SSE2-SSSE3-NEXT: pslld $16, %xmm2
709709 ; SSE2-SSSE3-NEXT: pcmpgtd %xmm1, %xmm0
710710 ; SSE2-SSSE3-NEXT: pand %xmm2, %xmm0
711711 ; SSE2-SSSE3-NEXT: movmskps %xmm0, %eax
712 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
712 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
713713 ; SSE2-SSSE3-NEXT: retq
714714 ;
715715 ; AVX12-LABEL: v4i16:
716 ; AVX12: ## BB#0:
716 ; AVX12: # BB#0:
717717 ; AVX12-NEXT: vpslld $16, %xmm3, %xmm3
718718 ; AVX12-NEXT: vpsrad $16, %xmm3, %xmm3
719719 ; AVX12-NEXT: vpslld $16, %xmm2, %xmm2
726726 ; AVX12-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
727727 ; AVX12-NEXT: vpand %xmm2, %xmm0, %xmm0
728728 ; AVX12-NEXT: vmovmskps %xmm0, %eax
729 ; AVX12-NEXT: ## kill: %AL %AL %EAX
729 ; AVX12-NEXT: # kill: %AL %AL %EAX
730730 ; AVX12-NEXT: retq
731731 ;
732732 ; AVX512-LABEL: v4i16:
733 ; AVX512: ## BB#0:
733 ; AVX512: # BB#0:
734734 ; AVX512-NEXT: vpslld $16, %xmm3, %xmm3
735735 ; AVX512-NEXT: vpsrad $16, %xmm3, %xmm3
736736 ; AVX512-NEXT: vpslld $16, %xmm2, %xmm2
754754
755755 define i8 @v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i8> %d) {
756756 ; SSE2-LABEL: v8i8:
757 ; SSE2: ## BB#0:
757 ; SSE2: # BB#0:
758758 ; SSE2-NEXT: psllw $8, %xmm3
759759 ; SSE2-NEXT: psraw $8, %xmm3
760760 ; SSE2-NEXT: psllw $8, %xmm2
769769 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
770770 ; SSE2-NEXT: packuswb %xmm0, %xmm0
771771 ; SSE2-NEXT: pmovmskb %xmm0, %eax
772 ; SSE2-NEXT: ## kill: %AL %AL %EAX
772 ; SSE2-NEXT: # kill: %AL %AL %EAX
773773 ; SSE2-NEXT: retq
774774 ;
775775 ; SSSE3-LABEL: v8i8:
776 ; SSSE3: ## BB#0:
776 ; SSSE3: # BB#0:
777777 ; SSSE3-NEXT: psllw $8, %xmm3
778778 ; SSSE3-NEXT: psraw $8, %xmm3
779779 ; SSSE3-NEXT: psllw $8, %xmm2
787787 ; SSSE3-NEXT: pand %xmm2, %xmm0
788788 ; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
789789 ; SSSE3-NEXT: pmovmskb %xmm0, %eax
790 ; SSSE3-NEXT: ## kill: %AL %AL %EAX
790 ; SSSE3-NEXT: # kill: %AL %AL %EAX
791791 ; SSSE3-NEXT: retq
792792 ;
793793 ; AVX12-LABEL: v8i8:
794 ; AVX12: ## BB#0:
794 ; AVX12: # BB#0:
795795 ; AVX12-NEXT: vpsllw $8, %xmm3, %xmm3
796796 ; AVX12-NEXT: vpsraw $8, %xmm3, %xmm3
797797 ; AVX12-NEXT: vpsllw $8, %xmm2, %xmm2
805805 ; AVX12-NEXT: vpand %xmm2, %xmm0, %xmm0
806806 ; AVX12-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
807807 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
808 ; AVX12-NEXT: ## kill: %AL %AL %EAX
808 ; AVX12-NEXT: # kill: %AL %AL %EAX
809809 ; AVX12-NEXT: retq
810810 ;
811811 ; AVX512-LABEL: v8i8:
812 ; AVX512: ## BB#0:
812 ; AVX512: # BB#0:
813813 ; AVX512-NEXT: vpsllw $8, %xmm3, %xmm3
814814 ; AVX512-NEXT: vpsraw $8, %xmm3, %xmm3
815815 ; AVX512-NEXT: vpsllw $8, %xmm2, %xmm2
821821 ; AVX512-NEXT: vpcmpgtw %xmm1, %xmm0, %k1
822822 ; AVX512-NEXT: vpcmpgtw %xmm3, %xmm2, %k0 {%k1}
823823 ; AVX512-NEXT: kmovd %k0, %eax
824 ; AVX512-NEXT: ## kill: %AL %AL %EAX
824 ; AVX512-NEXT: # kill: %AL %AL %EAX
825825 ; AVX512-NEXT: retq
826826 %x0 = icmp sgt <8 x i8> %a, %b
827827 %x1 = icmp sgt <8 x i8> %c, %d
0 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+SSE2 < %s | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
2 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+SSSE3 < %s | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
3 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx < %s | FileCheck %s --check-prefixes=AVX12,AVX1
4 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx2 < %s | FileCheck %s --check-prefixes=AVX12,AVX2
5 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx512f,+avx512vl,+avx512bw < %s | FileCheck %s --check-prefix=AVX512
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+SSE2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+SSSE3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
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,+avx512vl,+avx512bw | FileCheck %s --check-prefix=AVX512
66
77 define i4 @v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i64> %d) {
88 ; SSE2-SSSE3-LABEL: v4i64:
9 ; SSE2-SSSE3: ## BB#0:
9 ; SSE2-SSSE3: # BB#0:
1010 ; SSE2-SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
1111 ; SSE2-SSSE3-NEXT: pxor %xmm8, %xmm3
1212 ; SSE2-SSSE3-NEXT: pxor %xmm8, %xmm1
5656 ; SSE2-SSSE3-NEXT: psrad $31, %xmm2
5757 ; SSE2-SSSE3-NEXT: pand %xmm0, %xmm2
5858 ; SSE2-SSSE3-NEXT: movmskps %xmm2, %eax
59 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
59 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
6060 ; SSE2-SSSE3-NEXT: retq
6161 ;
6262 ; AVX1-LABEL: v4i64:
63 ; AVX1: ## BB#0:
63 ; AVX1: # BB#0:
6464 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6565 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6666 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7373 ; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
7474 ; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0
7575 ; AVX1-NEXT: vmovmskps %xmm0, %eax
76 ; AVX1-NEXT: ## kill: %AL %AL %EAX
76 ; AVX1-NEXT: # kill: %AL %AL %EAX
7777 ; AVX1-NEXT: vzeroupper
7878 ; AVX1-NEXT: retq
7979 ;
8080 ; AVX2-LABEL: v4i64:
81 ; AVX2: ## BB#0:
81 ; AVX2: # BB#0:
8282 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0
8383 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
8484 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
8787 ; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm1
8888 ; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
8989 ; AVX2-NEXT: vmovmskps %xmm0, %eax
90 ; AVX2-NEXT: ## kill: %AL %AL %EAX
90 ; AVX2-NEXT: # kill: %AL %AL %EAX
9191 ; AVX2-NEXT: vzeroupper
9292 ; AVX2-NEXT: retq
9393 ;
9494 ; AVX512-LABEL: v4i64:
95 ; AVX512: ## BB#0:
95 ; AVX512: # BB#0:
9696 ; AVX512-NEXT: vpcmpgtq %ymm1, %ymm0, %k1
9797 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %k0 {%k1}
9898 ; AVX512-NEXT: kmovd %k0, %eax
109109
110110 define i4 @v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d) {
111111 ; SSE2-SSSE3-LABEL: v4f64:
112 ; SSE2-SSSE3: ## BB#0:
112 ; SSE2-SSSE3: # BB#0:
113113 ; SSE2-SSSE3-NEXT: cmpltpd %xmm1, %xmm3
114114 ; SSE2-SSSE3-NEXT: cmpltpd %xmm0, %xmm2
115115 ; SSE2-SSSE3-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
122122 ; SSE2-SSSE3-NEXT: psrad $31, %xmm6
123123 ; SSE2-SSSE3-NEXT: pand %xmm2, %xmm6
124124 ; SSE2-SSSE3-NEXT: movmskps %xmm6, %eax
125 ; SSE2-SSSE3-NEXT: ## kill: %AL %AL %EAX
125 ; SSE2-SSSE3-NEXT: # kill: %AL %AL %EAX
126126 ; SSE2-SSSE3-NEXT: retq
127127 ;
128128 ; AVX12-LABEL: v4f64:
129 ; AVX12: ## BB#0:
129 ; AVX12: # BB#0:
130130 ; AVX12-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0
131131 ; AVX12-NEXT: vextractf128 $1, %ymm0, %xmm1
132132 ; AVX12-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
135135 ; AVX12-NEXT: vpacksswb %xmm2, %xmm1, %xmm1
136136 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
137137 ; AVX12-NEXT: vmovmskps %xmm0, %eax
138 ; AVX12-NEXT: ## kill: %AL %AL %EAX
138 ; AVX12-NEXT: # kill: %AL %AL %EAX
139139 ; AVX12-NEXT: vzeroupper
140140 ; AVX12-NEXT: retq
141141 ;
142142 ; AVX512-LABEL: v4f64:
143 ; AVX512: ## BB#0:
143 ; AVX512: # BB#0:
144144 ; AVX512-NEXT: vcmpltpd %ymm0, %ymm1, %k1
145145 ; AVX512-NEXT: vcmpltpd %ymm2, %ymm3, %k0 {%k1}
146146 ; AVX512-NEXT: kmovd %k0, %eax
157157
158158 define i16 @v16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i16> %d) {
159159 ; SSE2-LABEL: v16i16:
160 ; SSE2: ## BB#0:
160 ; SSE2: # BB#0:
161161 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm1
162162 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
163163 ; SSE2-NEXT: pand %xmm3, %xmm1
180180 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm2
181181 ; SSE2-NEXT: pand %xmm1, %xmm2
182182 ; SSE2-NEXT: pmovmskb %xmm2, %eax
183 ; SSE2-NEXT: ## kill: %AX %AX %EAX
183 ; SSE2-NEXT: # kill: %AX %AX %EAX
184184 ; SSE2-NEXT: retq
185185 ;
186186 ; SSSE3-LABEL: v16i16:
187 ; SSSE3: ## BB#0:
187 ; SSSE3: # BB#0:
188188 ; SSSE3-NEXT: pcmpgtw %xmm3, %xmm1
189189 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
190190 ; SSSE3-NEXT: pshufb %xmm3, %xmm1
207207 ; SSSE3-NEXT: pcmpgtb %xmm4, %xmm2
208208 ; SSSE3-NEXT: pand %xmm1, %xmm2
209209 ; SSSE3-NEXT: pmovmskb %xmm2, %eax
210 ; SSSE3-NEXT: ## kill: %AX %AX %EAX
210 ; SSSE3-NEXT: # kill: %AX %AX %EAX
211211 ; SSSE3-NEXT: retq
212212 ;
213213 ; AVX1-LABEL: v16i16:
214 ; AVX1: ## BB#0:
214 ; AVX1: # BB#0:
215215 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
216216 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
217217 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm5, %xmm4
224224 ; AVX1-NEXT: vpacksswb %xmm1, %xmm2, %xmm1
225225 ; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0
226226 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
227 ; AVX1-NEXT: ## kill: %AX %AX %EAX
227 ; AVX1-NEXT: # kill: %AX %AX %EAX
228228 ; AVX1-NEXT: vzeroupper
229229 ; AVX1-NEXT: retq
230230 ;
231231 ; AVX2-LABEL: v16i16:
232 ; AVX2: ## BB#0:
232 ; AVX2: # BB#0:
233233 ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0
234234 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
235235 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
238238 ; AVX2-NEXT: vpacksswb %xmm2, %xmm1, %xmm1
239239 ; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
240240 ; AVX2-NEXT: vpmovmskb %xmm0, %eax
241 ; AVX2-NEXT: ## kill: %AX %AX %EAX
241 ; AVX2-NEXT: # kill: %AX %AX %EAX
242242 ; AVX2-NEXT: vzeroupper
243243 ; AVX2-NEXT: retq
244244 ;
245245 ; AVX512-LABEL: v16i16:
246 ; AVX512: ## BB#0:
246 ; AVX512: # BB#0:
247247 ; AVX512-NEXT: vpcmpgtw %ymm1, %ymm0, %k1
248248 ; AVX512-NEXT: vpcmpgtw %ymm3, %ymm2, %k0 {%k1}
249249 ; AVX512-NEXT: kmovd %k0, %eax
250 ; AVX512-NEXT: ## kill: %AX %AX %EAX
250 ; AVX512-NEXT: # kill: %AX %AX %EAX
251251 ; AVX512-NEXT: vzeroupper
252252 ; AVX512-NEXT: retq
253253 %x0 = icmp sgt <16 x i16> %a, %b
259259
260260 define i8 @v8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i32> %d) {
261261 ; SSE2-LABEL: v8i32:
262 ; SSE2: ## BB#0:
262 ; SSE2: # BB#0:
263263 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm1
264264 ; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
265265 ; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
286286 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm2
287287 ; SSE2-NEXT: packuswb %xmm2, %xmm2
288288 ; SSE2-NEXT: pmovmskb %xmm2, %eax
289 ; SSE2-NEXT: ## kill: %AL %AL %EAX
289 ; SSE2-NEXT: # kill: %AL %AL %EAX
290290 ; SSE2-NEXT: retq
291291 ;
292292 ; SSSE3-LABEL: v8i32:
293 ; SSSE3: ## BB#0:
293 ; SSSE3: # BB#0:
294294 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm1
295295 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
296296 ; SSSE3-NEXT: pshufb %xmm3, %xmm1
309309 ; SSSE3-NEXT: pand %xmm0, %xmm4
310310 ; SSSE3-NEXT: pshufb {{.*#+}} xmm4 = xmm4[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
311311 ; SSSE3-NEXT: pmovmskb %xmm4, %eax
312 ; SSSE3-NEXT: ## kill: %AL %AL %EAX
312 ; SSSE3-NEXT: # kill: %AL %AL %EAX
313313 ; SSSE3-NEXT: retq
314314 ;
315315 ; AVX1-LABEL: v8i32:
316 ; AVX1: ## BB#0:
316 ; AVX1: # BB#0:
317317 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
318318 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
319319 ; AVX1-NEXT: vpcmpgtd %xmm4, %xmm5, %xmm4
327327 ; AVX1-NEXT: vpand %xmm1, %xmm0, %xmm0
328328 ; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
329329 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
330 ; AVX1-NEXT: ## kill: %AL %AL %EAX
330 ; AVX1-NEXT: # kill: %AL %AL %EAX
331331 ; AVX1-NEXT: vzeroupper
332332 ; AVX1-NEXT: retq
333333 ;
334334 ; AVX2-LABEL: v8i32:
335 ; AVX2: ## BB#0:
335 ; AVX2: # BB#0:
336336 ; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
337337 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
338338 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
342342 ; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
343343 ; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
344344 ; AVX2-NEXT: vpmovmskb %xmm0, %eax
345 ; AVX2-NEXT: ## kill: %AL %AL %EAX
345 ; AVX2-NEXT: # kill: %AL %AL %EAX
346346 ; AVX2-NEXT: vzeroupper
347347 ; AVX2-NEXT: retq
348348 ;
349349 ; AVX512-LABEL: v8i32:
350 ; AVX512: ## BB#0:
350 ; AVX512: # BB#0:
351351 ; AVX512-NEXT: vpcmpgtd %ymm1, %ymm0, %k1
352352 ; AVX512-NEXT: vpcmpgtd %ymm3, %ymm2, %k0 {%k1}
353353 ; AVX512-NEXT: kmovd %k0, %eax
354 ; AVX512-NEXT: ## kill: %AL %AL %EAX
354 ; AVX512-NEXT: # kill: %AL %AL %EAX
355355 ; AVX512-NEXT: vzeroupper
356356 ; AVX512-NEXT: retq
357357 %x0 = icmp sgt <8 x i32> %a, %b
363363
364364 define i8 @v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x float> %d) {
365365 ; SSE2-LABEL: v8f32:
366 ; SSE2: ## BB#0:
366 ; SSE2: # BB#0:
367367 ; SSE2-NEXT: cmpltps %xmm1, %xmm3
368368 ; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm3[0,2,2,3,4,5,6,7]
369369 ; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
390390 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm2
391391 ; SSE2-NEXT: packuswb %xmm2, %xmm2
392392 ; SSE2-NEXT: pmovmskb %xmm2, %eax
393 ; SSE2-NEXT: ## kill: %AL %AL %EAX
393 ; SSE2-NEXT: # kill: %AL %AL %EAX
394394 ; SSE2-NEXT: retq
395395 ;
396396 ; SSSE3-LABEL: v8f32:
397 ; SSSE3: ## BB#0:
397 ; SSSE3: # BB#0:
398398 ; SSSE3-NEXT: cmpltps %xmm1, %xmm3
399399 ; SSSE3-NEXT: movdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
400400 ; SSSE3-NEXT: pshufb %xmm1, %xmm3
413413 ; SSSE3-NEXT: pand %xmm2, %xmm6
414414 ; SSSE3-NEXT: pshufb {{.*#+}} xmm6 = xmm6[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
415415 ; SSSE3-NEXT: pmovmskb %xmm6, %eax
416 ; SSSE3-NEXT: ## kill: %AL %AL %EAX
416 ; SSSE3-NEXT: # kill: %AL %AL %EAX
417417 ; SSSE3-NEXT: retq
418418 ;
419419 ; AVX12-LABEL: v8f32:
420 ; AVX12: ## BB#0:
420 ; AVX12: # BB#0:
421421 ; AVX12-NEXT: vcmpltps %ymm0, %ymm1, %ymm0
422422 ; AVX12-NEXT: vextractf128 $1, %ymm0, %xmm1
423423 ; AVX12-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
427427 ; AVX12-NEXT: vpand %xmm1, %xmm0, %xmm0
428428 ; AVX12-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
429429 ; AVX12-NEXT: vpmovmskb %xmm0, %eax
430 ; AVX12-NEXT: ## kill: %AL %AL %EAX
430 ; AVX12-NEXT: # kill: %AL %AL %EAX
431431 ; AVX12-NEXT: vzeroupper
432432 ; AVX12-NEXT: retq
433433 ;
434434 ; AVX512-LABEL: v8f32:
435 ; AVX512: ## BB#0:
435 ; AVX512: # BB#0:
436436 ; AVX512-NEXT: vcmpltps %ymm0, %ymm1, %k1
437437 ; AVX512-NEXT: vcmpltps %ymm2, %ymm3, %k0 {%k1}
438438 ; AVX512-NEXT: kmovd %k0, %eax
439 ; AVX512-NEXT: ## kill: %AL %AL %EAX
439 ; AVX512-NEXT: # kill: %AL %AL %EAX
440440 ; AVX512-NEXT: vzeroupper
441441 ; AVX512-NEXT: retq
442442 %x0 = fcmp ogt <8 x float> %a, %b
448448
449449 define i32 @v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i8> %d) {
450450 ; SSE2-SSSE3-LABEL: v32i8:
451 ; SSE2-SSSE3: ## BB#0:
451 ; SSE2-SSSE3: # BB#0:
452452 ; SSE2-SSSE3-NEXT: pcmpgtb %xmm2, %xmm0
453453 ; SSE2-SSSE3-NEXT: pcmpgtb %xmm3, %xmm1
454454 ; SSE2-SSSE3-NEXT: pcmpgtb %xmm6, %xmm4
560560 ; SSE2-SSSE3-NEXT: retq
561561 ;
562562 ; AVX1-LABEL: v32i8:
563 ; AVX1: ## BB#0:
563 ; AVX1: # BB#0:
564564 ; AVX1-NEXT: pushq %rbp
565 ; AVX1-NEXT: Lcfi0:
565 ; AVX1-NEXT: .Lcfi0:
566566 ; AVX1-NEXT: .cfi_def_cfa_offset 16
567 ; AVX1-NEXT: Lcfi1:
567 ; AVX1-NEXT: .Lcfi1:
568568 ; AVX1-NEXT: .cfi_offset %rbp, -16
569569 ; AVX1-NEXT: movq %rsp, %rbp
570 ; AVX1-NEXT: Lcfi2:
570 ; AVX1-NEXT: .Lcfi2:
571571 ; AVX1-NEXT: .cfi_def_cfa_register %rbp
572572 ; AVX1-NEXT: andq $-32, %rsp
573573 ; AVX1-NEXT: subq $32, %rsp
686686 ; AVX1-NEXT: retq
687687 ;
688688 ; AVX2-LABEL: v32i8:
689 ; AVX2: ## BB#0:
689 ; AVX2: # BB#0:
690690 ; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0
691691 ; AVX2-NEXT: vpcmpgtb %ymm3, %ymm2, %ymm1
692692 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
695695 ; AVX2-NEXT: retq
696696 ;
697697 ; AVX512-LABEL: v32i8:
698 ; AVX512: ## BB#0:
698 ; AVX512: # BB#0:
699699 ; AVX512-NEXT: vpcmpgtb %ymm1, %ymm0, %k1
700700 ; AVX512-NEXT: vpcmpgtb %ymm3, %ymm2, %k0 {%k1}
701701 ; AVX512-NEXT: kmovd %k0, %eax