[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / vec-strict-cmp-512.ll
blob80835b76fd4a3af60022eada0e040f85f084b53a
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
5 define <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
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
30 define <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
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
55 define <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
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
80 define <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
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
105 define <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
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
130 define <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
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
155 define <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
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
180 define <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
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
205 define <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
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
230 define <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
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
255 define <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
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
280 define <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
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
305 define <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
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
330 define <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
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
355 define <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
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
380 define <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
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
405 define <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
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
430 define <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
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
455 define <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
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
480 define <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
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
505 define <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
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
530 define <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
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
555 define <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
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
580 define <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
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
605 define <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
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
630 define <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
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
655 define <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
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
680 define <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
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
705 define <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
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
730 define <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
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
755 define <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
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
780 define <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
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
805 define <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
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
830 define <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
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
855 define <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
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
880 define <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
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
905 define <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
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
930 define <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
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
955 define <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
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
980 define <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
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
1005 define <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
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
1030 define <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
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
1055 define <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
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
1080 define <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
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
1105 define <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
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
1130 define <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
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
1155 define <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
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
1180 define <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
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
1205 define <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
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
1230 define <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
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
1255 define <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
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
1280 define <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
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
1305 define <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
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
1330 define <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
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
1355 define <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
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
1380 define <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
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
1405 attributes #0 = { strictfp nounwind }
1407 declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata)
1408 declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata)
1409 declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float>, <16 x float>, metadata, metadata)
1410 declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double>, <8 x double>, metadata, metadata)