• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
7
8define i32 @v32i16(<32 x i16> %a, <32 x i16> %b) {
9; SSE-LABEL: v32i16:
10; SSE:       # %bb.0:
11; SSE-NEXT:    pcmpgtw %xmm5, %xmm1
12; SSE-NEXT:    pcmpgtw %xmm4, %xmm0
13; SSE-NEXT:    packsswb %xmm1, %xmm0
14; SSE-NEXT:    pmovmskb %xmm0, %ecx
15; SSE-NEXT:    pcmpgtw %xmm7, %xmm3
16; SSE-NEXT:    pcmpgtw %xmm6, %xmm2
17; SSE-NEXT:    packsswb %xmm3, %xmm2
18; SSE-NEXT:    pmovmskb %xmm2, %eax
19; SSE-NEXT:    shll $16, %eax
20; SSE-NEXT:    orl %ecx, %eax
21; SSE-NEXT:    retq
22;
23; AVX1-LABEL: v32i16:
24; AVX1:       # %bb.0:
25; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
26; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
27; AVX1-NEXT:    vpcmpgtw %xmm4, %xmm5, %xmm4
28; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm0, %xmm0
29; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm0
30; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
31; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm0
32; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
33; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm0
34; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm1, %xmm1
35; AVX1-NEXT:    vpacksswb %xmm0, %xmm1, %xmm0
36; AVX1-NEXT:    vpmovmskb %xmm0, %eax
37; AVX1-NEXT:    shll $16, %eax
38; AVX1-NEXT:    orl %ecx, %eax
39; AVX1-NEXT:    vzeroupper
40; AVX1-NEXT:    retq
41;
42; AVX2-LABEL: v32i16:
43; AVX2:       # %bb.0:
44; AVX2-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm1
45; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
46; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
47; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
48; AVX2-NEXT:    vpmovmskb %ymm0, %eax
49; AVX2-NEXT:    vzeroupper
50; AVX2-NEXT:    retq
51;
52; AVX512F-LABEL: v32i16:
53; AVX512F:       # %bb.0:
54; AVX512F-NEXT:    vpcmpgtw %ymm2, %ymm0, %ymm0
55; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
56; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
57; AVX512F-NEXT:    kmovw %k0, %ecx
58; AVX512F-NEXT:    vpcmpgtw %ymm3, %ymm1, %ymm0
59; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
60; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
61; AVX512F-NEXT:    kmovw %k0, %eax
62; AVX512F-NEXT:    shll $16, %eax
63; AVX512F-NEXT:    orl %ecx, %eax
64; AVX512F-NEXT:    vzeroupper
65; AVX512F-NEXT:    retq
66;
67; AVX512BW-LABEL: v32i16:
68; AVX512BW:       # %bb.0:
69; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
70; AVX512BW-NEXT:    kmovd %k0, %eax
71; AVX512BW-NEXT:    vzeroupper
72; AVX512BW-NEXT:    retq
73  %x = icmp sgt <32 x i16> %a, %b
74  %res = bitcast <32 x i1> %x to i32
75  ret i32 %res
76}
77
78define i16 @v16i32(<16 x i32> %a, <16 x i32> %b) {
79; SSE-LABEL: v16i32:
80; SSE:       # %bb.0:
81; SSE-NEXT:    pcmpgtd %xmm7, %xmm3
82; SSE-NEXT:    pcmpgtd %xmm6, %xmm2
83; SSE-NEXT:    packssdw %xmm3, %xmm2
84; SSE-NEXT:    pcmpgtd %xmm5, %xmm1
85; SSE-NEXT:    pcmpgtd %xmm4, %xmm0
86; SSE-NEXT:    packssdw %xmm1, %xmm0
87; SSE-NEXT:    packsswb %xmm2, %xmm0
88; SSE-NEXT:    pmovmskb %xmm0, %eax
89; SSE-NEXT:    # kill: def $ax killed $ax killed $eax
90; SSE-NEXT:    retq
91;
92; AVX1-LABEL: v16i32:
93; AVX1:       # %bb.0:
94; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
95; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
96; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm4
97; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm1, %xmm1
98; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
99; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
100; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
101; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm4, %xmm3
102; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0
103; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
104; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
105; AVX1-NEXT:    vpmovmskb %xmm0, %eax
106; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
107; AVX1-NEXT:    vzeroupper
108; AVX1-NEXT:    retq
109;
110; AVX2-LABEL: v16i32:
111; AVX2:       # %bb.0:
112; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm1, %ymm1
113; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0
114; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
115; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
116; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
117; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
118; AVX2-NEXT:    vpmovmskb %xmm0, %eax
119; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
120; AVX2-NEXT:    vzeroupper
121; AVX2-NEXT:    retq
122;
123; AVX512F-LABEL: v16i32:
124; AVX512F:       # %bb.0:
125; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
126; AVX512F-NEXT:    kmovw %k0, %eax
127; AVX512F-NEXT:    # kill: def $ax killed $ax killed $eax
128; AVX512F-NEXT:    vzeroupper
129; AVX512F-NEXT:    retq
130;
131; AVX512BW-LABEL: v16i32:
132; AVX512BW:       # %bb.0:
133; AVX512BW-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
134; AVX512BW-NEXT:    kmovd %k0, %eax
135; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax
136; AVX512BW-NEXT:    vzeroupper
137; AVX512BW-NEXT:    retq
138  %x = icmp sgt <16 x i32> %a, %b
139  %res = bitcast <16 x i1> %x to i16
140  ret i16 %res
141}
142
143define i16 @v16f32(<16 x float> %a, <16 x float> %b) {
144; SSE-LABEL: v16f32:
145; SSE:       # %bb.0:
146; SSE-NEXT:    cmpltps %xmm3, %xmm7
147; SSE-NEXT:    cmpltps %xmm2, %xmm6
148; SSE-NEXT:    packssdw %xmm7, %xmm6
149; SSE-NEXT:    cmpltps %xmm1, %xmm5
150; SSE-NEXT:    cmpltps %xmm0, %xmm4
151; SSE-NEXT:    packssdw %xmm5, %xmm4
152; SSE-NEXT:    packsswb %xmm6, %xmm4
153; SSE-NEXT:    pmovmskb %xmm4, %eax
154; SSE-NEXT:    # kill: def $ax killed $ax killed $eax
155; SSE-NEXT:    retq
156;
157; AVX1-LABEL: v16f32:
158; AVX1:       # %bb.0:
159; AVX1-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
160; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
161; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
162; AVX1-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
163; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
164; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
165; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
166; AVX1-NEXT:    vpmovmskb %xmm0, %eax
167; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
168; AVX1-NEXT:    vzeroupper
169; AVX1-NEXT:    retq
170;
171; AVX2-LABEL: v16f32:
172; AVX2:       # %bb.0:
173; AVX2-NEXT:    vcmpltps %ymm1, %ymm3, %ymm1
174; AVX2-NEXT:    vcmpltps %ymm0, %ymm2, %ymm0
175; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
176; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
177; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
178; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
179; AVX2-NEXT:    vpmovmskb %xmm0, %eax
180; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
181; AVX2-NEXT:    vzeroupper
182; AVX2-NEXT:    retq
183;
184; AVX512F-LABEL: v16f32:
185; AVX512F:       # %bb.0:
186; AVX512F-NEXT:    vcmpltps %zmm0, %zmm1, %k0
187; AVX512F-NEXT:    kmovw %k0, %eax
188; AVX512F-NEXT:    # kill: def $ax killed $ax killed $eax
189; AVX512F-NEXT:    vzeroupper
190; AVX512F-NEXT:    retq
191;
192; AVX512BW-LABEL: v16f32:
193; AVX512BW:       # %bb.0:
194; AVX512BW-NEXT:    vcmpltps %zmm0, %zmm1, %k0
195; AVX512BW-NEXT:    kmovd %k0, %eax
196; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax
197; AVX512BW-NEXT:    vzeroupper
198; AVX512BW-NEXT:    retq
199  %x = fcmp ogt <16 x float> %a, %b
200  %res = bitcast <16 x i1> %x to i16
201  ret i16 %res
202}
203
204define i64 @v64i8(<64 x i8> %a, <64 x i8> %b) {
205; SSE-LABEL: v64i8:
206; SSE:       # %bb.0:
207; SSE-NEXT:    pcmpgtb %xmm4, %xmm0
208; SSE-NEXT:    pmovmskb %xmm0, %eax
209; SSE-NEXT:    pcmpgtb %xmm5, %xmm1
210; SSE-NEXT:    pmovmskb %xmm1, %ecx
211; SSE-NEXT:    shll $16, %ecx
212; SSE-NEXT:    orl %eax, %ecx
213; SSE-NEXT:    pcmpgtb %xmm6, %xmm2
214; SSE-NEXT:    pmovmskb %xmm2, %edx
215; SSE-NEXT:    pcmpgtb %xmm7, %xmm3
216; SSE-NEXT:    pmovmskb %xmm3, %eax
217; SSE-NEXT:    shll $16, %eax
218; SSE-NEXT:    orl %edx, %eax
219; SSE-NEXT:    shlq $32, %rax
220; SSE-NEXT:    orq %rcx, %rax
221; SSE-NEXT:    retq
222;
223; AVX1-LABEL: v64i8:
224; AVX1:       # %bb.0:
225; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm4
226; AVX1-NEXT:    vpmovmskb %xmm4, %eax
227; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
228; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
229; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm0, %xmm0
230; AVX1-NEXT:    vpmovmskb %xmm0, %ecx
231; AVX1-NEXT:    shll $16, %ecx
232; AVX1-NEXT:    orl %eax, %ecx
233; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm1, %xmm0
234; AVX1-NEXT:    vpmovmskb %xmm0, %edx
235; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm0
236; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
237; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
238; AVX1-NEXT:    vpmovmskb %xmm0, %eax
239; AVX1-NEXT:    shll $16, %eax
240; AVX1-NEXT:    orl %edx, %eax
241; AVX1-NEXT:    shlq $32, %rax
242; AVX1-NEXT:    orq %rcx, %rax
243; AVX1-NEXT:    vzeroupper
244; AVX1-NEXT:    retq
245;
246; AVX2-LABEL: v64i8:
247; AVX2:       # %bb.0:
248; AVX2-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
249; AVX2-NEXT:    vpmovmskb %ymm0, %ecx
250; AVX2-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm0
251; AVX2-NEXT:    vpmovmskb %ymm0, %eax
252; AVX2-NEXT:    shlq $32, %rax
253; AVX2-NEXT:    orq %rcx, %rax
254; AVX2-NEXT:    vzeroupper
255; AVX2-NEXT:    retq
256;
257; AVX512F-LABEL: v64i8:
258; AVX512F:       # %bb.0:
259; AVX512F-NEXT:    vpcmpgtb %ymm2, %ymm0, %ymm0
260; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm2
261; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
262; AVX512F-NEXT:    kmovw %k0, %eax
263; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
264; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
265; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
266; AVX512F-NEXT:    kmovw %k0, %ecx
267; AVX512F-NEXT:    shll $16, %ecx
268; AVX512F-NEXT:    orl %eax, %ecx
269; AVX512F-NEXT:    vpcmpgtb %ymm3, %ymm1, %ymm0
270; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm1
271; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
272; AVX512F-NEXT:    kmovw %k0, %edx
273; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
274; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
275; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
276; AVX512F-NEXT:    kmovw %k0, %eax
277; AVX512F-NEXT:    shll $16, %eax
278; AVX512F-NEXT:    orl %edx, %eax
279; AVX512F-NEXT:    shlq $32, %rax
280; AVX512F-NEXT:    orq %rcx, %rax
281; AVX512F-NEXT:    vzeroupper
282; AVX512F-NEXT:    retq
283;
284; AVX512BW-LABEL: v64i8:
285; AVX512BW:       # %bb.0:
286; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
287; AVX512BW-NEXT:    kmovq %k0, %rax
288; AVX512BW-NEXT:    vzeroupper
289; AVX512BW-NEXT:    retq
290  %x = icmp sgt <64 x i8> %a, %b
291  %res = bitcast <64 x i1> %x to i64
292  ret i64 %res
293}
294
295define i8 @v8i64(<8 x i64> %a, <8 x i64> %b) {
296; SSE-LABEL: v8i64:
297; SSE:       # %bb.0:
298; SSE-NEXT:    pcmpgtq %xmm7, %xmm3
299; SSE-NEXT:    pcmpgtq %xmm6, %xmm2
300; SSE-NEXT:    packssdw %xmm3, %xmm2
301; SSE-NEXT:    pcmpgtq %xmm5, %xmm1
302; SSE-NEXT:    pcmpgtq %xmm4, %xmm0
303; SSE-NEXT:    packssdw %xmm1, %xmm0
304; SSE-NEXT:    packssdw %xmm2, %xmm0
305; SSE-NEXT:    packsswb %xmm0, %xmm0
306; SSE-NEXT:    pmovmskb %xmm0, %eax
307; SSE-NEXT:    # kill: def $al killed $al killed $eax
308; SSE-NEXT:    retq
309;
310; AVX1-LABEL: v8i64:
311; AVX1:       # %bb.0:
312; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
313; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
314; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
315; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm1
316; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
317; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
318; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
319; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
320; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm0
321; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
322; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
323; AVX1-NEXT:    vmovmskps %ymm0, %eax
324; AVX1-NEXT:    # kill: def $al killed $al killed $eax
325; AVX1-NEXT:    vzeroupper
326; AVX1-NEXT:    retq
327;
328; AVX2-LABEL: v8i64:
329; AVX2:       # %bb.0:
330; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm1
331; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm0
332; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
333; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
334; AVX2-NEXT:    vmovmskps %ymm0, %eax
335; AVX2-NEXT:    # kill: def $al killed $al killed $eax
336; AVX2-NEXT:    vzeroupper
337; AVX2-NEXT:    retq
338;
339; AVX512F-LABEL: v8i64:
340; AVX512F:       # %bb.0:
341; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
342; AVX512F-NEXT:    kmovw %k0, %eax
343; AVX512F-NEXT:    # kill: def $al killed $al killed $eax
344; AVX512F-NEXT:    vzeroupper
345; AVX512F-NEXT:    retq
346;
347; AVX512BW-LABEL: v8i64:
348; AVX512BW:       # %bb.0:
349; AVX512BW-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
350; AVX512BW-NEXT:    kmovd %k0, %eax
351; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax
352; AVX512BW-NEXT:    vzeroupper
353; AVX512BW-NEXT:    retq
354  %x = icmp sgt <8 x i64> %a, %b
355  %res = bitcast <8 x i1> %x to i8
356  ret i8 %res
357}
358
359define i8 @v8f64(<8 x double> %a, <8 x double> %b) {
360; SSE-LABEL: v8f64:
361; SSE:       # %bb.0:
362; SSE-NEXT:    cmpltpd %xmm3, %xmm7
363; SSE-NEXT:    cmpltpd %xmm2, %xmm6
364; SSE-NEXT:    packssdw %xmm7, %xmm6
365; SSE-NEXT:    cmpltpd %xmm1, %xmm5
366; SSE-NEXT:    cmpltpd %xmm0, %xmm4
367; SSE-NEXT:    packssdw %xmm5, %xmm4
368; SSE-NEXT:    packssdw %xmm6, %xmm4
369; SSE-NEXT:    packsswb %xmm0, %xmm4
370; SSE-NEXT:    pmovmskb %xmm4, %eax
371; SSE-NEXT:    # kill: def $al killed $al killed $eax
372; SSE-NEXT:    retq
373;
374; AVX1-LABEL: v8f64:
375; AVX1:       # %bb.0:
376; AVX1-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
377; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
378; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
379; AVX1-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
380; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
381; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
382; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
383; AVX1-NEXT:    vmovmskps %ymm0, %eax
384; AVX1-NEXT:    # kill: def $al killed $al killed $eax
385; AVX1-NEXT:    vzeroupper
386; AVX1-NEXT:    retq
387;
388; AVX2-LABEL: v8f64:
389; AVX2:       # %bb.0:
390; AVX2-NEXT:    vcmpltpd %ymm1, %ymm3, %ymm1
391; AVX2-NEXT:    vcmpltpd %ymm0, %ymm2, %ymm0
392; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
393; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
394; AVX2-NEXT:    vmovmskps %ymm0, %eax
395; AVX2-NEXT:    # kill: def $al killed $al killed $eax
396; AVX2-NEXT:    vzeroupper
397; AVX2-NEXT:    retq
398;
399; AVX512F-LABEL: v8f64:
400; AVX512F:       # %bb.0:
401; AVX512F-NEXT:    vcmpltpd %zmm0, %zmm1, %k0
402; AVX512F-NEXT:    kmovw %k0, %eax
403; AVX512F-NEXT:    # kill: def $al killed $al killed $eax
404; AVX512F-NEXT:    vzeroupper
405; AVX512F-NEXT:    retq
406;
407; AVX512BW-LABEL: v8f64:
408; AVX512BW:       # %bb.0:
409; AVX512BW-NEXT:    vcmpltpd %zmm0, %zmm1, %k0
410; AVX512BW-NEXT:    kmovd %k0, %eax
411; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax
412; AVX512BW-NEXT:    vzeroupper
413; AVX512BW-NEXT:    retq
414  %x = fcmp ogt <8 x double> %a, %b
415  %res = bitcast <8 x i1> %x to i8
416  ret i8 %res
417}
418