1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-32
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-64
4 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX512-32
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX512-64
6 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefix=AVX512F-32
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefix=AVX512F-64
9 define <8 x i32> @test_v8f32_oeq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
10 ; AVX-32-LABEL: test_v8f32_oeq_q:
12 ; AVX-32-NEXT: pushl %ebp
13 ; AVX-32-NEXT: movl %esp, %ebp
14 ; AVX-32-NEXT: andl $-32, %esp
15 ; AVX-32-NEXT: subl $32, %esp
16 ; AVX-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %ymm2
17 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
18 ; AVX-32-NEXT: movl %ebp, %esp
19 ; AVX-32-NEXT: popl %ebp
22 ; AVX-64-LABEL: test_v8f32_oeq_q:
24 ; AVX-64-NEXT: vcmpeqps %ymm3, %ymm2, %ymm2
25 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
28 ; AVX512-32-LABEL: test_v8f32_oeq_q:
30 ; AVX512-32-NEXT: pushl %ebp
31 ; AVX512-32-NEXT: movl %esp, %ebp
32 ; AVX512-32-NEXT: andl $-32, %esp
33 ; AVX512-32-NEXT: subl $32, %esp
34 ; AVX512-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %k1
35 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
36 ; AVX512-32-NEXT: movl %ebp, %esp
37 ; AVX512-32-NEXT: popl %ebp
38 ; AVX512-32-NEXT: retl
40 ; AVX512-64-LABEL: test_v8f32_oeq_q:
42 ; AVX512-64-NEXT: vcmpeqps %ymm3, %ymm2, %k1
43 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
44 ; AVX512-64-NEXT: retq
46 ; AVX512F-32-LABEL: test_v8f32_oeq_q:
47 ; AVX512F-32: # %bb.0:
48 ; AVX512F-32-NEXT: pushl %ebp
49 ; AVX512F-32-NEXT: movl %esp, %ebp
50 ; AVX512F-32-NEXT: andl $-32, %esp
51 ; AVX512F-32-NEXT: subl $32, %esp
52 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
53 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
54 ; AVX512F-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %ymm2
55 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
56 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
57 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
58 ; AVX512F-32-NEXT: movl %ebp, %esp
59 ; AVX512F-32-NEXT: popl %ebp
60 ; AVX512F-32-NEXT: retl
62 ; AVX512F-64-LABEL: test_v8f32_oeq_q:
63 ; AVX512F-64: # %bb.0:
64 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
65 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
66 ; AVX512F-64-NEXT: vcmpeqps %ymm3, %ymm2, %ymm2
67 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
68 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
69 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
70 ; AVX512F-64-NEXT: retq
71 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
72 <8 x float> %f1, <8 x float> %f2, metadata !"oeq",
73 metadata !"fpexcept.strict") #0
74 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
78 define <8 x i32> @test_v8f32_ogt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
79 ; AVX-32-LABEL: test_v8f32_ogt_q:
81 ; AVX-32-NEXT: pushl %ebp
82 ; AVX-32-NEXT: movl %esp, %ebp
83 ; AVX-32-NEXT: andl $-32, %esp
84 ; AVX-32-NEXT: subl $32, %esp
85 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
86 ; AVX-32-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
87 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
88 ; AVX-32-NEXT: movl %ebp, %esp
89 ; AVX-32-NEXT: popl %ebp
92 ; AVX-64-LABEL: test_v8f32_ogt_q:
94 ; AVX-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
95 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
98 ; AVX512-32-LABEL: test_v8f32_ogt_q:
100 ; AVX512-32-NEXT: pushl %ebp
101 ; AVX512-32-NEXT: movl %esp, %ebp
102 ; AVX512-32-NEXT: andl $-32, %esp
103 ; AVX512-32-NEXT: subl $32, %esp
104 ; AVX512-32-NEXT: vcmpgt_oqps 8(%ebp), %ymm2, %k1
105 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
106 ; AVX512-32-NEXT: movl %ebp, %esp
107 ; AVX512-32-NEXT: popl %ebp
108 ; AVX512-32-NEXT: retl
110 ; AVX512-64-LABEL: test_v8f32_ogt_q:
111 ; AVX512-64: # %bb.0:
112 ; AVX512-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %k1
113 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
114 ; AVX512-64-NEXT: retq
116 ; AVX512F-32-LABEL: test_v8f32_ogt_q:
117 ; AVX512F-32: # %bb.0:
118 ; AVX512F-32-NEXT: pushl %ebp
119 ; AVX512F-32-NEXT: movl %esp, %ebp
120 ; AVX512F-32-NEXT: andl $-32, %esp
121 ; AVX512F-32-NEXT: subl $32, %esp
122 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
123 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
124 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
125 ; AVX512F-32-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
126 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
127 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
128 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
129 ; AVX512F-32-NEXT: movl %ebp, %esp
130 ; AVX512F-32-NEXT: popl %ebp
131 ; AVX512F-32-NEXT: retl
133 ; AVX512F-64-LABEL: test_v8f32_ogt_q:
134 ; AVX512F-64: # %bb.0:
135 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
136 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
137 ; AVX512F-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
138 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
139 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
140 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
141 ; AVX512F-64-NEXT: retq
142 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
143 <8 x float> %f1, <8 x float> %f2, metadata !"ogt",
144 metadata !"fpexcept.strict") #0
145 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
149 define <8 x i32> @test_v8f32_oge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
150 ; AVX-32-LABEL: test_v8f32_oge_q:
152 ; AVX-32-NEXT: pushl %ebp
153 ; AVX-32-NEXT: movl %esp, %ebp
154 ; AVX-32-NEXT: andl $-32, %esp
155 ; AVX-32-NEXT: subl $32, %esp
156 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
157 ; AVX-32-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
158 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
159 ; AVX-32-NEXT: movl %ebp, %esp
160 ; AVX-32-NEXT: popl %ebp
163 ; AVX-64-LABEL: test_v8f32_oge_q:
165 ; AVX-64-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
166 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
169 ; AVX512-32-LABEL: test_v8f32_oge_q:
170 ; AVX512-32: # %bb.0:
171 ; AVX512-32-NEXT: pushl %ebp
172 ; AVX512-32-NEXT: movl %esp, %ebp
173 ; AVX512-32-NEXT: andl $-32, %esp
174 ; AVX512-32-NEXT: subl $32, %esp
175 ; AVX512-32-NEXT: vcmpge_oqps 8(%ebp), %ymm2, %k1
176 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
177 ; AVX512-32-NEXT: movl %ebp, %esp
178 ; AVX512-32-NEXT: popl %ebp
179 ; AVX512-32-NEXT: retl
181 ; AVX512-64-LABEL: test_v8f32_oge_q:
182 ; AVX512-64: # %bb.0:
183 ; AVX512-64-NEXT: vcmple_oqps %ymm2, %ymm3, %k1
184 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
185 ; AVX512-64-NEXT: retq
187 ; AVX512F-32-LABEL: test_v8f32_oge_q:
188 ; AVX512F-32: # %bb.0:
189 ; AVX512F-32-NEXT: pushl %ebp
190 ; AVX512F-32-NEXT: movl %esp, %ebp
191 ; AVX512F-32-NEXT: andl $-32, %esp
192 ; AVX512F-32-NEXT: subl $32, %esp
193 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
194 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
195 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
196 ; AVX512F-32-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
197 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
198 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
199 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
200 ; AVX512F-32-NEXT: movl %ebp, %esp
201 ; AVX512F-32-NEXT: popl %ebp
202 ; AVX512F-32-NEXT: retl
204 ; AVX512F-64-LABEL: test_v8f32_oge_q:
205 ; AVX512F-64: # %bb.0:
206 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
207 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
208 ; AVX512F-64-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
209 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
210 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
211 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
212 ; AVX512F-64-NEXT: retq
213 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
214 <8 x float> %f1, <8 x float> %f2, metadata !"oge",
215 metadata !"fpexcept.strict") #0
216 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
220 define <8 x i32> @test_v8f32_olt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
221 ; AVX-32-LABEL: test_v8f32_olt_q:
223 ; AVX-32-NEXT: pushl %ebp
224 ; AVX-32-NEXT: movl %esp, %ebp
225 ; AVX-32-NEXT: andl $-32, %esp
226 ; AVX-32-NEXT: subl $32, %esp
227 ; AVX-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %ymm2
228 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
229 ; AVX-32-NEXT: movl %ebp, %esp
230 ; AVX-32-NEXT: popl %ebp
233 ; AVX-64-LABEL: test_v8f32_olt_q:
235 ; AVX-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %ymm2
236 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
239 ; AVX512-32-LABEL: test_v8f32_olt_q:
240 ; AVX512-32: # %bb.0:
241 ; AVX512-32-NEXT: pushl %ebp
242 ; AVX512-32-NEXT: movl %esp, %ebp
243 ; AVX512-32-NEXT: andl $-32, %esp
244 ; AVX512-32-NEXT: subl $32, %esp
245 ; AVX512-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %k1
246 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
247 ; AVX512-32-NEXT: movl %ebp, %esp
248 ; AVX512-32-NEXT: popl %ebp
249 ; AVX512-32-NEXT: retl
251 ; AVX512-64-LABEL: test_v8f32_olt_q:
252 ; AVX512-64: # %bb.0:
253 ; AVX512-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %k1
254 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
255 ; AVX512-64-NEXT: retq
257 ; AVX512F-32-LABEL: test_v8f32_olt_q:
258 ; AVX512F-32: # %bb.0:
259 ; AVX512F-32-NEXT: pushl %ebp
260 ; AVX512F-32-NEXT: movl %esp, %ebp
261 ; AVX512F-32-NEXT: andl $-32, %esp
262 ; AVX512F-32-NEXT: subl $32, %esp
263 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
264 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
265 ; AVX512F-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %ymm2
266 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
267 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
268 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
269 ; AVX512F-32-NEXT: movl %ebp, %esp
270 ; AVX512F-32-NEXT: popl %ebp
271 ; AVX512F-32-NEXT: retl
273 ; AVX512F-64-LABEL: test_v8f32_olt_q:
274 ; AVX512F-64: # %bb.0:
275 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
276 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
277 ; AVX512F-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %ymm2
278 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
279 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
280 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
281 ; AVX512F-64-NEXT: retq
282 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
283 <8 x float> %f1, <8 x float> %f2, metadata !"olt",
284 metadata !"fpexcept.strict") #0
285 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
289 define <8 x i32> @test_v8f32_ole_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
290 ; AVX-32-LABEL: test_v8f32_ole_q:
292 ; AVX-32-NEXT: pushl %ebp
293 ; AVX-32-NEXT: movl %esp, %ebp
294 ; AVX-32-NEXT: andl $-32, %esp
295 ; AVX-32-NEXT: subl $32, %esp
296 ; AVX-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %ymm2
297 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
298 ; AVX-32-NEXT: movl %ebp, %esp
299 ; AVX-32-NEXT: popl %ebp
302 ; AVX-64-LABEL: test_v8f32_ole_q:
304 ; AVX-64-NEXT: vcmple_oqps %ymm3, %ymm2, %ymm2
305 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
308 ; AVX512-32-LABEL: test_v8f32_ole_q:
309 ; AVX512-32: # %bb.0:
310 ; AVX512-32-NEXT: pushl %ebp
311 ; AVX512-32-NEXT: movl %esp, %ebp
312 ; AVX512-32-NEXT: andl $-32, %esp
313 ; AVX512-32-NEXT: subl $32, %esp
314 ; AVX512-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %k1
315 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
316 ; AVX512-32-NEXT: movl %ebp, %esp
317 ; AVX512-32-NEXT: popl %ebp
318 ; AVX512-32-NEXT: retl
320 ; AVX512-64-LABEL: test_v8f32_ole_q:
321 ; AVX512-64: # %bb.0:
322 ; AVX512-64-NEXT: vcmple_oqps %ymm3, %ymm2, %k1
323 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
324 ; AVX512-64-NEXT: retq
326 ; AVX512F-32-LABEL: test_v8f32_ole_q:
327 ; AVX512F-32: # %bb.0:
328 ; AVX512F-32-NEXT: pushl %ebp
329 ; AVX512F-32-NEXT: movl %esp, %ebp
330 ; AVX512F-32-NEXT: andl $-32, %esp
331 ; AVX512F-32-NEXT: subl $32, %esp
332 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
333 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
334 ; AVX512F-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %ymm2
335 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
336 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
337 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
338 ; AVX512F-32-NEXT: movl %ebp, %esp
339 ; AVX512F-32-NEXT: popl %ebp
340 ; AVX512F-32-NEXT: retl
342 ; AVX512F-64-LABEL: test_v8f32_ole_q:
343 ; AVX512F-64: # %bb.0:
344 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
345 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
346 ; AVX512F-64-NEXT: vcmple_oqps %ymm3, %ymm2, %ymm2
347 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
348 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
349 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
350 ; AVX512F-64-NEXT: retq
351 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
352 <8 x float> %f1, <8 x float> %f2, metadata !"ole",
353 metadata !"fpexcept.strict") #0
354 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
358 define <8 x i32> @test_v8f32_one_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
359 ; AVX-32-LABEL: test_v8f32_one_q:
361 ; AVX-32-NEXT: pushl %ebp
362 ; AVX-32-NEXT: movl %esp, %ebp
363 ; AVX-32-NEXT: andl $-32, %esp
364 ; AVX-32-NEXT: subl $32, %esp
365 ; AVX-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %ymm2
366 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
367 ; AVX-32-NEXT: movl %ebp, %esp
368 ; AVX-32-NEXT: popl %ebp
371 ; AVX-64-LABEL: test_v8f32_one_q:
373 ; AVX-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %ymm2
374 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
377 ; AVX512-32-LABEL: test_v8f32_one_q:
378 ; AVX512-32: # %bb.0:
379 ; AVX512-32-NEXT: pushl %ebp
380 ; AVX512-32-NEXT: movl %esp, %ebp
381 ; AVX512-32-NEXT: andl $-32, %esp
382 ; AVX512-32-NEXT: subl $32, %esp
383 ; AVX512-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %k1
384 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
385 ; AVX512-32-NEXT: movl %ebp, %esp
386 ; AVX512-32-NEXT: popl %ebp
387 ; AVX512-32-NEXT: retl
389 ; AVX512-64-LABEL: test_v8f32_one_q:
390 ; AVX512-64: # %bb.0:
391 ; AVX512-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %k1
392 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
393 ; AVX512-64-NEXT: retq
395 ; AVX512F-32-LABEL: test_v8f32_one_q:
396 ; AVX512F-32: # %bb.0:
397 ; AVX512F-32-NEXT: pushl %ebp
398 ; AVX512F-32-NEXT: movl %esp, %ebp
399 ; AVX512F-32-NEXT: andl $-32, %esp
400 ; AVX512F-32-NEXT: subl $32, %esp
401 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
402 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
403 ; AVX512F-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %ymm2
404 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
405 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
406 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
407 ; AVX512F-32-NEXT: movl %ebp, %esp
408 ; AVX512F-32-NEXT: popl %ebp
409 ; AVX512F-32-NEXT: retl
411 ; AVX512F-64-LABEL: test_v8f32_one_q:
412 ; AVX512F-64: # %bb.0:
413 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
414 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
415 ; AVX512F-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %ymm2
416 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
417 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
418 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
419 ; AVX512F-64-NEXT: retq
420 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
421 <8 x float> %f1, <8 x float> %f2, metadata !"one",
422 metadata !"fpexcept.strict") #0
423 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
427 define <8 x i32> @test_v8f32_ord_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
428 ; AVX-32-LABEL: test_v8f32_ord_q:
430 ; AVX-32-NEXT: pushl %ebp
431 ; AVX-32-NEXT: movl %esp, %ebp
432 ; AVX-32-NEXT: andl $-32, %esp
433 ; AVX-32-NEXT: subl $32, %esp
434 ; AVX-32-NEXT: vcmpordps 8(%ebp), %ymm2, %ymm2
435 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
436 ; AVX-32-NEXT: movl %ebp, %esp
437 ; AVX-32-NEXT: popl %ebp
440 ; AVX-64-LABEL: test_v8f32_ord_q:
442 ; AVX-64-NEXT: vcmpordps %ymm3, %ymm2, %ymm2
443 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
446 ; AVX512-32-LABEL: test_v8f32_ord_q:
447 ; AVX512-32: # %bb.0:
448 ; AVX512-32-NEXT: pushl %ebp
449 ; AVX512-32-NEXT: movl %esp, %ebp
450 ; AVX512-32-NEXT: andl $-32, %esp
451 ; AVX512-32-NEXT: subl $32, %esp
452 ; AVX512-32-NEXT: vcmpordps 8(%ebp), %ymm2, %k1
453 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
454 ; AVX512-32-NEXT: movl %ebp, %esp
455 ; AVX512-32-NEXT: popl %ebp
456 ; AVX512-32-NEXT: retl
458 ; AVX512-64-LABEL: test_v8f32_ord_q:
459 ; AVX512-64: # %bb.0:
460 ; AVX512-64-NEXT: vcmpordps %ymm3, %ymm2, %k1
461 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
462 ; AVX512-64-NEXT: retq
464 ; AVX512F-32-LABEL: test_v8f32_ord_q:
465 ; AVX512F-32: # %bb.0:
466 ; AVX512F-32-NEXT: pushl %ebp
467 ; AVX512F-32-NEXT: movl %esp, %ebp
468 ; AVX512F-32-NEXT: andl $-32, %esp
469 ; AVX512F-32-NEXT: subl $32, %esp
470 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
471 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
472 ; AVX512F-32-NEXT: vcmpordps 8(%ebp), %ymm2, %ymm2
473 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
474 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
475 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
476 ; AVX512F-32-NEXT: movl %ebp, %esp
477 ; AVX512F-32-NEXT: popl %ebp
478 ; AVX512F-32-NEXT: retl
480 ; AVX512F-64-LABEL: test_v8f32_ord_q:
481 ; AVX512F-64: # %bb.0:
482 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
483 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
484 ; AVX512F-64-NEXT: vcmpordps %ymm3, %ymm2, %ymm2
485 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
486 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
487 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
488 ; AVX512F-64-NEXT: retq
489 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
490 <8 x float> %f1, <8 x float> %f2, metadata !"ord",
491 metadata !"fpexcept.strict") #0
492 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
496 define <8 x i32> @test_v8f32_ueq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
497 ; AVX-32-LABEL: test_v8f32_ueq_q:
499 ; AVX-32-NEXT: pushl %ebp
500 ; AVX-32-NEXT: movl %esp, %ebp
501 ; AVX-32-NEXT: andl $-32, %esp
502 ; AVX-32-NEXT: subl $32, %esp
503 ; AVX-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %ymm2
504 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
505 ; AVX-32-NEXT: movl %ebp, %esp
506 ; AVX-32-NEXT: popl %ebp
509 ; AVX-64-LABEL: test_v8f32_ueq_q:
511 ; AVX-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %ymm2
512 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
515 ; AVX512-32-LABEL: test_v8f32_ueq_q:
516 ; AVX512-32: # %bb.0:
517 ; AVX512-32-NEXT: pushl %ebp
518 ; AVX512-32-NEXT: movl %esp, %ebp
519 ; AVX512-32-NEXT: andl $-32, %esp
520 ; AVX512-32-NEXT: subl $32, %esp
521 ; AVX512-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %k1
522 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
523 ; AVX512-32-NEXT: movl %ebp, %esp
524 ; AVX512-32-NEXT: popl %ebp
525 ; AVX512-32-NEXT: retl
527 ; AVX512-64-LABEL: test_v8f32_ueq_q:
528 ; AVX512-64: # %bb.0:
529 ; AVX512-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %k1
530 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
531 ; AVX512-64-NEXT: retq
533 ; AVX512F-32-LABEL: test_v8f32_ueq_q:
534 ; AVX512F-32: # %bb.0:
535 ; AVX512F-32-NEXT: pushl %ebp
536 ; AVX512F-32-NEXT: movl %esp, %ebp
537 ; AVX512F-32-NEXT: andl $-32, %esp
538 ; AVX512F-32-NEXT: subl $32, %esp
539 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
540 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
541 ; AVX512F-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %ymm2
542 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
543 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
544 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
545 ; AVX512F-32-NEXT: movl %ebp, %esp
546 ; AVX512F-32-NEXT: popl %ebp
547 ; AVX512F-32-NEXT: retl
549 ; AVX512F-64-LABEL: test_v8f32_ueq_q:
550 ; AVX512F-64: # %bb.0:
551 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
552 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
553 ; AVX512F-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %ymm2
554 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
555 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
556 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
557 ; AVX512F-64-NEXT: retq
558 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
559 <8 x float> %f1, <8 x float> %f2, metadata !"ueq",
560 metadata !"fpexcept.strict") #0
561 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
565 define <8 x i32> @test_v8f32_ugt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
566 ; AVX-32-LABEL: test_v8f32_ugt_q:
568 ; AVX-32-NEXT: pushl %ebp
569 ; AVX-32-NEXT: movl %esp, %ebp
570 ; AVX-32-NEXT: andl $-32, %esp
571 ; AVX-32-NEXT: subl $32, %esp
572 ; AVX-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %ymm2
573 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
574 ; AVX-32-NEXT: movl %ebp, %esp
575 ; AVX-32-NEXT: popl %ebp
578 ; AVX-64-LABEL: test_v8f32_ugt_q:
580 ; AVX-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %ymm2
581 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
584 ; AVX512-32-LABEL: test_v8f32_ugt_q:
585 ; AVX512-32: # %bb.0:
586 ; AVX512-32-NEXT: pushl %ebp
587 ; AVX512-32-NEXT: movl %esp, %ebp
588 ; AVX512-32-NEXT: andl $-32, %esp
589 ; AVX512-32-NEXT: subl $32, %esp
590 ; AVX512-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %k1
591 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
592 ; AVX512-32-NEXT: movl %ebp, %esp
593 ; AVX512-32-NEXT: popl %ebp
594 ; AVX512-32-NEXT: retl
596 ; AVX512-64-LABEL: test_v8f32_ugt_q:
597 ; AVX512-64: # %bb.0:
598 ; AVX512-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %k1
599 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
600 ; AVX512-64-NEXT: retq
602 ; AVX512F-32-LABEL: test_v8f32_ugt_q:
603 ; AVX512F-32: # %bb.0:
604 ; AVX512F-32-NEXT: pushl %ebp
605 ; AVX512F-32-NEXT: movl %esp, %ebp
606 ; AVX512F-32-NEXT: andl $-32, %esp
607 ; AVX512F-32-NEXT: subl $32, %esp
608 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
609 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
610 ; AVX512F-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %ymm2
611 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
612 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
613 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
614 ; AVX512F-32-NEXT: movl %ebp, %esp
615 ; AVX512F-32-NEXT: popl %ebp
616 ; AVX512F-32-NEXT: retl
618 ; AVX512F-64-LABEL: test_v8f32_ugt_q:
619 ; AVX512F-64: # %bb.0:
620 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
621 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
622 ; AVX512F-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %ymm2
623 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
624 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
625 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
626 ; AVX512F-64-NEXT: retq
627 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
628 <8 x float> %f1, <8 x float> %f2, metadata !"ugt",
629 metadata !"fpexcept.strict") #0
630 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
634 define <8 x i32> @test_v8f32_uge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
635 ; AVX-32-LABEL: test_v8f32_uge_q:
637 ; AVX-32-NEXT: pushl %ebp
638 ; AVX-32-NEXT: movl %esp, %ebp
639 ; AVX-32-NEXT: andl $-32, %esp
640 ; AVX-32-NEXT: subl $32, %esp
641 ; AVX-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %ymm2
642 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
643 ; AVX-32-NEXT: movl %ebp, %esp
644 ; AVX-32-NEXT: popl %ebp
647 ; AVX-64-LABEL: test_v8f32_uge_q:
649 ; AVX-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %ymm2
650 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
653 ; AVX512-32-LABEL: test_v8f32_uge_q:
654 ; AVX512-32: # %bb.0:
655 ; AVX512-32-NEXT: pushl %ebp
656 ; AVX512-32-NEXT: movl %esp, %ebp
657 ; AVX512-32-NEXT: andl $-32, %esp
658 ; AVX512-32-NEXT: subl $32, %esp
659 ; AVX512-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %k1
660 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
661 ; AVX512-32-NEXT: movl %ebp, %esp
662 ; AVX512-32-NEXT: popl %ebp
663 ; AVX512-32-NEXT: retl
665 ; AVX512-64-LABEL: test_v8f32_uge_q:
666 ; AVX512-64: # %bb.0:
667 ; AVX512-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %k1
668 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
669 ; AVX512-64-NEXT: retq
671 ; AVX512F-32-LABEL: test_v8f32_uge_q:
672 ; AVX512F-32: # %bb.0:
673 ; AVX512F-32-NEXT: pushl %ebp
674 ; AVX512F-32-NEXT: movl %esp, %ebp
675 ; AVX512F-32-NEXT: andl $-32, %esp
676 ; AVX512F-32-NEXT: subl $32, %esp
677 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
678 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
679 ; AVX512F-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %ymm2
680 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
681 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
682 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
683 ; AVX512F-32-NEXT: movl %ebp, %esp
684 ; AVX512F-32-NEXT: popl %ebp
685 ; AVX512F-32-NEXT: retl
687 ; AVX512F-64-LABEL: test_v8f32_uge_q:
688 ; AVX512F-64: # %bb.0:
689 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
690 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
691 ; AVX512F-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %ymm2
692 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
693 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
694 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
695 ; AVX512F-64-NEXT: retq
696 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
697 <8 x float> %f1, <8 x float> %f2, metadata !"uge",
698 metadata !"fpexcept.strict") #0
699 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
703 define <8 x i32> @test_v8f32_ult_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
704 ; AVX-32-LABEL: test_v8f32_ult_q:
706 ; AVX-32-NEXT: pushl %ebp
707 ; AVX-32-NEXT: movl %esp, %ebp
708 ; AVX-32-NEXT: andl $-32, %esp
709 ; AVX-32-NEXT: subl $32, %esp
710 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
711 ; AVX-32-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
712 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
713 ; AVX-32-NEXT: movl %ebp, %esp
714 ; AVX-32-NEXT: popl %ebp
717 ; AVX-64-LABEL: test_v8f32_ult_q:
719 ; AVX-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
720 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
723 ; AVX512-32-LABEL: test_v8f32_ult_q:
724 ; AVX512-32: # %bb.0:
725 ; AVX512-32-NEXT: pushl %ebp
726 ; AVX512-32-NEXT: movl %esp, %ebp
727 ; AVX512-32-NEXT: andl $-32, %esp
728 ; AVX512-32-NEXT: subl $32, %esp
729 ; AVX512-32-NEXT: vcmpnge_uqps 8(%ebp), %ymm2, %k1
730 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
731 ; AVX512-32-NEXT: movl %ebp, %esp
732 ; AVX512-32-NEXT: popl %ebp
733 ; AVX512-32-NEXT: retl
735 ; AVX512-64-LABEL: test_v8f32_ult_q:
736 ; AVX512-64: # %bb.0:
737 ; AVX512-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %k1
738 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
739 ; AVX512-64-NEXT: retq
741 ; AVX512F-32-LABEL: test_v8f32_ult_q:
742 ; AVX512F-32: # %bb.0:
743 ; AVX512F-32-NEXT: pushl %ebp
744 ; AVX512F-32-NEXT: movl %esp, %ebp
745 ; AVX512F-32-NEXT: andl $-32, %esp
746 ; AVX512F-32-NEXT: subl $32, %esp
747 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
748 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
749 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
750 ; AVX512F-32-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
751 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
752 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
753 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
754 ; AVX512F-32-NEXT: movl %ebp, %esp
755 ; AVX512F-32-NEXT: popl %ebp
756 ; AVX512F-32-NEXT: retl
758 ; AVX512F-64-LABEL: test_v8f32_ult_q:
759 ; AVX512F-64: # %bb.0:
760 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
761 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
762 ; AVX512F-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
763 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
764 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
765 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
766 ; AVX512F-64-NEXT: retq
767 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
768 <8 x float> %f1, <8 x float> %f2, metadata !"ult",
769 metadata !"fpexcept.strict") #0
770 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
774 define <8 x i32> @test_v8f32_ule_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
775 ; AVX-32-LABEL: test_v8f32_ule_q:
777 ; AVX-32-NEXT: pushl %ebp
778 ; AVX-32-NEXT: movl %esp, %ebp
779 ; AVX-32-NEXT: andl $-32, %esp
780 ; AVX-32-NEXT: subl $32, %esp
781 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
782 ; AVX-32-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
783 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
784 ; AVX-32-NEXT: movl %ebp, %esp
785 ; AVX-32-NEXT: popl %ebp
788 ; AVX-64-LABEL: test_v8f32_ule_q:
790 ; AVX-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
791 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
794 ; AVX512-32-LABEL: test_v8f32_ule_q:
795 ; AVX512-32: # %bb.0:
796 ; AVX512-32-NEXT: pushl %ebp
797 ; AVX512-32-NEXT: movl %esp, %ebp
798 ; AVX512-32-NEXT: andl $-32, %esp
799 ; AVX512-32-NEXT: subl $32, %esp
800 ; AVX512-32-NEXT: vcmpngt_uqps 8(%ebp), %ymm2, %k1
801 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
802 ; AVX512-32-NEXT: movl %ebp, %esp
803 ; AVX512-32-NEXT: popl %ebp
804 ; AVX512-32-NEXT: retl
806 ; AVX512-64-LABEL: test_v8f32_ule_q:
807 ; AVX512-64: # %bb.0:
808 ; AVX512-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %k1
809 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
810 ; AVX512-64-NEXT: retq
812 ; AVX512F-32-LABEL: test_v8f32_ule_q:
813 ; AVX512F-32: # %bb.0:
814 ; AVX512F-32-NEXT: pushl %ebp
815 ; AVX512F-32-NEXT: movl %esp, %ebp
816 ; AVX512F-32-NEXT: andl $-32, %esp
817 ; AVX512F-32-NEXT: subl $32, %esp
818 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
819 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
820 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
821 ; AVX512F-32-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
822 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
823 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
824 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
825 ; AVX512F-32-NEXT: movl %ebp, %esp
826 ; AVX512F-32-NEXT: popl %ebp
827 ; AVX512F-32-NEXT: retl
829 ; AVX512F-64-LABEL: test_v8f32_ule_q:
830 ; AVX512F-64: # %bb.0:
831 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
832 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
833 ; AVX512F-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
834 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
835 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
836 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
837 ; AVX512F-64-NEXT: retq
838 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
839 <8 x float> %f1, <8 x float> %f2, metadata !"ule",
840 metadata !"fpexcept.strict") #0
841 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
845 define <8 x i32> @test_v8f32_une_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
846 ; AVX-32-LABEL: test_v8f32_une_q:
848 ; AVX-32-NEXT: pushl %ebp
849 ; AVX-32-NEXT: movl %esp, %ebp
850 ; AVX-32-NEXT: andl $-32, %esp
851 ; AVX-32-NEXT: subl $32, %esp
852 ; AVX-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %ymm2
853 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
854 ; AVX-32-NEXT: movl %ebp, %esp
855 ; AVX-32-NEXT: popl %ebp
858 ; AVX-64-LABEL: test_v8f32_une_q:
860 ; AVX-64-NEXT: vcmpneqps %ymm3, %ymm2, %ymm2
861 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
864 ; AVX512-32-LABEL: test_v8f32_une_q:
865 ; AVX512-32: # %bb.0:
866 ; AVX512-32-NEXT: pushl %ebp
867 ; AVX512-32-NEXT: movl %esp, %ebp
868 ; AVX512-32-NEXT: andl $-32, %esp
869 ; AVX512-32-NEXT: subl $32, %esp
870 ; AVX512-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %k1
871 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
872 ; AVX512-32-NEXT: movl %ebp, %esp
873 ; AVX512-32-NEXT: popl %ebp
874 ; AVX512-32-NEXT: retl
876 ; AVX512-64-LABEL: test_v8f32_une_q:
877 ; AVX512-64: # %bb.0:
878 ; AVX512-64-NEXT: vcmpneqps %ymm3, %ymm2, %k1
879 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
880 ; AVX512-64-NEXT: retq
882 ; AVX512F-32-LABEL: test_v8f32_une_q:
883 ; AVX512F-32: # %bb.0:
884 ; AVX512F-32-NEXT: pushl %ebp
885 ; AVX512F-32-NEXT: movl %esp, %ebp
886 ; AVX512F-32-NEXT: andl $-32, %esp
887 ; AVX512F-32-NEXT: subl $32, %esp
888 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
889 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
890 ; AVX512F-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %ymm2
891 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
892 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
893 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
894 ; AVX512F-32-NEXT: movl %ebp, %esp
895 ; AVX512F-32-NEXT: popl %ebp
896 ; AVX512F-32-NEXT: retl
898 ; AVX512F-64-LABEL: test_v8f32_une_q:
899 ; AVX512F-64: # %bb.0:
900 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
901 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
902 ; AVX512F-64-NEXT: vcmpneqps %ymm3, %ymm2, %ymm2
903 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
904 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
905 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
906 ; AVX512F-64-NEXT: retq
907 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
908 <8 x float> %f1, <8 x float> %f2, metadata !"une",
909 metadata !"fpexcept.strict") #0
910 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
914 define <8 x i32> @test_v8f32_uno_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
915 ; AVX-32-LABEL: test_v8f32_uno_q:
917 ; AVX-32-NEXT: pushl %ebp
918 ; AVX-32-NEXT: movl %esp, %ebp
919 ; AVX-32-NEXT: andl $-32, %esp
920 ; AVX-32-NEXT: subl $32, %esp
921 ; AVX-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %ymm2
922 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
923 ; AVX-32-NEXT: movl %ebp, %esp
924 ; AVX-32-NEXT: popl %ebp
927 ; AVX-64-LABEL: test_v8f32_uno_q:
929 ; AVX-64-NEXT: vcmpunordps %ymm3, %ymm2, %ymm2
930 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
933 ; AVX512-32-LABEL: test_v8f32_uno_q:
934 ; AVX512-32: # %bb.0:
935 ; AVX512-32-NEXT: pushl %ebp
936 ; AVX512-32-NEXT: movl %esp, %ebp
937 ; AVX512-32-NEXT: andl $-32, %esp
938 ; AVX512-32-NEXT: subl $32, %esp
939 ; AVX512-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %k1
940 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
941 ; AVX512-32-NEXT: movl %ebp, %esp
942 ; AVX512-32-NEXT: popl %ebp
943 ; AVX512-32-NEXT: retl
945 ; AVX512-64-LABEL: test_v8f32_uno_q:
946 ; AVX512-64: # %bb.0:
947 ; AVX512-64-NEXT: vcmpunordps %ymm3, %ymm2, %k1
948 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
949 ; AVX512-64-NEXT: retq
951 ; AVX512F-32-LABEL: test_v8f32_uno_q:
952 ; AVX512F-32: # %bb.0:
953 ; AVX512F-32-NEXT: pushl %ebp
954 ; AVX512F-32-NEXT: movl %esp, %ebp
955 ; AVX512F-32-NEXT: andl $-32, %esp
956 ; AVX512F-32-NEXT: subl $32, %esp
957 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
958 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
959 ; AVX512F-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %ymm2
960 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
961 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
962 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
963 ; AVX512F-32-NEXT: movl %ebp, %esp
964 ; AVX512F-32-NEXT: popl %ebp
965 ; AVX512F-32-NEXT: retl
967 ; AVX512F-64-LABEL: test_v8f32_uno_q:
968 ; AVX512F-64: # %bb.0:
969 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
970 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
971 ; AVX512F-64-NEXT: vcmpunordps %ymm3, %ymm2, %ymm2
972 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
973 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
974 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
975 ; AVX512F-64-NEXT: retq
976 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(
977 <8 x float> %f1, <8 x float> %f2, metadata !"uno",
978 metadata !"fpexcept.strict") #0
979 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
983 define <4 x i64> @test_v4f64_oeq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
984 ; AVX-32-LABEL: test_v4f64_oeq_q:
986 ; AVX-32-NEXT: pushl %ebp
987 ; AVX-32-NEXT: movl %esp, %ebp
988 ; AVX-32-NEXT: andl $-32, %esp
989 ; AVX-32-NEXT: subl $32, %esp
990 ; AVX-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %ymm2
991 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
992 ; AVX-32-NEXT: movl %ebp, %esp
993 ; AVX-32-NEXT: popl %ebp
996 ; AVX-64-LABEL: test_v4f64_oeq_q:
998 ; AVX-64-NEXT: vcmpeqpd %ymm3, %ymm2, %ymm2
999 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1002 ; AVX512-32-LABEL: test_v4f64_oeq_q:
1003 ; AVX512-32: # %bb.0:
1004 ; AVX512-32-NEXT: pushl %ebp
1005 ; AVX512-32-NEXT: movl %esp, %ebp
1006 ; AVX512-32-NEXT: andl $-32, %esp
1007 ; AVX512-32-NEXT: subl $32, %esp
1008 ; AVX512-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %k1
1009 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1010 ; AVX512-32-NEXT: movl %ebp, %esp
1011 ; AVX512-32-NEXT: popl %ebp
1012 ; AVX512-32-NEXT: retl
1014 ; AVX512-64-LABEL: test_v4f64_oeq_q:
1015 ; AVX512-64: # %bb.0:
1016 ; AVX512-64-NEXT: vcmpeqpd %ymm3, %ymm2, %k1
1017 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1018 ; AVX512-64-NEXT: retq
1020 ; AVX512F-32-LABEL: test_v4f64_oeq_q:
1021 ; AVX512F-32: # %bb.0:
1022 ; AVX512F-32-NEXT: pushl %ebp
1023 ; AVX512F-32-NEXT: movl %esp, %ebp
1024 ; AVX512F-32-NEXT: andl $-32, %esp
1025 ; AVX512F-32-NEXT: subl $32, %esp
1026 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1027 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1028 ; AVX512F-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %ymm2
1029 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1030 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1031 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1032 ; AVX512F-32-NEXT: movl %ebp, %esp
1033 ; AVX512F-32-NEXT: popl %ebp
1034 ; AVX512F-32-NEXT: retl
1036 ; AVX512F-64-LABEL: test_v4f64_oeq_q:
1037 ; AVX512F-64: # %bb.0:
1038 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1039 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1040 ; AVX512F-64-NEXT: vcmpeqpd %ymm3, %ymm2, %ymm2
1041 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1042 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1043 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1044 ; AVX512F-64-NEXT: retq
1045 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1046 <4 x double> %f1, <4 x double> %f2, metadata !"oeq",
1047 metadata !"fpexcept.strict") #0
1048 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1052 define <4 x i64> @test_v4f64_ogt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1053 ; AVX-32-LABEL: test_v4f64_ogt_q:
1055 ; AVX-32-NEXT: pushl %ebp
1056 ; AVX-32-NEXT: movl %esp, %ebp
1057 ; AVX-32-NEXT: andl $-32, %esp
1058 ; AVX-32-NEXT: subl $32, %esp
1059 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
1060 ; AVX-32-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1061 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1062 ; AVX-32-NEXT: movl %ebp, %esp
1063 ; AVX-32-NEXT: popl %ebp
1066 ; AVX-64-LABEL: test_v4f64_ogt_q:
1068 ; AVX-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1069 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1072 ; AVX512-32-LABEL: test_v4f64_ogt_q:
1073 ; AVX512-32: # %bb.0:
1074 ; AVX512-32-NEXT: pushl %ebp
1075 ; AVX512-32-NEXT: movl %esp, %ebp
1076 ; AVX512-32-NEXT: andl $-32, %esp
1077 ; AVX512-32-NEXT: subl $32, %esp
1078 ; AVX512-32-NEXT: vcmpgt_oqpd 8(%ebp), %ymm2, %k1
1079 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1080 ; AVX512-32-NEXT: movl %ebp, %esp
1081 ; AVX512-32-NEXT: popl %ebp
1082 ; AVX512-32-NEXT: retl
1084 ; AVX512-64-LABEL: test_v4f64_ogt_q:
1085 ; AVX512-64: # %bb.0:
1086 ; AVX512-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %k1
1087 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1088 ; AVX512-64-NEXT: retq
1090 ; AVX512F-32-LABEL: test_v4f64_ogt_q:
1091 ; AVX512F-32: # %bb.0:
1092 ; AVX512F-32-NEXT: pushl %ebp
1093 ; AVX512F-32-NEXT: movl %esp, %ebp
1094 ; AVX512F-32-NEXT: andl $-32, %esp
1095 ; AVX512F-32-NEXT: subl $32, %esp
1096 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1097 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1098 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
1099 ; AVX512F-32-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1100 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1101 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1102 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1103 ; AVX512F-32-NEXT: movl %ebp, %esp
1104 ; AVX512F-32-NEXT: popl %ebp
1105 ; AVX512F-32-NEXT: retl
1107 ; AVX512F-64-LABEL: test_v4f64_ogt_q:
1108 ; AVX512F-64: # %bb.0:
1109 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1110 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1111 ; AVX512F-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1112 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1113 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1114 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1115 ; AVX512F-64-NEXT: retq
1116 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1117 <4 x double> %f1, <4 x double> %f2, metadata !"ogt",
1118 metadata !"fpexcept.strict") #0
1119 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1123 define <4 x i64> @test_v4f64_oge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1124 ; AVX-32-LABEL: test_v4f64_oge_q:
1126 ; AVX-32-NEXT: pushl %ebp
1127 ; AVX-32-NEXT: movl %esp, %ebp
1128 ; AVX-32-NEXT: andl $-32, %esp
1129 ; AVX-32-NEXT: subl $32, %esp
1130 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
1131 ; AVX-32-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1132 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1133 ; AVX-32-NEXT: movl %ebp, %esp
1134 ; AVX-32-NEXT: popl %ebp
1137 ; AVX-64-LABEL: test_v4f64_oge_q:
1139 ; AVX-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1140 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1143 ; AVX512-32-LABEL: test_v4f64_oge_q:
1144 ; AVX512-32: # %bb.0:
1145 ; AVX512-32-NEXT: pushl %ebp
1146 ; AVX512-32-NEXT: movl %esp, %ebp
1147 ; AVX512-32-NEXT: andl $-32, %esp
1148 ; AVX512-32-NEXT: subl $32, %esp
1149 ; AVX512-32-NEXT: vcmpge_oqpd 8(%ebp), %ymm2, %k1
1150 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1151 ; AVX512-32-NEXT: movl %ebp, %esp
1152 ; AVX512-32-NEXT: popl %ebp
1153 ; AVX512-32-NEXT: retl
1155 ; AVX512-64-LABEL: test_v4f64_oge_q:
1156 ; AVX512-64: # %bb.0:
1157 ; AVX512-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %k1
1158 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1159 ; AVX512-64-NEXT: retq
1161 ; AVX512F-32-LABEL: test_v4f64_oge_q:
1162 ; AVX512F-32: # %bb.0:
1163 ; AVX512F-32-NEXT: pushl %ebp
1164 ; AVX512F-32-NEXT: movl %esp, %ebp
1165 ; AVX512F-32-NEXT: andl $-32, %esp
1166 ; AVX512F-32-NEXT: subl $32, %esp
1167 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1168 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1169 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
1170 ; AVX512F-32-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1171 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1172 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1173 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1174 ; AVX512F-32-NEXT: movl %ebp, %esp
1175 ; AVX512F-32-NEXT: popl %ebp
1176 ; AVX512F-32-NEXT: retl
1178 ; AVX512F-64-LABEL: test_v4f64_oge_q:
1179 ; AVX512F-64: # %bb.0:
1180 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1181 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1182 ; AVX512F-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1183 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1184 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1185 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1186 ; AVX512F-64-NEXT: retq
1187 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1188 <4 x double> %f1, <4 x double> %f2, metadata !"oge",
1189 metadata !"fpexcept.strict") #0
1190 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1194 define <4 x i64> @test_v4f64_olt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1195 ; AVX-32-LABEL: test_v4f64_olt_q:
1197 ; AVX-32-NEXT: pushl %ebp
1198 ; AVX-32-NEXT: movl %esp, %ebp
1199 ; AVX-32-NEXT: andl $-32, %esp
1200 ; AVX-32-NEXT: subl $32, %esp
1201 ; AVX-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %ymm2
1202 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1203 ; AVX-32-NEXT: movl %ebp, %esp
1204 ; AVX-32-NEXT: popl %ebp
1207 ; AVX-64-LABEL: test_v4f64_olt_q:
1209 ; AVX-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %ymm2
1210 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1213 ; AVX512-32-LABEL: test_v4f64_olt_q:
1214 ; AVX512-32: # %bb.0:
1215 ; AVX512-32-NEXT: pushl %ebp
1216 ; AVX512-32-NEXT: movl %esp, %ebp
1217 ; AVX512-32-NEXT: andl $-32, %esp
1218 ; AVX512-32-NEXT: subl $32, %esp
1219 ; AVX512-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %k1
1220 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1221 ; AVX512-32-NEXT: movl %ebp, %esp
1222 ; AVX512-32-NEXT: popl %ebp
1223 ; AVX512-32-NEXT: retl
1225 ; AVX512-64-LABEL: test_v4f64_olt_q:
1226 ; AVX512-64: # %bb.0:
1227 ; AVX512-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %k1
1228 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1229 ; AVX512-64-NEXT: retq
1231 ; AVX512F-32-LABEL: test_v4f64_olt_q:
1232 ; AVX512F-32: # %bb.0:
1233 ; AVX512F-32-NEXT: pushl %ebp
1234 ; AVX512F-32-NEXT: movl %esp, %ebp
1235 ; AVX512F-32-NEXT: andl $-32, %esp
1236 ; AVX512F-32-NEXT: subl $32, %esp
1237 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1238 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1239 ; AVX512F-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %ymm2
1240 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1241 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1242 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1243 ; AVX512F-32-NEXT: movl %ebp, %esp
1244 ; AVX512F-32-NEXT: popl %ebp
1245 ; AVX512F-32-NEXT: retl
1247 ; AVX512F-64-LABEL: test_v4f64_olt_q:
1248 ; AVX512F-64: # %bb.0:
1249 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1250 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1251 ; AVX512F-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %ymm2
1252 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1253 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1254 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1255 ; AVX512F-64-NEXT: retq
1256 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1257 <4 x double> %f1, <4 x double> %f2, metadata !"olt",
1258 metadata !"fpexcept.strict") #0
1259 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1263 define <4 x i64> @test_v4f64_ole_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1264 ; AVX-32-LABEL: test_v4f64_ole_q:
1266 ; AVX-32-NEXT: pushl %ebp
1267 ; AVX-32-NEXT: movl %esp, %ebp
1268 ; AVX-32-NEXT: andl $-32, %esp
1269 ; AVX-32-NEXT: subl $32, %esp
1270 ; AVX-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %ymm2
1271 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1272 ; AVX-32-NEXT: movl %ebp, %esp
1273 ; AVX-32-NEXT: popl %ebp
1276 ; AVX-64-LABEL: test_v4f64_ole_q:
1278 ; AVX-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %ymm2
1279 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1282 ; AVX512-32-LABEL: test_v4f64_ole_q:
1283 ; AVX512-32: # %bb.0:
1284 ; AVX512-32-NEXT: pushl %ebp
1285 ; AVX512-32-NEXT: movl %esp, %ebp
1286 ; AVX512-32-NEXT: andl $-32, %esp
1287 ; AVX512-32-NEXT: subl $32, %esp
1288 ; AVX512-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %k1
1289 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1290 ; AVX512-32-NEXT: movl %ebp, %esp
1291 ; AVX512-32-NEXT: popl %ebp
1292 ; AVX512-32-NEXT: retl
1294 ; AVX512-64-LABEL: test_v4f64_ole_q:
1295 ; AVX512-64: # %bb.0:
1296 ; AVX512-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %k1
1297 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1298 ; AVX512-64-NEXT: retq
1300 ; AVX512F-32-LABEL: test_v4f64_ole_q:
1301 ; AVX512F-32: # %bb.0:
1302 ; AVX512F-32-NEXT: pushl %ebp
1303 ; AVX512F-32-NEXT: movl %esp, %ebp
1304 ; AVX512F-32-NEXT: andl $-32, %esp
1305 ; AVX512F-32-NEXT: subl $32, %esp
1306 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1307 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1308 ; AVX512F-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %ymm2
1309 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1310 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1311 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1312 ; AVX512F-32-NEXT: movl %ebp, %esp
1313 ; AVX512F-32-NEXT: popl %ebp
1314 ; AVX512F-32-NEXT: retl
1316 ; AVX512F-64-LABEL: test_v4f64_ole_q:
1317 ; AVX512F-64: # %bb.0:
1318 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1319 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1320 ; AVX512F-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %ymm2
1321 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1322 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1323 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1324 ; AVX512F-64-NEXT: retq
1325 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1326 <4 x double> %f1, <4 x double> %f2, metadata !"ole",
1327 metadata !"fpexcept.strict") #0
1328 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1332 define <4 x i64> @test_v4f64_one_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1333 ; AVX-32-LABEL: test_v4f64_one_q:
1335 ; AVX-32-NEXT: pushl %ebp
1336 ; AVX-32-NEXT: movl %esp, %ebp
1337 ; AVX-32-NEXT: andl $-32, %esp
1338 ; AVX-32-NEXT: subl $32, %esp
1339 ; AVX-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %ymm2
1340 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1341 ; AVX-32-NEXT: movl %ebp, %esp
1342 ; AVX-32-NEXT: popl %ebp
1345 ; AVX-64-LABEL: test_v4f64_one_q:
1347 ; AVX-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %ymm2
1348 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1351 ; AVX512-32-LABEL: test_v4f64_one_q:
1352 ; AVX512-32: # %bb.0:
1353 ; AVX512-32-NEXT: pushl %ebp
1354 ; AVX512-32-NEXT: movl %esp, %ebp
1355 ; AVX512-32-NEXT: andl $-32, %esp
1356 ; AVX512-32-NEXT: subl $32, %esp
1357 ; AVX512-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %k1
1358 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1359 ; AVX512-32-NEXT: movl %ebp, %esp
1360 ; AVX512-32-NEXT: popl %ebp
1361 ; AVX512-32-NEXT: retl
1363 ; AVX512-64-LABEL: test_v4f64_one_q:
1364 ; AVX512-64: # %bb.0:
1365 ; AVX512-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %k1
1366 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1367 ; AVX512-64-NEXT: retq
1369 ; AVX512F-32-LABEL: test_v4f64_one_q:
1370 ; AVX512F-32: # %bb.0:
1371 ; AVX512F-32-NEXT: pushl %ebp
1372 ; AVX512F-32-NEXT: movl %esp, %ebp
1373 ; AVX512F-32-NEXT: andl $-32, %esp
1374 ; AVX512F-32-NEXT: subl $32, %esp
1375 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1376 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1377 ; AVX512F-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %ymm2
1378 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1379 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1380 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1381 ; AVX512F-32-NEXT: movl %ebp, %esp
1382 ; AVX512F-32-NEXT: popl %ebp
1383 ; AVX512F-32-NEXT: retl
1385 ; AVX512F-64-LABEL: test_v4f64_one_q:
1386 ; AVX512F-64: # %bb.0:
1387 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1388 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1389 ; AVX512F-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %ymm2
1390 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1391 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1392 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1393 ; AVX512F-64-NEXT: retq
1394 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1395 <4 x double> %f1, <4 x double> %f2, metadata !"one",
1396 metadata !"fpexcept.strict") #0
1397 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1401 define <4 x i64> @test_v4f64_ord_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1402 ; AVX-32-LABEL: test_v4f64_ord_q:
1404 ; AVX-32-NEXT: pushl %ebp
1405 ; AVX-32-NEXT: movl %esp, %ebp
1406 ; AVX-32-NEXT: andl $-32, %esp
1407 ; AVX-32-NEXT: subl $32, %esp
1408 ; AVX-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %ymm2
1409 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1410 ; AVX-32-NEXT: movl %ebp, %esp
1411 ; AVX-32-NEXT: popl %ebp
1414 ; AVX-64-LABEL: test_v4f64_ord_q:
1416 ; AVX-64-NEXT: vcmpordpd %ymm3, %ymm2, %ymm2
1417 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1420 ; AVX512-32-LABEL: test_v4f64_ord_q:
1421 ; AVX512-32: # %bb.0:
1422 ; AVX512-32-NEXT: pushl %ebp
1423 ; AVX512-32-NEXT: movl %esp, %ebp
1424 ; AVX512-32-NEXT: andl $-32, %esp
1425 ; AVX512-32-NEXT: subl $32, %esp
1426 ; AVX512-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %k1
1427 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1428 ; AVX512-32-NEXT: movl %ebp, %esp
1429 ; AVX512-32-NEXT: popl %ebp
1430 ; AVX512-32-NEXT: retl
1432 ; AVX512-64-LABEL: test_v4f64_ord_q:
1433 ; AVX512-64: # %bb.0:
1434 ; AVX512-64-NEXT: vcmpordpd %ymm3, %ymm2, %k1
1435 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1436 ; AVX512-64-NEXT: retq
1438 ; AVX512F-32-LABEL: test_v4f64_ord_q:
1439 ; AVX512F-32: # %bb.0:
1440 ; AVX512F-32-NEXT: pushl %ebp
1441 ; AVX512F-32-NEXT: movl %esp, %ebp
1442 ; AVX512F-32-NEXT: andl $-32, %esp
1443 ; AVX512F-32-NEXT: subl $32, %esp
1444 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1445 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1446 ; AVX512F-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %ymm2
1447 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1448 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1449 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1450 ; AVX512F-32-NEXT: movl %ebp, %esp
1451 ; AVX512F-32-NEXT: popl %ebp
1452 ; AVX512F-32-NEXT: retl
1454 ; AVX512F-64-LABEL: test_v4f64_ord_q:
1455 ; AVX512F-64: # %bb.0:
1456 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1457 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1458 ; AVX512F-64-NEXT: vcmpordpd %ymm3, %ymm2, %ymm2
1459 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1460 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1461 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1462 ; AVX512F-64-NEXT: retq
1463 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1464 <4 x double> %f1, <4 x double> %f2, metadata !"ord",
1465 metadata !"fpexcept.strict") #0
1466 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1470 define <4 x i64> @test_v4f64_ueq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1471 ; AVX-32-LABEL: test_v4f64_ueq_q:
1473 ; AVX-32-NEXT: pushl %ebp
1474 ; AVX-32-NEXT: movl %esp, %ebp
1475 ; AVX-32-NEXT: andl $-32, %esp
1476 ; AVX-32-NEXT: subl $32, %esp
1477 ; AVX-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %ymm2
1478 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1479 ; AVX-32-NEXT: movl %ebp, %esp
1480 ; AVX-32-NEXT: popl %ebp
1483 ; AVX-64-LABEL: test_v4f64_ueq_q:
1485 ; AVX-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %ymm2
1486 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1489 ; AVX512-32-LABEL: test_v4f64_ueq_q:
1490 ; AVX512-32: # %bb.0:
1491 ; AVX512-32-NEXT: pushl %ebp
1492 ; AVX512-32-NEXT: movl %esp, %ebp
1493 ; AVX512-32-NEXT: andl $-32, %esp
1494 ; AVX512-32-NEXT: subl $32, %esp
1495 ; AVX512-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %k1
1496 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1497 ; AVX512-32-NEXT: movl %ebp, %esp
1498 ; AVX512-32-NEXT: popl %ebp
1499 ; AVX512-32-NEXT: retl
1501 ; AVX512-64-LABEL: test_v4f64_ueq_q:
1502 ; AVX512-64: # %bb.0:
1503 ; AVX512-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %k1
1504 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1505 ; AVX512-64-NEXT: retq
1507 ; AVX512F-32-LABEL: test_v4f64_ueq_q:
1508 ; AVX512F-32: # %bb.0:
1509 ; AVX512F-32-NEXT: pushl %ebp
1510 ; AVX512F-32-NEXT: movl %esp, %ebp
1511 ; AVX512F-32-NEXT: andl $-32, %esp
1512 ; AVX512F-32-NEXT: subl $32, %esp
1513 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1514 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1515 ; AVX512F-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %ymm2
1516 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1517 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1518 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1519 ; AVX512F-32-NEXT: movl %ebp, %esp
1520 ; AVX512F-32-NEXT: popl %ebp
1521 ; AVX512F-32-NEXT: retl
1523 ; AVX512F-64-LABEL: test_v4f64_ueq_q:
1524 ; AVX512F-64: # %bb.0:
1525 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1526 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1527 ; AVX512F-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %ymm2
1528 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1529 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1530 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1531 ; AVX512F-64-NEXT: retq
1532 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1533 <4 x double> %f1, <4 x double> %f2, metadata !"ueq",
1534 metadata !"fpexcept.strict") #0
1535 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1539 define <4 x i64> @test_v4f64_ugt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1540 ; AVX-32-LABEL: test_v4f64_ugt_q:
1542 ; AVX-32-NEXT: pushl %ebp
1543 ; AVX-32-NEXT: movl %esp, %ebp
1544 ; AVX-32-NEXT: andl $-32, %esp
1545 ; AVX-32-NEXT: subl $32, %esp
1546 ; AVX-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %ymm2
1547 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1548 ; AVX-32-NEXT: movl %ebp, %esp
1549 ; AVX-32-NEXT: popl %ebp
1552 ; AVX-64-LABEL: test_v4f64_ugt_q:
1554 ; AVX-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %ymm2
1555 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1558 ; AVX512-32-LABEL: test_v4f64_ugt_q:
1559 ; AVX512-32: # %bb.0:
1560 ; AVX512-32-NEXT: pushl %ebp
1561 ; AVX512-32-NEXT: movl %esp, %ebp
1562 ; AVX512-32-NEXT: andl $-32, %esp
1563 ; AVX512-32-NEXT: subl $32, %esp
1564 ; AVX512-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %k1
1565 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1566 ; AVX512-32-NEXT: movl %ebp, %esp
1567 ; AVX512-32-NEXT: popl %ebp
1568 ; AVX512-32-NEXT: retl
1570 ; AVX512-64-LABEL: test_v4f64_ugt_q:
1571 ; AVX512-64: # %bb.0:
1572 ; AVX512-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %k1
1573 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1574 ; AVX512-64-NEXT: retq
1576 ; AVX512F-32-LABEL: test_v4f64_ugt_q:
1577 ; AVX512F-32: # %bb.0:
1578 ; AVX512F-32-NEXT: pushl %ebp
1579 ; AVX512F-32-NEXT: movl %esp, %ebp
1580 ; AVX512F-32-NEXT: andl $-32, %esp
1581 ; AVX512F-32-NEXT: subl $32, %esp
1582 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1583 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1584 ; AVX512F-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %ymm2
1585 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1586 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1587 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1588 ; AVX512F-32-NEXT: movl %ebp, %esp
1589 ; AVX512F-32-NEXT: popl %ebp
1590 ; AVX512F-32-NEXT: retl
1592 ; AVX512F-64-LABEL: test_v4f64_ugt_q:
1593 ; AVX512F-64: # %bb.0:
1594 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1595 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1596 ; AVX512F-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %ymm2
1597 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1598 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1599 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1600 ; AVX512F-64-NEXT: retq
1601 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1602 <4 x double> %f1, <4 x double> %f2, metadata !"ugt",
1603 metadata !"fpexcept.strict") #0
1604 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1608 define <4 x i64> @test_v4f64_uge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1609 ; AVX-32-LABEL: test_v4f64_uge_q:
1611 ; AVX-32-NEXT: pushl %ebp
1612 ; AVX-32-NEXT: movl %esp, %ebp
1613 ; AVX-32-NEXT: andl $-32, %esp
1614 ; AVX-32-NEXT: subl $32, %esp
1615 ; AVX-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %ymm2
1616 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1617 ; AVX-32-NEXT: movl %ebp, %esp
1618 ; AVX-32-NEXT: popl %ebp
1621 ; AVX-64-LABEL: test_v4f64_uge_q:
1623 ; AVX-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %ymm2
1624 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1627 ; AVX512-32-LABEL: test_v4f64_uge_q:
1628 ; AVX512-32: # %bb.0:
1629 ; AVX512-32-NEXT: pushl %ebp
1630 ; AVX512-32-NEXT: movl %esp, %ebp
1631 ; AVX512-32-NEXT: andl $-32, %esp
1632 ; AVX512-32-NEXT: subl $32, %esp
1633 ; AVX512-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %k1
1634 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1635 ; AVX512-32-NEXT: movl %ebp, %esp
1636 ; AVX512-32-NEXT: popl %ebp
1637 ; AVX512-32-NEXT: retl
1639 ; AVX512-64-LABEL: test_v4f64_uge_q:
1640 ; AVX512-64: # %bb.0:
1641 ; AVX512-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %k1
1642 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1643 ; AVX512-64-NEXT: retq
1645 ; AVX512F-32-LABEL: test_v4f64_uge_q:
1646 ; AVX512F-32: # %bb.0:
1647 ; AVX512F-32-NEXT: pushl %ebp
1648 ; AVX512F-32-NEXT: movl %esp, %ebp
1649 ; AVX512F-32-NEXT: andl $-32, %esp
1650 ; AVX512F-32-NEXT: subl $32, %esp
1651 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1652 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1653 ; AVX512F-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %ymm2
1654 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1655 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1656 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1657 ; AVX512F-32-NEXT: movl %ebp, %esp
1658 ; AVX512F-32-NEXT: popl %ebp
1659 ; AVX512F-32-NEXT: retl
1661 ; AVX512F-64-LABEL: test_v4f64_uge_q:
1662 ; AVX512F-64: # %bb.0:
1663 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1664 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1665 ; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %ymm2
1666 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1667 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1668 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1669 ; AVX512F-64-NEXT: retq
1670 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1671 <4 x double> %f1, <4 x double> %f2, metadata !"uge",
1672 metadata !"fpexcept.strict") #0
1673 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1677 define <4 x i64> @test_v4f64_ult_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1678 ; AVX-32-LABEL: test_v4f64_ult_q:
1680 ; AVX-32-NEXT: pushl %ebp
1681 ; AVX-32-NEXT: movl %esp, %ebp
1682 ; AVX-32-NEXT: andl $-32, %esp
1683 ; AVX-32-NEXT: subl $32, %esp
1684 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
1685 ; AVX-32-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1686 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1687 ; AVX-32-NEXT: movl %ebp, %esp
1688 ; AVX-32-NEXT: popl %ebp
1691 ; AVX-64-LABEL: test_v4f64_ult_q:
1693 ; AVX-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1694 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1697 ; AVX512-32-LABEL: test_v4f64_ult_q:
1698 ; AVX512-32: # %bb.0:
1699 ; AVX512-32-NEXT: pushl %ebp
1700 ; AVX512-32-NEXT: movl %esp, %ebp
1701 ; AVX512-32-NEXT: andl $-32, %esp
1702 ; AVX512-32-NEXT: subl $32, %esp
1703 ; AVX512-32-NEXT: vcmpnge_uqpd 8(%ebp), %ymm2, %k1
1704 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1705 ; AVX512-32-NEXT: movl %ebp, %esp
1706 ; AVX512-32-NEXT: popl %ebp
1707 ; AVX512-32-NEXT: retl
1709 ; AVX512-64-LABEL: test_v4f64_ult_q:
1710 ; AVX512-64: # %bb.0:
1711 ; AVX512-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %k1
1712 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1713 ; AVX512-64-NEXT: retq
1715 ; AVX512F-32-LABEL: test_v4f64_ult_q:
1716 ; AVX512F-32: # %bb.0:
1717 ; AVX512F-32-NEXT: pushl %ebp
1718 ; AVX512F-32-NEXT: movl %esp, %ebp
1719 ; AVX512F-32-NEXT: andl $-32, %esp
1720 ; AVX512F-32-NEXT: subl $32, %esp
1721 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1722 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1723 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
1724 ; AVX512F-32-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1725 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1726 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1727 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1728 ; AVX512F-32-NEXT: movl %ebp, %esp
1729 ; AVX512F-32-NEXT: popl %ebp
1730 ; AVX512F-32-NEXT: retl
1732 ; AVX512F-64-LABEL: test_v4f64_ult_q:
1733 ; AVX512F-64: # %bb.0:
1734 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1735 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1736 ; AVX512F-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1737 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1738 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1739 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1740 ; AVX512F-64-NEXT: retq
1741 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1742 <4 x double> %f1, <4 x double> %f2, metadata !"ult",
1743 metadata !"fpexcept.strict") #0
1744 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1748 define <4 x i64> @test_v4f64_ule_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1749 ; AVX-32-LABEL: test_v4f64_ule_q:
1751 ; AVX-32-NEXT: pushl %ebp
1752 ; AVX-32-NEXT: movl %esp, %ebp
1753 ; AVX-32-NEXT: andl $-32, %esp
1754 ; AVX-32-NEXT: subl $32, %esp
1755 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
1756 ; AVX-32-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1757 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1758 ; AVX-32-NEXT: movl %ebp, %esp
1759 ; AVX-32-NEXT: popl %ebp
1762 ; AVX-64-LABEL: test_v4f64_ule_q:
1764 ; AVX-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1765 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1768 ; AVX512-32-LABEL: test_v4f64_ule_q:
1769 ; AVX512-32: # %bb.0:
1770 ; AVX512-32-NEXT: pushl %ebp
1771 ; AVX512-32-NEXT: movl %esp, %ebp
1772 ; AVX512-32-NEXT: andl $-32, %esp
1773 ; AVX512-32-NEXT: subl $32, %esp
1774 ; AVX512-32-NEXT: vcmpngt_uqpd 8(%ebp), %ymm2, %k1
1775 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1776 ; AVX512-32-NEXT: movl %ebp, %esp
1777 ; AVX512-32-NEXT: popl %ebp
1778 ; AVX512-32-NEXT: retl
1780 ; AVX512-64-LABEL: test_v4f64_ule_q:
1781 ; AVX512-64: # %bb.0:
1782 ; AVX512-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %k1
1783 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1784 ; AVX512-64-NEXT: retq
1786 ; AVX512F-32-LABEL: test_v4f64_ule_q:
1787 ; AVX512F-32: # %bb.0:
1788 ; AVX512F-32-NEXT: pushl %ebp
1789 ; AVX512F-32-NEXT: movl %esp, %ebp
1790 ; AVX512F-32-NEXT: andl $-32, %esp
1791 ; AVX512F-32-NEXT: subl $32, %esp
1792 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1793 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1794 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
1795 ; AVX512F-32-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1796 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1797 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1798 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1799 ; AVX512F-32-NEXT: movl %ebp, %esp
1800 ; AVX512F-32-NEXT: popl %ebp
1801 ; AVX512F-32-NEXT: retl
1803 ; AVX512F-64-LABEL: test_v4f64_ule_q:
1804 ; AVX512F-64: # %bb.0:
1805 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1806 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1807 ; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1808 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1809 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1810 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1811 ; AVX512F-64-NEXT: retq
1812 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1813 <4 x double> %f1, <4 x double> %f2, metadata !"ule",
1814 metadata !"fpexcept.strict") #0
1815 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1819 define <4 x i64> @test_v4f64_une_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1820 ; AVX-32-LABEL: test_v4f64_une_q:
1822 ; AVX-32-NEXT: pushl %ebp
1823 ; AVX-32-NEXT: movl %esp, %ebp
1824 ; AVX-32-NEXT: andl $-32, %esp
1825 ; AVX-32-NEXT: subl $32, %esp
1826 ; AVX-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %ymm2
1827 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1828 ; AVX-32-NEXT: movl %ebp, %esp
1829 ; AVX-32-NEXT: popl %ebp
1832 ; AVX-64-LABEL: test_v4f64_une_q:
1834 ; AVX-64-NEXT: vcmpneqpd %ymm3, %ymm2, %ymm2
1835 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1838 ; AVX512-32-LABEL: test_v4f64_une_q:
1839 ; AVX512-32: # %bb.0:
1840 ; AVX512-32-NEXT: pushl %ebp
1841 ; AVX512-32-NEXT: movl %esp, %ebp
1842 ; AVX512-32-NEXT: andl $-32, %esp
1843 ; AVX512-32-NEXT: subl $32, %esp
1844 ; AVX512-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %k1
1845 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1846 ; AVX512-32-NEXT: movl %ebp, %esp
1847 ; AVX512-32-NEXT: popl %ebp
1848 ; AVX512-32-NEXT: retl
1850 ; AVX512-64-LABEL: test_v4f64_une_q:
1851 ; AVX512-64: # %bb.0:
1852 ; AVX512-64-NEXT: vcmpneqpd %ymm3, %ymm2, %k1
1853 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1854 ; AVX512-64-NEXT: retq
1856 ; AVX512F-32-LABEL: test_v4f64_une_q:
1857 ; AVX512F-32: # %bb.0:
1858 ; AVX512F-32-NEXT: pushl %ebp
1859 ; AVX512F-32-NEXT: movl %esp, %ebp
1860 ; AVX512F-32-NEXT: andl $-32, %esp
1861 ; AVX512F-32-NEXT: subl $32, %esp
1862 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1863 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1864 ; AVX512F-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %ymm2
1865 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1866 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1867 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1868 ; AVX512F-32-NEXT: movl %ebp, %esp
1869 ; AVX512F-32-NEXT: popl %ebp
1870 ; AVX512F-32-NEXT: retl
1872 ; AVX512F-64-LABEL: test_v4f64_une_q:
1873 ; AVX512F-64: # %bb.0:
1874 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1875 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1876 ; AVX512F-64-NEXT: vcmpneqpd %ymm3, %ymm2, %ymm2
1877 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1878 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1879 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1880 ; AVX512F-64-NEXT: retq
1881 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1882 <4 x double> %f1, <4 x double> %f2, metadata !"une",
1883 metadata !"fpexcept.strict") #0
1884 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1888 define <4 x i64> @test_v4f64_uno_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
1889 ; AVX-32-LABEL: test_v4f64_uno_q:
1891 ; AVX-32-NEXT: pushl %ebp
1892 ; AVX-32-NEXT: movl %esp, %ebp
1893 ; AVX-32-NEXT: andl $-32, %esp
1894 ; AVX-32-NEXT: subl $32, %esp
1895 ; AVX-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %ymm2
1896 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1897 ; AVX-32-NEXT: movl %ebp, %esp
1898 ; AVX-32-NEXT: popl %ebp
1901 ; AVX-64-LABEL: test_v4f64_uno_q:
1903 ; AVX-64-NEXT: vcmpunordpd %ymm3, %ymm2, %ymm2
1904 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1907 ; AVX512-32-LABEL: test_v4f64_uno_q:
1908 ; AVX512-32: # %bb.0:
1909 ; AVX512-32-NEXT: pushl %ebp
1910 ; AVX512-32-NEXT: movl %esp, %ebp
1911 ; AVX512-32-NEXT: andl $-32, %esp
1912 ; AVX512-32-NEXT: subl $32, %esp
1913 ; AVX512-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %k1
1914 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1915 ; AVX512-32-NEXT: movl %ebp, %esp
1916 ; AVX512-32-NEXT: popl %ebp
1917 ; AVX512-32-NEXT: retl
1919 ; AVX512-64-LABEL: test_v4f64_uno_q:
1920 ; AVX512-64: # %bb.0:
1921 ; AVX512-64-NEXT: vcmpunordpd %ymm3, %ymm2, %k1
1922 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
1923 ; AVX512-64-NEXT: retq
1925 ; AVX512F-32-LABEL: test_v4f64_uno_q:
1926 ; AVX512F-32: # %bb.0:
1927 ; AVX512F-32-NEXT: pushl %ebp
1928 ; AVX512F-32-NEXT: movl %esp, %ebp
1929 ; AVX512F-32-NEXT: andl $-32, %esp
1930 ; AVX512F-32-NEXT: subl $32, %esp
1931 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1932 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1933 ; AVX512F-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %ymm2
1934 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
1935 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1936 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1937 ; AVX512F-32-NEXT: movl %ebp, %esp
1938 ; AVX512F-32-NEXT: popl %ebp
1939 ; AVX512F-32-NEXT: retl
1941 ; AVX512F-64-LABEL: test_v4f64_uno_q:
1942 ; AVX512F-64: # %bb.0:
1943 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1944 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1945 ; AVX512F-64-NEXT: vcmpunordpd %ymm3, %ymm2, %ymm2
1946 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
1947 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1948 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1949 ; AVX512F-64-NEXT: retq
1950 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(
1951 <4 x double> %f1, <4 x double> %f2, metadata !"uno",
1952 metadata !"fpexcept.strict") #0
1953 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
1957 define <8 x i32> @test_v8f32_oeq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
1958 ; AVX-32-LABEL: test_v8f32_oeq_s:
1960 ; AVX-32-NEXT: pushl %ebp
1961 ; AVX-32-NEXT: movl %esp, %ebp
1962 ; AVX-32-NEXT: andl $-32, %esp
1963 ; AVX-32-NEXT: subl $32, %esp
1964 ; AVX-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %ymm2
1965 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
1966 ; AVX-32-NEXT: movl %ebp, %esp
1967 ; AVX-32-NEXT: popl %ebp
1970 ; AVX-64-LABEL: test_v8f32_oeq_s:
1972 ; AVX-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %ymm2
1973 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
1976 ; AVX512-32-LABEL: test_v8f32_oeq_s:
1977 ; AVX512-32: # %bb.0:
1978 ; AVX512-32-NEXT: pushl %ebp
1979 ; AVX512-32-NEXT: movl %esp, %ebp
1980 ; AVX512-32-NEXT: andl $-32, %esp
1981 ; AVX512-32-NEXT: subl $32, %esp
1982 ; AVX512-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %k1
1983 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
1984 ; AVX512-32-NEXT: movl %ebp, %esp
1985 ; AVX512-32-NEXT: popl %ebp
1986 ; AVX512-32-NEXT: retl
1988 ; AVX512-64-LABEL: test_v8f32_oeq_s:
1989 ; AVX512-64: # %bb.0:
1990 ; AVX512-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %k1
1991 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
1992 ; AVX512-64-NEXT: retq
1994 ; AVX512F-32-LABEL: test_v8f32_oeq_s:
1995 ; AVX512F-32: # %bb.0:
1996 ; AVX512F-32-NEXT: pushl %ebp
1997 ; AVX512F-32-NEXT: movl %esp, %ebp
1998 ; AVX512F-32-NEXT: andl $-32, %esp
1999 ; AVX512F-32-NEXT: subl $32, %esp
2000 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2001 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2002 ; AVX512F-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %ymm2
2003 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2004 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2005 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2006 ; AVX512F-32-NEXT: movl %ebp, %esp
2007 ; AVX512F-32-NEXT: popl %ebp
2008 ; AVX512F-32-NEXT: retl
2010 ; AVX512F-64-LABEL: test_v8f32_oeq_s:
2011 ; AVX512F-64: # %bb.0:
2012 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2013 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2014 ; AVX512F-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %ymm2
2015 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2016 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2017 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2018 ; AVX512F-64-NEXT: retq
2019 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2020 <8 x float> %f1, <8 x float> %f2, metadata !"oeq",
2021 metadata !"fpexcept.strict") #0
2022 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2026 define <8 x i32> @test_v8f32_ogt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2027 ; AVX-32-LABEL: test_v8f32_ogt_s:
2029 ; AVX-32-NEXT: pushl %ebp
2030 ; AVX-32-NEXT: movl %esp, %ebp
2031 ; AVX-32-NEXT: andl $-32, %esp
2032 ; AVX-32-NEXT: subl $32, %esp
2033 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
2034 ; AVX-32-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2035 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2036 ; AVX-32-NEXT: movl %ebp, %esp
2037 ; AVX-32-NEXT: popl %ebp
2040 ; AVX-64-LABEL: test_v8f32_ogt_s:
2042 ; AVX-64-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2043 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2046 ; AVX512-32-LABEL: test_v8f32_ogt_s:
2047 ; AVX512-32: # %bb.0:
2048 ; AVX512-32-NEXT: pushl %ebp
2049 ; AVX512-32-NEXT: movl %esp, %ebp
2050 ; AVX512-32-NEXT: andl $-32, %esp
2051 ; AVX512-32-NEXT: subl $32, %esp
2052 ; AVX512-32-NEXT: vcmpgtps 8(%ebp), %ymm2, %k1
2053 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2054 ; AVX512-32-NEXT: movl %ebp, %esp
2055 ; AVX512-32-NEXT: popl %ebp
2056 ; AVX512-32-NEXT: retl
2058 ; AVX512-64-LABEL: test_v8f32_ogt_s:
2059 ; AVX512-64: # %bb.0:
2060 ; AVX512-64-NEXT: vcmpltps %ymm2, %ymm3, %k1
2061 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2062 ; AVX512-64-NEXT: retq
2064 ; AVX512F-32-LABEL: test_v8f32_ogt_s:
2065 ; AVX512F-32: # %bb.0:
2066 ; AVX512F-32-NEXT: pushl %ebp
2067 ; AVX512F-32-NEXT: movl %esp, %ebp
2068 ; AVX512F-32-NEXT: andl $-32, %esp
2069 ; AVX512F-32-NEXT: subl $32, %esp
2070 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2071 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2072 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
2073 ; AVX512F-32-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2074 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2075 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2076 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2077 ; AVX512F-32-NEXT: movl %ebp, %esp
2078 ; AVX512F-32-NEXT: popl %ebp
2079 ; AVX512F-32-NEXT: retl
2081 ; AVX512F-64-LABEL: test_v8f32_ogt_s:
2082 ; AVX512F-64: # %bb.0:
2083 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2084 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2085 ; AVX512F-64-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2086 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2087 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2088 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2089 ; AVX512F-64-NEXT: retq
2090 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2091 <8 x float> %f1, <8 x float> %f2, metadata !"ogt",
2092 metadata !"fpexcept.strict") #0
2093 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2097 define <8 x i32> @test_v8f32_oge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2098 ; AVX-32-LABEL: test_v8f32_oge_s:
2100 ; AVX-32-NEXT: pushl %ebp
2101 ; AVX-32-NEXT: movl %esp, %ebp
2102 ; AVX-32-NEXT: andl $-32, %esp
2103 ; AVX-32-NEXT: subl $32, %esp
2104 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
2105 ; AVX-32-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2106 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2107 ; AVX-32-NEXT: movl %ebp, %esp
2108 ; AVX-32-NEXT: popl %ebp
2111 ; AVX-64-LABEL: test_v8f32_oge_s:
2113 ; AVX-64-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2114 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2117 ; AVX512-32-LABEL: test_v8f32_oge_s:
2118 ; AVX512-32: # %bb.0:
2119 ; AVX512-32-NEXT: pushl %ebp
2120 ; AVX512-32-NEXT: movl %esp, %ebp
2121 ; AVX512-32-NEXT: andl $-32, %esp
2122 ; AVX512-32-NEXT: subl $32, %esp
2123 ; AVX512-32-NEXT: vcmpgeps 8(%ebp), %ymm2, %k1
2124 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2125 ; AVX512-32-NEXT: movl %ebp, %esp
2126 ; AVX512-32-NEXT: popl %ebp
2127 ; AVX512-32-NEXT: retl
2129 ; AVX512-64-LABEL: test_v8f32_oge_s:
2130 ; AVX512-64: # %bb.0:
2131 ; AVX512-64-NEXT: vcmpleps %ymm2, %ymm3, %k1
2132 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2133 ; AVX512-64-NEXT: retq
2135 ; AVX512F-32-LABEL: test_v8f32_oge_s:
2136 ; AVX512F-32: # %bb.0:
2137 ; AVX512F-32-NEXT: pushl %ebp
2138 ; AVX512F-32-NEXT: movl %esp, %ebp
2139 ; AVX512F-32-NEXT: andl $-32, %esp
2140 ; AVX512F-32-NEXT: subl $32, %esp
2141 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2142 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2143 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
2144 ; AVX512F-32-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2145 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2146 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2147 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2148 ; AVX512F-32-NEXT: movl %ebp, %esp
2149 ; AVX512F-32-NEXT: popl %ebp
2150 ; AVX512F-32-NEXT: retl
2152 ; AVX512F-64-LABEL: test_v8f32_oge_s:
2153 ; AVX512F-64: # %bb.0:
2154 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2155 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2156 ; AVX512F-64-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2157 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2158 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2159 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2160 ; AVX512F-64-NEXT: retq
2161 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2162 <8 x float> %f1, <8 x float> %f2, metadata !"oge",
2163 metadata !"fpexcept.strict") #0
2164 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2168 define <8 x i32> @test_v8f32_olt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2169 ; AVX-32-LABEL: test_v8f32_olt_s:
2171 ; AVX-32-NEXT: pushl %ebp
2172 ; AVX-32-NEXT: movl %esp, %ebp
2173 ; AVX-32-NEXT: andl $-32, %esp
2174 ; AVX-32-NEXT: subl $32, %esp
2175 ; AVX-32-NEXT: vcmpltps 8(%ebp), %ymm2, %ymm2
2176 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2177 ; AVX-32-NEXT: movl %ebp, %esp
2178 ; AVX-32-NEXT: popl %ebp
2181 ; AVX-64-LABEL: test_v8f32_olt_s:
2183 ; AVX-64-NEXT: vcmpltps %ymm3, %ymm2, %ymm2
2184 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2187 ; AVX512-32-LABEL: test_v8f32_olt_s:
2188 ; AVX512-32: # %bb.0:
2189 ; AVX512-32-NEXT: pushl %ebp
2190 ; AVX512-32-NEXT: movl %esp, %ebp
2191 ; AVX512-32-NEXT: andl $-32, %esp
2192 ; AVX512-32-NEXT: subl $32, %esp
2193 ; AVX512-32-NEXT: vcmpltps 8(%ebp), %ymm2, %k1
2194 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2195 ; AVX512-32-NEXT: movl %ebp, %esp
2196 ; AVX512-32-NEXT: popl %ebp
2197 ; AVX512-32-NEXT: retl
2199 ; AVX512-64-LABEL: test_v8f32_olt_s:
2200 ; AVX512-64: # %bb.0:
2201 ; AVX512-64-NEXT: vcmpltps %ymm3, %ymm2, %k1
2202 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2203 ; AVX512-64-NEXT: retq
2205 ; AVX512F-32-LABEL: test_v8f32_olt_s:
2206 ; AVX512F-32: # %bb.0:
2207 ; AVX512F-32-NEXT: pushl %ebp
2208 ; AVX512F-32-NEXT: movl %esp, %ebp
2209 ; AVX512F-32-NEXT: andl $-32, %esp
2210 ; AVX512F-32-NEXT: subl $32, %esp
2211 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2212 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2213 ; AVX512F-32-NEXT: vcmpltps 8(%ebp), %ymm2, %ymm2
2214 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2215 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2216 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2217 ; AVX512F-32-NEXT: movl %ebp, %esp
2218 ; AVX512F-32-NEXT: popl %ebp
2219 ; AVX512F-32-NEXT: retl
2221 ; AVX512F-64-LABEL: test_v8f32_olt_s:
2222 ; AVX512F-64: # %bb.0:
2223 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2224 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2225 ; AVX512F-64-NEXT: vcmpltps %ymm3, %ymm2, %ymm2
2226 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2227 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2228 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2229 ; AVX512F-64-NEXT: retq
2230 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2231 <8 x float> %f1, <8 x float> %f2, metadata !"olt",
2232 metadata !"fpexcept.strict") #0
2233 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2237 define <8 x i32> @test_v8f32_ole_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2238 ; AVX-32-LABEL: test_v8f32_ole_s:
2240 ; AVX-32-NEXT: pushl %ebp
2241 ; AVX-32-NEXT: movl %esp, %ebp
2242 ; AVX-32-NEXT: andl $-32, %esp
2243 ; AVX-32-NEXT: subl $32, %esp
2244 ; AVX-32-NEXT: vcmpleps 8(%ebp), %ymm2, %ymm2
2245 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2246 ; AVX-32-NEXT: movl %ebp, %esp
2247 ; AVX-32-NEXT: popl %ebp
2250 ; AVX-64-LABEL: test_v8f32_ole_s:
2252 ; AVX-64-NEXT: vcmpleps %ymm3, %ymm2, %ymm2
2253 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2256 ; AVX512-32-LABEL: test_v8f32_ole_s:
2257 ; AVX512-32: # %bb.0:
2258 ; AVX512-32-NEXT: pushl %ebp
2259 ; AVX512-32-NEXT: movl %esp, %ebp
2260 ; AVX512-32-NEXT: andl $-32, %esp
2261 ; AVX512-32-NEXT: subl $32, %esp
2262 ; AVX512-32-NEXT: vcmpleps 8(%ebp), %ymm2, %k1
2263 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2264 ; AVX512-32-NEXT: movl %ebp, %esp
2265 ; AVX512-32-NEXT: popl %ebp
2266 ; AVX512-32-NEXT: retl
2268 ; AVX512-64-LABEL: test_v8f32_ole_s:
2269 ; AVX512-64: # %bb.0:
2270 ; AVX512-64-NEXT: vcmpleps %ymm3, %ymm2, %k1
2271 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2272 ; AVX512-64-NEXT: retq
2274 ; AVX512F-32-LABEL: test_v8f32_ole_s:
2275 ; AVX512F-32: # %bb.0:
2276 ; AVX512F-32-NEXT: pushl %ebp
2277 ; AVX512F-32-NEXT: movl %esp, %ebp
2278 ; AVX512F-32-NEXT: andl $-32, %esp
2279 ; AVX512F-32-NEXT: subl $32, %esp
2280 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2281 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2282 ; AVX512F-32-NEXT: vcmpleps 8(%ebp), %ymm2, %ymm2
2283 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2284 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2285 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2286 ; AVX512F-32-NEXT: movl %ebp, %esp
2287 ; AVX512F-32-NEXT: popl %ebp
2288 ; AVX512F-32-NEXT: retl
2290 ; AVX512F-64-LABEL: test_v8f32_ole_s:
2291 ; AVX512F-64: # %bb.0:
2292 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2293 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2294 ; AVX512F-64-NEXT: vcmpleps %ymm3, %ymm2, %ymm2
2295 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2296 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2297 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2298 ; AVX512F-64-NEXT: retq
2299 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2300 <8 x float> %f1, <8 x float> %f2, metadata !"ole",
2301 metadata !"fpexcept.strict") #0
2302 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2306 define <8 x i32> @test_v8f32_one_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2307 ; AVX-32-LABEL: test_v8f32_one_s:
2309 ; AVX-32-NEXT: pushl %ebp
2310 ; AVX-32-NEXT: movl %esp, %ebp
2311 ; AVX-32-NEXT: andl $-32, %esp
2312 ; AVX-32-NEXT: subl $32, %esp
2313 ; AVX-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %ymm2
2314 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2315 ; AVX-32-NEXT: movl %ebp, %esp
2316 ; AVX-32-NEXT: popl %ebp
2319 ; AVX-64-LABEL: test_v8f32_one_s:
2321 ; AVX-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %ymm2
2322 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2325 ; AVX512-32-LABEL: test_v8f32_one_s:
2326 ; AVX512-32: # %bb.0:
2327 ; AVX512-32-NEXT: pushl %ebp
2328 ; AVX512-32-NEXT: movl %esp, %ebp
2329 ; AVX512-32-NEXT: andl $-32, %esp
2330 ; AVX512-32-NEXT: subl $32, %esp
2331 ; AVX512-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %k1
2332 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2333 ; AVX512-32-NEXT: movl %ebp, %esp
2334 ; AVX512-32-NEXT: popl %ebp
2335 ; AVX512-32-NEXT: retl
2337 ; AVX512-64-LABEL: test_v8f32_one_s:
2338 ; AVX512-64: # %bb.0:
2339 ; AVX512-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %k1
2340 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2341 ; AVX512-64-NEXT: retq
2343 ; AVX512F-32-LABEL: test_v8f32_one_s:
2344 ; AVX512F-32: # %bb.0:
2345 ; AVX512F-32-NEXT: pushl %ebp
2346 ; AVX512F-32-NEXT: movl %esp, %ebp
2347 ; AVX512F-32-NEXT: andl $-32, %esp
2348 ; AVX512F-32-NEXT: subl $32, %esp
2349 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2350 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2351 ; AVX512F-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %ymm2
2352 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2353 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2354 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2355 ; AVX512F-32-NEXT: movl %ebp, %esp
2356 ; AVX512F-32-NEXT: popl %ebp
2357 ; AVX512F-32-NEXT: retl
2359 ; AVX512F-64-LABEL: test_v8f32_one_s:
2360 ; AVX512F-64: # %bb.0:
2361 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2362 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2363 ; AVX512F-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %ymm2
2364 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2365 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2366 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2367 ; AVX512F-64-NEXT: retq
2368 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2369 <8 x float> %f1, <8 x float> %f2, metadata !"one",
2370 metadata !"fpexcept.strict") #0
2371 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2375 define <8 x i32> @test_v8f32_ord_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2376 ; AVX-32-LABEL: test_v8f32_ord_s:
2378 ; AVX-32-NEXT: pushl %ebp
2379 ; AVX-32-NEXT: movl %esp, %ebp
2380 ; AVX-32-NEXT: andl $-32, %esp
2381 ; AVX-32-NEXT: subl $32, %esp
2382 ; AVX-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %ymm2
2383 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2384 ; AVX-32-NEXT: movl %ebp, %esp
2385 ; AVX-32-NEXT: popl %ebp
2388 ; AVX-64-LABEL: test_v8f32_ord_s:
2390 ; AVX-64-NEXT: vcmpord_sps %ymm3, %ymm2, %ymm2
2391 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2394 ; AVX512-32-LABEL: test_v8f32_ord_s:
2395 ; AVX512-32: # %bb.0:
2396 ; AVX512-32-NEXT: pushl %ebp
2397 ; AVX512-32-NEXT: movl %esp, %ebp
2398 ; AVX512-32-NEXT: andl $-32, %esp
2399 ; AVX512-32-NEXT: subl $32, %esp
2400 ; AVX512-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %k1
2401 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2402 ; AVX512-32-NEXT: movl %ebp, %esp
2403 ; AVX512-32-NEXT: popl %ebp
2404 ; AVX512-32-NEXT: retl
2406 ; AVX512-64-LABEL: test_v8f32_ord_s:
2407 ; AVX512-64: # %bb.0:
2408 ; AVX512-64-NEXT: vcmpord_sps %ymm3, %ymm2, %k1
2409 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2410 ; AVX512-64-NEXT: retq
2412 ; AVX512F-32-LABEL: test_v8f32_ord_s:
2413 ; AVX512F-32: # %bb.0:
2414 ; AVX512F-32-NEXT: pushl %ebp
2415 ; AVX512F-32-NEXT: movl %esp, %ebp
2416 ; AVX512F-32-NEXT: andl $-32, %esp
2417 ; AVX512F-32-NEXT: subl $32, %esp
2418 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2419 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2420 ; AVX512F-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %ymm2
2421 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2422 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2423 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2424 ; AVX512F-32-NEXT: movl %ebp, %esp
2425 ; AVX512F-32-NEXT: popl %ebp
2426 ; AVX512F-32-NEXT: retl
2428 ; AVX512F-64-LABEL: test_v8f32_ord_s:
2429 ; AVX512F-64: # %bb.0:
2430 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2431 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2432 ; AVX512F-64-NEXT: vcmpord_sps %ymm3, %ymm2, %ymm2
2433 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2434 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2435 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2436 ; AVX512F-64-NEXT: retq
2437 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2438 <8 x float> %f1, <8 x float> %f2, metadata !"ord",
2439 metadata !"fpexcept.strict") #0
2440 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2444 define <8 x i32> @test_v8f32_ueq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2445 ; AVX-32-LABEL: test_v8f32_ueq_s:
2447 ; AVX-32-NEXT: pushl %ebp
2448 ; AVX-32-NEXT: movl %esp, %ebp
2449 ; AVX-32-NEXT: andl $-32, %esp
2450 ; AVX-32-NEXT: subl $32, %esp
2451 ; AVX-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %ymm2
2452 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2453 ; AVX-32-NEXT: movl %ebp, %esp
2454 ; AVX-32-NEXT: popl %ebp
2457 ; AVX-64-LABEL: test_v8f32_ueq_s:
2459 ; AVX-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %ymm2
2460 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2463 ; AVX512-32-LABEL: test_v8f32_ueq_s:
2464 ; AVX512-32: # %bb.0:
2465 ; AVX512-32-NEXT: pushl %ebp
2466 ; AVX512-32-NEXT: movl %esp, %ebp
2467 ; AVX512-32-NEXT: andl $-32, %esp
2468 ; AVX512-32-NEXT: subl $32, %esp
2469 ; AVX512-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %k1
2470 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2471 ; AVX512-32-NEXT: movl %ebp, %esp
2472 ; AVX512-32-NEXT: popl %ebp
2473 ; AVX512-32-NEXT: retl
2475 ; AVX512-64-LABEL: test_v8f32_ueq_s:
2476 ; AVX512-64: # %bb.0:
2477 ; AVX512-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %k1
2478 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2479 ; AVX512-64-NEXT: retq
2481 ; AVX512F-32-LABEL: test_v8f32_ueq_s:
2482 ; AVX512F-32: # %bb.0:
2483 ; AVX512F-32-NEXT: pushl %ebp
2484 ; AVX512F-32-NEXT: movl %esp, %ebp
2485 ; AVX512F-32-NEXT: andl $-32, %esp
2486 ; AVX512F-32-NEXT: subl $32, %esp
2487 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2488 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2489 ; AVX512F-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %ymm2
2490 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2491 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2492 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2493 ; AVX512F-32-NEXT: movl %ebp, %esp
2494 ; AVX512F-32-NEXT: popl %ebp
2495 ; AVX512F-32-NEXT: retl
2497 ; AVX512F-64-LABEL: test_v8f32_ueq_s:
2498 ; AVX512F-64: # %bb.0:
2499 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2500 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2501 ; AVX512F-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %ymm2
2502 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2503 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2504 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2505 ; AVX512F-64-NEXT: retq
2506 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2507 <8 x float> %f1, <8 x float> %f2, metadata !"ueq",
2508 metadata !"fpexcept.strict") #0
2509 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2513 define <8 x i32> @test_v8f32_ugt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2514 ; AVX-32-LABEL: test_v8f32_ugt_s:
2516 ; AVX-32-NEXT: pushl %ebp
2517 ; AVX-32-NEXT: movl %esp, %ebp
2518 ; AVX-32-NEXT: andl $-32, %esp
2519 ; AVX-32-NEXT: subl $32, %esp
2520 ; AVX-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %ymm2
2521 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2522 ; AVX-32-NEXT: movl %ebp, %esp
2523 ; AVX-32-NEXT: popl %ebp
2526 ; AVX-64-LABEL: test_v8f32_ugt_s:
2528 ; AVX-64-NEXT: vcmpnleps %ymm3, %ymm2, %ymm2
2529 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2532 ; AVX512-32-LABEL: test_v8f32_ugt_s:
2533 ; AVX512-32: # %bb.0:
2534 ; AVX512-32-NEXT: pushl %ebp
2535 ; AVX512-32-NEXT: movl %esp, %ebp
2536 ; AVX512-32-NEXT: andl $-32, %esp
2537 ; AVX512-32-NEXT: subl $32, %esp
2538 ; AVX512-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %k1
2539 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2540 ; AVX512-32-NEXT: movl %ebp, %esp
2541 ; AVX512-32-NEXT: popl %ebp
2542 ; AVX512-32-NEXT: retl
2544 ; AVX512-64-LABEL: test_v8f32_ugt_s:
2545 ; AVX512-64: # %bb.0:
2546 ; AVX512-64-NEXT: vcmpnleps %ymm3, %ymm2, %k1
2547 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2548 ; AVX512-64-NEXT: retq
2550 ; AVX512F-32-LABEL: test_v8f32_ugt_s:
2551 ; AVX512F-32: # %bb.0:
2552 ; AVX512F-32-NEXT: pushl %ebp
2553 ; AVX512F-32-NEXT: movl %esp, %ebp
2554 ; AVX512F-32-NEXT: andl $-32, %esp
2555 ; AVX512F-32-NEXT: subl $32, %esp
2556 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2557 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2558 ; AVX512F-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %ymm2
2559 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2560 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2561 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2562 ; AVX512F-32-NEXT: movl %ebp, %esp
2563 ; AVX512F-32-NEXT: popl %ebp
2564 ; AVX512F-32-NEXT: retl
2566 ; AVX512F-64-LABEL: test_v8f32_ugt_s:
2567 ; AVX512F-64: # %bb.0:
2568 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2569 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2570 ; AVX512F-64-NEXT: vcmpnleps %ymm3, %ymm2, %ymm2
2571 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2572 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2573 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2574 ; AVX512F-64-NEXT: retq
2575 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2576 <8 x float> %f1, <8 x float> %f2, metadata !"ugt",
2577 metadata !"fpexcept.strict") #0
2578 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2582 define <8 x i32> @test_v8f32_uge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2583 ; AVX-32-LABEL: test_v8f32_uge_s:
2585 ; AVX-32-NEXT: pushl %ebp
2586 ; AVX-32-NEXT: movl %esp, %ebp
2587 ; AVX-32-NEXT: andl $-32, %esp
2588 ; AVX-32-NEXT: subl $32, %esp
2589 ; AVX-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %ymm2
2590 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2591 ; AVX-32-NEXT: movl %ebp, %esp
2592 ; AVX-32-NEXT: popl %ebp
2595 ; AVX-64-LABEL: test_v8f32_uge_s:
2597 ; AVX-64-NEXT: vcmpnltps %ymm3, %ymm2, %ymm2
2598 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2601 ; AVX512-32-LABEL: test_v8f32_uge_s:
2602 ; AVX512-32: # %bb.0:
2603 ; AVX512-32-NEXT: pushl %ebp
2604 ; AVX512-32-NEXT: movl %esp, %ebp
2605 ; AVX512-32-NEXT: andl $-32, %esp
2606 ; AVX512-32-NEXT: subl $32, %esp
2607 ; AVX512-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %k1
2608 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2609 ; AVX512-32-NEXT: movl %ebp, %esp
2610 ; AVX512-32-NEXT: popl %ebp
2611 ; AVX512-32-NEXT: retl
2613 ; AVX512-64-LABEL: test_v8f32_uge_s:
2614 ; AVX512-64: # %bb.0:
2615 ; AVX512-64-NEXT: vcmpnltps %ymm3, %ymm2, %k1
2616 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2617 ; AVX512-64-NEXT: retq
2619 ; AVX512F-32-LABEL: test_v8f32_uge_s:
2620 ; AVX512F-32: # %bb.0:
2621 ; AVX512F-32-NEXT: pushl %ebp
2622 ; AVX512F-32-NEXT: movl %esp, %ebp
2623 ; AVX512F-32-NEXT: andl $-32, %esp
2624 ; AVX512F-32-NEXT: subl $32, %esp
2625 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2626 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2627 ; AVX512F-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %ymm2
2628 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2629 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2630 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2631 ; AVX512F-32-NEXT: movl %ebp, %esp
2632 ; AVX512F-32-NEXT: popl %ebp
2633 ; AVX512F-32-NEXT: retl
2635 ; AVX512F-64-LABEL: test_v8f32_uge_s:
2636 ; AVX512F-64: # %bb.0:
2637 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2638 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2639 ; AVX512F-64-NEXT: vcmpnltps %ymm3, %ymm2, %ymm2
2640 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2641 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2642 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2643 ; AVX512F-64-NEXT: retq
2644 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2645 <8 x float> %f1, <8 x float> %f2, metadata !"uge",
2646 metadata !"fpexcept.strict") #0
2647 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2651 define <8 x i32> @test_v8f32_ult_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2652 ; AVX-32-LABEL: test_v8f32_ult_s:
2654 ; AVX-32-NEXT: pushl %ebp
2655 ; AVX-32-NEXT: movl %esp, %ebp
2656 ; AVX-32-NEXT: andl $-32, %esp
2657 ; AVX-32-NEXT: subl $32, %esp
2658 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
2659 ; AVX-32-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2660 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2661 ; AVX-32-NEXT: movl %ebp, %esp
2662 ; AVX-32-NEXT: popl %ebp
2665 ; AVX-64-LABEL: test_v8f32_ult_s:
2667 ; AVX-64-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2668 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2671 ; AVX512-32-LABEL: test_v8f32_ult_s:
2672 ; AVX512-32: # %bb.0:
2673 ; AVX512-32-NEXT: pushl %ebp
2674 ; AVX512-32-NEXT: movl %esp, %ebp
2675 ; AVX512-32-NEXT: andl $-32, %esp
2676 ; AVX512-32-NEXT: subl $32, %esp
2677 ; AVX512-32-NEXT: vcmpngeps 8(%ebp), %ymm2, %k1
2678 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2679 ; AVX512-32-NEXT: movl %ebp, %esp
2680 ; AVX512-32-NEXT: popl %ebp
2681 ; AVX512-32-NEXT: retl
2683 ; AVX512-64-LABEL: test_v8f32_ult_s:
2684 ; AVX512-64: # %bb.0:
2685 ; AVX512-64-NEXT: vcmpnleps %ymm2, %ymm3, %k1
2686 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2687 ; AVX512-64-NEXT: retq
2689 ; AVX512F-32-LABEL: test_v8f32_ult_s:
2690 ; AVX512F-32: # %bb.0:
2691 ; AVX512F-32-NEXT: pushl %ebp
2692 ; AVX512F-32-NEXT: movl %esp, %ebp
2693 ; AVX512F-32-NEXT: andl $-32, %esp
2694 ; AVX512F-32-NEXT: subl $32, %esp
2695 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2696 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2697 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
2698 ; AVX512F-32-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2699 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2700 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2701 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2702 ; AVX512F-32-NEXT: movl %ebp, %esp
2703 ; AVX512F-32-NEXT: popl %ebp
2704 ; AVX512F-32-NEXT: retl
2706 ; AVX512F-64-LABEL: test_v8f32_ult_s:
2707 ; AVX512F-64: # %bb.0:
2708 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2709 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2710 ; AVX512F-64-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2711 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2712 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2713 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2714 ; AVX512F-64-NEXT: retq
2715 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2716 <8 x float> %f1, <8 x float> %f2, metadata !"ult",
2717 metadata !"fpexcept.strict") #0
2718 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2722 define <8 x i32> @test_v8f32_ule_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2723 ; AVX-32-LABEL: test_v8f32_ule_s:
2725 ; AVX-32-NEXT: pushl %ebp
2726 ; AVX-32-NEXT: movl %esp, %ebp
2727 ; AVX-32-NEXT: andl $-32, %esp
2728 ; AVX-32-NEXT: subl $32, %esp
2729 ; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3
2730 ; AVX-32-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2731 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2732 ; AVX-32-NEXT: movl %ebp, %esp
2733 ; AVX-32-NEXT: popl %ebp
2736 ; AVX-64-LABEL: test_v8f32_ule_s:
2738 ; AVX-64-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2739 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2742 ; AVX512-32-LABEL: test_v8f32_ule_s:
2743 ; AVX512-32: # %bb.0:
2744 ; AVX512-32-NEXT: pushl %ebp
2745 ; AVX512-32-NEXT: movl %esp, %ebp
2746 ; AVX512-32-NEXT: andl $-32, %esp
2747 ; AVX512-32-NEXT: subl $32, %esp
2748 ; AVX512-32-NEXT: vcmpngtps 8(%ebp), %ymm2, %k1
2749 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2750 ; AVX512-32-NEXT: movl %ebp, %esp
2751 ; AVX512-32-NEXT: popl %ebp
2752 ; AVX512-32-NEXT: retl
2754 ; AVX512-64-LABEL: test_v8f32_ule_s:
2755 ; AVX512-64: # %bb.0:
2756 ; AVX512-64-NEXT: vcmpnltps %ymm2, %ymm3, %k1
2757 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2758 ; AVX512-64-NEXT: retq
2760 ; AVX512F-32-LABEL: test_v8f32_ule_s:
2761 ; AVX512F-32: # %bb.0:
2762 ; AVX512F-32-NEXT: pushl %ebp
2763 ; AVX512F-32-NEXT: movl %esp, %ebp
2764 ; AVX512F-32-NEXT: andl $-32, %esp
2765 ; AVX512F-32-NEXT: subl $32, %esp
2766 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2767 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2768 ; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3
2769 ; AVX512F-32-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2770 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2771 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2772 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2773 ; AVX512F-32-NEXT: movl %ebp, %esp
2774 ; AVX512F-32-NEXT: popl %ebp
2775 ; AVX512F-32-NEXT: retl
2777 ; AVX512F-64-LABEL: test_v8f32_ule_s:
2778 ; AVX512F-64: # %bb.0:
2779 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2780 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2781 ; AVX512F-64-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2782 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2783 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2784 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2785 ; AVX512F-64-NEXT: retq
2786 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2787 <8 x float> %f1, <8 x float> %f2, metadata !"ule",
2788 metadata !"fpexcept.strict") #0
2789 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2793 define <8 x i32> @test_v8f32_une_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2794 ; AVX-32-LABEL: test_v8f32_une_s:
2796 ; AVX-32-NEXT: pushl %ebp
2797 ; AVX-32-NEXT: movl %esp, %ebp
2798 ; AVX-32-NEXT: andl $-32, %esp
2799 ; AVX-32-NEXT: subl $32, %esp
2800 ; AVX-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %ymm2
2801 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2802 ; AVX-32-NEXT: movl %ebp, %esp
2803 ; AVX-32-NEXT: popl %ebp
2806 ; AVX-64-LABEL: test_v8f32_une_s:
2808 ; AVX-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %ymm2
2809 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2812 ; AVX512-32-LABEL: test_v8f32_une_s:
2813 ; AVX512-32: # %bb.0:
2814 ; AVX512-32-NEXT: pushl %ebp
2815 ; AVX512-32-NEXT: movl %esp, %ebp
2816 ; AVX512-32-NEXT: andl $-32, %esp
2817 ; AVX512-32-NEXT: subl $32, %esp
2818 ; AVX512-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %k1
2819 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2820 ; AVX512-32-NEXT: movl %ebp, %esp
2821 ; AVX512-32-NEXT: popl %ebp
2822 ; AVX512-32-NEXT: retl
2824 ; AVX512-64-LABEL: test_v8f32_une_s:
2825 ; AVX512-64: # %bb.0:
2826 ; AVX512-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %k1
2827 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2828 ; AVX512-64-NEXT: retq
2830 ; AVX512F-32-LABEL: test_v8f32_une_s:
2831 ; AVX512F-32: # %bb.0:
2832 ; AVX512F-32-NEXT: pushl %ebp
2833 ; AVX512F-32-NEXT: movl %esp, %ebp
2834 ; AVX512F-32-NEXT: andl $-32, %esp
2835 ; AVX512F-32-NEXT: subl $32, %esp
2836 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2837 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2838 ; AVX512F-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %ymm2
2839 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2840 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2841 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2842 ; AVX512F-32-NEXT: movl %ebp, %esp
2843 ; AVX512F-32-NEXT: popl %ebp
2844 ; AVX512F-32-NEXT: retl
2846 ; AVX512F-64-LABEL: test_v8f32_une_s:
2847 ; AVX512F-64: # %bb.0:
2848 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2849 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2850 ; AVX512F-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %ymm2
2851 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2852 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2853 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2854 ; AVX512F-64-NEXT: retq
2855 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2856 <8 x float> %f1, <8 x float> %f2, metadata !"une",
2857 metadata !"fpexcept.strict") #0
2858 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2862 define <8 x i32> @test_v8f32_uno_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 {
2863 ; AVX-32-LABEL: test_v8f32_uno_s:
2865 ; AVX-32-NEXT: pushl %ebp
2866 ; AVX-32-NEXT: movl %esp, %ebp
2867 ; AVX-32-NEXT: andl $-32, %esp
2868 ; AVX-32-NEXT: subl $32, %esp
2869 ; AVX-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %ymm2
2870 ; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2871 ; AVX-32-NEXT: movl %ebp, %esp
2872 ; AVX-32-NEXT: popl %ebp
2875 ; AVX-64-LABEL: test_v8f32_uno_s:
2877 ; AVX-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %ymm2
2878 ; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0
2881 ; AVX512-32-LABEL: test_v8f32_uno_s:
2882 ; AVX512-32: # %bb.0:
2883 ; AVX512-32-NEXT: pushl %ebp
2884 ; AVX512-32-NEXT: movl %esp, %ebp
2885 ; AVX512-32-NEXT: andl $-32, %esp
2886 ; AVX512-32-NEXT: subl $32, %esp
2887 ; AVX512-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %k1
2888 ; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2889 ; AVX512-32-NEXT: movl %ebp, %esp
2890 ; AVX512-32-NEXT: popl %ebp
2891 ; AVX512-32-NEXT: retl
2893 ; AVX512-64-LABEL: test_v8f32_uno_s:
2894 ; AVX512-64: # %bb.0:
2895 ; AVX512-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %k1
2896 ; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
2897 ; AVX512-64-NEXT: retq
2899 ; AVX512F-32-LABEL: test_v8f32_uno_s:
2900 ; AVX512F-32: # %bb.0:
2901 ; AVX512F-32-NEXT: pushl %ebp
2902 ; AVX512F-32-NEXT: movl %esp, %ebp
2903 ; AVX512F-32-NEXT: andl $-32, %esp
2904 ; AVX512F-32-NEXT: subl $32, %esp
2905 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2906 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2907 ; AVX512F-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %ymm2
2908 ; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
2909 ; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2910 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2911 ; AVX512F-32-NEXT: movl %ebp, %esp
2912 ; AVX512F-32-NEXT: popl %ebp
2913 ; AVX512F-32-NEXT: retl
2915 ; AVX512F-64-LABEL: test_v8f32_uno_s:
2916 ; AVX512F-64: # %bb.0:
2917 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2918 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2919 ; AVX512F-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %ymm2
2920 ; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
2921 ; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2922 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2923 ; AVX512F-64-NEXT: retq
2924 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(
2925 <8 x float> %f1, <8 x float> %f2, metadata !"uno",
2926 metadata !"fpexcept.strict") #0
2927 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b
2931 define <4 x i64> @test_v4f64_oeq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
2932 ; AVX-32-LABEL: test_v4f64_oeq_s:
2934 ; AVX-32-NEXT: pushl %ebp
2935 ; AVX-32-NEXT: movl %esp, %ebp
2936 ; AVX-32-NEXT: andl $-32, %esp
2937 ; AVX-32-NEXT: subl $32, %esp
2938 ; AVX-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %ymm2
2939 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
2940 ; AVX-32-NEXT: movl %ebp, %esp
2941 ; AVX-32-NEXT: popl %ebp
2944 ; AVX-64-LABEL: test_v4f64_oeq_s:
2946 ; AVX-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %ymm2
2947 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
2950 ; AVX512-32-LABEL: test_v4f64_oeq_s:
2951 ; AVX512-32: # %bb.0:
2952 ; AVX512-32-NEXT: pushl %ebp
2953 ; AVX512-32-NEXT: movl %esp, %ebp
2954 ; AVX512-32-NEXT: andl $-32, %esp
2955 ; AVX512-32-NEXT: subl $32, %esp
2956 ; AVX512-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %k1
2957 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
2958 ; AVX512-32-NEXT: movl %ebp, %esp
2959 ; AVX512-32-NEXT: popl %ebp
2960 ; AVX512-32-NEXT: retl
2962 ; AVX512-64-LABEL: test_v4f64_oeq_s:
2963 ; AVX512-64: # %bb.0:
2964 ; AVX512-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %k1
2965 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
2966 ; AVX512-64-NEXT: retq
2968 ; AVX512F-32-LABEL: test_v4f64_oeq_s:
2969 ; AVX512F-32: # %bb.0:
2970 ; AVX512F-32-NEXT: pushl %ebp
2971 ; AVX512F-32-NEXT: movl %esp, %ebp
2972 ; AVX512F-32-NEXT: andl $-32, %esp
2973 ; AVX512F-32-NEXT: subl $32, %esp
2974 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2975 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2976 ; AVX512F-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %ymm2
2977 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2978 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2979 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2980 ; AVX512F-32-NEXT: movl %ebp, %esp
2981 ; AVX512F-32-NEXT: popl %ebp
2982 ; AVX512F-32-NEXT: retl
2984 ; AVX512F-64-LABEL: test_v4f64_oeq_s:
2985 ; AVX512F-64: # %bb.0:
2986 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2987 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
2988 ; AVX512F-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %ymm2
2989 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
2990 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2991 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2992 ; AVX512F-64-NEXT: retq
2993 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
2994 <4 x double> %f1, <4 x double> %f2, metadata !"oeq",
2995 metadata !"fpexcept.strict") #0
2996 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3000 define <4 x i64> @test_v4f64_ogt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3001 ; AVX-32-LABEL: test_v4f64_ogt_s:
3003 ; AVX-32-NEXT: pushl %ebp
3004 ; AVX-32-NEXT: movl %esp, %ebp
3005 ; AVX-32-NEXT: andl $-32, %esp
3006 ; AVX-32-NEXT: subl $32, %esp
3007 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
3008 ; AVX-32-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3009 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3010 ; AVX-32-NEXT: movl %ebp, %esp
3011 ; AVX-32-NEXT: popl %ebp
3014 ; AVX-64-LABEL: test_v4f64_ogt_s:
3016 ; AVX-64-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3017 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3020 ; AVX512-32-LABEL: test_v4f64_ogt_s:
3021 ; AVX512-32: # %bb.0:
3022 ; AVX512-32-NEXT: pushl %ebp
3023 ; AVX512-32-NEXT: movl %esp, %ebp
3024 ; AVX512-32-NEXT: andl $-32, %esp
3025 ; AVX512-32-NEXT: subl $32, %esp
3026 ; AVX512-32-NEXT: vcmpgtpd 8(%ebp), %ymm2, %k1
3027 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3028 ; AVX512-32-NEXT: movl %ebp, %esp
3029 ; AVX512-32-NEXT: popl %ebp
3030 ; AVX512-32-NEXT: retl
3032 ; AVX512-64-LABEL: test_v4f64_ogt_s:
3033 ; AVX512-64: # %bb.0:
3034 ; AVX512-64-NEXT: vcmpltpd %ymm2, %ymm3, %k1
3035 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3036 ; AVX512-64-NEXT: retq
3038 ; AVX512F-32-LABEL: test_v4f64_ogt_s:
3039 ; AVX512F-32: # %bb.0:
3040 ; AVX512F-32-NEXT: pushl %ebp
3041 ; AVX512F-32-NEXT: movl %esp, %ebp
3042 ; AVX512F-32-NEXT: andl $-32, %esp
3043 ; AVX512F-32-NEXT: subl $32, %esp
3044 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3045 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3046 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
3047 ; AVX512F-32-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3048 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3049 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3050 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3051 ; AVX512F-32-NEXT: movl %ebp, %esp
3052 ; AVX512F-32-NEXT: popl %ebp
3053 ; AVX512F-32-NEXT: retl
3055 ; AVX512F-64-LABEL: test_v4f64_ogt_s:
3056 ; AVX512F-64: # %bb.0:
3057 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3058 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3059 ; AVX512F-64-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3060 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3061 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3062 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3063 ; AVX512F-64-NEXT: retq
3064 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3065 <4 x double> %f1, <4 x double> %f2, metadata !"ogt",
3066 metadata !"fpexcept.strict") #0
3067 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3071 define <4 x i64> @test_v4f64_oge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3072 ; AVX-32-LABEL: test_v4f64_oge_s:
3074 ; AVX-32-NEXT: pushl %ebp
3075 ; AVX-32-NEXT: movl %esp, %ebp
3076 ; AVX-32-NEXT: andl $-32, %esp
3077 ; AVX-32-NEXT: subl $32, %esp
3078 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
3079 ; AVX-32-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3080 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3081 ; AVX-32-NEXT: movl %ebp, %esp
3082 ; AVX-32-NEXT: popl %ebp
3085 ; AVX-64-LABEL: test_v4f64_oge_s:
3087 ; AVX-64-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3088 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3091 ; AVX512-32-LABEL: test_v4f64_oge_s:
3092 ; AVX512-32: # %bb.0:
3093 ; AVX512-32-NEXT: pushl %ebp
3094 ; AVX512-32-NEXT: movl %esp, %ebp
3095 ; AVX512-32-NEXT: andl $-32, %esp
3096 ; AVX512-32-NEXT: subl $32, %esp
3097 ; AVX512-32-NEXT: vcmpgepd 8(%ebp), %ymm2, %k1
3098 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3099 ; AVX512-32-NEXT: movl %ebp, %esp
3100 ; AVX512-32-NEXT: popl %ebp
3101 ; AVX512-32-NEXT: retl
3103 ; AVX512-64-LABEL: test_v4f64_oge_s:
3104 ; AVX512-64: # %bb.0:
3105 ; AVX512-64-NEXT: vcmplepd %ymm2, %ymm3, %k1
3106 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3107 ; AVX512-64-NEXT: retq
3109 ; AVX512F-32-LABEL: test_v4f64_oge_s:
3110 ; AVX512F-32: # %bb.0:
3111 ; AVX512F-32-NEXT: pushl %ebp
3112 ; AVX512F-32-NEXT: movl %esp, %ebp
3113 ; AVX512F-32-NEXT: andl $-32, %esp
3114 ; AVX512F-32-NEXT: subl $32, %esp
3115 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3116 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3117 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
3118 ; AVX512F-32-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3119 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3120 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3121 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3122 ; AVX512F-32-NEXT: movl %ebp, %esp
3123 ; AVX512F-32-NEXT: popl %ebp
3124 ; AVX512F-32-NEXT: retl
3126 ; AVX512F-64-LABEL: test_v4f64_oge_s:
3127 ; AVX512F-64: # %bb.0:
3128 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3129 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3130 ; AVX512F-64-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3131 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3132 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3133 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3134 ; AVX512F-64-NEXT: retq
3135 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3136 <4 x double> %f1, <4 x double> %f2, metadata !"oge",
3137 metadata !"fpexcept.strict") #0
3138 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3142 define <4 x i64> @test_v4f64_olt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3143 ; AVX-32-LABEL: test_v4f64_olt_s:
3145 ; AVX-32-NEXT: pushl %ebp
3146 ; AVX-32-NEXT: movl %esp, %ebp
3147 ; AVX-32-NEXT: andl $-32, %esp
3148 ; AVX-32-NEXT: subl $32, %esp
3149 ; AVX-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %ymm2
3150 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3151 ; AVX-32-NEXT: movl %ebp, %esp
3152 ; AVX-32-NEXT: popl %ebp
3155 ; AVX-64-LABEL: test_v4f64_olt_s:
3157 ; AVX-64-NEXT: vcmpltpd %ymm3, %ymm2, %ymm2
3158 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3161 ; AVX512-32-LABEL: test_v4f64_olt_s:
3162 ; AVX512-32: # %bb.0:
3163 ; AVX512-32-NEXT: pushl %ebp
3164 ; AVX512-32-NEXT: movl %esp, %ebp
3165 ; AVX512-32-NEXT: andl $-32, %esp
3166 ; AVX512-32-NEXT: subl $32, %esp
3167 ; AVX512-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %k1
3168 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3169 ; AVX512-32-NEXT: movl %ebp, %esp
3170 ; AVX512-32-NEXT: popl %ebp
3171 ; AVX512-32-NEXT: retl
3173 ; AVX512-64-LABEL: test_v4f64_olt_s:
3174 ; AVX512-64: # %bb.0:
3175 ; AVX512-64-NEXT: vcmpltpd %ymm3, %ymm2, %k1
3176 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3177 ; AVX512-64-NEXT: retq
3179 ; AVX512F-32-LABEL: test_v4f64_olt_s:
3180 ; AVX512F-32: # %bb.0:
3181 ; AVX512F-32-NEXT: pushl %ebp
3182 ; AVX512F-32-NEXT: movl %esp, %ebp
3183 ; AVX512F-32-NEXT: andl $-32, %esp
3184 ; AVX512F-32-NEXT: subl $32, %esp
3185 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3186 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3187 ; AVX512F-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %ymm2
3188 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3189 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3190 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3191 ; AVX512F-32-NEXT: movl %ebp, %esp
3192 ; AVX512F-32-NEXT: popl %ebp
3193 ; AVX512F-32-NEXT: retl
3195 ; AVX512F-64-LABEL: test_v4f64_olt_s:
3196 ; AVX512F-64: # %bb.0:
3197 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3198 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3199 ; AVX512F-64-NEXT: vcmpltpd %ymm3, %ymm2, %ymm2
3200 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3201 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3202 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3203 ; AVX512F-64-NEXT: retq
3204 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3205 <4 x double> %f1, <4 x double> %f2, metadata !"olt",
3206 metadata !"fpexcept.strict") #0
3207 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3211 define <4 x i64> @test_v4f64_ole_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3212 ; AVX-32-LABEL: test_v4f64_ole_s:
3214 ; AVX-32-NEXT: pushl %ebp
3215 ; AVX-32-NEXT: movl %esp, %ebp
3216 ; AVX-32-NEXT: andl $-32, %esp
3217 ; AVX-32-NEXT: subl $32, %esp
3218 ; AVX-32-NEXT: vcmplepd 8(%ebp), %ymm2, %ymm2
3219 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3220 ; AVX-32-NEXT: movl %ebp, %esp
3221 ; AVX-32-NEXT: popl %ebp
3224 ; AVX-64-LABEL: test_v4f64_ole_s:
3226 ; AVX-64-NEXT: vcmplepd %ymm3, %ymm2, %ymm2
3227 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3230 ; AVX512-32-LABEL: test_v4f64_ole_s:
3231 ; AVX512-32: # %bb.0:
3232 ; AVX512-32-NEXT: pushl %ebp
3233 ; AVX512-32-NEXT: movl %esp, %ebp
3234 ; AVX512-32-NEXT: andl $-32, %esp
3235 ; AVX512-32-NEXT: subl $32, %esp
3236 ; AVX512-32-NEXT: vcmplepd 8(%ebp), %ymm2, %k1
3237 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3238 ; AVX512-32-NEXT: movl %ebp, %esp
3239 ; AVX512-32-NEXT: popl %ebp
3240 ; AVX512-32-NEXT: retl
3242 ; AVX512-64-LABEL: test_v4f64_ole_s:
3243 ; AVX512-64: # %bb.0:
3244 ; AVX512-64-NEXT: vcmplepd %ymm3, %ymm2, %k1
3245 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3246 ; AVX512-64-NEXT: retq
3248 ; AVX512F-32-LABEL: test_v4f64_ole_s:
3249 ; AVX512F-32: # %bb.0:
3250 ; AVX512F-32-NEXT: pushl %ebp
3251 ; AVX512F-32-NEXT: movl %esp, %ebp
3252 ; AVX512F-32-NEXT: andl $-32, %esp
3253 ; AVX512F-32-NEXT: subl $32, %esp
3254 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3255 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3256 ; AVX512F-32-NEXT: vcmplepd 8(%ebp), %ymm2, %ymm2
3257 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3258 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3259 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3260 ; AVX512F-32-NEXT: movl %ebp, %esp
3261 ; AVX512F-32-NEXT: popl %ebp
3262 ; AVX512F-32-NEXT: retl
3264 ; AVX512F-64-LABEL: test_v4f64_ole_s:
3265 ; AVX512F-64: # %bb.0:
3266 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3267 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3268 ; AVX512F-64-NEXT: vcmplepd %ymm3, %ymm2, %ymm2
3269 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3270 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3271 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3272 ; AVX512F-64-NEXT: retq
3273 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3274 <4 x double> %f1, <4 x double> %f2, metadata !"ole",
3275 metadata !"fpexcept.strict") #0
3276 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3280 define <4 x i64> @test_v4f64_one_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3281 ; AVX-32-LABEL: test_v4f64_one_s:
3283 ; AVX-32-NEXT: pushl %ebp
3284 ; AVX-32-NEXT: movl %esp, %ebp
3285 ; AVX-32-NEXT: andl $-32, %esp
3286 ; AVX-32-NEXT: subl $32, %esp
3287 ; AVX-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %ymm2
3288 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3289 ; AVX-32-NEXT: movl %ebp, %esp
3290 ; AVX-32-NEXT: popl %ebp
3293 ; AVX-64-LABEL: test_v4f64_one_s:
3295 ; AVX-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %ymm2
3296 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3299 ; AVX512-32-LABEL: test_v4f64_one_s:
3300 ; AVX512-32: # %bb.0:
3301 ; AVX512-32-NEXT: pushl %ebp
3302 ; AVX512-32-NEXT: movl %esp, %ebp
3303 ; AVX512-32-NEXT: andl $-32, %esp
3304 ; AVX512-32-NEXT: subl $32, %esp
3305 ; AVX512-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %k1
3306 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3307 ; AVX512-32-NEXT: movl %ebp, %esp
3308 ; AVX512-32-NEXT: popl %ebp
3309 ; AVX512-32-NEXT: retl
3311 ; AVX512-64-LABEL: test_v4f64_one_s:
3312 ; AVX512-64: # %bb.0:
3313 ; AVX512-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %k1
3314 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3315 ; AVX512-64-NEXT: retq
3317 ; AVX512F-32-LABEL: test_v4f64_one_s:
3318 ; AVX512F-32: # %bb.0:
3319 ; AVX512F-32-NEXT: pushl %ebp
3320 ; AVX512F-32-NEXT: movl %esp, %ebp
3321 ; AVX512F-32-NEXT: andl $-32, %esp
3322 ; AVX512F-32-NEXT: subl $32, %esp
3323 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3324 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3325 ; AVX512F-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %ymm2
3326 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3327 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3328 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3329 ; AVX512F-32-NEXT: movl %ebp, %esp
3330 ; AVX512F-32-NEXT: popl %ebp
3331 ; AVX512F-32-NEXT: retl
3333 ; AVX512F-64-LABEL: test_v4f64_one_s:
3334 ; AVX512F-64: # %bb.0:
3335 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3336 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3337 ; AVX512F-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %ymm2
3338 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3339 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3340 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3341 ; AVX512F-64-NEXT: retq
3342 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3343 <4 x double> %f1, <4 x double> %f2, metadata !"one",
3344 metadata !"fpexcept.strict") #0
3345 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3349 define <4 x i64> @test_v4f64_ord_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3350 ; AVX-32-LABEL: test_v4f64_ord_s:
3352 ; AVX-32-NEXT: pushl %ebp
3353 ; AVX-32-NEXT: movl %esp, %ebp
3354 ; AVX-32-NEXT: andl $-32, %esp
3355 ; AVX-32-NEXT: subl $32, %esp
3356 ; AVX-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %ymm2
3357 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3358 ; AVX-32-NEXT: movl %ebp, %esp
3359 ; AVX-32-NEXT: popl %ebp
3362 ; AVX-64-LABEL: test_v4f64_ord_s:
3364 ; AVX-64-NEXT: vcmpord_spd %ymm3, %ymm2, %ymm2
3365 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3368 ; AVX512-32-LABEL: test_v4f64_ord_s:
3369 ; AVX512-32: # %bb.0:
3370 ; AVX512-32-NEXT: pushl %ebp
3371 ; AVX512-32-NEXT: movl %esp, %ebp
3372 ; AVX512-32-NEXT: andl $-32, %esp
3373 ; AVX512-32-NEXT: subl $32, %esp
3374 ; AVX512-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %k1
3375 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3376 ; AVX512-32-NEXT: movl %ebp, %esp
3377 ; AVX512-32-NEXT: popl %ebp
3378 ; AVX512-32-NEXT: retl
3380 ; AVX512-64-LABEL: test_v4f64_ord_s:
3381 ; AVX512-64: # %bb.0:
3382 ; AVX512-64-NEXT: vcmpord_spd %ymm3, %ymm2, %k1
3383 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3384 ; AVX512-64-NEXT: retq
3386 ; AVX512F-32-LABEL: test_v4f64_ord_s:
3387 ; AVX512F-32: # %bb.0:
3388 ; AVX512F-32-NEXT: pushl %ebp
3389 ; AVX512F-32-NEXT: movl %esp, %ebp
3390 ; AVX512F-32-NEXT: andl $-32, %esp
3391 ; AVX512F-32-NEXT: subl $32, %esp
3392 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3393 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3394 ; AVX512F-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %ymm2
3395 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3396 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3397 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3398 ; AVX512F-32-NEXT: movl %ebp, %esp
3399 ; AVX512F-32-NEXT: popl %ebp
3400 ; AVX512F-32-NEXT: retl
3402 ; AVX512F-64-LABEL: test_v4f64_ord_s:
3403 ; AVX512F-64: # %bb.0:
3404 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3405 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3406 ; AVX512F-64-NEXT: vcmpord_spd %ymm3, %ymm2, %ymm2
3407 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3408 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3409 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3410 ; AVX512F-64-NEXT: retq
3411 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3412 <4 x double> %f1, <4 x double> %f2, metadata !"ord",
3413 metadata !"fpexcept.strict") #0
3414 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3418 define <4 x i64> @test_v4f64_ueq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3419 ; AVX-32-LABEL: test_v4f64_ueq_s:
3421 ; AVX-32-NEXT: pushl %ebp
3422 ; AVX-32-NEXT: movl %esp, %ebp
3423 ; AVX-32-NEXT: andl $-32, %esp
3424 ; AVX-32-NEXT: subl $32, %esp
3425 ; AVX-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %ymm2
3426 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3427 ; AVX-32-NEXT: movl %ebp, %esp
3428 ; AVX-32-NEXT: popl %ebp
3431 ; AVX-64-LABEL: test_v4f64_ueq_s:
3433 ; AVX-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %ymm2
3434 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3437 ; AVX512-32-LABEL: test_v4f64_ueq_s:
3438 ; AVX512-32: # %bb.0:
3439 ; AVX512-32-NEXT: pushl %ebp
3440 ; AVX512-32-NEXT: movl %esp, %ebp
3441 ; AVX512-32-NEXT: andl $-32, %esp
3442 ; AVX512-32-NEXT: subl $32, %esp
3443 ; AVX512-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %k1
3444 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3445 ; AVX512-32-NEXT: movl %ebp, %esp
3446 ; AVX512-32-NEXT: popl %ebp
3447 ; AVX512-32-NEXT: retl
3449 ; AVX512-64-LABEL: test_v4f64_ueq_s:
3450 ; AVX512-64: # %bb.0:
3451 ; AVX512-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %k1
3452 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3453 ; AVX512-64-NEXT: retq
3455 ; AVX512F-32-LABEL: test_v4f64_ueq_s:
3456 ; AVX512F-32: # %bb.0:
3457 ; AVX512F-32-NEXT: pushl %ebp
3458 ; AVX512F-32-NEXT: movl %esp, %ebp
3459 ; AVX512F-32-NEXT: andl $-32, %esp
3460 ; AVX512F-32-NEXT: subl $32, %esp
3461 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3462 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3463 ; AVX512F-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %ymm2
3464 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3465 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3466 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3467 ; AVX512F-32-NEXT: movl %ebp, %esp
3468 ; AVX512F-32-NEXT: popl %ebp
3469 ; AVX512F-32-NEXT: retl
3471 ; AVX512F-64-LABEL: test_v4f64_ueq_s:
3472 ; AVX512F-64: # %bb.0:
3473 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3474 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3475 ; AVX512F-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %ymm2
3476 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3477 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3478 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3479 ; AVX512F-64-NEXT: retq
3480 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3481 <4 x double> %f1, <4 x double> %f2, metadata !"ueq",
3482 metadata !"fpexcept.strict") #0
3483 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3487 define <4 x i64> @test_v4f64_ugt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3488 ; AVX-32-LABEL: test_v4f64_ugt_s:
3490 ; AVX-32-NEXT: pushl %ebp
3491 ; AVX-32-NEXT: movl %esp, %ebp
3492 ; AVX-32-NEXT: andl $-32, %esp
3493 ; AVX-32-NEXT: subl $32, %esp
3494 ; AVX-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %ymm2
3495 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3496 ; AVX-32-NEXT: movl %ebp, %esp
3497 ; AVX-32-NEXT: popl %ebp
3500 ; AVX-64-LABEL: test_v4f64_ugt_s:
3502 ; AVX-64-NEXT: vcmpnlepd %ymm3, %ymm2, %ymm2
3503 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3506 ; AVX512-32-LABEL: test_v4f64_ugt_s:
3507 ; AVX512-32: # %bb.0:
3508 ; AVX512-32-NEXT: pushl %ebp
3509 ; AVX512-32-NEXT: movl %esp, %ebp
3510 ; AVX512-32-NEXT: andl $-32, %esp
3511 ; AVX512-32-NEXT: subl $32, %esp
3512 ; AVX512-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %k1
3513 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3514 ; AVX512-32-NEXT: movl %ebp, %esp
3515 ; AVX512-32-NEXT: popl %ebp
3516 ; AVX512-32-NEXT: retl
3518 ; AVX512-64-LABEL: test_v4f64_ugt_s:
3519 ; AVX512-64: # %bb.0:
3520 ; AVX512-64-NEXT: vcmpnlepd %ymm3, %ymm2, %k1
3521 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3522 ; AVX512-64-NEXT: retq
3524 ; AVX512F-32-LABEL: test_v4f64_ugt_s:
3525 ; AVX512F-32: # %bb.0:
3526 ; AVX512F-32-NEXT: pushl %ebp
3527 ; AVX512F-32-NEXT: movl %esp, %ebp
3528 ; AVX512F-32-NEXT: andl $-32, %esp
3529 ; AVX512F-32-NEXT: subl $32, %esp
3530 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3531 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3532 ; AVX512F-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %ymm2
3533 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3534 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3535 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3536 ; AVX512F-32-NEXT: movl %ebp, %esp
3537 ; AVX512F-32-NEXT: popl %ebp
3538 ; AVX512F-32-NEXT: retl
3540 ; AVX512F-64-LABEL: test_v4f64_ugt_s:
3541 ; AVX512F-64: # %bb.0:
3542 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3543 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3544 ; AVX512F-64-NEXT: vcmpnlepd %ymm3, %ymm2, %ymm2
3545 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3546 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3547 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3548 ; AVX512F-64-NEXT: retq
3549 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3550 <4 x double> %f1, <4 x double> %f2, metadata !"ugt",
3551 metadata !"fpexcept.strict") #0
3552 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3556 define <4 x i64> @test_v4f64_uge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3557 ; AVX-32-LABEL: test_v4f64_uge_s:
3559 ; AVX-32-NEXT: pushl %ebp
3560 ; AVX-32-NEXT: movl %esp, %ebp
3561 ; AVX-32-NEXT: andl $-32, %esp
3562 ; AVX-32-NEXT: subl $32, %esp
3563 ; AVX-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %ymm2
3564 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3565 ; AVX-32-NEXT: movl %ebp, %esp
3566 ; AVX-32-NEXT: popl %ebp
3569 ; AVX-64-LABEL: test_v4f64_uge_s:
3571 ; AVX-64-NEXT: vcmpnltpd %ymm3, %ymm2, %ymm2
3572 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3575 ; AVX512-32-LABEL: test_v4f64_uge_s:
3576 ; AVX512-32: # %bb.0:
3577 ; AVX512-32-NEXT: pushl %ebp
3578 ; AVX512-32-NEXT: movl %esp, %ebp
3579 ; AVX512-32-NEXT: andl $-32, %esp
3580 ; AVX512-32-NEXT: subl $32, %esp
3581 ; AVX512-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %k1
3582 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3583 ; AVX512-32-NEXT: movl %ebp, %esp
3584 ; AVX512-32-NEXT: popl %ebp
3585 ; AVX512-32-NEXT: retl
3587 ; AVX512-64-LABEL: test_v4f64_uge_s:
3588 ; AVX512-64: # %bb.0:
3589 ; AVX512-64-NEXT: vcmpnltpd %ymm3, %ymm2, %k1
3590 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3591 ; AVX512-64-NEXT: retq
3593 ; AVX512F-32-LABEL: test_v4f64_uge_s:
3594 ; AVX512F-32: # %bb.0:
3595 ; AVX512F-32-NEXT: pushl %ebp
3596 ; AVX512F-32-NEXT: movl %esp, %ebp
3597 ; AVX512F-32-NEXT: andl $-32, %esp
3598 ; AVX512F-32-NEXT: subl $32, %esp
3599 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3600 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3601 ; AVX512F-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %ymm2
3602 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3603 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3604 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3605 ; AVX512F-32-NEXT: movl %ebp, %esp
3606 ; AVX512F-32-NEXT: popl %ebp
3607 ; AVX512F-32-NEXT: retl
3609 ; AVX512F-64-LABEL: test_v4f64_uge_s:
3610 ; AVX512F-64: # %bb.0:
3611 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3612 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3613 ; AVX512F-64-NEXT: vcmpnltpd %ymm3, %ymm2, %ymm2
3614 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3615 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3616 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3617 ; AVX512F-64-NEXT: retq
3618 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3619 <4 x double> %f1, <4 x double> %f2, metadata !"uge",
3620 metadata !"fpexcept.strict") #0
3621 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3625 define <4 x i64> @test_v4f64_ult_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3626 ; AVX-32-LABEL: test_v4f64_ult_s:
3628 ; AVX-32-NEXT: pushl %ebp
3629 ; AVX-32-NEXT: movl %esp, %ebp
3630 ; AVX-32-NEXT: andl $-32, %esp
3631 ; AVX-32-NEXT: subl $32, %esp
3632 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
3633 ; AVX-32-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3634 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3635 ; AVX-32-NEXT: movl %ebp, %esp
3636 ; AVX-32-NEXT: popl %ebp
3639 ; AVX-64-LABEL: test_v4f64_ult_s:
3641 ; AVX-64-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3642 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3645 ; AVX512-32-LABEL: test_v4f64_ult_s:
3646 ; AVX512-32: # %bb.0:
3647 ; AVX512-32-NEXT: pushl %ebp
3648 ; AVX512-32-NEXT: movl %esp, %ebp
3649 ; AVX512-32-NEXT: andl $-32, %esp
3650 ; AVX512-32-NEXT: subl $32, %esp
3651 ; AVX512-32-NEXT: vcmpngepd 8(%ebp), %ymm2, %k1
3652 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3653 ; AVX512-32-NEXT: movl %ebp, %esp
3654 ; AVX512-32-NEXT: popl %ebp
3655 ; AVX512-32-NEXT: retl
3657 ; AVX512-64-LABEL: test_v4f64_ult_s:
3658 ; AVX512-64: # %bb.0:
3659 ; AVX512-64-NEXT: vcmpnlepd %ymm2, %ymm3, %k1
3660 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3661 ; AVX512-64-NEXT: retq
3663 ; AVX512F-32-LABEL: test_v4f64_ult_s:
3664 ; AVX512F-32: # %bb.0:
3665 ; AVX512F-32-NEXT: pushl %ebp
3666 ; AVX512F-32-NEXT: movl %esp, %ebp
3667 ; AVX512F-32-NEXT: andl $-32, %esp
3668 ; AVX512F-32-NEXT: subl $32, %esp
3669 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3670 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3671 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
3672 ; AVX512F-32-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3673 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3674 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3675 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3676 ; AVX512F-32-NEXT: movl %ebp, %esp
3677 ; AVX512F-32-NEXT: popl %ebp
3678 ; AVX512F-32-NEXT: retl
3680 ; AVX512F-64-LABEL: test_v4f64_ult_s:
3681 ; AVX512F-64: # %bb.0:
3682 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3683 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3684 ; AVX512F-64-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3685 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3686 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3687 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3688 ; AVX512F-64-NEXT: retq
3689 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3690 <4 x double> %f1, <4 x double> %f2, metadata !"ult",
3691 metadata !"fpexcept.strict") #0
3692 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3696 define <4 x i64> @test_v4f64_ule_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3697 ; AVX-32-LABEL: test_v4f64_ule_s:
3699 ; AVX-32-NEXT: pushl %ebp
3700 ; AVX-32-NEXT: movl %esp, %ebp
3701 ; AVX-32-NEXT: andl $-32, %esp
3702 ; AVX-32-NEXT: subl $32, %esp
3703 ; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3
3704 ; AVX-32-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3705 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3706 ; AVX-32-NEXT: movl %ebp, %esp
3707 ; AVX-32-NEXT: popl %ebp
3710 ; AVX-64-LABEL: test_v4f64_ule_s:
3712 ; AVX-64-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3713 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3716 ; AVX512-32-LABEL: test_v4f64_ule_s:
3717 ; AVX512-32: # %bb.0:
3718 ; AVX512-32-NEXT: pushl %ebp
3719 ; AVX512-32-NEXT: movl %esp, %ebp
3720 ; AVX512-32-NEXT: andl $-32, %esp
3721 ; AVX512-32-NEXT: subl $32, %esp
3722 ; AVX512-32-NEXT: vcmpngtpd 8(%ebp), %ymm2, %k1
3723 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3724 ; AVX512-32-NEXT: movl %ebp, %esp
3725 ; AVX512-32-NEXT: popl %ebp
3726 ; AVX512-32-NEXT: retl
3728 ; AVX512-64-LABEL: test_v4f64_ule_s:
3729 ; AVX512-64: # %bb.0:
3730 ; AVX512-64-NEXT: vcmpnltpd %ymm2, %ymm3, %k1
3731 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3732 ; AVX512-64-NEXT: retq
3734 ; AVX512F-32-LABEL: test_v4f64_ule_s:
3735 ; AVX512F-32: # %bb.0:
3736 ; AVX512F-32-NEXT: pushl %ebp
3737 ; AVX512F-32-NEXT: movl %esp, %ebp
3738 ; AVX512F-32-NEXT: andl $-32, %esp
3739 ; AVX512F-32-NEXT: subl $32, %esp
3740 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3741 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3742 ; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3
3743 ; AVX512F-32-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3744 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3745 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3746 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3747 ; AVX512F-32-NEXT: movl %ebp, %esp
3748 ; AVX512F-32-NEXT: popl %ebp
3749 ; AVX512F-32-NEXT: retl
3751 ; AVX512F-64-LABEL: test_v4f64_ule_s:
3752 ; AVX512F-64: # %bb.0:
3753 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3754 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3755 ; AVX512F-64-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3756 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3757 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3758 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3759 ; AVX512F-64-NEXT: retq
3760 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3761 <4 x double> %f1, <4 x double> %f2, metadata !"ule",
3762 metadata !"fpexcept.strict") #0
3763 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3767 define <4 x i64> @test_v4f64_une_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3768 ; AVX-32-LABEL: test_v4f64_une_s:
3770 ; AVX-32-NEXT: pushl %ebp
3771 ; AVX-32-NEXT: movl %esp, %ebp
3772 ; AVX-32-NEXT: andl $-32, %esp
3773 ; AVX-32-NEXT: subl $32, %esp
3774 ; AVX-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %ymm2
3775 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3776 ; AVX-32-NEXT: movl %ebp, %esp
3777 ; AVX-32-NEXT: popl %ebp
3780 ; AVX-64-LABEL: test_v4f64_une_s:
3782 ; AVX-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %ymm2
3783 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3786 ; AVX512-32-LABEL: test_v4f64_une_s:
3787 ; AVX512-32: # %bb.0:
3788 ; AVX512-32-NEXT: pushl %ebp
3789 ; AVX512-32-NEXT: movl %esp, %ebp
3790 ; AVX512-32-NEXT: andl $-32, %esp
3791 ; AVX512-32-NEXT: subl $32, %esp
3792 ; AVX512-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %k1
3793 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3794 ; AVX512-32-NEXT: movl %ebp, %esp
3795 ; AVX512-32-NEXT: popl %ebp
3796 ; AVX512-32-NEXT: retl
3798 ; AVX512-64-LABEL: test_v4f64_une_s:
3799 ; AVX512-64: # %bb.0:
3800 ; AVX512-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %k1
3801 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3802 ; AVX512-64-NEXT: retq
3804 ; AVX512F-32-LABEL: test_v4f64_une_s:
3805 ; AVX512F-32: # %bb.0:
3806 ; AVX512F-32-NEXT: pushl %ebp
3807 ; AVX512F-32-NEXT: movl %esp, %ebp
3808 ; AVX512F-32-NEXT: andl $-32, %esp
3809 ; AVX512F-32-NEXT: subl $32, %esp
3810 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3811 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3812 ; AVX512F-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %ymm2
3813 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3814 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3815 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3816 ; AVX512F-32-NEXT: movl %ebp, %esp
3817 ; AVX512F-32-NEXT: popl %ebp
3818 ; AVX512F-32-NEXT: retl
3820 ; AVX512F-64-LABEL: test_v4f64_une_s:
3821 ; AVX512F-64: # %bb.0:
3822 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3823 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3824 ; AVX512F-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %ymm2
3825 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3826 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3827 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3828 ; AVX512F-64-NEXT: retq
3829 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3830 <4 x double> %f1, <4 x double> %f2, metadata !"une",
3831 metadata !"fpexcept.strict") #0
3832 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3836 define <4 x i64> @test_v4f64_uno_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 {
3837 ; AVX-32-LABEL: test_v4f64_uno_s:
3839 ; AVX-32-NEXT: pushl %ebp
3840 ; AVX-32-NEXT: movl %esp, %ebp
3841 ; AVX-32-NEXT: andl $-32, %esp
3842 ; AVX-32-NEXT: subl $32, %esp
3843 ; AVX-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %ymm2
3844 ; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3845 ; AVX-32-NEXT: movl %ebp, %esp
3846 ; AVX-32-NEXT: popl %ebp
3849 ; AVX-64-LABEL: test_v4f64_uno_s:
3851 ; AVX-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %ymm2
3852 ; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
3855 ; AVX512-32-LABEL: test_v4f64_uno_s:
3856 ; AVX512-32: # %bb.0:
3857 ; AVX512-32-NEXT: pushl %ebp
3858 ; AVX512-32-NEXT: movl %esp, %ebp
3859 ; AVX512-32-NEXT: andl $-32, %esp
3860 ; AVX512-32-NEXT: subl $32, %esp
3861 ; AVX512-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %k1
3862 ; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3863 ; AVX512-32-NEXT: movl %ebp, %esp
3864 ; AVX512-32-NEXT: popl %ebp
3865 ; AVX512-32-NEXT: retl
3867 ; AVX512-64-LABEL: test_v4f64_uno_s:
3868 ; AVX512-64: # %bb.0:
3869 ; AVX512-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %k1
3870 ; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
3871 ; AVX512-64-NEXT: retq
3873 ; AVX512F-32-LABEL: test_v4f64_uno_s:
3874 ; AVX512F-32: # %bb.0:
3875 ; AVX512F-32-NEXT: pushl %ebp
3876 ; AVX512F-32-NEXT: movl %esp, %ebp
3877 ; AVX512F-32-NEXT: andl $-32, %esp
3878 ; AVX512F-32-NEXT: subl $32, %esp
3879 ; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3880 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3881 ; AVX512F-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %ymm2
3882 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
3883 ; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3884 ; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3885 ; AVX512F-32-NEXT: movl %ebp, %esp
3886 ; AVX512F-32-NEXT: popl %ebp
3887 ; AVX512F-32-NEXT: retl
3889 ; AVX512F-64-LABEL: test_v4f64_uno_s:
3890 ; AVX512F-64: # %bb.0:
3891 ; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3892 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
3893 ; AVX512F-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %ymm2
3894 ; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
3895 ; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3896 ; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3897 ; AVX512F-64-NEXT: retq
3898 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(
3899 <4 x double> %f1, <4 x double> %f2, metadata !"uno",
3900 metadata !"fpexcept.strict") #0
3901 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b
3905 attributes #0 = { strictfp nounwind }
3907 declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float>, <8 x float>, metadata, metadata)
3908 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double>, <4 x double>, metadata, metadata)
3909 declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float>, <8 x float>, metadata, metadata)
3910 declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double>, <4 x double>, metadata, metadata)