xref: /llvm-project/llvm/test/CodeGen/X86/vec-strict-cmp-512-fp16.ll (revision f1de9d6dae174feb5000ad6a1b492b8cb717f5b6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512fp16 -O3 | FileCheck %s --check-prefixes=X86
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16 -O3 | FileCheck %s --check-prefixes=X64
4
5define <32 x i16> @test_v32f16_oeq_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
6; X86-LABEL: test_v32f16_oeq_q:
7; X86:       # %bb.0:
8; X86-NEXT:    pushl %ebp
9; X86-NEXT:    movl %esp, %ebp
10; X86-NEXT:    andl $-64, %esp
11; X86-NEXT:    subl $64, %esp
12; X86-NEXT:    vcmpeqph 8(%ebp), %zmm2, %k1
13; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
14; X86-NEXT:    movl %ebp, %esp
15; X86-NEXT:    popl %ebp
16; X86-NEXT:    retl
17;
18; X64-LABEL: test_v32f16_oeq_q:
19; X64:       # %bb.0:
20; X64-NEXT:    vcmpeqph %zmm3, %zmm2, %k1
21; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
22; X64-NEXT:    retq
23  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
24                                               <32 x half> %f1, <32 x half> %f2, metadata !"oeq",
25                                               metadata !"fpexcept.strict") #0
26  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
27  ret <32 x i16> %res
28}
29
30define <32 x i16> @test_v32f16_ogt_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
31; X86-LABEL: test_v32f16_ogt_q:
32; X86:       # %bb.0:
33; X86-NEXT:    pushl %ebp
34; X86-NEXT:    movl %esp, %ebp
35; X86-NEXT:    andl $-64, %esp
36; X86-NEXT:    subl $64, %esp
37; X86-NEXT:    vcmpgt_oqph 8(%ebp), %zmm2, %k1
38; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
39; X86-NEXT:    movl %ebp, %esp
40; X86-NEXT:    popl %ebp
41; X86-NEXT:    retl
42;
43; X64-LABEL: test_v32f16_ogt_q:
44; X64:       # %bb.0:
45; X64-NEXT:    vcmplt_oqph %zmm2, %zmm3, %k1
46; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
47; X64-NEXT:    retq
48  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
49                                               <32 x half> %f1, <32 x half> %f2, metadata !"ogt",
50                                               metadata !"fpexcept.strict") #0
51  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
52  ret <32 x i16> %res
53}
54
55define <32 x i16> @test_v32f16_oge_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
56; X86-LABEL: test_v32f16_oge_q:
57; X86:       # %bb.0:
58; X86-NEXT:    pushl %ebp
59; X86-NEXT:    movl %esp, %ebp
60; X86-NEXT:    andl $-64, %esp
61; X86-NEXT:    subl $64, %esp
62; X86-NEXT:    vcmpge_oqph 8(%ebp), %zmm2, %k1
63; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
64; X86-NEXT:    movl %ebp, %esp
65; X86-NEXT:    popl %ebp
66; X86-NEXT:    retl
67;
68; X64-LABEL: test_v32f16_oge_q:
69; X64:       # %bb.0:
70; X64-NEXT:    vcmple_oqph %zmm2, %zmm3, %k1
71; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
72; X64-NEXT:    retq
73  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
74                                               <32 x half> %f1, <32 x half> %f2, metadata !"oge",
75                                               metadata !"fpexcept.strict") #0
76  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
77  ret <32 x i16> %res
78}
79
80define <32 x i16> @test_v32f16_olt_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
81; X86-LABEL: test_v32f16_olt_q:
82; X86:       # %bb.0:
83; X86-NEXT:    pushl %ebp
84; X86-NEXT:    movl %esp, %ebp
85; X86-NEXT:    andl $-64, %esp
86; X86-NEXT:    subl $64, %esp
87; X86-NEXT:    vcmplt_oqph 8(%ebp), %zmm2, %k1
88; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
89; X86-NEXT:    movl %ebp, %esp
90; X86-NEXT:    popl %ebp
91; X86-NEXT:    retl
92;
93; X64-LABEL: test_v32f16_olt_q:
94; X64:       # %bb.0:
95; X64-NEXT:    vcmplt_oqph %zmm3, %zmm2, %k1
96; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
97; X64-NEXT:    retq
98  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
99                                               <32 x half> %f1, <32 x half> %f2, metadata !"olt",
100                                               metadata !"fpexcept.strict") #0
101  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
102  ret <32 x i16> %res
103}
104
105define <32 x i16> @test_v32f16_ole_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
106; X86-LABEL: test_v32f16_ole_q:
107; X86:       # %bb.0:
108; X86-NEXT:    pushl %ebp
109; X86-NEXT:    movl %esp, %ebp
110; X86-NEXT:    andl $-64, %esp
111; X86-NEXT:    subl $64, %esp
112; X86-NEXT:    vcmple_oqph 8(%ebp), %zmm2, %k1
113; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
114; X86-NEXT:    movl %ebp, %esp
115; X86-NEXT:    popl %ebp
116; X86-NEXT:    retl
117;
118; X64-LABEL: test_v32f16_ole_q:
119; X64:       # %bb.0:
120; X64-NEXT:    vcmple_oqph %zmm3, %zmm2, %k1
121; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
122; X64-NEXT:    retq
123  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
124                                               <32 x half> %f1, <32 x half> %f2, metadata !"ole",
125                                               metadata !"fpexcept.strict") #0
126  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
127  ret <32 x i16> %res
128}
129
130define <32 x i16> @test_v32f16_one_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
131; X86-LABEL: test_v32f16_one_q:
132; X86:       # %bb.0:
133; X86-NEXT:    pushl %ebp
134; X86-NEXT:    movl %esp, %ebp
135; X86-NEXT:    andl $-64, %esp
136; X86-NEXT:    subl $64, %esp
137; X86-NEXT:    vcmpneq_oqph 8(%ebp), %zmm2, %k1
138; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
139; X86-NEXT:    movl %ebp, %esp
140; X86-NEXT:    popl %ebp
141; X86-NEXT:    retl
142;
143; X64-LABEL: test_v32f16_one_q:
144; X64:       # %bb.0:
145; X64-NEXT:    vcmpneq_oqph %zmm3, %zmm2, %k1
146; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
147; X64-NEXT:    retq
148  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
149                                               <32 x half> %f1, <32 x half> %f2, metadata !"one",
150                                               metadata !"fpexcept.strict") #0
151  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
152  ret <32 x i16> %res
153}
154
155define <32 x i16> @test_v32f16_ord_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
156; X86-LABEL: test_v32f16_ord_q:
157; X86:       # %bb.0:
158; X86-NEXT:    pushl %ebp
159; X86-NEXT:    movl %esp, %ebp
160; X86-NEXT:    andl $-64, %esp
161; X86-NEXT:    subl $64, %esp
162; X86-NEXT:    vcmpordph 8(%ebp), %zmm2, %k1
163; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
164; X86-NEXT:    movl %ebp, %esp
165; X86-NEXT:    popl %ebp
166; X86-NEXT:    retl
167;
168; X64-LABEL: test_v32f16_ord_q:
169; X64:       # %bb.0:
170; X64-NEXT:    vcmpordph %zmm3, %zmm2, %k1
171; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
172; X64-NEXT:    retq
173  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
174                                               <32 x half> %f1, <32 x half> %f2, metadata !"ord",
175                                               metadata !"fpexcept.strict") #0
176  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
177  ret <32 x i16> %res
178}
179
180define <32 x i16> @test_v32f16_ueq_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
181; X86-LABEL: test_v32f16_ueq_q:
182; X86:       # %bb.0:
183; X86-NEXT:    pushl %ebp
184; X86-NEXT:    movl %esp, %ebp
185; X86-NEXT:    andl $-64, %esp
186; X86-NEXT:    subl $64, %esp
187; X86-NEXT:    vcmpeq_uqph 8(%ebp), %zmm2, %k1
188; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
189; X86-NEXT:    movl %ebp, %esp
190; X86-NEXT:    popl %ebp
191; X86-NEXT:    retl
192;
193; X64-LABEL: test_v32f16_ueq_q:
194; X64:       # %bb.0:
195; X64-NEXT:    vcmpeq_uqph %zmm3, %zmm2, %k1
196; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
197; X64-NEXT:    retq
198  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
199                                               <32 x half> %f1, <32 x half> %f2, metadata !"ueq",
200                                               metadata !"fpexcept.strict") #0
201  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
202  ret <32 x i16> %res
203}
204
205define <32 x i16> @test_v32f16_ugt_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
206; X86-LABEL: test_v32f16_ugt_q:
207; X86:       # %bb.0:
208; X86-NEXT:    pushl %ebp
209; X86-NEXT:    movl %esp, %ebp
210; X86-NEXT:    andl $-64, %esp
211; X86-NEXT:    subl $64, %esp
212; X86-NEXT:    vcmpnle_uqph 8(%ebp), %zmm2, %k1
213; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
214; X86-NEXT:    movl %ebp, %esp
215; X86-NEXT:    popl %ebp
216; X86-NEXT:    retl
217;
218; X64-LABEL: test_v32f16_ugt_q:
219; X64:       # %bb.0:
220; X64-NEXT:    vcmpnle_uqph %zmm3, %zmm2, %k1
221; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
222; X64-NEXT:    retq
223  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
224                                               <32 x half> %f1, <32 x half> %f2, metadata !"ugt",
225                                               metadata !"fpexcept.strict") #0
226  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
227  ret <32 x i16> %res
228}
229
230define <32 x i16> @test_v32f16_uge_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
231; X86-LABEL: test_v32f16_uge_q:
232; X86:       # %bb.0:
233; X86-NEXT:    pushl %ebp
234; X86-NEXT:    movl %esp, %ebp
235; X86-NEXT:    andl $-64, %esp
236; X86-NEXT:    subl $64, %esp
237; X86-NEXT:    vcmpnlt_uqph 8(%ebp), %zmm2, %k1
238; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
239; X86-NEXT:    movl %ebp, %esp
240; X86-NEXT:    popl %ebp
241; X86-NEXT:    retl
242;
243; X64-LABEL: test_v32f16_uge_q:
244; X64:       # %bb.0:
245; X64-NEXT:    vcmpnlt_uqph %zmm3, %zmm2, %k1
246; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
247; X64-NEXT:    retq
248  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
249                                               <32 x half> %f1, <32 x half> %f2, metadata !"uge",
250                                               metadata !"fpexcept.strict") #0
251  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
252  ret <32 x i16> %res
253}
254
255define <32 x i16> @test_v32f16_ult_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
256; X86-LABEL: test_v32f16_ult_q:
257; X86:       # %bb.0:
258; X86-NEXT:    pushl %ebp
259; X86-NEXT:    movl %esp, %ebp
260; X86-NEXT:    andl $-64, %esp
261; X86-NEXT:    subl $64, %esp
262; X86-NEXT:    vcmpnge_uqph 8(%ebp), %zmm2, %k1
263; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
264; X86-NEXT:    movl %ebp, %esp
265; X86-NEXT:    popl %ebp
266; X86-NEXT:    retl
267;
268; X64-LABEL: test_v32f16_ult_q:
269; X64:       # %bb.0:
270; X64-NEXT:    vcmpnle_uqph %zmm2, %zmm3, %k1
271; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
272; X64-NEXT:    retq
273  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
274                                               <32 x half> %f1, <32 x half> %f2, metadata !"ult",
275                                               metadata !"fpexcept.strict") #0
276  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
277  ret <32 x i16> %res
278}
279
280define <32 x i16> @test_v32f16_ule_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
281; X86-LABEL: test_v32f16_ule_q:
282; X86:       # %bb.0:
283; X86-NEXT:    pushl %ebp
284; X86-NEXT:    movl %esp, %ebp
285; X86-NEXT:    andl $-64, %esp
286; X86-NEXT:    subl $64, %esp
287; X86-NEXT:    vcmpngt_uqph 8(%ebp), %zmm2, %k1
288; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
289; X86-NEXT:    movl %ebp, %esp
290; X86-NEXT:    popl %ebp
291; X86-NEXT:    retl
292;
293; X64-LABEL: test_v32f16_ule_q:
294; X64:       # %bb.0:
295; X64-NEXT:    vcmpnlt_uqph %zmm2, %zmm3, %k1
296; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
297; X64-NEXT:    retq
298  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
299                                               <32 x half> %f1, <32 x half> %f2, metadata !"ule",
300                                               metadata !"fpexcept.strict") #0
301  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
302  ret <32 x i16> %res
303}
304
305define <32 x i16> @test_v32f16_une_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
306; X86-LABEL: test_v32f16_une_q:
307; X86:       # %bb.0:
308; X86-NEXT:    pushl %ebp
309; X86-NEXT:    movl %esp, %ebp
310; X86-NEXT:    andl $-64, %esp
311; X86-NEXT:    subl $64, %esp
312; X86-NEXT:    vcmpneqph 8(%ebp), %zmm2, %k1
313; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
314; X86-NEXT:    movl %ebp, %esp
315; X86-NEXT:    popl %ebp
316; X86-NEXT:    retl
317;
318; X64-LABEL: test_v32f16_une_q:
319; X64:       # %bb.0:
320; X64-NEXT:    vcmpneqph %zmm3, %zmm2, %k1
321; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
322; X64-NEXT:    retq
323  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
324                                               <32 x half> %f1, <32 x half> %f2, metadata !"une",
325                                               metadata !"fpexcept.strict") #0
326  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
327  ret <32 x i16> %res
328}
329
330define <32 x i16> @test_v32f16_uno_q(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
331; X86-LABEL: test_v32f16_uno_q:
332; X86:       # %bb.0:
333; X86-NEXT:    pushl %ebp
334; X86-NEXT:    movl %esp, %ebp
335; X86-NEXT:    andl $-64, %esp
336; X86-NEXT:    subl $64, %esp
337; X86-NEXT:    vcmpunordph 8(%ebp), %zmm2, %k1
338; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
339; X86-NEXT:    movl %ebp, %esp
340; X86-NEXT:    popl %ebp
341; X86-NEXT:    retl
342;
343; X64-LABEL: test_v32f16_uno_q:
344; X64:       # %bb.0:
345; X64-NEXT:    vcmpunordph %zmm3, %zmm2, %k1
346; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
347; X64-NEXT:    retq
348  %cond = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(
349                                               <32 x half> %f1, <32 x half> %f2, metadata !"uno",
350                                               metadata !"fpexcept.strict") #0
351  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
352  ret <32 x i16> %res
353}
354
355define <32 x i16> @test_v32f16_oeq_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
356; X86-LABEL: test_v32f16_oeq_s:
357; X86:       # %bb.0:
358; X86-NEXT:    pushl %ebp
359; X86-NEXT:    movl %esp, %ebp
360; X86-NEXT:    andl $-64, %esp
361; X86-NEXT:    subl $64, %esp
362; X86-NEXT:    vcmpeq_osph 8(%ebp), %zmm2, %k1
363; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
364; X86-NEXT:    movl %ebp, %esp
365; X86-NEXT:    popl %ebp
366; X86-NEXT:    retl
367;
368; X64-LABEL: test_v32f16_oeq_s:
369; X64:       # %bb.0:
370; X64-NEXT:    vcmpeq_osph %zmm3, %zmm2, %k1
371; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
372; X64-NEXT:    retq
373  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
374                                               <32 x half> %f1, <32 x half> %f2, metadata !"oeq",
375                                               metadata !"fpexcept.strict") #0
376  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
377  ret <32 x i16> %res
378}
379
380define <32 x i16> @test_v32f16_ogt_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
381; X86-LABEL: test_v32f16_ogt_s:
382; X86:       # %bb.0:
383; X86-NEXT:    pushl %ebp
384; X86-NEXT:    movl %esp, %ebp
385; X86-NEXT:    andl $-64, %esp
386; X86-NEXT:    subl $64, %esp
387; X86-NEXT:    vcmpgtph 8(%ebp), %zmm2, %k1
388; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
389; X86-NEXT:    movl %ebp, %esp
390; X86-NEXT:    popl %ebp
391; X86-NEXT:    retl
392;
393; X64-LABEL: test_v32f16_ogt_s:
394; X64:       # %bb.0:
395; X64-NEXT:    vcmpltph %zmm2, %zmm3, %k1
396; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
397; X64-NEXT:    retq
398  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
399                                               <32 x half> %f1, <32 x half> %f2, metadata !"ogt",
400                                               metadata !"fpexcept.strict") #0
401  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
402  ret <32 x i16> %res
403}
404
405define <32 x i16> @test_v32f16_oge_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
406; X86-LABEL: test_v32f16_oge_s:
407; X86:       # %bb.0:
408; X86-NEXT:    pushl %ebp
409; X86-NEXT:    movl %esp, %ebp
410; X86-NEXT:    andl $-64, %esp
411; X86-NEXT:    subl $64, %esp
412; X86-NEXT:    vcmpgeph 8(%ebp), %zmm2, %k1
413; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
414; X86-NEXT:    movl %ebp, %esp
415; X86-NEXT:    popl %ebp
416; X86-NEXT:    retl
417;
418; X64-LABEL: test_v32f16_oge_s:
419; X64:       # %bb.0:
420; X64-NEXT:    vcmpleph %zmm2, %zmm3, %k1
421; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
422; X64-NEXT:    retq
423  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
424                                               <32 x half> %f1, <32 x half> %f2, metadata !"oge",
425                                               metadata !"fpexcept.strict") #0
426  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
427  ret <32 x i16> %res
428}
429
430define <32 x i16> @test_v32f16_olt_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
431; X86-LABEL: test_v32f16_olt_s:
432; X86:       # %bb.0:
433; X86-NEXT:    pushl %ebp
434; X86-NEXT:    movl %esp, %ebp
435; X86-NEXT:    andl $-64, %esp
436; X86-NEXT:    subl $64, %esp
437; X86-NEXT:    vcmpltph 8(%ebp), %zmm2, %k1
438; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
439; X86-NEXT:    movl %ebp, %esp
440; X86-NEXT:    popl %ebp
441; X86-NEXT:    retl
442;
443; X64-LABEL: test_v32f16_olt_s:
444; X64:       # %bb.0:
445; X64-NEXT:    vcmpltph %zmm3, %zmm2, %k1
446; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
447; X64-NEXT:    retq
448  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
449                                               <32 x half> %f1, <32 x half> %f2, metadata !"olt",
450                                               metadata !"fpexcept.strict") #0
451  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
452  ret <32 x i16> %res
453}
454
455define <32 x i16> @test_v32f16_ole_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
456; X86-LABEL: test_v32f16_ole_s:
457; X86:       # %bb.0:
458; X86-NEXT:    pushl %ebp
459; X86-NEXT:    movl %esp, %ebp
460; X86-NEXT:    andl $-64, %esp
461; X86-NEXT:    subl $64, %esp
462; X86-NEXT:    vcmpleph 8(%ebp), %zmm2, %k1
463; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
464; X86-NEXT:    movl %ebp, %esp
465; X86-NEXT:    popl %ebp
466; X86-NEXT:    retl
467;
468; X64-LABEL: test_v32f16_ole_s:
469; X64:       # %bb.0:
470; X64-NEXT:    vcmpleph %zmm3, %zmm2, %k1
471; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
472; X64-NEXT:    retq
473  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
474                                               <32 x half> %f1, <32 x half> %f2, metadata !"ole",
475                                               metadata !"fpexcept.strict") #0
476  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
477  ret <32 x i16> %res
478}
479
480define <32 x i16> @test_v32f16_one_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
481; X86-LABEL: test_v32f16_one_s:
482; X86:       # %bb.0:
483; X86-NEXT:    pushl %ebp
484; X86-NEXT:    movl %esp, %ebp
485; X86-NEXT:    andl $-64, %esp
486; X86-NEXT:    subl $64, %esp
487; X86-NEXT:    vcmpneq_osph 8(%ebp), %zmm2, %k1
488; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
489; X86-NEXT:    movl %ebp, %esp
490; X86-NEXT:    popl %ebp
491; X86-NEXT:    retl
492;
493; X64-LABEL: test_v32f16_one_s:
494; X64:       # %bb.0:
495; X64-NEXT:    vcmpneq_osph %zmm3, %zmm2, %k1
496; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
497; X64-NEXT:    retq
498  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
499                                               <32 x half> %f1, <32 x half> %f2, metadata !"one",
500                                               metadata !"fpexcept.strict") #0
501  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
502  ret <32 x i16> %res
503}
504
505define <32 x i16> @test_v32f16_ord_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
506; X86-LABEL: test_v32f16_ord_s:
507; X86:       # %bb.0:
508; X86-NEXT:    pushl %ebp
509; X86-NEXT:    movl %esp, %ebp
510; X86-NEXT:    andl $-64, %esp
511; X86-NEXT:    subl $64, %esp
512; X86-NEXT:    vcmpord_sph 8(%ebp), %zmm2, %k1
513; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
514; X86-NEXT:    movl %ebp, %esp
515; X86-NEXT:    popl %ebp
516; X86-NEXT:    retl
517;
518; X64-LABEL: test_v32f16_ord_s:
519; X64:       # %bb.0:
520; X64-NEXT:    vcmpord_sph %zmm3, %zmm2, %k1
521; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
522; X64-NEXT:    retq
523  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
524                                               <32 x half> %f1, <32 x half> %f2, metadata !"ord",
525                                               metadata !"fpexcept.strict") #0
526  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
527  ret <32 x i16> %res
528}
529
530define <32 x i16> @test_v32f16_ueq_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
531; X86-LABEL: test_v32f16_ueq_s:
532; X86:       # %bb.0:
533; X86-NEXT:    pushl %ebp
534; X86-NEXT:    movl %esp, %ebp
535; X86-NEXT:    andl $-64, %esp
536; X86-NEXT:    subl $64, %esp
537; X86-NEXT:    vcmpeq_usph 8(%ebp), %zmm2, %k1
538; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
539; X86-NEXT:    movl %ebp, %esp
540; X86-NEXT:    popl %ebp
541; X86-NEXT:    retl
542;
543; X64-LABEL: test_v32f16_ueq_s:
544; X64:       # %bb.0:
545; X64-NEXT:    vcmpeq_usph %zmm3, %zmm2, %k1
546; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
547; X64-NEXT:    retq
548  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
549                                               <32 x half> %f1, <32 x half> %f2, metadata !"ueq",
550                                               metadata !"fpexcept.strict") #0
551  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
552  ret <32 x i16> %res
553}
554
555define <32 x i16> @test_v32f16_ugt_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
556; X86-LABEL: test_v32f16_ugt_s:
557; X86:       # %bb.0:
558; X86-NEXT:    pushl %ebp
559; X86-NEXT:    movl %esp, %ebp
560; X86-NEXT:    andl $-64, %esp
561; X86-NEXT:    subl $64, %esp
562; X86-NEXT:    vcmpnleph 8(%ebp), %zmm2, %k1
563; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
564; X86-NEXT:    movl %ebp, %esp
565; X86-NEXT:    popl %ebp
566; X86-NEXT:    retl
567;
568; X64-LABEL: test_v32f16_ugt_s:
569; X64:       # %bb.0:
570; X64-NEXT:    vcmpnleph %zmm3, %zmm2, %k1
571; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
572; X64-NEXT:    retq
573  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
574                                               <32 x half> %f1, <32 x half> %f2, metadata !"ugt",
575                                               metadata !"fpexcept.strict") #0
576  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
577  ret <32 x i16> %res
578}
579
580define <32 x i16> @test_v32f16_uge_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
581; X86-LABEL: test_v32f16_uge_s:
582; X86:       # %bb.0:
583; X86-NEXT:    pushl %ebp
584; X86-NEXT:    movl %esp, %ebp
585; X86-NEXT:    andl $-64, %esp
586; X86-NEXT:    subl $64, %esp
587; X86-NEXT:    vcmpnltph 8(%ebp), %zmm2, %k1
588; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
589; X86-NEXT:    movl %ebp, %esp
590; X86-NEXT:    popl %ebp
591; X86-NEXT:    retl
592;
593; X64-LABEL: test_v32f16_uge_s:
594; X64:       # %bb.0:
595; X64-NEXT:    vcmpnltph %zmm3, %zmm2, %k1
596; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
597; X64-NEXT:    retq
598  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
599                                               <32 x half> %f1, <32 x half> %f2, metadata !"uge",
600                                               metadata !"fpexcept.strict") #0
601  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
602  ret <32 x i16> %res
603}
604
605define <32 x i16> @test_v32f16_ult_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
606; X86-LABEL: test_v32f16_ult_s:
607; X86:       # %bb.0:
608; X86-NEXT:    pushl %ebp
609; X86-NEXT:    movl %esp, %ebp
610; X86-NEXT:    andl $-64, %esp
611; X86-NEXT:    subl $64, %esp
612; X86-NEXT:    vcmpngeph 8(%ebp), %zmm2, %k1
613; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
614; X86-NEXT:    movl %ebp, %esp
615; X86-NEXT:    popl %ebp
616; X86-NEXT:    retl
617;
618; X64-LABEL: test_v32f16_ult_s:
619; X64:       # %bb.0:
620; X64-NEXT:    vcmpnleph %zmm2, %zmm3, %k1
621; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
622; X64-NEXT:    retq
623  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
624                                               <32 x half> %f1, <32 x half> %f2, metadata !"ult",
625                                               metadata !"fpexcept.strict") #0
626  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
627  ret <32 x i16> %res
628}
629
630define <32 x i16> @test_v32f16_ule_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
631; X86-LABEL: test_v32f16_ule_s:
632; X86:       # %bb.0:
633; X86-NEXT:    pushl %ebp
634; X86-NEXT:    movl %esp, %ebp
635; X86-NEXT:    andl $-64, %esp
636; X86-NEXT:    subl $64, %esp
637; X86-NEXT:    vcmpngtph 8(%ebp), %zmm2, %k1
638; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
639; X86-NEXT:    movl %ebp, %esp
640; X86-NEXT:    popl %ebp
641; X86-NEXT:    retl
642;
643; X64-LABEL: test_v32f16_ule_s:
644; X64:       # %bb.0:
645; X64-NEXT:    vcmpnltph %zmm2, %zmm3, %k1
646; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
647; X64-NEXT:    retq
648  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
649                                               <32 x half> %f1, <32 x half> %f2, metadata !"ule",
650                                               metadata !"fpexcept.strict") #0
651  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
652  ret <32 x i16> %res
653}
654
655define <32 x i16> @test_v32f16_une_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
656; X86-LABEL: test_v32f16_une_s:
657; X86:       # %bb.0:
658; X86-NEXT:    pushl %ebp
659; X86-NEXT:    movl %esp, %ebp
660; X86-NEXT:    andl $-64, %esp
661; X86-NEXT:    subl $64, %esp
662; X86-NEXT:    vcmpneq_usph 8(%ebp), %zmm2, %k1
663; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
664; X86-NEXT:    movl %ebp, %esp
665; X86-NEXT:    popl %ebp
666; X86-NEXT:    retl
667;
668; X64-LABEL: test_v32f16_une_s:
669; X64:       # %bb.0:
670; X64-NEXT:    vcmpneq_usph %zmm3, %zmm2, %k1
671; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
672; X64-NEXT:    retq
673  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
674                                               <32 x half> %f1, <32 x half> %f2, metadata !"une",
675                                               metadata !"fpexcept.strict") #0
676  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
677  ret <32 x i16> %res
678}
679
680define <32 x i16> @test_v32f16_uno_s(<32 x i16> %a, <32 x i16> %b, <32 x half> %f1, <32 x half> %f2) #0 {
681; X86-LABEL: test_v32f16_uno_s:
682; X86:       # %bb.0:
683; X86-NEXT:    pushl %ebp
684; X86-NEXT:    movl %esp, %ebp
685; X86-NEXT:    andl $-64, %esp
686; X86-NEXT:    subl $64, %esp
687; X86-NEXT:    vcmpunord_sph 8(%ebp), %zmm2, %k1
688; X86-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
689; X86-NEXT:    movl %ebp, %esp
690; X86-NEXT:    popl %ebp
691; X86-NEXT:    retl
692;
693; X64-LABEL: test_v32f16_uno_s:
694; X64:       # %bb.0:
695; X64-NEXT:    vcmpunord_sph %zmm3, %zmm2, %k1
696; X64-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
697; X64-NEXT:    retq
698  %cond = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(
699                                               <32 x half> %f1, <32 x half> %f2, metadata !"uno",
700                                               metadata !"fpexcept.strict") #0
701  %res = select <32 x i1> %cond, <32 x i16> %a, <32 x i16> %b
702  ret <32 x i16> %res
703}
704
705attributes #0 = { strictfp nounwind }
706
707declare <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half>, <32 x half>, metadata, metadata)
708declare <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half>, <32 x half>, metadata, metadata)
709