blob: 9bfd434745495b40ae1351a324875a86f852ee21 [file] [log] [blame]
Zvi Rackoverc20c6d02017-05-18 07:04:48 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Simon Pilgrim0fee3372017-07-06 18:27:34 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+SSE2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+SSSE3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE3
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX12,AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX12,AVX2
Simon Pilgrimc1927f12017-10-31 18:41:48 +00006; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512 --check-prefixes=AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512 --check-prefixes=AVX512BW
Zvi Rackoverc20c6d02017-05-18 07:04:48 +00008
9define i16 @v16i16(<16 x i16> %a, <16 x i16> %b) {
Simon Pilgrim0fee3372017-07-06 18:27:34 +000010; SSE2-SSSE3-LABEL: v16i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000011; SSE2-SSSE3: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +000012; SSE2-SSSE3-NEXT: pcmpgtw %xmm3, %xmm1
13; SSE2-SSSE3-NEXT: pcmpgtw %xmm2, %xmm0
14; SSE2-SSSE3-NEXT: packsswb %xmm1, %xmm0
15; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000016; SSE2-SSSE3-NEXT: # kill: def $ax killed $ax killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +000017; SSE2-SSSE3-NEXT: retq
18;
19; AVX1-LABEL: v16i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000020; AVX1: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +000021; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
22; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
23; AVX1-NEXT: vpcmpgtw %xmm2, %xmm3, %xmm2
24; AVX1-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
25; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
26; AVX1-NEXT: vpmovmskb %xmm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000027; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +000028; AVX1-NEXT: vzeroupper
29; AVX1-NEXT: retq
30;
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000031; AVX2-LABEL: v16i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000032; AVX2: # %bb.0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000033; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0
34; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
35; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
Zvi Rackover76937332017-06-01 11:27:57 +000036; AVX2-NEXT: vpmovmskb %xmm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000037; AVX2-NEXT: # kill: def $ax killed $ax killed $eax
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000038; AVX2-NEXT: vzeroupper
39; AVX2-NEXT: retq
40;
Simon Pilgrimc1927f12017-10-31 18:41:48 +000041; AVX512F-LABEL: v16i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000042; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +000043; AVX512F-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0
44; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0
Simon Pilgrimc1927f12017-10-31 18:41:48 +000045; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
46; AVX512F-NEXT: kmovw %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000047; AVX512F-NEXT: # kill: def $ax killed $ax killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +000048; AVX512F-NEXT: vzeroupper
49; AVX512F-NEXT: retq
50;
51; AVX512BW-LABEL: v16i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000052; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +000053; AVX512BW-NEXT: vpcmpgtw %ymm1, %ymm0, %k0
54; AVX512BW-NEXT: kmovd %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000055; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +000056; AVX512BW-NEXT: vzeroupper
57; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000058 %x = icmp sgt <16 x i16> %a, %b
59 %res = bitcast <16 x i1> %x to i16
60 ret i16 %res
61}
62
63define i8 @v8i32(<8 x i32> %a, <8 x i32> %b) {
Simon Pilgrim321e54f2017-10-23 22:05:02 +000064; SSE2-SSSE3-LABEL: v8i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000065; SSE2-SSSE3: # %bb.0:
Simon Pilgrim321e54f2017-10-23 22:05:02 +000066; SSE2-SSSE3-NEXT: pcmpgtd %xmm3, %xmm1
67; SSE2-SSSE3-NEXT: pcmpgtd %xmm2, %xmm0
Simon Pilgrim0a12c232017-10-24 15:38:16 +000068; SSE2-SSSE3-NEXT: packssdw %xmm1, %xmm0
Simon Pilgrim321e54f2017-10-23 22:05:02 +000069; SSE2-SSSE3-NEXT: packsswb %xmm0, %xmm0
70; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000071; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim321e54f2017-10-23 22:05:02 +000072; SSE2-SSSE3-NEXT: retq
Simon Pilgrim0fee3372017-07-06 18:27:34 +000073;
74; AVX1-LABEL: v8i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000075; AVX1: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +000076; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
77; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
78; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
79; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
Simon Pilgrim4aa28b92017-09-18 17:58:31 +000080; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
81; AVX1-NEXT: vmovmskps %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000082; AVX1-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +000083; AVX1-NEXT: vzeroupper
84; AVX1-NEXT: retq
85;
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000086; AVX2-LABEL: v8i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000087; AVX2: # %bb.0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000088; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +000089; AVX2-NEXT: vmovmskps %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000090; AVX2-NEXT: # kill: def $al killed $al killed $eax
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000091; AVX2-NEXT: vzeroupper
92; AVX2-NEXT: retq
93;
Simon Pilgrimc1927f12017-10-31 18:41:48 +000094; AVX512F-LABEL: v8i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000095; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +000096; AVX512F-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
97; AVX512F-NEXT: kmovw %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +000098; AVX512F-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +000099; AVX512F-NEXT: vzeroupper
100; AVX512F-NEXT: retq
101;
102; AVX512BW-LABEL: v8i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000103; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000104; AVX512BW-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
105; AVX512BW-NEXT: kmovd %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000106; AVX512BW-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000107; AVX512BW-NEXT: vzeroupper
108; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000109 %x = icmp sgt <8 x i32> %a, %b
110 %res = bitcast <8 x i1> %x to i8
111 ret i8 %res
112}
113
114define i8 @v8f32(<8 x float> %a, <8 x float> %b) {
Simon Pilgrim321e54f2017-10-23 22:05:02 +0000115; SSE2-SSSE3-LABEL: v8f32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000116; SSE2-SSSE3: # %bb.0:
Simon Pilgrim321e54f2017-10-23 22:05:02 +0000117; SSE2-SSSE3-NEXT: cmpltps %xmm1, %xmm3
118; SSE2-SSSE3-NEXT: cmpltps %xmm0, %xmm2
Simon Pilgrim0a12c232017-10-24 15:38:16 +0000119; SSE2-SSSE3-NEXT: packssdw %xmm3, %xmm2
Simon Pilgrim321e54f2017-10-23 22:05:02 +0000120; SSE2-SSSE3-NEXT: packsswb %xmm0, %xmm2
121; SSE2-SSSE3-NEXT: pmovmskb %xmm2, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000122; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim321e54f2017-10-23 22:05:02 +0000123; SSE2-SSSE3-NEXT: retq
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000124;
Simon Pilgrim4aa28b92017-09-18 17:58:31 +0000125; AVX12-LABEL: v8f32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000126; AVX12: # %bb.0:
Simon Pilgrim4aa28b92017-09-18 17:58:31 +0000127; AVX12-NEXT: vcmpltps %ymm0, %ymm1, %ymm0
128; AVX12-NEXT: vmovmskps %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000129; AVX12-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim4aa28b92017-09-18 17:58:31 +0000130; AVX12-NEXT: vzeroupper
131; AVX12-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000132;
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000133; AVX512F-LABEL: v8f32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000134; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000135; AVX512F-NEXT: vcmpltps %ymm0, %ymm1, %k0
136; AVX512F-NEXT: kmovw %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000137; AVX512F-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000138; AVX512F-NEXT: vzeroupper
139; AVX512F-NEXT: retq
140;
141; AVX512BW-LABEL: v8f32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000142; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000143; AVX512BW-NEXT: vcmpltps %ymm0, %ymm1, %k0
144; AVX512BW-NEXT: kmovd %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000145; AVX512BW-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000146; AVX512BW-NEXT: vzeroupper
147; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000148 %x = fcmp ogt <8 x float> %a, %b
149 %res = bitcast <8 x i1> %x to i8
150 ret i8 %res
151}
152
153define i32 @v32i8(<32 x i8> %a, <32 x i8> %b) {
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000154; SSE2-SSSE3-LABEL: v32i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000155; SSE2-SSSE3: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000156; SSE2-SSSE3-NEXT: pcmpgtb %xmm2, %xmm0
Simon Pilgrim32c377a2017-07-21 09:58:50 +0000157; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %ecx
158; SSE2-SSSE3-NEXT: pcmpgtb %xmm3, %xmm1
159; SSE2-SSSE3-NEXT: pmovmskb %xmm1, %eax
160; SSE2-SSSE3-NEXT: shll $16, %eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000161; SSE2-SSSE3-NEXT: orl %ecx, %eax
162; SSE2-SSSE3-NEXT: retq
163;
164; AVX1-LABEL: v32i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000165; AVX1: # %bb.0:
Simon Pilgrim32c377a2017-07-21 09:58:50 +0000166; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm2
167; AVX1-NEXT: vpmovmskb %xmm2, %ecx
168; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
169; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000170; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
Simon Pilgrim32c377a2017-07-21 09:58:50 +0000171; AVX1-NEXT: vpmovmskb %xmm0, %eax
172; AVX1-NEXT: shll $16, %eax
173; AVX1-NEXT: orl %ecx, %eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000174; AVX1-NEXT: vzeroupper
175; AVX1-NEXT: retq
176;
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000177; AVX2-LABEL: v32i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000178; AVX2: # %bb.0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000179; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +0000180; AVX2-NEXT: vpmovmskb %ymm0, %eax
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000181; AVX2-NEXT: vzeroupper
182; AVX2-NEXT: retq
183;
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000184; AVX512F-LABEL: v32i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000185; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000186; AVX512F-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0
Craig Topper76adcc82018-01-23 14:25:39 +0000187; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000188; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0
Craig Topper76adcc82018-01-23 14:25:39 +0000189; AVX512F-NEXT: kmovw %k0, %ecx
190; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000191; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000192; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
Craig Topper76adcc82018-01-23 14:25:39 +0000193; AVX512F-NEXT: kmovw %k0, %eax
194; AVX512F-NEXT: shll $16, %eax
195; AVX512F-NEXT: orl %ecx, %eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000196; AVX512F-NEXT: vzeroupper
197; AVX512F-NEXT: retq
198;
199; AVX512BW-LABEL: v32i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000200; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000201; AVX512BW-NEXT: vpcmpgtb %ymm1, %ymm0, %k0
202; AVX512BW-NEXT: kmovd %k0, %eax
203; AVX512BW-NEXT: vzeroupper
204; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000205 %x = icmp sgt <32 x i8> %a, %b
206 %res = bitcast <32 x i1> %x to i32
207 ret i32 %res
208}
209
210define i4 @v4i64(<4 x i64> %a, <4 x i64> %b) {
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000211; SSE2-SSSE3-LABEL: v4i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000212; SSE2-SSSE3: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000213; SSE2-SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
214; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm3
215; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm1
216; SSE2-SSSE3-NEXT: movdqa %xmm1, %xmm5
217; SSE2-SSSE3-NEXT: pcmpgtd %xmm3, %xmm5
218; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
219; SSE2-SSSE3-NEXT: pcmpeqd %xmm3, %xmm1
220; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
221; SSE2-SSSE3-NEXT: pand %xmm6, %xmm1
222; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]
223; SSE2-SSSE3-NEXT: por %xmm1, %xmm3
224; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm2
225; SSE2-SSSE3-NEXT: pxor %xmm4, %xmm0
226; SSE2-SSSE3-NEXT: movdqa %xmm0, %xmm1
227; SSE2-SSSE3-NEXT: pcmpgtd %xmm2, %xmm1
228; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
229; SSE2-SSSE3-NEXT: pcmpeqd %xmm2, %xmm0
230; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
231; SSE2-SSSE3-NEXT: pand %xmm4, %xmm0
232; SSE2-SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
233; SSE2-SSSE3-NEXT: por %xmm0, %xmm1
Simon Pilgrim0a12c232017-10-24 15:38:16 +0000234; SSE2-SSSE3-NEXT: packssdw %xmm3, %xmm1
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000235; SSE2-SSSE3-NEXT: movmskps %xmm1, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000236; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000237; SSE2-SSSE3-NEXT: retq
238;
239; AVX1-LABEL: v4i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000240; AVX1: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000241; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
242; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
243; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
244; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
Simon Pilgrim3b0d9e72017-09-27 10:10:17 +0000245; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
246; AVX1-NEXT: vmovmskpd %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000247; AVX1-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000248; AVX1-NEXT: vzeroupper
249; AVX1-NEXT: retq
250;
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000251; AVX2-LABEL: v4i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000252; AVX2: # %bb.0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000253; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +0000254; AVX2-NEXT: vmovmskpd %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000255; AVX2-NEXT: # kill: def $al killed $al killed $eax
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000256; AVX2-NEXT: vzeroupper
257; AVX2-NEXT: retq
258;
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000259; AVX512F-LABEL: v4i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000260; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000261; AVX512F-NEXT: vpcmpgtq %ymm1, %ymm0, %k0
262; AVX512F-NEXT: kmovw %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000263; AVX512F-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000264; AVX512F-NEXT: vzeroupper
265; AVX512F-NEXT: retq
266;
267; AVX512BW-LABEL: v4i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000268; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000269; AVX512BW-NEXT: vpcmpgtq %ymm1, %ymm0, %k0
270; AVX512BW-NEXT: kmovd %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000271; AVX512BW-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000272; AVX512BW-NEXT: vzeroupper
273; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000274 %x = icmp sgt <4 x i64> %a, %b
275 %res = bitcast <4 x i1> %x to i4
276 ret i4 %res
277}
278
279define i4 @v4f64(<4 x double> %a, <4 x double> %b) {
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000280; SSE2-SSSE3-LABEL: v4f64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000281; SSE2-SSSE3: # %bb.0:
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000282; SSE2-SSSE3-NEXT: cmpltpd %xmm1, %xmm3
283; SSE2-SSSE3-NEXT: cmpltpd %xmm0, %xmm2
Simon Pilgrim0a12c232017-10-24 15:38:16 +0000284; SSE2-SSSE3-NEXT: packssdw %xmm3, %xmm2
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000285; SSE2-SSSE3-NEXT: movmskps %xmm2, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000286; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim0fee3372017-07-06 18:27:34 +0000287; SSE2-SSSE3-NEXT: retq
288;
Simon Pilgrim3b0d9e72017-09-27 10:10:17 +0000289; AVX12-LABEL: v4f64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000290; AVX12: # %bb.0:
Simon Pilgrim3b0d9e72017-09-27 10:10:17 +0000291; AVX12-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0
292; AVX12-NEXT: vmovmskpd %ymm0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000293; AVX12-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrim3b0d9e72017-09-27 10:10:17 +0000294; AVX12-NEXT: vzeroupper
295; AVX12-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000296;
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000297; AVX512F-LABEL: v4f64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000298; AVX512F: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000299; AVX512F-NEXT: vcmpltpd %ymm0, %ymm1, %k0
300; AVX512F-NEXT: kmovw %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000301; AVX512F-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000302; AVX512F-NEXT: vzeroupper
303; AVX512F-NEXT: retq
304;
305; AVX512BW-LABEL: v4f64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000306; AVX512BW: # %bb.0:
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000307; AVX512BW-NEXT: vcmpltpd %ymm0, %ymm1, %k0
308; AVX512BW-NEXT: kmovd %k0, %eax
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000309; AVX512BW-NEXT: # kill: def $al killed $al killed $eax
Simon Pilgrimc1927f12017-10-31 18:41:48 +0000310; AVX512BW-NEXT: vzeroupper
311; AVX512BW-NEXT: retq
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000312 %x = fcmp ogt <4 x double> %a, %b
313 %res = bitcast <4 x i1> %x to i4
314 ret i4 %res
315}