xref: /llvm-project/llvm/test/CodeGen/X86/vec-strict-cmp-512.ll (revision 40f7ac1a8f61aedce6e521d454e0961604cf1642)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=X86
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=X64
4
5define <16 x i32> @test_v16f32_oeq_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
6; X86-LABEL: test_v16f32_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:    vcmpeqps 8(%ebp), %zmm2, %k1
13; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
14; X86-NEXT:    movl %ebp, %esp
15; X86-NEXT:    popl %ebp
16; X86-NEXT:    retl
17;
18; X64-LABEL: test_v16f32_oeq_q:
19; X64:       # %bb.0:
20; X64-NEXT:    vcmpeqps %zmm3, %zmm2, %k1
21; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
22; X64-NEXT:    retq
23  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
24                                               <16 x float> %f1, <16 x float> %f2, metadata !"oeq",
25                                               metadata !"fpexcept.strict") #0
26  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
27  ret <16 x i32> %res
28}
29
30define <16 x i32> @test_v16f32_ogt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
31; X86-LABEL: test_v16f32_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_oqps 8(%ebp), %zmm2, %k1
38; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
39; X86-NEXT:    movl %ebp, %esp
40; X86-NEXT:    popl %ebp
41; X86-NEXT:    retl
42;
43; X64-LABEL: test_v16f32_ogt_q:
44; X64:       # %bb.0:
45; X64-NEXT:    vcmplt_oqps %zmm2, %zmm3, %k1
46; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
47; X64-NEXT:    retq
48  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
49                                               <16 x float> %f1, <16 x float> %f2, metadata !"ogt",
50                                               metadata !"fpexcept.strict") #0
51  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
52  ret <16 x i32> %res
53}
54
55define <16 x i32> @test_v16f32_oge_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
56; X86-LABEL: test_v16f32_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_oqps 8(%ebp), %zmm2, %k1
63; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
64; X86-NEXT:    movl %ebp, %esp
65; X86-NEXT:    popl %ebp
66; X86-NEXT:    retl
67;
68; X64-LABEL: test_v16f32_oge_q:
69; X64:       # %bb.0:
70; X64-NEXT:    vcmple_oqps %zmm2, %zmm3, %k1
71; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
72; X64-NEXT:    retq
73  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
74                                               <16 x float> %f1, <16 x float> %f2, metadata !"oge",
75                                               metadata !"fpexcept.strict") #0
76  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
77  ret <16 x i32> %res
78}
79
80define <16 x i32> @test_v16f32_olt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
81; X86-LABEL: test_v16f32_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_oqps 8(%ebp), %zmm2, %k1
88; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
89; X86-NEXT:    movl %ebp, %esp
90; X86-NEXT:    popl %ebp
91; X86-NEXT:    retl
92;
93; X64-LABEL: test_v16f32_olt_q:
94; X64:       # %bb.0:
95; X64-NEXT:    vcmplt_oqps %zmm3, %zmm2, %k1
96; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
97; X64-NEXT:    retq
98  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
99                                               <16 x float> %f1, <16 x float> %f2, metadata !"olt",
100                                               metadata !"fpexcept.strict") #0
101  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
102  ret <16 x i32> %res
103}
104
105define <16 x i32> @test_v16f32_ole_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
106; X86-LABEL: test_v16f32_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_oqps 8(%ebp), %zmm2, %k1
113; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
114; X86-NEXT:    movl %ebp, %esp
115; X86-NEXT:    popl %ebp
116; X86-NEXT:    retl
117;
118; X64-LABEL: test_v16f32_ole_q:
119; X64:       # %bb.0:
120; X64-NEXT:    vcmple_oqps %zmm3, %zmm2, %k1
121; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
122; X64-NEXT:    retq
123  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
124                                               <16 x float> %f1, <16 x float> %f2, metadata !"ole",
125                                               metadata !"fpexcept.strict") #0
126  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
127  ret <16 x i32> %res
128}
129
130define <16 x i32> @test_v16f32_one_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
131; X86-LABEL: test_v16f32_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_oqps 8(%ebp), %zmm2, %k1
138; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
139; X86-NEXT:    movl %ebp, %esp
140; X86-NEXT:    popl %ebp
141; X86-NEXT:    retl
142;
143; X64-LABEL: test_v16f32_one_q:
144; X64:       # %bb.0:
145; X64-NEXT:    vcmpneq_oqps %zmm3, %zmm2, %k1
146; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
147; X64-NEXT:    retq
148  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
149                                               <16 x float> %f1, <16 x float> %f2, metadata !"one",
150                                               metadata !"fpexcept.strict") #0
151  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
152  ret <16 x i32> %res
153}
154
155define <16 x i32> @test_v16f32_ord_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
156; X86-LABEL: test_v16f32_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:    vcmpordps 8(%ebp), %zmm2, %k1
163; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
164; X86-NEXT:    movl %ebp, %esp
165; X86-NEXT:    popl %ebp
166; X86-NEXT:    retl
167;
168; X64-LABEL: test_v16f32_ord_q:
169; X64:       # %bb.0:
170; X64-NEXT:    vcmpordps %zmm3, %zmm2, %k1
171; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
172; X64-NEXT:    retq
173  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
174                                               <16 x float> %f1, <16 x float> %f2, metadata !"ord",
175                                               metadata !"fpexcept.strict") #0
176  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
177  ret <16 x i32> %res
178}
179
180define <16 x i32> @test_v16f32_ueq_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
181; X86-LABEL: test_v16f32_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_uqps 8(%ebp), %zmm2, %k1
188; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
189; X86-NEXT:    movl %ebp, %esp
190; X86-NEXT:    popl %ebp
191; X86-NEXT:    retl
192;
193; X64-LABEL: test_v16f32_ueq_q:
194; X64:       # %bb.0:
195; X64-NEXT:    vcmpeq_uqps %zmm3, %zmm2, %k1
196; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
197; X64-NEXT:    retq
198  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
199                                               <16 x float> %f1, <16 x float> %f2, metadata !"ueq",
200                                               metadata !"fpexcept.strict") #0
201  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
202  ret <16 x i32> %res
203}
204
205define <16 x i32> @test_v16f32_ugt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
206; X86-LABEL: test_v16f32_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_uqps 8(%ebp), %zmm2, %k1
213; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
214; X86-NEXT:    movl %ebp, %esp
215; X86-NEXT:    popl %ebp
216; X86-NEXT:    retl
217;
218; X64-LABEL: test_v16f32_ugt_q:
219; X64:       # %bb.0:
220; X64-NEXT:    vcmpnle_uqps %zmm3, %zmm2, %k1
221; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
222; X64-NEXT:    retq
223  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
224                                               <16 x float> %f1, <16 x float> %f2, metadata !"ugt",
225                                               metadata !"fpexcept.strict") #0
226  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
227  ret <16 x i32> %res
228}
229
230define <16 x i32> @test_v16f32_uge_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
231; X86-LABEL: test_v16f32_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_uqps 8(%ebp), %zmm2, %k1
238; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
239; X86-NEXT:    movl %ebp, %esp
240; X86-NEXT:    popl %ebp
241; X86-NEXT:    retl
242;
243; X64-LABEL: test_v16f32_uge_q:
244; X64:       # %bb.0:
245; X64-NEXT:    vcmpnlt_uqps %zmm3, %zmm2, %k1
246; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
247; X64-NEXT:    retq
248  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
249                                               <16 x float> %f1, <16 x float> %f2, metadata !"uge",
250                                               metadata !"fpexcept.strict") #0
251  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
252  ret <16 x i32> %res
253}
254
255define <16 x i32> @test_v16f32_ult_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
256; X86-LABEL: test_v16f32_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_uqps 8(%ebp), %zmm2, %k1
263; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
264; X86-NEXT:    movl %ebp, %esp
265; X86-NEXT:    popl %ebp
266; X86-NEXT:    retl
267;
268; X64-LABEL: test_v16f32_ult_q:
269; X64:       # %bb.0:
270; X64-NEXT:    vcmpnle_uqps %zmm2, %zmm3, %k1
271; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
272; X64-NEXT:    retq
273  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
274                                               <16 x float> %f1, <16 x float> %f2, metadata !"ult",
275                                               metadata !"fpexcept.strict") #0
276  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
277  ret <16 x i32> %res
278}
279
280define <16 x i32> @test_v16f32_ule_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
281; X86-LABEL: test_v16f32_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_uqps 8(%ebp), %zmm2, %k1
288; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
289; X86-NEXT:    movl %ebp, %esp
290; X86-NEXT:    popl %ebp
291; X86-NEXT:    retl
292;
293; X64-LABEL: test_v16f32_ule_q:
294; X64:       # %bb.0:
295; X64-NEXT:    vcmpnlt_uqps %zmm2, %zmm3, %k1
296; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
297; X64-NEXT:    retq
298  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
299                                               <16 x float> %f1, <16 x float> %f2, metadata !"ule",
300                                               metadata !"fpexcept.strict") #0
301  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
302  ret <16 x i32> %res
303}
304
305define <16 x i32> @test_v16f32_une_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
306; X86-LABEL: test_v16f32_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:    vcmpneqps 8(%ebp), %zmm2, %k1
313; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
314; X86-NEXT:    movl %ebp, %esp
315; X86-NEXT:    popl %ebp
316; X86-NEXT:    retl
317;
318; X64-LABEL: test_v16f32_une_q:
319; X64:       # %bb.0:
320; X64-NEXT:    vcmpneqps %zmm3, %zmm2, %k1
321; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
322; X64-NEXT:    retq
323  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
324                                               <16 x float> %f1, <16 x float> %f2, metadata !"une",
325                                               metadata !"fpexcept.strict") #0
326  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
327  ret <16 x i32> %res
328}
329
330define <16 x i32> @test_v16f32_uno_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
331; X86-LABEL: test_v16f32_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:    vcmpunordps 8(%ebp), %zmm2, %k1
338; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
339; X86-NEXT:    movl %ebp, %esp
340; X86-NEXT:    popl %ebp
341; X86-NEXT:    retl
342;
343; X64-LABEL: test_v16f32_uno_q:
344; X64:       # %bb.0:
345; X64-NEXT:    vcmpunordps %zmm3, %zmm2, %k1
346; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
347; X64-NEXT:    retq
348  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(
349                                               <16 x float> %f1, <16 x float> %f2, metadata !"uno",
350                                               metadata !"fpexcept.strict") #0
351  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
352  ret <16 x i32> %res
353}
354
355define <8 x i64> @test_v8f64_oeq_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
356; X86-LABEL: test_v8f64_oeq_q:
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:    vcmpeqpd 8(%ebp), %zmm2, %k1
363; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
364; X86-NEXT:    movl %ebp, %esp
365; X86-NEXT:    popl %ebp
366; X86-NEXT:    retl
367;
368; X64-LABEL: test_v8f64_oeq_q:
369; X64:       # %bb.0:
370; X64-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1
371; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
372; X64-NEXT:    retq
373  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
374                                               <8 x double> %f1, <8 x double> %f2, metadata !"oeq",
375                                               metadata !"fpexcept.strict") #0
376  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
377  ret <8 x i64> %res
378}
379
380define <8 x i64> @test_v8f64_ogt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
381; X86-LABEL: test_v8f64_ogt_q:
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:    vcmpgt_oqpd 8(%ebp), %zmm2, %k1
388; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
389; X86-NEXT:    movl %ebp, %esp
390; X86-NEXT:    popl %ebp
391; X86-NEXT:    retl
392;
393; X64-LABEL: test_v8f64_ogt_q:
394; X64:       # %bb.0:
395; X64-NEXT:    vcmplt_oqpd %zmm2, %zmm3, %k1
396; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
397; X64-NEXT:    retq
398  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
399                                               <8 x double> %f1, <8 x double> %f2, metadata !"ogt",
400                                               metadata !"fpexcept.strict") #0
401  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
402  ret <8 x i64> %res
403}
404
405define <8 x i64> @test_v8f64_oge_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
406; X86-LABEL: test_v8f64_oge_q:
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:    vcmpge_oqpd 8(%ebp), %zmm2, %k1
413; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
414; X86-NEXT:    movl %ebp, %esp
415; X86-NEXT:    popl %ebp
416; X86-NEXT:    retl
417;
418; X64-LABEL: test_v8f64_oge_q:
419; X64:       # %bb.0:
420; X64-NEXT:    vcmple_oqpd %zmm2, %zmm3, %k1
421; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
422; X64-NEXT:    retq
423  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
424                                               <8 x double> %f1, <8 x double> %f2, metadata !"oge",
425                                               metadata !"fpexcept.strict") #0
426  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
427  ret <8 x i64> %res
428}
429
430define <8 x i64> @test_v8f64_olt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
431; X86-LABEL: test_v8f64_olt_q:
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:    vcmplt_oqpd 8(%ebp), %zmm2, %k1
438; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
439; X86-NEXT:    movl %ebp, %esp
440; X86-NEXT:    popl %ebp
441; X86-NEXT:    retl
442;
443; X64-LABEL: test_v8f64_olt_q:
444; X64:       # %bb.0:
445; X64-NEXT:    vcmplt_oqpd %zmm3, %zmm2, %k1
446; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
447; X64-NEXT:    retq
448  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
449                                               <8 x double> %f1, <8 x double> %f2, metadata !"olt",
450                                               metadata !"fpexcept.strict") #0
451  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
452  ret <8 x i64> %res
453}
454
455define <8 x i64> @test_v8f64_ole_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
456; X86-LABEL: test_v8f64_ole_q:
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:    vcmple_oqpd 8(%ebp), %zmm2, %k1
463; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
464; X86-NEXT:    movl %ebp, %esp
465; X86-NEXT:    popl %ebp
466; X86-NEXT:    retl
467;
468; X64-LABEL: test_v8f64_ole_q:
469; X64:       # %bb.0:
470; X64-NEXT:    vcmple_oqpd %zmm3, %zmm2, %k1
471; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
472; X64-NEXT:    retq
473  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
474                                               <8 x double> %f1, <8 x double> %f2, metadata !"ole",
475                                               metadata !"fpexcept.strict") #0
476  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
477  ret <8 x i64> %res
478}
479
480define <8 x i64> @test_v8f64_one_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
481; X86-LABEL: test_v8f64_one_q:
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_oqpd 8(%ebp), %zmm2, %k1
488; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
489; X86-NEXT:    movl %ebp, %esp
490; X86-NEXT:    popl %ebp
491; X86-NEXT:    retl
492;
493; X64-LABEL: test_v8f64_one_q:
494; X64:       # %bb.0:
495; X64-NEXT:    vcmpneq_oqpd %zmm3, %zmm2, %k1
496; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
497; X64-NEXT:    retq
498  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
499                                               <8 x double> %f1, <8 x double> %f2, metadata !"one",
500                                               metadata !"fpexcept.strict") #0
501  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
502  ret <8 x i64> %res
503}
504
505define <8 x i64> @test_v8f64_ord_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
506; X86-LABEL: test_v8f64_ord_q:
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:    vcmpordpd 8(%ebp), %zmm2, %k1
513; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
514; X86-NEXT:    movl %ebp, %esp
515; X86-NEXT:    popl %ebp
516; X86-NEXT:    retl
517;
518; X64-LABEL: test_v8f64_ord_q:
519; X64:       # %bb.0:
520; X64-NEXT:    vcmpordpd %zmm3, %zmm2, %k1
521; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
522; X64-NEXT:    retq
523  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
524                                               <8 x double> %f1, <8 x double> %f2, metadata !"ord",
525                                               metadata !"fpexcept.strict") #0
526  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
527  ret <8 x i64> %res
528}
529
530define <8 x i64> @test_v8f64_ueq_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
531; X86-LABEL: test_v8f64_ueq_q:
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_uqpd 8(%ebp), %zmm2, %k1
538; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
539; X86-NEXT:    movl %ebp, %esp
540; X86-NEXT:    popl %ebp
541; X86-NEXT:    retl
542;
543; X64-LABEL: test_v8f64_ueq_q:
544; X64:       # %bb.0:
545; X64-NEXT:    vcmpeq_uqpd %zmm3, %zmm2, %k1
546; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
547; X64-NEXT:    retq
548  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
549                                               <8 x double> %f1, <8 x double> %f2, metadata !"ueq",
550                                               metadata !"fpexcept.strict") #0
551  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
552  ret <8 x i64> %res
553}
554
555define <8 x i64> @test_v8f64_ugt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
556; X86-LABEL: test_v8f64_ugt_q:
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:    vcmpnle_uqpd 8(%ebp), %zmm2, %k1
563; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
564; X86-NEXT:    movl %ebp, %esp
565; X86-NEXT:    popl %ebp
566; X86-NEXT:    retl
567;
568; X64-LABEL: test_v8f64_ugt_q:
569; X64:       # %bb.0:
570; X64-NEXT:    vcmpnle_uqpd %zmm3, %zmm2, %k1
571; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
572; X64-NEXT:    retq
573  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
574                                               <8 x double> %f1, <8 x double> %f2, metadata !"ugt",
575                                               metadata !"fpexcept.strict") #0
576  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
577  ret <8 x i64> %res
578}
579
580define <8 x i64> @test_v8f64_uge_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
581; X86-LABEL: test_v8f64_uge_q:
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:    vcmpnlt_uqpd 8(%ebp), %zmm2, %k1
588; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
589; X86-NEXT:    movl %ebp, %esp
590; X86-NEXT:    popl %ebp
591; X86-NEXT:    retl
592;
593; X64-LABEL: test_v8f64_uge_q:
594; X64:       # %bb.0:
595; X64-NEXT:    vcmpnlt_uqpd %zmm3, %zmm2, %k1
596; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
597; X64-NEXT:    retq
598  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
599                                               <8 x double> %f1, <8 x double> %f2, metadata !"uge",
600                                               metadata !"fpexcept.strict") #0
601  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
602  ret <8 x i64> %res
603}
604
605define <8 x i64> @test_v8f64_ult_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
606; X86-LABEL: test_v8f64_ult_q:
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:    vcmpnge_uqpd 8(%ebp), %zmm2, %k1
613; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
614; X86-NEXT:    movl %ebp, %esp
615; X86-NEXT:    popl %ebp
616; X86-NEXT:    retl
617;
618; X64-LABEL: test_v8f64_ult_q:
619; X64:       # %bb.0:
620; X64-NEXT:    vcmpnle_uqpd %zmm2, %zmm3, %k1
621; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
622; X64-NEXT:    retq
623  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
624                                               <8 x double> %f1, <8 x double> %f2, metadata !"ult",
625                                               metadata !"fpexcept.strict") #0
626  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
627  ret <8 x i64> %res
628}
629
630define <8 x i64> @test_v8f64_ule_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
631; X86-LABEL: test_v8f64_ule_q:
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:    vcmpngt_uqpd 8(%ebp), %zmm2, %k1
638; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
639; X86-NEXT:    movl %ebp, %esp
640; X86-NEXT:    popl %ebp
641; X86-NEXT:    retl
642;
643; X64-LABEL: test_v8f64_ule_q:
644; X64:       # %bb.0:
645; X64-NEXT:    vcmpnlt_uqpd %zmm2, %zmm3, %k1
646; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
647; X64-NEXT:    retq
648  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
649                                               <8 x double> %f1, <8 x double> %f2, metadata !"ule",
650                                               metadata !"fpexcept.strict") #0
651  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
652  ret <8 x i64> %res
653}
654
655define <8 x i64> @test_v8f64_une_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
656; X86-LABEL: test_v8f64_une_q:
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:    vcmpneqpd 8(%ebp), %zmm2, %k1
663; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
664; X86-NEXT:    movl %ebp, %esp
665; X86-NEXT:    popl %ebp
666; X86-NEXT:    retl
667;
668; X64-LABEL: test_v8f64_une_q:
669; X64:       # %bb.0:
670; X64-NEXT:    vcmpneqpd %zmm3, %zmm2, %k1
671; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
672; X64-NEXT:    retq
673  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
674                                               <8 x double> %f1, <8 x double> %f2, metadata !"une",
675                                               metadata !"fpexcept.strict") #0
676  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
677  ret <8 x i64> %res
678}
679
680define <8 x i64> @test_v8f64_uno_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
681; X86-LABEL: test_v8f64_uno_q:
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:    vcmpunordpd 8(%ebp), %zmm2, %k1
688; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
689; X86-NEXT:    movl %ebp, %esp
690; X86-NEXT:    popl %ebp
691; X86-NEXT:    retl
692;
693; X64-LABEL: test_v8f64_uno_q:
694; X64:       # %bb.0:
695; X64-NEXT:    vcmpunordpd %zmm3, %zmm2, %k1
696; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
697; X64-NEXT:    retq
698  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(
699                                               <8 x double> %f1, <8 x double> %f2, metadata !"uno",
700                                               metadata !"fpexcept.strict") #0
701  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
702  ret <8 x i64> %res
703}
704
705define <16 x i32> @test_v16f32_oeq_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
706; X86-LABEL: test_v16f32_oeq_s:
707; X86:       # %bb.0:
708; X86-NEXT:    pushl %ebp
709; X86-NEXT:    movl %esp, %ebp
710; X86-NEXT:    andl $-64, %esp
711; X86-NEXT:    subl $64, %esp
712; X86-NEXT:    vcmpeq_osps 8(%ebp), %zmm2, %k1
713; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
714; X86-NEXT:    movl %ebp, %esp
715; X86-NEXT:    popl %ebp
716; X86-NEXT:    retl
717;
718; X64-LABEL: test_v16f32_oeq_s:
719; X64:       # %bb.0:
720; X64-NEXT:    vcmpeq_osps %zmm3, %zmm2, %k1
721; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
722; X64-NEXT:    retq
723  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
724                                               <16 x float> %f1, <16 x float> %f2, metadata !"oeq",
725                                               metadata !"fpexcept.strict") #0
726  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
727  ret <16 x i32> %res
728}
729
730define <16 x i32> @test_v16f32_ogt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
731; X86-LABEL: test_v16f32_ogt_s:
732; X86:       # %bb.0:
733; X86-NEXT:    pushl %ebp
734; X86-NEXT:    movl %esp, %ebp
735; X86-NEXT:    andl $-64, %esp
736; X86-NEXT:    subl $64, %esp
737; X86-NEXT:    vcmpgtps 8(%ebp), %zmm2, %k1
738; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
739; X86-NEXT:    movl %ebp, %esp
740; X86-NEXT:    popl %ebp
741; X86-NEXT:    retl
742;
743; X64-LABEL: test_v16f32_ogt_s:
744; X64:       # %bb.0:
745; X64-NEXT:    vcmpltps %zmm2, %zmm3, %k1
746; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
747; X64-NEXT:    retq
748  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
749                                               <16 x float> %f1, <16 x float> %f2, metadata !"ogt",
750                                               metadata !"fpexcept.strict") #0
751  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
752  ret <16 x i32> %res
753}
754
755define <16 x i32> @test_v16f32_oge_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
756; X86-LABEL: test_v16f32_oge_s:
757; X86:       # %bb.0:
758; X86-NEXT:    pushl %ebp
759; X86-NEXT:    movl %esp, %ebp
760; X86-NEXT:    andl $-64, %esp
761; X86-NEXT:    subl $64, %esp
762; X86-NEXT:    vcmpgeps 8(%ebp), %zmm2, %k1
763; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
764; X86-NEXT:    movl %ebp, %esp
765; X86-NEXT:    popl %ebp
766; X86-NEXT:    retl
767;
768; X64-LABEL: test_v16f32_oge_s:
769; X64:       # %bb.0:
770; X64-NEXT:    vcmpleps %zmm2, %zmm3, %k1
771; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
772; X64-NEXT:    retq
773  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
774                                               <16 x float> %f1, <16 x float> %f2, metadata !"oge",
775                                               metadata !"fpexcept.strict") #0
776  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
777  ret <16 x i32> %res
778}
779
780define <16 x i32> @test_v16f32_olt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
781; X86-LABEL: test_v16f32_olt_s:
782; X86:       # %bb.0:
783; X86-NEXT:    pushl %ebp
784; X86-NEXT:    movl %esp, %ebp
785; X86-NEXT:    andl $-64, %esp
786; X86-NEXT:    subl $64, %esp
787; X86-NEXT:    vcmpltps 8(%ebp), %zmm2, %k1
788; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
789; X86-NEXT:    movl %ebp, %esp
790; X86-NEXT:    popl %ebp
791; X86-NEXT:    retl
792;
793; X64-LABEL: test_v16f32_olt_s:
794; X64:       # %bb.0:
795; X64-NEXT:    vcmpltps %zmm3, %zmm2, %k1
796; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
797; X64-NEXT:    retq
798  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
799                                               <16 x float> %f1, <16 x float> %f2, metadata !"olt",
800                                               metadata !"fpexcept.strict") #0
801  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
802  ret <16 x i32> %res
803}
804
805define <16 x i32> @test_v16f32_ole_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
806; X86-LABEL: test_v16f32_ole_s:
807; X86:       # %bb.0:
808; X86-NEXT:    pushl %ebp
809; X86-NEXT:    movl %esp, %ebp
810; X86-NEXT:    andl $-64, %esp
811; X86-NEXT:    subl $64, %esp
812; X86-NEXT:    vcmpleps 8(%ebp), %zmm2, %k1
813; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
814; X86-NEXT:    movl %ebp, %esp
815; X86-NEXT:    popl %ebp
816; X86-NEXT:    retl
817;
818; X64-LABEL: test_v16f32_ole_s:
819; X64:       # %bb.0:
820; X64-NEXT:    vcmpleps %zmm3, %zmm2, %k1
821; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
822; X64-NEXT:    retq
823  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
824                                               <16 x float> %f1, <16 x float> %f2, metadata !"ole",
825                                               metadata !"fpexcept.strict") #0
826  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
827  ret <16 x i32> %res
828}
829
830define <16 x i32> @test_v16f32_one_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
831; X86-LABEL: test_v16f32_one_s:
832; X86:       # %bb.0:
833; X86-NEXT:    pushl %ebp
834; X86-NEXT:    movl %esp, %ebp
835; X86-NEXT:    andl $-64, %esp
836; X86-NEXT:    subl $64, %esp
837; X86-NEXT:    vcmpneq_osps 8(%ebp), %zmm2, %k1
838; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
839; X86-NEXT:    movl %ebp, %esp
840; X86-NEXT:    popl %ebp
841; X86-NEXT:    retl
842;
843; X64-LABEL: test_v16f32_one_s:
844; X64:       # %bb.0:
845; X64-NEXT:    vcmpneq_osps %zmm3, %zmm2, %k1
846; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
847; X64-NEXT:    retq
848  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
849                                               <16 x float> %f1, <16 x float> %f2, metadata !"one",
850                                               metadata !"fpexcept.strict") #0
851  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
852  ret <16 x i32> %res
853}
854
855define <16 x i32> @test_v16f32_ord_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
856; X86-LABEL: test_v16f32_ord_s:
857; X86:       # %bb.0:
858; X86-NEXT:    pushl %ebp
859; X86-NEXT:    movl %esp, %ebp
860; X86-NEXT:    andl $-64, %esp
861; X86-NEXT:    subl $64, %esp
862; X86-NEXT:    vcmpord_sps 8(%ebp), %zmm2, %k1
863; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
864; X86-NEXT:    movl %ebp, %esp
865; X86-NEXT:    popl %ebp
866; X86-NEXT:    retl
867;
868; X64-LABEL: test_v16f32_ord_s:
869; X64:       # %bb.0:
870; X64-NEXT:    vcmpord_sps %zmm3, %zmm2, %k1
871; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
872; X64-NEXT:    retq
873  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
874                                               <16 x float> %f1, <16 x float> %f2, metadata !"ord",
875                                               metadata !"fpexcept.strict") #0
876  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
877  ret <16 x i32> %res
878}
879
880define <16 x i32> @test_v16f32_ueq_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
881; X86-LABEL: test_v16f32_ueq_s:
882; X86:       # %bb.0:
883; X86-NEXT:    pushl %ebp
884; X86-NEXT:    movl %esp, %ebp
885; X86-NEXT:    andl $-64, %esp
886; X86-NEXT:    subl $64, %esp
887; X86-NEXT:    vcmpeq_usps 8(%ebp), %zmm2, %k1
888; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
889; X86-NEXT:    movl %ebp, %esp
890; X86-NEXT:    popl %ebp
891; X86-NEXT:    retl
892;
893; X64-LABEL: test_v16f32_ueq_s:
894; X64:       # %bb.0:
895; X64-NEXT:    vcmpeq_usps %zmm3, %zmm2, %k1
896; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
897; X64-NEXT:    retq
898  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
899                                               <16 x float> %f1, <16 x float> %f2, metadata !"ueq",
900                                               metadata !"fpexcept.strict") #0
901  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
902  ret <16 x i32> %res
903}
904
905define <16 x i32> @test_v16f32_ugt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
906; X86-LABEL: test_v16f32_ugt_s:
907; X86:       # %bb.0:
908; X86-NEXT:    pushl %ebp
909; X86-NEXT:    movl %esp, %ebp
910; X86-NEXT:    andl $-64, %esp
911; X86-NEXT:    subl $64, %esp
912; X86-NEXT:    vcmpnleps 8(%ebp), %zmm2, %k1
913; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
914; X86-NEXT:    movl %ebp, %esp
915; X86-NEXT:    popl %ebp
916; X86-NEXT:    retl
917;
918; X64-LABEL: test_v16f32_ugt_s:
919; X64:       # %bb.0:
920; X64-NEXT:    vcmpnleps %zmm3, %zmm2, %k1
921; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
922; X64-NEXT:    retq
923  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
924                                               <16 x float> %f1, <16 x float> %f2, metadata !"ugt",
925                                               metadata !"fpexcept.strict") #0
926  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
927  ret <16 x i32> %res
928}
929
930define <16 x i32> @test_v16f32_uge_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
931; X86-LABEL: test_v16f32_uge_s:
932; X86:       # %bb.0:
933; X86-NEXT:    pushl %ebp
934; X86-NEXT:    movl %esp, %ebp
935; X86-NEXT:    andl $-64, %esp
936; X86-NEXT:    subl $64, %esp
937; X86-NEXT:    vcmpnltps 8(%ebp), %zmm2, %k1
938; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
939; X86-NEXT:    movl %ebp, %esp
940; X86-NEXT:    popl %ebp
941; X86-NEXT:    retl
942;
943; X64-LABEL: test_v16f32_uge_s:
944; X64:       # %bb.0:
945; X64-NEXT:    vcmpnltps %zmm3, %zmm2, %k1
946; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
947; X64-NEXT:    retq
948  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
949                                               <16 x float> %f1, <16 x float> %f2, metadata !"uge",
950                                               metadata !"fpexcept.strict") #0
951  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
952  ret <16 x i32> %res
953}
954
955define <16 x i32> @test_v16f32_ult_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
956; X86-LABEL: test_v16f32_ult_s:
957; X86:       # %bb.0:
958; X86-NEXT:    pushl %ebp
959; X86-NEXT:    movl %esp, %ebp
960; X86-NEXT:    andl $-64, %esp
961; X86-NEXT:    subl $64, %esp
962; X86-NEXT:    vcmpngeps 8(%ebp), %zmm2, %k1
963; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
964; X86-NEXT:    movl %ebp, %esp
965; X86-NEXT:    popl %ebp
966; X86-NEXT:    retl
967;
968; X64-LABEL: test_v16f32_ult_s:
969; X64:       # %bb.0:
970; X64-NEXT:    vcmpnleps %zmm2, %zmm3, %k1
971; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
972; X64-NEXT:    retq
973  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
974                                               <16 x float> %f1, <16 x float> %f2, metadata !"ult",
975                                               metadata !"fpexcept.strict") #0
976  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
977  ret <16 x i32> %res
978}
979
980define <16 x i32> @test_v16f32_ule_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
981; X86-LABEL: test_v16f32_ule_s:
982; X86:       # %bb.0:
983; X86-NEXT:    pushl %ebp
984; X86-NEXT:    movl %esp, %ebp
985; X86-NEXT:    andl $-64, %esp
986; X86-NEXT:    subl $64, %esp
987; X86-NEXT:    vcmpngtps 8(%ebp), %zmm2, %k1
988; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
989; X86-NEXT:    movl %ebp, %esp
990; X86-NEXT:    popl %ebp
991; X86-NEXT:    retl
992;
993; X64-LABEL: test_v16f32_ule_s:
994; X64:       # %bb.0:
995; X64-NEXT:    vcmpnltps %zmm2, %zmm3, %k1
996; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
997; X64-NEXT:    retq
998  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
999                                               <16 x float> %f1, <16 x float> %f2, metadata !"ule",
1000                                               metadata !"fpexcept.strict") #0
1001  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
1002  ret <16 x i32> %res
1003}
1004
1005define <16 x i32> @test_v16f32_une_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
1006; X86-LABEL: test_v16f32_une_s:
1007; X86:       # %bb.0:
1008; X86-NEXT:    pushl %ebp
1009; X86-NEXT:    movl %esp, %ebp
1010; X86-NEXT:    andl $-64, %esp
1011; X86-NEXT:    subl $64, %esp
1012; X86-NEXT:    vcmpneq_usps 8(%ebp), %zmm2, %k1
1013; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1014; X86-NEXT:    movl %ebp, %esp
1015; X86-NEXT:    popl %ebp
1016; X86-NEXT:    retl
1017;
1018; X64-LABEL: test_v16f32_une_s:
1019; X64:       # %bb.0:
1020; X64-NEXT:    vcmpneq_usps %zmm3, %zmm2, %k1
1021; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1022; X64-NEXT:    retq
1023  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
1024                                               <16 x float> %f1, <16 x float> %f2, metadata !"une",
1025                                               metadata !"fpexcept.strict") #0
1026  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
1027  ret <16 x i32> %res
1028}
1029
1030define <16 x i32> @test_v16f32_uno_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 {
1031; X86-LABEL: test_v16f32_uno_s:
1032; X86:       # %bb.0:
1033; X86-NEXT:    pushl %ebp
1034; X86-NEXT:    movl %esp, %ebp
1035; X86-NEXT:    andl $-64, %esp
1036; X86-NEXT:    subl $64, %esp
1037; X86-NEXT:    vcmpunord_sps 8(%ebp), %zmm2, %k1
1038; X86-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1039; X86-NEXT:    movl %ebp, %esp
1040; X86-NEXT:    popl %ebp
1041; X86-NEXT:    retl
1042;
1043; X64-LABEL: test_v16f32_uno_s:
1044; X64:       # %bb.0:
1045; X64-NEXT:    vcmpunord_sps %zmm3, %zmm2, %k1
1046; X64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1047; X64-NEXT:    retq
1048  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(
1049                                               <16 x float> %f1, <16 x float> %f2, metadata !"uno",
1050                                               metadata !"fpexcept.strict") #0
1051  %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b
1052  ret <16 x i32> %res
1053}
1054
1055define <8 x i64> @test_v8f64_oeq_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1056; X86-LABEL: test_v8f64_oeq_s:
1057; X86:       # %bb.0:
1058; X86-NEXT:    pushl %ebp
1059; X86-NEXT:    movl %esp, %ebp
1060; X86-NEXT:    andl $-64, %esp
1061; X86-NEXT:    subl $64, %esp
1062; X86-NEXT:    vcmpeq_ospd 8(%ebp), %zmm2, %k1
1063; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1064; X86-NEXT:    movl %ebp, %esp
1065; X86-NEXT:    popl %ebp
1066; X86-NEXT:    retl
1067;
1068; X64-LABEL: test_v8f64_oeq_s:
1069; X64:       # %bb.0:
1070; X64-NEXT:    vcmpeq_ospd %zmm3, %zmm2, %k1
1071; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1072; X64-NEXT:    retq
1073  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1074                                               <8 x double> %f1, <8 x double> %f2, metadata !"oeq",
1075                                               metadata !"fpexcept.strict") #0
1076  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1077  ret <8 x i64> %res
1078}
1079
1080define <8 x i64> @test_v8f64_ogt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1081; X86-LABEL: test_v8f64_ogt_s:
1082; X86:       # %bb.0:
1083; X86-NEXT:    pushl %ebp
1084; X86-NEXT:    movl %esp, %ebp
1085; X86-NEXT:    andl $-64, %esp
1086; X86-NEXT:    subl $64, %esp
1087; X86-NEXT:    vcmpgtpd 8(%ebp), %zmm2, %k1
1088; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1089; X86-NEXT:    movl %ebp, %esp
1090; X86-NEXT:    popl %ebp
1091; X86-NEXT:    retl
1092;
1093; X64-LABEL: test_v8f64_ogt_s:
1094; X64:       # %bb.0:
1095; X64-NEXT:    vcmpltpd %zmm2, %zmm3, %k1
1096; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1097; X64-NEXT:    retq
1098  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1099                                               <8 x double> %f1, <8 x double> %f2, metadata !"ogt",
1100                                               metadata !"fpexcept.strict") #0
1101  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1102  ret <8 x i64> %res
1103}
1104
1105define <8 x i64> @test_v8f64_oge_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1106; X86-LABEL: test_v8f64_oge_s:
1107; X86:       # %bb.0:
1108; X86-NEXT:    pushl %ebp
1109; X86-NEXT:    movl %esp, %ebp
1110; X86-NEXT:    andl $-64, %esp
1111; X86-NEXT:    subl $64, %esp
1112; X86-NEXT:    vcmpgepd 8(%ebp), %zmm2, %k1
1113; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1114; X86-NEXT:    movl %ebp, %esp
1115; X86-NEXT:    popl %ebp
1116; X86-NEXT:    retl
1117;
1118; X64-LABEL: test_v8f64_oge_s:
1119; X64:       # %bb.0:
1120; X64-NEXT:    vcmplepd %zmm2, %zmm3, %k1
1121; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1122; X64-NEXT:    retq
1123  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1124                                               <8 x double> %f1, <8 x double> %f2, metadata !"oge",
1125                                               metadata !"fpexcept.strict") #0
1126  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1127  ret <8 x i64> %res
1128}
1129
1130define <8 x i64> @test_v8f64_olt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1131; X86-LABEL: test_v8f64_olt_s:
1132; X86:       # %bb.0:
1133; X86-NEXT:    pushl %ebp
1134; X86-NEXT:    movl %esp, %ebp
1135; X86-NEXT:    andl $-64, %esp
1136; X86-NEXT:    subl $64, %esp
1137; X86-NEXT:    vcmpltpd 8(%ebp), %zmm2, %k1
1138; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1139; X86-NEXT:    movl %ebp, %esp
1140; X86-NEXT:    popl %ebp
1141; X86-NEXT:    retl
1142;
1143; X64-LABEL: test_v8f64_olt_s:
1144; X64:       # %bb.0:
1145; X64-NEXT:    vcmpltpd %zmm3, %zmm2, %k1
1146; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1147; X64-NEXT:    retq
1148  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1149                                               <8 x double> %f1, <8 x double> %f2, metadata !"olt",
1150                                               metadata !"fpexcept.strict") #0
1151  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1152  ret <8 x i64> %res
1153}
1154
1155define <8 x i64> @test_v8f64_ole_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1156; X86-LABEL: test_v8f64_ole_s:
1157; X86:       # %bb.0:
1158; X86-NEXT:    pushl %ebp
1159; X86-NEXT:    movl %esp, %ebp
1160; X86-NEXT:    andl $-64, %esp
1161; X86-NEXT:    subl $64, %esp
1162; X86-NEXT:    vcmplepd 8(%ebp), %zmm2, %k1
1163; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1164; X86-NEXT:    movl %ebp, %esp
1165; X86-NEXT:    popl %ebp
1166; X86-NEXT:    retl
1167;
1168; X64-LABEL: test_v8f64_ole_s:
1169; X64:       # %bb.0:
1170; X64-NEXT:    vcmplepd %zmm3, %zmm2, %k1
1171; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1172; X64-NEXT:    retq
1173  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1174                                               <8 x double> %f1, <8 x double> %f2, metadata !"ole",
1175                                               metadata !"fpexcept.strict") #0
1176  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1177  ret <8 x i64> %res
1178}
1179
1180define <8 x i64> @test_v8f64_one_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1181; X86-LABEL: test_v8f64_one_s:
1182; X86:       # %bb.0:
1183; X86-NEXT:    pushl %ebp
1184; X86-NEXT:    movl %esp, %ebp
1185; X86-NEXT:    andl $-64, %esp
1186; X86-NEXT:    subl $64, %esp
1187; X86-NEXT:    vcmpneq_ospd 8(%ebp), %zmm2, %k1
1188; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1189; X86-NEXT:    movl %ebp, %esp
1190; X86-NEXT:    popl %ebp
1191; X86-NEXT:    retl
1192;
1193; X64-LABEL: test_v8f64_one_s:
1194; X64:       # %bb.0:
1195; X64-NEXT:    vcmpneq_ospd %zmm3, %zmm2, %k1
1196; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1197; X64-NEXT:    retq
1198  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1199                                               <8 x double> %f1, <8 x double> %f2, metadata !"one",
1200                                               metadata !"fpexcept.strict") #0
1201  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1202  ret <8 x i64> %res
1203}
1204
1205define <8 x i64> @test_v8f64_ord_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1206; X86-LABEL: test_v8f64_ord_s:
1207; X86:       # %bb.0:
1208; X86-NEXT:    pushl %ebp
1209; X86-NEXT:    movl %esp, %ebp
1210; X86-NEXT:    andl $-64, %esp
1211; X86-NEXT:    subl $64, %esp
1212; X86-NEXT:    vcmpord_spd 8(%ebp), %zmm2, %k1
1213; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1214; X86-NEXT:    movl %ebp, %esp
1215; X86-NEXT:    popl %ebp
1216; X86-NEXT:    retl
1217;
1218; X64-LABEL: test_v8f64_ord_s:
1219; X64:       # %bb.0:
1220; X64-NEXT:    vcmpord_spd %zmm3, %zmm2, %k1
1221; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1222; X64-NEXT:    retq
1223  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1224                                               <8 x double> %f1, <8 x double> %f2, metadata !"ord",
1225                                               metadata !"fpexcept.strict") #0
1226  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1227  ret <8 x i64> %res
1228}
1229
1230define <8 x i64> @test_v8f64_ueq_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1231; X86-LABEL: test_v8f64_ueq_s:
1232; X86:       # %bb.0:
1233; X86-NEXT:    pushl %ebp
1234; X86-NEXT:    movl %esp, %ebp
1235; X86-NEXT:    andl $-64, %esp
1236; X86-NEXT:    subl $64, %esp
1237; X86-NEXT:    vcmpeq_uspd 8(%ebp), %zmm2, %k1
1238; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1239; X86-NEXT:    movl %ebp, %esp
1240; X86-NEXT:    popl %ebp
1241; X86-NEXT:    retl
1242;
1243; X64-LABEL: test_v8f64_ueq_s:
1244; X64:       # %bb.0:
1245; X64-NEXT:    vcmpeq_uspd %zmm3, %zmm2, %k1
1246; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1247; X64-NEXT:    retq
1248  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1249                                               <8 x double> %f1, <8 x double> %f2, metadata !"ueq",
1250                                               metadata !"fpexcept.strict") #0
1251  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1252  ret <8 x i64> %res
1253}
1254
1255define <8 x i64> @test_v8f64_ugt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1256; X86-LABEL: test_v8f64_ugt_s:
1257; X86:       # %bb.0:
1258; X86-NEXT:    pushl %ebp
1259; X86-NEXT:    movl %esp, %ebp
1260; X86-NEXT:    andl $-64, %esp
1261; X86-NEXT:    subl $64, %esp
1262; X86-NEXT:    vcmpnlepd 8(%ebp), %zmm2, %k1
1263; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1264; X86-NEXT:    movl %ebp, %esp
1265; X86-NEXT:    popl %ebp
1266; X86-NEXT:    retl
1267;
1268; X64-LABEL: test_v8f64_ugt_s:
1269; X64:       # %bb.0:
1270; X64-NEXT:    vcmpnlepd %zmm3, %zmm2, %k1
1271; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1272; X64-NEXT:    retq
1273  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1274                                               <8 x double> %f1, <8 x double> %f2, metadata !"ugt",
1275                                               metadata !"fpexcept.strict") #0
1276  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1277  ret <8 x i64> %res
1278}
1279
1280define <8 x i64> @test_v8f64_uge_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1281; X86-LABEL: test_v8f64_uge_s:
1282; X86:       # %bb.0:
1283; X86-NEXT:    pushl %ebp
1284; X86-NEXT:    movl %esp, %ebp
1285; X86-NEXT:    andl $-64, %esp
1286; X86-NEXT:    subl $64, %esp
1287; X86-NEXT:    vcmpnltpd 8(%ebp), %zmm2, %k1
1288; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1289; X86-NEXT:    movl %ebp, %esp
1290; X86-NEXT:    popl %ebp
1291; X86-NEXT:    retl
1292;
1293; X64-LABEL: test_v8f64_uge_s:
1294; X64:       # %bb.0:
1295; X64-NEXT:    vcmpnltpd %zmm3, %zmm2, %k1
1296; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1297; X64-NEXT:    retq
1298  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1299                                               <8 x double> %f1, <8 x double> %f2, metadata !"uge",
1300                                               metadata !"fpexcept.strict") #0
1301  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1302  ret <8 x i64> %res
1303}
1304
1305define <8 x i64> @test_v8f64_ult_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1306; X86-LABEL: test_v8f64_ult_s:
1307; X86:       # %bb.0:
1308; X86-NEXT:    pushl %ebp
1309; X86-NEXT:    movl %esp, %ebp
1310; X86-NEXT:    andl $-64, %esp
1311; X86-NEXT:    subl $64, %esp
1312; X86-NEXT:    vcmpngepd 8(%ebp), %zmm2, %k1
1313; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1314; X86-NEXT:    movl %ebp, %esp
1315; X86-NEXT:    popl %ebp
1316; X86-NEXT:    retl
1317;
1318; X64-LABEL: test_v8f64_ult_s:
1319; X64:       # %bb.0:
1320; X64-NEXT:    vcmpnlepd %zmm2, %zmm3, %k1
1321; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1322; X64-NEXT:    retq
1323  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1324                                               <8 x double> %f1, <8 x double> %f2, metadata !"ult",
1325                                               metadata !"fpexcept.strict") #0
1326  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1327  ret <8 x i64> %res
1328}
1329
1330define <8 x i64> @test_v8f64_ule_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1331; X86-LABEL: test_v8f64_ule_s:
1332; X86:       # %bb.0:
1333; X86-NEXT:    pushl %ebp
1334; X86-NEXT:    movl %esp, %ebp
1335; X86-NEXT:    andl $-64, %esp
1336; X86-NEXT:    subl $64, %esp
1337; X86-NEXT:    vcmpngtpd 8(%ebp), %zmm2, %k1
1338; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1339; X86-NEXT:    movl %ebp, %esp
1340; X86-NEXT:    popl %ebp
1341; X86-NEXT:    retl
1342;
1343; X64-LABEL: test_v8f64_ule_s:
1344; X64:       # %bb.0:
1345; X64-NEXT:    vcmpnltpd %zmm2, %zmm3, %k1
1346; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1347; X64-NEXT:    retq
1348  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1349                                               <8 x double> %f1, <8 x double> %f2, metadata !"ule",
1350                                               metadata !"fpexcept.strict") #0
1351  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1352  ret <8 x i64> %res
1353}
1354
1355define <8 x i64> @test_v8f64_une_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1356; X86-LABEL: test_v8f64_une_s:
1357; X86:       # %bb.0:
1358; X86-NEXT:    pushl %ebp
1359; X86-NEXT:    movl %esp, %ebp
1360; X86-NEXT:    andl $-64, %esp
1361; X86-NEXT:    subl $64, %esp
1362; X86-NEXT:    vcmpneq_uspd 8(%ebp), %zmm2, %k1
1363; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1364; X86-NEXT:    movl %ebp, %esp
1365; X86-NEXT:    popl %ebp
1366; X86-NEXT:    retl
1367;
1368; X64-LABEL: test_v8f64_une_s:
1369; X64:       # %bb.0:
1370; X64-NEXT:    vcmpneq_uspd %zmm3, %zmm2, %k1
1371; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1372; X64-NEXT:    retq
1373  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1374                                               <8 x double> %f1, <8 x double> %f2, metadata !"une",
1375                                               metadata !"fpexcept.strict") #0
1376  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1377  ret <8 x i64> %res
1378}
1379
1380define <8 x i64> @test_v8f64_uno_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 {
1381; X86-LABEL: test_v8f64_uno_s:
1382; X86:       # %bb.0:
1383; X86-NEXT:    pushl %ebp
1384; X86-NEXT:    movl %esp, %ebp
1385; X86-NEXT:    andl $-64, %esp
1386; X86-NEXT:    subl $64, %esp
1387; X86-NEXT:    vcmpunord_spd 8(%ebp), %zmm2, %k1
1388; X86-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1389; X86-NEXT:    movl %ebp, %esp
1390; X86-NEXT:    popl %ebp
1391; X86-NEXT:    retl
1392;
1393; X64-LABEL: test_v8f64_uno_s:
1394; X64:       # %bb.0:
1395; X64-NEXT:    vcmpunord_spd %zmm3, %zmm2, %k1
1396; X64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1397; X64-NEXT:    retq
1398  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(
1399                                               <8 x double> %f1, <8 x double> %f2, metadata !"uno",
1400                                               metadata !"fpexcept.strict") #0
1401  %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b
1402  ret <8 x i64> %res
1403}
1404
1405attributes #0 = { strictfp nounwind }
1406
1407declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata)
1408declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata)
1409declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float>, <16 x float>, metadata, metadata)
1410declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double>, <8 x double>, metadata, metadata)
1411