Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / vec-strict-cmp-128.ll
blob008435b47b53a2bb7cd35a732eb38df1d5e30c61
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-32
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-64
4 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-32
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-64
6 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX512-32
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX512-64
8 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=AVX512F-32
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=AVX512F-64
11 define <4 x i32> @test_v4f32_oeq_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
12 ; SSE-32-LABEL: test_v4f32_oeq_q:
13 ; SSE-32:       # %bb.0:
14 ; SSE-32-NEXT:    pushl %ebp
15 ; SSE-32-NEXT:    movl %esp, %ebp
16 ; SSE-32-NEXT:    andl $-16, %esp
17 ; SSE-32-NEXT:    subl $16, %esp
18 ; SSE-32-NEXT:    cmpeqps 8(%ebp), %xmm2
19 ; SSE-32-NEXT:    andps %xmm2, %xmm0
20 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
21 ; SSE-32-NEXT:    orps %xmm2, %xmm0
22 ; SSE-32-NEXT:    movl %ebp, %esp
23 ; SSE-32-NEXT:    popl %ebp
24 ; SSE-32-NEXT:    retl
26 ; SSE-64-LABEL: test_v4f32_oeq_q:
27 ; SSE-64:       # %bb.0:
28 ; SSE-64-NEXT:    cmpeqps %xmm3, %xmm2
29 ; SSE-64-NEXT:    andps %xmm2, %xmm0
30 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
31 ; SSE-64-NEXT:    orps %xmm2, %xmm0
32 ; SSE-64-NEXT:    retq
34 ; AVX-32-LABEL: test_v4f32_oeq_q:
35 ; AVX-32:       # %bb.0:
36 ; AVX-32-NEXT:    pushl %ebp
37 ; AVX-32-NEXT:    movl %esp, %ebp
38 ; AVX-32-NEXT:    andl $-16, %esp
39 ; AVX-32-NEXT:    subl $16, %esp
40 ; AVX-32-NEXT:    vcmpeqps 8(%ebp), %xmm2, %xmm2
41 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
42 ; AVX-32-NEXT:    movl %ebp, %esp
43 ; AVX-32-NEXT:    popl %ebp
44 ; AVX-32-NEXT:    retl
46 ; AVX-64-LABEL: test_v4f32_oeq_q:
47 ; AVX-64:       # %bb.0:
48 ; AVX-64-NEXT:    vcmpeqps %xmm3, %xmm2, %xmm2
49 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
50 ; AVX-64-NEXT:    retq
52 ; AVX512-32-LABEL: test_v4f32_oeq_q:
53 ; AVX512-32:       # %bb.0:
54 ; AVX512-32-NEXT:    pushl %ebp
55 ; AVX512-32-NEXT:    movl %esp, %ebp
56 ; AVX512-32-NEXT:    andl $-16, %esp
57 ; AVX512-32-NEXT:    subl $16, %esp
58 ; AVX512-32-NEXT:    vcmpeqps 8(%ebp), %xmm2, %k1
59 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
60 ; AVX512-32-NEXT:    movl %ebp, %esp
61 ; AVX512-32-NEXT:    popl %ebp
62 ; AVX512-32-NEXT:    retl
64 ; AVX512-64-LABEL: test_v4f32_oeq_q:
65 ; AVX512-64:       # %bb.0:
66 ; AVX512-64-NEXT:    vcmpeqps %xmm3, %xmm2, %k1
67 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
68 ; AVX512-64-NEXT:    retq
70 ; AVX512F-32-LABEL: test_v4f32_oeq_q:
71 ; AVX512F-32:       # %bb.0:
72 ; AVX512F-32-NEXT:    pushl %ebp
73 ; AVX512F-32-NEXT:    movl %esp, %ebp
74 ; AVX512F-32-NEXT:    andl $-16, %esp
75 ; AVX512F-32-NEXT:    subl $16, %esp
76 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
77 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
78 ; AVX512F-32-NEXT:    vcmpeqps 8(%ebp), %xmm2, %xmm2
79 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
80 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
81 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
82 ; AVX512F-32-NEXT:    movl %ebp, %esp
83 ; AVX512F-32-NEXT:    popl %ebp
84 ; AVX512F-32-NEXT:    vzeroupper
85 ; AVX512F-32-NEXT:    retl
87 ; AVX512F-64-LABEL: test_v4f32_oeq_q:
88 ; AVX512F-64:       # %bb.0:
89 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
90 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
91 ; AVX512F-64-NEXT:    vcmpeqps %xmm3, %xmm2, %xmm2
92 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
93 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
94 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
95 ; AVX512F-64-NEXT:    vzeroupper
96 ; AVX512F-64-NEXT:    retq
97   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
98                                                <4 x float> %f1, <4 x float> %f2, metadata !"oeq",
99                                                metadata !"fpexcept.strict") #0
100   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
101   ret <4 x i32> %res
104 define <4 x i32> @test_v4f32_ogt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
105 ; SSE-32-LABEL: test_v4f32_ogt_q:
106 ; SSE-32:       # %bb.0:
107 ; SSE-32-NEXT:    pushl %ebp
108 ; SSE-32-NEXT:    movl %esp, %ebp
109 ; SSE-32-NEXT:    andl $-16, %esp
110 ; SSE-32-NEXT:    subl $16, %esp
111 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
112 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
113 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
114 ; SSE-32-NEXT:    movaps %xmm2, %xmm5
115 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
116 ; SSE-32-NEXT:    xorl %eax, %eax
117 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
118 ; SSE-32-NEXT:    movl $-1, %ecx
119 ; SSE-32-NEXT:    movl $0, %edx
120 ; SSE-32-NEXT:    cmoval %ecx, %edx
121 ; SSE-32-NEXT:    movd %edx, %xmm5
122 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
123 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm3[1]
124 ; SSE-32-NEXT:    movaps %xmm2, %xmm6
125 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
126 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
127 ; SSE-32-NEXT:    movl $0, %edx
128 ; SSE-32-NEXT:    cmoval %ecx, %edx
129 ; SSE-32-NEXT:    movd %edx, %xmm4
130 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
131 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
132 ; SSE-32-NEXT:    movl $0, %edx
133 ; SSE-32-NEXT:    cmoval %ecx, %edx
134 ; SSE-32-NEXT:    movd %edx, %xmm5
135 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
136 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
137 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
138 ; SSE-32-NEXT:    cmoval %ecx, %eax
139 ; SSE-32-NEXT:    movd %eax, %xmm2
140 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
141 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
142 ; SSE-32-NEXT:    pand %xmm5, %xmm0
143 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
144 ; SSE-32-NEXT:    por %xmm5, %xmm0
145 ; SSE-32-NEXT:    movl %ebp, %esp
146 ; SSE-32-NEXT:    popl %ebp
147 ; SSE-32-NEXT:    retl
149 ; SSE-64-LABEL: test_v4f32_ogt_q:
150 ; SSE-64:       # %bb.0:
151 ; SSE-64-NEXT:    movaps %xmm3, %xmm4
152 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
153 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
154 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
155 ; SSE-64-NEXT:    xorl %eax, %eax
156 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
157 ; SSE-64-NEXT:    movl $-1, %ecx
158 ; SSE-64-NEXT:    movl $0, %edx
159 ; SSE-64-NEXT:    cmoval %ecx, %edx
160 ; SSE-64-NEXT:    movd %edx, %xmm4
161 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
162 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm3[1]
163 ; SSE-64-NEXT:    movaps %xmm2, %xmm6
164 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
165 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
166 ; SSE-64-NEXT:    movl $0, %edx
167 ; SSE-64-NEXT:    cmoval %ecx, %edx
168 ; SSE-64-NEXT:    movd %edx, %xmm5
169 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
170 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
171 ; SSE-64-NEXT:    movl $0, %edx
172 ; SSE-64-NEXT:    cmoval %ecx, %edx
173 ; SSE-64-NEXT:    movd %edx, %xmm4
174 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
175 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
176 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
177 ; SSE-64-NEXT:    cmoval %ecx, %eax
178 ; SSE-64-NEXT:    movd %eax, %xmm2
179 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
180 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
181 ; SSE-64-NEXT:    pand %xmm4, %xmm0
182 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
183 ; SSE-64-NEXT:    por %xmm4, %xmm0
184 ; SSE-64-NEXT:    retq
186 ; AVX-32-LABEL: test_v4f32_ogt_q:
187 ; AVX-32:       # %bb.0:
188 ; AVX-32-NEXT:    pushl %ebp
189 ; AVX-32-NEXT:    movl %esp, %ebp
190 ; AVX-32-NEXT:    andl $-16, %esp
191 ; AVX-32-NEXT:    subl $16, %esp
192 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
193 ; AVX-32-NEXT:    vcmplt_oqps %xmm2, %xmm3, %xmm2
194 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
195 ; AVX-32-NEXT:    movl %ebp, %esp
196 ; AVX-32-NEXT:    popl %ebp
197 ; AVX-32-NEXT:    retl
199 ; AVX-64-LABEL: test_v4f32_ogt_q:
200 ; AVX-64:       # %bb.0:
201 ; AVX-64-NEXT:    vcmplt_oqps %xmm2, %xmm3, %xmm2
202 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
203 ; AVX-64-NEXT:    retq
205 ; AVX512-32-LABEL: test_v4f32_ogt_q:
206 ; AVX512-32:       # %bb.0:
207 ; AVX512-32-NEXT:    pushl %ebp
208 ; AVX512-32-NEXT:    movl %esp, %ebp
209 ; AVX512-32-NEXT:    andl $-16, %esp
210 ; AVX512-32-NEXT:    subl $16, %esp
211 ; AVX512-32-NEXT:    vcmpgt_oqps 8(%ebp), %xmm2, %k1
212 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
213 ; AVX512-32-NEXT:    movl %ebp, %esp
214 ; AVX512-32-NEXT:    popl %ebp
215 ; AVX512-32-NEXT:    retl
217 ; AVX512-64-LABEL: test_v4f32_ogt_q:
218 ; AVX512-64:       # %bb.0:
219 ; AVX512-64-NEXT:    vcmplt_oqps %xmm2, %xmm3, %k1
220 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
221 ; AVX512-64-NEXT:    retq
223 ; AVX512F-32-LABEL: test_v4f32_ogt_q:
224 ; AVX512F-32:       # %bb.0:
225 ; AVX512F-32-NEXT:    pushl %ebp
226 ; AVX512F-32-NEXT:    movl %esp, %ebp
227 ; AVX512F-32-NEXT:    andl $-16, %esp
228 ; AVX512F-32-NEXT:    subl $16, %esp
229 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
230 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
231 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
232 ; AVX512F-32-NEXT:    vcmplt_oqps %xmm2, %xmm3, %xmm2
233 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
234 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
235 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
236 ; AVX512F-32-NEXT:    movl %ebp, %esp
237 ; AVX512F-32-NEXT:    popl %ebp
238 ; AVX512F-32-NEXT:    vzeroupper
239 ; AVX512F-32-NEXT:    retl
241 ; AVX512F-64-LABEL: test_v4f32_ogt_q:
242 ; AVX512F-64:       # %bb.0:
243 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
244 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
245 ; AVX512F-64-NEXT:    vcmplt_oqps %xmm2, %xmm3, %xmm2
246 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
247 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
248 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
249 ; AVX512F-64-NEXT:    vzeroupper
250 ; AVX512F-64-NEXT:    retq
251   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
252                                                <4 x float> %f1, <4 x float> %f2, metadata !"ogt",
253                                                metadata !"fpexcept.strict") #0
254   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
255   ret <4 x i32> %res
258 define <4 x i32> @test_v4f32_oge_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
259 ; SSE-32-LABEL: test_v4f32_oge_q:
260 ; SSE-32:       # %bb.0:
261 ; SSE-32-NEXT:    pushl %ebp
262 ; SSE-32-NEXT:    movl %esp, %ebp
263 ; SSE-32-NEXT:    andl $-16, %esp
264 ; SSE-32-NEXT:    subl $16, %esp
265 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
266 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
267 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
268 ; SSE-32-NEXT:    movaps %xmm2, %xmm5
269 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
270 ; SSE-32-NEXT:    xorl %eax, %eax
271 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
272 ; SSE-32-NEXT:    movl $-1, %ecx
273 ; SSE-32-NEXT:    movl $0, %edx
274 ; SSE-32-NEXT:    cmovael %ecx, %edx
275 ; SSE-32-NEXT:    movd %edx, %xmm5
276 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
277 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm3[1]
278 ; SSE-32-NEXT:    movaps %xmm2, %xmm6
279 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
280 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
281 ; SSE-32-NEXT:    movl $0, %edx
282 ; SSE-32-NEXT:    cmovael %ecx, %edx
283 ; SSE-32-NEXT:    movd %edx, %xmm4
284 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
285 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
286 ; SSE-32-NEXT:    movl $0, %edx
287 ; SSE-32-NEXT:    cmovael %ecx, %edx
288 ; SSE-32-NEXT:    movd %edx, %xmm5
289 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
290 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
291 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
292 ; SSE-32-NEXT:    cmovael %ecx, %eax
293 ; SSE-32-NEXT:    movd %eax, %xmm2
294 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
295 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
296 ; SSE-32-NEXT:    pand %xmm5, %xmm0
297 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
298 ; SSE-32-NEXT:    por %xmm5, %xmm0
299 ; SSE-32-NEXT:    movl %ebp, %esp
300 ; SSE-32-NEXT:    popl %ebp
301 ; SSE-32-NEXT:    retl
303 ; SSE-64-LABEL: test_v4f32_oge_q:
304 ; SSE-64:       # %bb.0:
305 ; SSE-64-NEXT:    movaps %xmm3, %xmm4
306 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
307 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
308 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
309 ; SSE-64-NEXT:    xorl %eax, %eax
310 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
311 ; SSE-64-NEXT:    movl $-1, %ecx
312 ; SSE-64-NEXT:    movl $0, %edx
313 ; SSE-64-NEXT:    cmovael %ecx, %edx
314 ; SSE-64-NEXT:    movd %edx, %xmm4
315 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
316 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm3[1]
317 ; SSE-64-NEXT:    movaps %xmm2, %xmm6
318 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
319 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
320 ; SSE-64-NEXT:    movl $0, %edx
321 ; SSE-64-NEXT:    cmovael %ecx, %edx
322 ; SSE-64-NEXT:    movd %edx, %xmm5
323 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
324 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
325 ; SSE-64-NEXT:    movl $0, %edx
326 ; SSE-64-NEXT:    cmovael %ecx, %edx
327 ; SSE-64-NEXT:    movd %edx, %xmm4
328 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
329 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
330 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
331 ; SSE-64-NEXT:    cmovael %ecx, %eax
332 ; SSE-64-NEXT:    movd %eax, %xmm2
333 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
334 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
335 ; SSE-64-NEXT:    pand %xmm4, %xmm0
336 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
337 ; SSE-64-NEXT:    por %xmm4, %xmm0
338 ; SSE-64-NEXT:    retq
340 ; AVX-32-LABEL: test_v4f32_oge_q:
341 ; AVX-32:       # %bb.0:
342 ; AVX-32-NEXT:    pushl %ebp
343 ; AVX-32-NEXT:    movl %esp, %ebp
344 ; AVX-32-NEXT:    andl $-16, %esp
345 ; AVX-32-NEXT:    subl $16, %esp
346 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
347 ; AVX-32-NEXT:    vcmple_oqps %xmm2, %xmm3, %xmm2
348 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
349 ; AVX-32-NEXT:    movl %ebp, %esp
350 ; AVX-32-NEXT:    popl %ebp
351 ; AVX-32-NEXT:    retl
353 ; AVX-64-LABEL: test_v4f32_oge_q:
354 ; AVX-64:       # %bb.0:
355 ; AVX-64-NEXT:    vcmple_oqps %xmm2, %xmm3, %xmm2
356 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
357 ; AVX-64-NEXT:    retq
359 ; AVX512-32-LABEL: test_v4f32_oge_q:
360 ; AVX512-32:       # %bb.0:
361 ; AVX512-32-NEXT:    pushl %ebp
362 ; AVX512-32-NEXT:    movl %esp, %ebp
363 ; AVX512-32-NEXT:    andl $-16, %esp
364 ; AVX512-32-NEXT:    subl $16, %esp
365 ; AVX512-32-NEXT:    vcmpge_oqps 8(%ebp), %xmm2, %k1
366 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
367 ; AVX512-32-NEXT:    movl %ebp, %esp
368 ; AVX512-32-NEXT:    popl %ebp
369 ; AVX512-32-NEXT:    retl
371 ; AVX512-64-LABEL: test_v4f32_oge_q:
372 ; AVX512-64:       # %bb.0:
373 ; AVX512-64-NEXT:    vcmple_oqps %xmm2, %xmm3, %k1
374 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
375 ; AVX512-64-NEXT:    retq
377 ; AVX512F-32-LABEL: test_v4f32_oge_q:
378 ; AVX512F-32:       # %bb.0:
379 ; AVX512F-32-NEXT:    pushl %ebp
380 ; AVX512F-32-NEXT:    movl %esp, %ebp
381 ; AVX512F-32-NEXT:    andl $-16, %esp
382 ; AVX512F-32-NEXT:    subl $16, %esp
383 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
384 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
385 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
386 ; AVX512F-32-NEXT:    vcmple_oqps %xmm2, %xmm3, %xmm2
387 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
388 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
389 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
390 ; AVX512F-32-NEXT:    movl %ebp, %esp
391 ; AVX512F-32-NEXT:    popl %ebp
392 ; AVX512F-32-NEXT:    vzeroupper
393 ; AVX512F-32-NEXT:    retl
395 ; AVX512F-64-LABEL: test_v4f32_oge_q:
396 ; AVX512F-64:       # %bb.0:
397 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
398 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
399 ; AVX512F-64-NEXT:    vcmple_oqps %xmm2, %xmm3, %xmm2
400 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
401 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
402 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
403 ; AVX512F-64-NEXT:    vzeroupper
404 ; AVX512F-64-NEXT:    retq
405   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
406                                                <4 x float> %f1, <4 x float> %f2, metadata !"oge",
407                                                metadata !"fpexcept.strict") #0
408   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
409   ret <4 x i32> %res
412 define <4 x i32> @test_v4f32_olt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
413 ; SSE-32-LABEL: test_v4f32_olt_q:
414 ; SSE-32:       # %bb.0:
415 ; SSE-32-NEXT:    pushl %ebp
416 ; SSE-32-NEXT:    movl %esp, %ebp
417 ; SSE-32-NEXT:    andl $-16, %esp
418 ; SSE-32-NEXT:    subl $16, %esp
419 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
420 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
421 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
422 ; SSE-32-NEXT:    movaps %xmm3, %xmm5
423 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
424 ; SSE-32-NEXT:    xorl %eax, %eax
425 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
426 ; SSE-32-NEXT:    movl $-1, %ecx
427 ; SSE-32-NEXT:    movl $0, %edx
428 ; SSE-32-NEXT:    cmoval %ecx, %edx
429 ; SSE-32-NEXT:    movd %edx, %xmm5
430 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
431 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm2[1]
432 ; SSE-32-NEXT:    movaps %xmm3, %xmm6
433 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
434 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
435 ; SSE-32-NEXT:    movl $0, %edx
436 ; SSE-32-NEXT:    cmoval %ecx, %edx
437 ; SSE-32-NEXT:    movd %edx, %xmm4
438 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
439 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
440 ; SSE-32-NEXT:    movl $0, %edx
441 ; SSE-32-NEXT:    cmoval %ecx, %edx
442 ; SSE-32-NEXT:    movd %edx, %xmm5
443 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
444 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
445 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
446 ; SSE-32-NEXT:    cmoval %ecx, %eax
447 ; SSE-32-NEXT:    movd %eax, %xmm2
448 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
449 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
450 ; SSE-32-NEXT:    pand %xmm5, %xmm0
451 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
452 ; SSE-32-NEXT:    por %xmm5, %xmm0
453 ; SSE-32-NEXT:    movl %ebp, %esp
454 ; SSE-32-NEXT:    popl %ebp
455 ; SSE-32-NEXT:    retl
457 ; SSE-64-LABEL: test_v4f32_olt_q:
458 ; SSE-64:       # %bb.0:
459 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
460 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
461 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
462 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
463 ; SSE-64-NEXT:    xorl %eax, %eax
464 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
465 ; SSE-64-NEXT:    movl $-1, %ecx
466 ; SSE-64-NEXT:    movl $0, %edx
467 ; SSE-64-NEXT:    cmoval %ecx, %edx
468 ; SSE-64-NEXT:    movd %edx, %xmm4
469 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
470 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm2[1]
471 ; SSE-64-NEXT:    movaps %xmm3, %xmm6
472 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
473 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
474 ; SSE-64-NEXT:    movl $0, %edx
475 ; SSE-64-NEXT:    cmoval %ecx, %edx
476 ; SSE-64-NEXT:    movd %edx, %xmm5
477 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
478 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
479 ; SSE-64-NEXT:    movl $0, %edx
480 ; SSE-64-NEXT:    cmoval %ecx, %edx
481 ; SSE-64-NEXT:    movd %edx, %xmm4
482 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
483 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
484 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
485 ; SSE-64-NEXT:    cmoval %ecx, %eax
486 ; SSE-64-NEXT:    movd %eax, %xmm2
487 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
488 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
489 ; SSE-64-NEXT:    pand %xmm4, %xmm0
490 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
491 ; SSE-64-NEXT:    por %xmm4, %xmm0
492 ; SSE-64-NEXT:    retq
494 ; AVX-32-LABEL: test_v4f32_olt_q:
495 ; AVX-32:       # %bb.0:
496 ; AVX-32-NEXT:    pushl %ebp
497 ; AVX-32-NEXT:    movl %esp, %ebp
498 ; AVX-32-NEXT:    andl $-16, %esp
499 ; AVX-32-NEXT:    subl $16, %esp
500 ; AVX-32-NEXT:    vcmplt_oqps 8(%ebp), %xmm2, %xmm2
501 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
502 ; AVX-32-NEXT:    movl %ebp, %esp
503 ; AVX-32-NEXT:    popl %ebp
504 ; AVX-32-NEXT:    retl
506 ; AVX-64-LABEL: test_v4f32_olt_q:
507 ; AVX-64:       # %bb.0:
508 ; AVX-64-NEXT:    vcmplt_oqps %xmm3, %xmm2, %xmm2
509 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
510 ; AVX-64-NEXT:    retq
512 ; AVX512-32-LABEL: test_v4f32_olt_q:
513 ; AVX512-32:       # %bb.0:
514 ; AVX512-32-NEXT:    pushl %ebp
515 ; AVX512-32-NEXT:    movl %esp, %ebp
516 ; AVX512-32-NEXT:    andl $-16, %esp
517 ; AVX512-32-NEXT:    subl $16, %esp
518 ; AVX512-32-NEXT:    vcmplt_oqps 8(%ebp), %xmm2, %k1
519 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
520 ; AVX512-32-NEXT:    movl %ebp, %esp
521 ; AVX512-32-NEXT:    popl %ebp
522 ; AVX512-32-NEXT:    retl
524 ; AVX512-64-LABEL: test_v4f32_olt_q:
525 ; AVX512-64:       # %bb.0:
526 ; AVX512-64-NEXT:    vcmplt_oqps %xmm3, %xmm2, %k1
527 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
528 ; AVX512-64-NEXT:    retq
530 ; AVX512F-32-LABEL: test_v4f32_olt_q:
531 ; AVX512F-32:       # %bb.0:
532 ; AVX512F-32-NEXT:    pushl %ebp
533 ; AVX512F-32-NEXT:    movl %esp, %ebp
534 ; AVX512F-32-NEXT:    andl $-16, %esp
535 ; AVX512F-32-NEXT:    subl $16, %esp
536 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
537 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
538 ; AVX512F-32-NEXT:    vcmplt_oqps 8(%ebp), %xmm2, %xmm2
539 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
540 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
541 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
542 ; AVX512F-32-NEXT:    movl %ebp, %esp
543 ; AVX512F-32-NEXT:    popl %ebp
544 ; AVX512F-32-NEXT:    vzeroupper
545 ; AVX512F-32-NEXT:    retl
547 ; AVX512F-64-LABEL: test_v4f32_olt_q:
548 ; AVX512F-64:       # %bb.0:
549 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
550 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
551 ; AVX512F-64-NEXT:    vcmplt_oqps %xmm3, %xmm2, %xmm2
552 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
553 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
554 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
555 ; AVX512F-64-NEXT:    vzeroupper
556 ; AVX512F-64-NEXT:    retq
557   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
558                                                <4 x float> %f1, <4 x float> %f2, metadata !"olt",
559                                                metadata !"fpexcept.strict") #0
560   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
561   ret <4 x i32> %res
564 define <4 x i32> @test_v4f32_ole_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
565 ; SSE-32-LABEL: test_v4f32_ole_q:
566 ; SSE-32:       # %bb.0:
567 ; SSE-32-NEXT:    pushl %ebp
568 ; SSE-32-NEXT:    movl %esp, %ebp
569 ; SSE-32-NEXT:    andl $-16, %esp
570 ; SSE-32-NEXT:    subl $16, %esp
571 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
572 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
573 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
574 ; SSE-32-NEXT:    movaps %xmm3, %xmm5
575 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
576 ; SSE-32-NEXT:    xorl %eax, %eax
577 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
578 ; SSE-32-NEXT:    movl $-1, %ecx
579 ; SSE-32-NEXT:    movl $0, %edx
580 ; SSE-32-NEXT:    cmovael %ecx, %edx
581 ; SSE-32-NEXT:    movd %edx, %xmm5
582 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
583 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm2[1]
584 ; SSE-32-NEXT:    movaps %xmm3, %xmm6
585 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
586 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
587 ; SSE-32-NEXT:    movl $0, %edx
588 ; SSE-32-NEXT:    cmovael %ecx, %edx
589 ; SSE-32-NEXT:    movd %edx, %xmm4
590 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
591 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
592 ; SSE-32-NEXT:    movl $0, %edx
593 ; SSE-32-NEXT:    cmovael %ecx, %edx
594 ; SSE-32-NEXT:    movd %edx, %xmm5
595 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
596 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
597 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
598 ; SSE-32-NEXT:    cmovael %ecx, %eax
599 ; SSE-32-NEXT:    movd %eax, %xmm2
600 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
601 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
602 ; SSE-32-NEXT:    pand %xmm5, %xmm0
603 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
604 ; SSE-32-NEXT:    por %xmm5, %xmm0
605 ; SSE-32-NEXT:    movl %ebp, %esp
606 ; SSE-32-NEXT:    popl %ebp
607 ; SSE-32-NEXT:    retl
609 ; SSE-64-LABEL: test_v4f32_ole_q:
610 ; SSE-64:       # %bb.0:
611 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
612 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
613 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
614 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
615 ; SSE-64-NEXT:    xorl %eax, %eax
616 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
617 ; SSE-64-NEXT:    movl $-1, %ecx
618 ; SSE-64-NEXT:    movl $0, %edx
619 ; SSE-64-NEXT:    cmovael %ecx, %edx
620 ; SSE-64-NEXT:    movd %edx, %xmm4
621 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
622 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm2[1]
623 ; SSE-64-NEXT:    movaps %xmm3, %xmm6
624 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
625 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
626 ; SSE-64-NEXT:    movl $0, %edx
627 ; SSE-64-NEXT:    cmovael %ecx, %edx
628 ; SSE-64-NEXT:    movd %edx, %xmm5
629 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
630 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
631 ; SSE-64-NEXT:    movl $0, %edx
632 ; SSE-64-NEXT:    cmovael %ecx, %edx
633 ; SSE-64-NEXT:    movd %edx, %xmm4
634 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
635 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
636 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
637 ; SSE-64-NEXT:    cmovael %ecx, %eax
638 ; SSE-64-NEXT:    movd %eax, %xmm2
639 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
640 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
641 ; SSE-64-NEXT:    pand %xmm4, %xmm0
642 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
643 ; SSE-64-NEXT:    por %xmm4, %xmm0
644 ; SSE-64-NEXT:    retq
646 ; AVX-32-LABEL: test_v4f32_ole_q:
647 ; AVX-32:       # %bb.0:
648 ; AVX-32-NEXT:    pushl %ebp
649 ; AVX-32-NEXT:    movl %esp, %ebp
650 ; AVX-32-NEXT:    andl $-16, %esp
651 ; AVX-32-NEXT:    subl $16, %esp
652 ; AVX-32-NEXT:    vcmple_oqps 8(%ebp), %xmm2, %xmm2
653 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
654 ; AVX-32-NEXT:    movl %ebp, %esp
655 ; AVX-32-NEXT:    popl %ebp
656 ; AVX-32-NEXT:    retl
658 ; AVX-64-LABEL: test_v4f32_ole_q:
659 ; AVX-64:       # %bb.0:
660 ; AVX-64-NEXT:    vcmple_oqps %xmm3, %xmm2, %xmm2
661 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
662 ; AVX-64-NEXT:    retq
664 ; AVX512-32-LABEL: test_v4f32_ole_q:
665 ; AVX512-32:       # %bb.0:
666 ; AVX512-32-NEXT:    pushl %ebp
667 ; AVX512-32-NEXT:    movl %esp, %ebp
668 ; AVX512-32-NEXT:    andl $-16, %esp
669 ; AVX512-32-NEXT:    subl $16, %esp
670 ; AVX512-32-NEXT:    vcmple_oqps 8(%ebp), %xmm2, %k1
671 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
672 ; AVX512-32-NEXT:    movl %ebp, %esp
673 ; AVX512-32-NEXT:    popl %ebp
674 ; AVX512-32-NEXT:    retl
676 ; AVX512-64-LABEL: test_v4f32_ole_q:
677 ; AVX512-64:       # %bb.0:
678 ; AVX512-64-NEXT:    vcmple_oqps %xmm3, %xmm2, %k1
679 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
680 ; AVX512-64-NEXT:    retq
682 ; AVX512F-32-LABEL: test_v4f32_ole_q:
683 ; AVX512F-32:       # %bb.0:
684 ; AVX512F-32-NEXT:    pushl %ebp
685 ; AVX512F-32-NEXT:    movl %esp, %ebp
686 ; AVX512F-32-NEXT:    andl $-16, %esp
687 ; AVX512F-32-NEXT:    subl $16, %esp
688 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
689 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
690 ; AVX512F-32-NEXT:    vcmple_oqps 8(%ebp), %xmm2, %xmm2
691 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
692 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
693 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
694 ; AVX512F-32-NEXT:    movl %ebp, %esp
695 ; AVX512F-32-NEXT:    popl %ebp
696 ; AVX512F-32-NEXT:    vzeroupper
697 ; AVX512F-32-NEXT:    retl
699 ; AVX512F-64-LABEL: test_v4f32_ole_q:
700 ; AVX512F-64:       # %bb.0:
701 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
702 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
703 ; AVX512F-64-NEXT:    vcmple_oqps %xmm3, %xmm2, %xmm2
704 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
705 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
706 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
707 ; AVX512F-64-NEXT:    vzeroupper
708 ; AVX512F-64-NEXT:    retq
709   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
710                                                <4 x float> %f1, <4 x float> %f2, metadata !"ole",
711                                                metadata !"fpexcept.strict") #0
712   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
713   ret <4 x i32> %res
716 define <4 x i32> @test_v4f32_one_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
717 ; SSE-32-LABEL: test_v4f32_one_q:
718 ; SSE-32:       # %bb.0:
719 ; SSE-32-NEXT:    pushl %ebp
720 ; SSE-32-NEXT:    movl %esp, %ebp
721 ; SSE-32-NEXT:    andl $-16, %esp
722 ; SSE-32-NEXT:    subl $16, %esp
723 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
724 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
725 ; SSE-32-NEXT:    cmpneqps %xmm3, %xmm4
726 ; SSE-32-NEXT:    cmpordps %xmm2, %xmm3
727 ; SSE-32-NEXT:    andps %xmm4, %xmm3
728 ; SSE-32-NEXT:    andps %xmm3, %xmm0
729 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
730 ; SSE-32-NEXT:    orps %xmm3, %xmm0
731 ; SSE-32-NEXT:    movl %ebp, %esp
732 ; SSE-32-NEXT:    popl %ebp
733 ; SSE-32-NEXT:    retl
735 ; SSE-64-LABEL: test_v4f32_one_q:
736 ; SSE-64:       # %bb.0:
737 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
738 ; SSE-64-NEXT:    cmpneqps %xmm3, %xmm4
739 ; SSE-64-NEXT:    cmpordps %xmm3, %xmm2
740 ; SSE-64-NEXT:    andps %xmm2, %xmm4
741 ; SSE-64-NEXT:    andps %xmm4, %xmm0
742 ; SSE-64-NEXT:    andnps %xmm1, %xmm4
743 ; SSE-64-NEXT:    orps %xmm4, %xmm0
744 ; SSE-64-NEXT:    retq
746 ; AVX-32-LABEL: test_v4f32_one_q:
747 ; AVX-32:       # %bb.0:
748 ; AVX-32-NEXT:    pushl %ebp
749 ; AVX-32-NEXT:    movl %esp, %ebp
750 ; AVX-32-NEXT:    andl $-16, %esp
751 ; AVX-32-NEXT:    subl $16, %esp
752 ; AVX-32-NEXT:    vcmpneq_oqps 8(%ebp), %xmm2, %xmm2
753 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
754 ; AVX-32-NEXT:    movl %ebp, %esp
755 ; AVX-32-NEXT:    popl %ebp
756 ; AVX-32-NEXT:    retl
758 ; AVX-64-LABEL: test_v4f32_one_q:
759 ; AVX-64:       # %bb.0:
760 ; AVX-64-NEXT:    vcmpneq_oqps %xmm3, %xmm2, %xmm2
761 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
762 ; AVX-64-NEXT:    retq
764 ; AVX512-32-LABEL: test_v4f32_one_q:
765 ; AVX512-32:       # %bb.0:
766 ; AVX512-32-NEXT:    pushl %ebp
767 ; AVX512-32-NEXT:    movl %esp, %ebp
768 ; AVX512-32-NEXT:    andl $-16, %esp
769 ; AVX512-32-NEXT:    subl $16, %esp
770 ; AVX512-32-NEXT:    vcmpneq_oqps 8(%ebp), %xmm2, %k1
771 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
772 ; AVX512-32-NEXT:    movl %ebp, %esp
773 ; AVX512-32-NEXT:    popl %ebp
774 ; AVX512-32-NEXT:    retl
776 ; AVX512-64-LABEL: test_v4f32_one_q:
777 ; AVX512-64:       # %bb.0:
778 ; AVX512-64-NEXT:    vcmpneq_oqps %xmm3, %xmm2, %k1
779 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
780 ; AVX512-64-NEXT:    retq
782 ; AVX512F-32-LABEL: test_v4f32_one_q:
783 ; AVX512F-32:       # %bb.0:
784 ; AVX512F-32-NEXT:    pushl %ebp
785 ; AVX512F-32-NEXT:    movl %esp, %ebp
786 ; AVX512F-32-NEXT:    andl $-16, %esp
787 ; AVX512F-32-NEXT:    subl $16, %esp
788 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
789 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
790 ; AVX512F-32-NEXT:    vcmpneq_oqps 8(%ebp), %xmm2, %xmm2
791 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
792 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
793 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
794 ; AVX512F-32-NEXT:    movl %ebp, %esp
795 ; AVX512F-32-NEXT:    popl %ebp
796 ; AVX512F-32-NEXT:    vzeroupper
797 ; AVX512F-32-NEXT:    retl
799 ; AVX512F-64-LABEL: test_v4f32_one_q:
800 ; AVX512F-64:       # %bb.0:
801 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
802 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
803 ; AVX512F-64-NEXT:    vcmpneq_oqps %xmm3, %xmm2, %xmm2
804 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
805 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
806 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
807 ; AVX512F-64-NEXT:    vzeroupper
808 ; AVX512F-64-NEXT:    retq
809   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
810                                                <4 x float> %f1, <4 x float> %f2, metadata !"one",
811                                                metadata !"fpexcept.strict") #0
812   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
813   ret <4 x i32> %res
816 define <4 x i32> @test_v4f32_ord_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
817 ; SSE-32-LABEL: test_v4f32_ord_q:
818 ; SSE-32:       # %bb.0:
819 ; SSE-32-NEXT:    pushl %ebp
820 ; SSE-32-NEXT:    movl %esp, %ebp
821 ; SSE-32-NEXT:    andl $-16, %esp
822 ; SSE-32-NEXT:    subl $16, %esp
823 ; SSE-32-NEXT:    cmpordps 8(%ebp), %xmm2
824 ; SSE-32-NEXT:    andps %xmm2, %xmm0
825 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
826 ; SSE-32-NEXT:    orps %xmm2, %xmm0
827 ; SSE-32-NEXT:    movl %ebp, %esp
828 ; SSE-32-NEXT:    popl %ebp
829 ; SSE-32-NEXT:    retl
831 ; SSE-64-LABEL: test_v4f32_ord_q:
832 ; SSE-64:       # %bb.0:
833 ; SSE-64-NEXT:    cmpordps %xmm3, %xmm2
834 ; SSE-64-NEXT:    andps %xmm2, %xmm0
835 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
836 ; SSE-64-NEXT:    orps %xmm2, %xmm0
837 ; SSE-64-NEXT:    retq
839 ; AVX-32-LABEL: test_v4f32_ord_q:
840 ; AVX-32:       # %bb.0:
841 ; AVX-32-NEXT:    pushl %ebp
842 ; AVX-32-NEXT:    movl %esp, %ebp
843 ; AVX-32-NEXT:    andl $-16, %esp
844 ; AVX-32-NEXT:    subl $16, %esp
845 ; AVX-32-NEXT:    vcmpordps 8(%ebp), %xmm2, %xmm2
846 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
847 ; AVX-32-NEXT:    movl %ebp, %esp
848 ; AVX-32-NEXT:    popl %ebp
849 ; AVX-32-NEXT:    retl
851 ; AVX-64-LABEL: test_v4f32_ord_q:
852 ; AVX-64:       # %bb.0:
853 ; AVX-64-NEXT:    vcmpordps %xmm3, %xmm2, %xmm2
854 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
855 ; AVX-64-NEXT:    retq
857 ; AVX512-32-LABEL: test_v4f32_ord_q:
858 ; AVX512-32:       # %bb.0:
859 ; AVX512-32-NEXT:    pushl %ebp
860 ; AVX512-32-NEXT:    movl %esp, %ebp
861 ; AVX512-32-NEXT:    andl $-16, %esp
862 ; AVX512-32-NEXT:    subl $16, %esp
863 ; AVX512-32-NEXT:    vcmpordps 8(%ebp), %xmm2, %k1
864 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
865 ; AVX512-32-NEXT:    movl %ebp, %esp
866 ; AVX512-32-NEXT:    popl %ebp
867 ; AVX512-32-NEXT:    retl
869 ; AVX512-64-LABEL: test_v4f32_ord_q:
870 ; AVX512-64:       # %bb.0:
871 ; AVX512-64-NEXT:    vcmpordps %xmm3, %xmm2, %k1
872 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
873 ; AVX512-64-NEXT:    retq
875 ; AVX512F-32-LABEL: test_v4f32_ord_q:
876 ; AVX512F-32:       # %bb.0:
877 ; AVX512F-32-NEXT:    pushl %ebp
878 ; AVX512F-32-NEXT:    movl %esp, %ebp
879 ; AVX512F-32-NEXT:    andl $-16, %esp
880 ; AVX512F-32-NEXT:    subl $16, %esp
881 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
882 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
883 ; AVX512F-32-NEXT:    vcmpordps 8(%ebp), %xmm2, %xmm2
884 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
885 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
886 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
887 ; AVX512F-32-NEXT:    movl %ebp, %esp
888 ; AVX512F-32-NEXT:    popl %ebp
889 ; AVX512F-32-NEXT:    vzeroupper
890 ; AVX512F-32-NEXT:    retl
892 ; AVX512F-64-LABEL: test_v4f32_ord_q:
893 ; AVX512F-64:       # %bb.0:
894 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
895 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
896 ; AVX512F-64-NEXT:    vcmpordps %xmm3, %xmm2, %xmm2
897 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
898 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
899 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
900 ; AVX512F-64-NEXT:    vzeroupper
901 ; AVX512F-64-NEXT:    retq
902   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
903                                                <4 x float> %f1, <4 x float> %f2, metadata !"ord",
904                                                metadata !"fpexcept.strict") #0
905   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
906   ret <4 x i32> %res
909 define <4 x i32> @test_v4f32_ueq_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
910 ; SSE-32-LABEL: test_v4f32_ueq_q:
911 ; SSE-32:       # %bb.0:
912 ; SSE-32-NEXT:    pushl %ebp
913 ; SSE-32-NEXT:    movl %esp, %ebp
914 ; SSE-32-NEXT:    andl $-16, %esp
915 ; SSE-32-NEXT:    subl $16, %esp
916 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
917 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
918 ; SSE-32-NEXT:    cmpeqps %xmm3, %xmm4
919 ; SSE-32-NEXT:    cmpunordps %xmm2, %xmm3
920 ; SSE-32-NEXT:    orps %xmm4, %xmm3
921 ; SSE-32-NEXT:    andps %xmm3, %xmm0
922 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
923 ; SSE-32-NEXT:    orps %xmm3, %xmm0
924 ; SSE-32-NEXT:    movl %ebp, %esp
925 ; SSE-32-NEXT:    popl %ebp
926 ; SSE-32-NEXT:    retl
928 ; SSE-64-LABEL: test_v4f32_ueq_q:
929 ; SSE-64:       # %bb.0:
930 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
931 ; SSE-64-NEXT:    cmpeqps %xmm3, %xmm4
932 ; SSE-64-NEXT:    cmpunordps %xmm3, %xmm2
933 ; SSE-64-NEXT:    orps %xmm2, %xmm4
934 ; SSE-64-NEXT:    andps %xmm4, %xmm0
935 ; SSE-64-NEXT:    andnps %xmm1, %xmm4
936 ; SSE-64-NEXT:    orps %xmm4, %xmm0
937 ; SSE-64-NEXT:    retq
939 ; AVX-32-LABEL: test_v4f32_ueq_q:
940 ; AVX-32:       # %bb.0:
941 ; AVX-32-NEXT:    pushl %ebp
942 ; AVX-32-NEXT:    movl %esp, %ebp
943 ; AVX-32-NEXT:    andl $-16, %esp
944 ; AVX-32-NEXT:    subl $16, %esp
945 ; AVX-32-NEXT:    vcmpeq_uqps 8(%ebp), %xmm2, %xmm2
946 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
947 ; AVX-32-NEXT:    movl %ebp, %esp
948 ; AVX-32-NEXT:    popl %ebp
949 ; AVX-32-NEXT:    retl
951 ; AVX-64-LABEL: test_v4f32_ueq_q:
952 ; AVX-64:       # %bb.0:
953 ; AVX-64-NEXT:    vcmpeq_uqps %xmm3, %xmm2, %xmm2
954 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
955 ; AVX-64-NEXT:    retq
957 ; AVX512-32-LABEL: test_v4f32_ueq_q:
958 ; AVX512-32:       # %bb.0:
959 ; AVX512-32-NEXT:    pushl %ebp
960 ; AVX512-32-NEXT:    movl %esp, %ebp
961 ; AVX512-32-NEXT:    andl $-16, %esp
962 ; AVX512-32-NEXT:    subl $16, %esp
963 ; AVX512-32-NEXT:    vcmpeq_uqps 8(%ebp), %xmm2, %k1
964 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
965 ; AVX512-32-NEXT:    movl %ebp, %esp
966 ; AVX512-32-NEXT:    popl %ebp
967 ; AVX512-32-NEXT:    retl
969 ; AVX512-64-LABEL: test_v4f32_ueq_q:
970 ; AVX512-64:       # %bb.0:
971 ; AVX512-64-NEXT:    vcmpeq_uqps %xmm3, %xmm2, %k1
972 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
973 ; AVX512-64-NEXT:    retq
975 ; AVX512F-32-LABEL: test_v4f32_ueq_q:
976 ; AVX512F-32:       # %bb.0:
977 ; AVX512F-32-NEXT:    pushl %ebp
978 ; AVX512F-32-NEXT:    movl %esp, %ebp
979 ; AVX512F-32-NEXT:    andl $-16, %esp
980 ; AVX512F-32-NEXT:    subl $16, %esp
981 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
982 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
983 ; AVX512F-32-NEXT:    vcmpeq_uqps 8(%ebp), %xmm2, %xmm2
984 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
985 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
986 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
987 ; AVX512F-32-NEXT:    movl %ebp, %esp
988 ; AVX512F-32-NEXT:    popl %ebp
989 ; AVX512F-32-NEXT:    vzeroupper
990 ; AVX512F-32-NEXT:    retl
992 ; AVX512F-64-LABEL: test_v4f32_ueq_q:
993 ; AVX512F-64:       # %bb.0:
994 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
995 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
996 ; AVX512F-64-NEXT:    vcmpeq_uqps %xmm3, %xmm2, %xmm2
997 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
998 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
999 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1000 ; AVX512F-64-NEXT:    vzeroupper
1001 ; AVX512F-64-NEXT:    retq
1002   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1003                                                <4 x float> %f1, <4 x float> %f2, metadata !"ueq",
1004                                                metadata !"fpexcept.strict") #0
1005   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1006   ret <4 x i32> %res
1009 define <4 x i32> @test_v4f32_ugt_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1010 ; SSE-32-LABEL: test_v4f32_ugt_q:
1011 ; SSE-32:       # %bb.0:
1012 ; SSE-32-NEXT:    pushl %ebp
1013 ; SSE-32-NEXT:    movl %esp, %ebp
1014 ; SSE-32-NEXT:    andl $-16, %esp
1015 ; SSE-32-NEXT:    subl $16, %esp
1016 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
1017 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
1018 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
1019 ; SSE-32-NEXT:    movaps %xmm3, %xmm5
1020 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
1021 ; SSE-32-NEXT:    xorl %eax, %eax
1022 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
1023 ; SSE-32-NEXT:    movl $-1, %ecx
1024 ; SSE-32-NEXT:    movl $0, %edx
1025 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1026 ; SSE-32-NEXT:    movd %edx, %xmm5
1027 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
1028 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm2[1]
1029 ; SSE-32-NEXT:    movaps %xmm3, %xmm6
1030 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
1031 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
1032 ; SSE-32-NEXT:    movl $0, %edx
1033 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1034 ; SSE-32-NEXT:    movd %edx, %xmm4
1035 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
1036 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
1037 ; SSE-32-NEXT:    movl $0, %edx
1038 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1039 ; SSE-32-NEXT:    movd %edx, %xmm5
1040 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1041 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1042 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
1043 ; SSE-32-NEXT:    cmovbl %ecx, %eax
1044 ; SSE-32-NEXT:    movd %eax, %xmm2
1045 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
1046 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
1047 ; SSE-32-NEXT:    pand %xmm5, %xmm0
1048 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
1049 ; SSE-32-NEXT:    por %xmm5, %xmm0
1050 ; SSE-32-NEXT:    movl %ebp, %esp
1051 ; SSE-32-NEXT:    popl %ebp
1052 ; SSE-32-NEXT:    retl
1054 ; SSE-64-LABEL: test_v4f32_ugt_q:
1055 ; SSE-64:       # %bb.0:
1056 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
1057 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
1058 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
1059 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
1060 ; SSE-64-NEXT:    xorl %eax, %eax
1061 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
1062 ; SSE-64-NEXT:    movl $-1, %ecx
1063 ; SSE-64-NEXT:    movl $0, %edx
1064 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1065 ; SSE-64-NEXT:    movd %edx, %xmm4
1066 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
1067 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm2[1]
1068 ; SSE-64-NEXT:    movaps %xmm3, %xmm6
1069 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
1070 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
1071 ; SSE-64-NEXT:    movl $0, %edx
1072 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1073 ; SSE-64-NEXT:    movd %edx, %xmm5
1074 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1075 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
1076 ; SSE-64-NEXT:    movl $0, %edx
1077 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1078 ; SSE-64-NEXT:    movd %edx, %xmm4
1079 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1080 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1081 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
1082 ; SSE-64-NEXT:    cmovbl %ecx, %eax
1083 ; SSE-64-NEXT:    movd %eax, %xmm2
1084 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
1085 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
1086 ; SSE-64-NEXT:    pand %xmm4, %xmm0
1087 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
1088 ; SSE-64-NEXT:    por %xmm4, %xmm0
1089 ; SSE-64-NEXT:    retq
1091 ; AVX-32-LABEL: test_v4f32_ugt_q:
1092 ; AVX-32:       # %bb.0:
1093 ; AVX-32-NEXT:    pushl %ebp
1094 ; AVX-32-NEXT:    movl %esp, %ebp
1095 ; AVX-32-NEXT:    andl $-16, %esp
1096 ; AVX-32-NEXT:    subl $16, %esp
1097 ; AVX-32-NEXT:    vcmpnle_uqps 8(%ebp), %xmm2, %xmm2
1098 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1099 ; AVX-32-NEXT:    movl %ebp, %esp
1100 ; AVX-32-NEXT:    popl %ebp
1101 ; AVX-32-NEXT:    retl
1103 ; AVX-64-LABEL: test_v4f32_ugt_q:
1104 ; AVX-64:       # %bb.0:
1105 ; AVX-64-NEXT:    vcmpnle_uqps %xmm3, %xmm2, %xmm2
1106 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1107 ; AVX-64-NEXT:    retq
1109 ; AVX512-32-LABEL: test_v4f32_ugt_q:
1110 ; AVX512-32:       # %bb.0:
1111 ; AVX512-32-NEXT:    pushl %ebp
1112 ; AVX512-32-NEXT:    movl %esp, %ebp
1113 ; AVX512-32-NEXT:    andl $-16, %esp
1114 ; AVX512-32-NEXT:    subl $16, %esp
1115 ; AVX512-32-NEXT:    vcmpnle_uqps 8(%ebp), %xmm2, %k1
1116 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1117 ; AVX512-32-NEXT:    movl %ebp, %esp
1118 ; AVX512-32-NEXT:    popl %ebp
1119 ; AVX512-32-NEXT:    retl
1121 ; AVX512-64-LABEL: test_v4f32_ugt_q:
1122 ; AVX512-64:       # %bb.0:
1123 ; AVX512-64-NEXT:    vcmpnle_uqps %xmm3, %xmm2, %k1
1124 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1125 ; AVX512-64-NEXT:    retq
1127 ; AVX512F-32-LABEL: test_v4f32_ugt_q:
1128 ; AVX512F-32:       # %bb.0:
1129 ; AVX512F-32-NEXT:    pushl %ebp
1130 ; AVX512F-32-NEXT:    movl %esp, %ebp
1131 ; AVX512F-32-NEXT:    andl $-16, %esp
1132 ; AVX512F-32-NEXT:    subl $16, %esp
1133 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1134 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1135 ; AVX512F-32-NEXT:    vcmpnle_uqps 8(%ebp), %xmm2, %xmm2
1136 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1137 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1138 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1139 ; AVX512F-32-NEXT:    movl %ebp, %esp
1140 ; AVX512F-32-NEXT:    popl %ebp
1141 ; AVX512F-32-NEXT:    vzeroupper
1142 ; AVX512F-32-NEXT:    retl
1144 ; AVX512F-64-LABEL: test_v4f32_ugt_q:
1145 ; AVX512F-64:       # %bb.0:
1146 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1147 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1148 ; AVX512F-64-NEXT:    vcmpnle_uqps %xmm3, %xmm2, %xmm2
1149 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1150 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1151 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1152 ; AVX512F-64-NEXT:    vzeroupper
1153 ; AVX512F-64-NEXT:    retq
1154   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1155                                                <4 x float> %f1, <4 x float> %f2, metadata !"ugt",
1156                                                metadata !"fpexcept.strict") #0
1157   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1158   ret <4 x i32> %res
1161 define <4 x i32> @test_v4f32_uge_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1162 ; SSE-32-LABEL: test_v4f32_uge_q:
1163 ; SSE-32:       # %bb.0:
1164 ; SSE-32-NEXT:    pushl %ebp
1165 ; SSE-32-NEXT:    movl %esp, %ebp
1166 ; SSE-32-NEXT:    andl $-16, %esp
1167 ; SSE-32-NEXT:    subl $16, %esp
1168 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
1169 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
1170 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
1171 ; SSE-32-NEXT:    movaps %xmm3, %xmm5
1172 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
1173 ; SSE-32-NEXT:    xorl %eax, %eax
1174 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
1175 ; SSE-32-NEXT:    movl $-1, %ecx
1176 ; SSE-32-NEXT:    movl $0, %edx
1177 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1178 ; SSE-32-NEXT:    movd %edx, %xmm5
1179 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
1180 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm2[1]
1181 ; SSE-32-NEXT:    movaps %xmm3, %xmm6
1182 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
1183 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
1184 ; SSE-32-NEXT:    movl $0, %edx
1185 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1186 ; SSE-32-NEXT:    movd %edx, %xmm4
1187 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
1188 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
1189 ; SSE-32-NEXT:    movl $0, %edx
1190 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1191 ; SSE-32-NEXT:    movd %edx, %xmm5
1192 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1193 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1194 ; SSE-32-NEXT:    ucomiss %xmm2, %xmm3
1195 ; SSE-32-NEXT:    cmovbel %ecx, %eax
1196 ; SSE-32-NEXT:    movd %eax, %xmm2
1197 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
1198 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
1199 ; SSE-32-NEXT:    pand %xmm5, %xmm0
1200 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
1201 ; SSE-32-NEXT:    por %xmm5, %xmm0
1202 ; SSE-32-NEXT:    movl %ebp, %esp
1203 ; SSE-32-NEXT:    popl %ebp
1204 ; SSE-32-NEXT:    retl
1206 ; SSE-64-LABEL: test_v4f32_uge_q:
1207 ; SSE-64:       # %bb.0:
1208 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
1209 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm2[3,3]
1210 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
1211 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm3[3,3]
1212 ; SSE-64-NEXT:    xorl %eax, %eax
1213 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
1214 ; SSE-64-NEXT:    movl $-1, %ecx
1215 ; SSE-64-NEXT:    movl $0, %edx
1216 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1217 ; SSE-64-NEXT:    movd %edx, %xmm4
1218 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
1219 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm2[1]
1220 ; SSE-64-NEXT:    movaps %xmm3, %xmm6
1221 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm3[1]
1222 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
1223 ; SSE-64-NEXT:    movl $0, %edx
1224 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1225 ; SSE-64-NEXT:    movd %edx, %xmm5
1226 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1227 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
1228 ; SSE-64-NEXT:    movl $0, %edx
1229 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1230 ; SSE-64-NEXT:    movd %edx, %xmm4
1231 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1232 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1233 ; SSE-64-NEXT:    ucomiss %xmm2, %xmm3
1234 ; SSE-64-NEXT:    cmovbel %ecx, %eax
1235 ; SSE-64-NEXT:    movd %eax, %xmm2
1236 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
1237 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
1238 ; SSE-64-NEXT:    pand %xmm4, %xmm0
1239 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
1240 ; SSE-64-NEXT:    por %xmm4, %xmm0
1241 ; SSE-64-NEXT:    retq
1243 ; AVX-32-LABEL: test_v4f32_uge_q:
1244 ; AVX-32:       # %bb.0:
1245 ; AVX-32-NEXT:    pushl %ebp
1246 ; AVX-32-NEXT:    movl %esp, %ebp
1247 ; AVX-32-NEXT:    andl $-16, %esp
1248 ; AVX-32-NEXT:    subl $16, %esp
1249 ; AVX-32-NEXT:    vcmpnlt_uqps 8(%ebp), %xmm2, %xmm2
1250 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1251 ; AVX-32-NEXT:    movl %ebp, %esp
1252 ; AVX-32-NEXT:    popl %ebp
1253 ; AVX-32-NEXT:    retl
1255 ; AVX-64-LABEL: test_v4f32_uge_q:
1256 ; AVX-64:       # %bb.0:
1257 ; AVX-64-NEXT:    vcmpnlt_uqps %xmm3, %xmm2, %xmm2
1258 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1259 ; AVX-64-NEXT:    retq
1261 ; AVX512-32-LABEL: test_v4f32_uge_q:
1262 ; AVX512-32:       # %bb.0:
1263 ; AVX512-32-NEXT:    pushl %ebp
1264 ; AVX512-32-NEXT:    movl %esp, %ebp
1265 ; AVX512-32-NEXT:    andl $-16, %esp
1266 ; AVX512-32-NEXT:    subl $16, %esp
1267 ; AVX512-32-NEXT:    vcmpnlt_uqps 8(%ebp), %xmm2, %k1
1268 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1269 ; AVX512-32-NEXT:    movl %ebp, %esp
1270 ; AVX512-32-NEXT:    popl %ebp
1271 ; AVX512-32-NEXT:    retl
1273 ; AVX512-64-LABEL: test_v4f32_uge_q:
1274 ; AVX512-64:       # %bb.0:
1275 ; AVX512-64-NEXT:    vcmpnlt_uqps %xmm3, %xmm2, %k1
1276 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1277 ; AVX512-64-NEXT:    retq
1279 ; AVX512F-32-LABEL: test_v4f32_uge_q:
1280 ; AVX512F-32:       # %bb.0:
1281 ; AVX512F-32-NEXT:    pushl %ebp
1282 ; AVX512F-32-NEXT:    movl %esp, %ebp
1283 ; AVX512F-32-NEXT:    andl $-16, %esp
1284 ; AVX512F-32-NEXT:    subl $16, %esp
1285 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1286 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1287 ; AVX512F-32-NEXT:    vcmpnlt_uqps 8(%ebp), %xmm2, %xmm2
1288 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1289 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1290 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1291 ; AVX512F-32-NEXT:    movl %ebp, %esp
1292 ; AVX512F-32-NEXT:    popl %ebp
1293 ; AVX512F-32-NEXT:    vzeroupper
1294 ; AVX512F-32-NEXT:    retl
1296 ; AVX512F-64-LABEL: test_v4f32_uge_q:
1297 ; AVX512F-64:       # %bb.0:
1298 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1299 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1300 ; AVX512F-64-NEXT:    vcmpnlt_uqps %xmm3, %xmm2, %xmm2
1301 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1302 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1303 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1304 ; AVX512F-64-NEXT:    vzeroupper
1305 ; AVX512F-64-NEXT:    retq
1306   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1307                                                <4 x float> %f1, <4 x float> %f2, metadata !"uge",
1308                                                metadata !"fpexcept.strict") #0
1309   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1310   ret <4 x i32> %res
1313 define <4 x i32> @test_v4f32_ult_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1314 ; SSE-32-LABEL: test_v4f32_ult_q:
1315 ; SSE-32:       # %bb.0:
1316 ; SSE-32-NEXT:    pushl %ebp
1317 ; SSE-32-NEXT:    movl %esp, %ebp
1318 ; SSE-32-NEXT:    andl $-16, %esp
1319 ; SSE-32-NEXT:    subl $16, %esp
1320 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
1321 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
1322 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
1323 ; SSE-32-NEXT:    movaps %xmm2, %xmm5
1324 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
1325 ; SSE-32-NEXT:    xorl %eax, %eax
1326 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
1327 ; SSE-32-NEXT:    movl $-1, %ecx
1328 ; SSE-32-NEXT:    movl $0, %edx
1329 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1330 ; SSE-32-NEXT:    movd %edx, %xmm5
1331 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
1332 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm3[1]
1333 ; SSE-32-NEXT:    movaps %xmm2, %xmm6
1334 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
1335 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
1336 ; SSE-32-NEXT:    movl $0, %edx
1337 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1338 ; SSE-32-NEXT:    movd %edx, %xmm4
1339 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
1340 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
1341 ; SSE-32-NEXT:    movl $0, %edx
1342 ; SSE-32-NEXT:    cmovbl %ecx, %edx
1343 ; SSE-32-NEXT:    movd %edx, %xmm5
1344 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1345 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1346 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
1347 ; SSE-32-NEXT:    cmovbl %ecx, %eax
1348 ; SSE-32-NEXT:    movd %eax, %xmm2
1349 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
1350 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
1351 ; SSE-32-NEXT:    pand %xmm5, %xmm0
1352 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
1353 ; SSE-32-NEXT:    por %xmm5, %xmm0
1354 ; SSE-32-NEXT:    movl %ebp, %esp
1355 ; SSE-32-NEXT:    popl %ebp
1356 ; SSE-32-NEXT:    retl
1358 ; SSE-64-LABEL: test_v4f32_ult_q:
1359 ; SSE-64:       # %bb.0:
1360 ; SSE-64-NEXT:    movaps %xmm3, %xmm4
1361 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
1362 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
1363 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
1364 ; SSE-64-NEXT:    xorl %eax, %eax
1365 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
1366 ; SSE-64-NEXT:    movl $-1, %ecx
1367 ; SSE-64-NEXT:    movl $0, %edx
1368 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1369 ; SSE-64-NEXT:    movd %edx, %xmm4
1370 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
1371 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm3[1]
1372 ; SSE-64-NEXT:    movaps %xmm2, %xmm6
1373 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
1374 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
1375 ; SSE-64-NEXT:    movl $0, %edx
1376 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1377 ; SSE-64-NEXT:    movd %edx, %xmm5
1378 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1379 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
1380 ; SSE-64-NEXT:    movl $0, %edx
1381 ; SSE-64-NEXT:    cmovbl %ecx, %edx
1382 ; SSE-64-NEXT:    movd %edx, %xmm4
1383 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1384 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1385 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
1386 ; SSE-64-NEXT:    cmovbl %ecx, %eax
1387 ; SSE-64-NEXT:    movd %eax, %xmm2
1388 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
1389 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
1390 ; SSE-64-NEXT:    pand %xmm4, %xmm0
1391 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
1392 ; SSE-64-NEXT:    por %xmm4, %xmm0
1393 ; SSE-64-NEXT:    retq
1395 ; AVX-32-LABEL: test_v4f32_ult_q:
1396 ; AVX-32:       # %bb.0:
1397 ; AVX-32-NEXT:    pushl %ebp
1398 ; AVX-32-NEXT:    movl %esp, %ebp
1399 ; AVX-32-NEXT:    andl $-16, %esp
1400 ; AVX-32-NEXT:    subl $16, %esp
1401 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
1402 ; AVX-32-NEXT:    vcmpnle_uqps %xmm2, %xmm3, %xmm2
1403 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1404 ; AVX-32-NEXT:    movl %ebp, %esp
1405 ; AVX-32-NEXT:    popl %ebp
1406 ; AVX-32-NEXT:    retl
1408 ; AVX-64-LABEL: test_v4f32_ult_q:
1409 ; AVX-64:       # %bb.0:
1410 ; AVX-64-NEXT:    vcmpnle_uqps %xmm2, %xmm3, %xmm2
1411 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1412 ; AVX-64-NEXT:    retq
1414 ; AVX512-32-LABEL: test_v4f32_ult_q:
1415 ; AVX512-32:       # %bb.0:
1416 ; AVX512-32-NEXT:    pushl %ebp
1417 ; AVX512-32-NEXT:    movl %esp, %ebp
1418 ; AVX512-32-NEXT:    andl $-16, %esp
1419 ; AVX512-32-NEXT:    subl $16, %esp
1420 ; AVX512-32-NEXT:    vcmpnge_uqps 8(%ebp), %xmm2, %k1
1421 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1422 ; AVX512-32-NEXT:    movl %ebp, %esp
1423 ; AVX512-32-NEXT:    popl %ebp
1424 ; AVX512-32-NEXT:    retl
1426 ; AVX512-64-LABEL: test_v4f32_ult_q:
1427 ; AVX512-64:       # %bb.0:
1428 ; AVX512-64-NEXT:    vcmpnle_uqps %xmm2, %xmm3, %k1
1429 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1430 ; AVX512-64-NEXT:    retq
1432 ; AVX512F-32-LABEL: test_v4f32_ult_q:
1433 ; AVX512F-32:       # %bb.0:
1434 ; AVX512F-32-NEXT:    pushl %ebp
1435 ; AVX512F-32-NEXT:    movl %esp, %ebp
1436 ; AVX512F-32-NEXT:    andl $-16, %esp
1437 ; AVX512F-32-NEXT:    subl $16, %esp
1438 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1439 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1440 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
1441 ; AVX512F-32-NEXT:    vcmpnle_uqps %xmm2, %xmm3, %xmm2
1442 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1443 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1444 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1445 ; AVX512F-32-NEXT:    movl %ebp, %esp
1446 ; AVX512F-32-NEXT:    popl %ebp
1447 ; AVX512F-32-NEXT:    vzeroupper
1448 ; AVX512F-32-NEXT:    retl
1450 ; AVX512F-64-LABEL: test_v4f32_ult_q:
1451 ; AVX512F-64:       # %bb.0:
1452 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1453 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1454 ; AVX512F-64-NEXT:    vcmpnle_uqps %xmm2, %xmm3, %xmm2
1455 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1456 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1457 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1458 ; AVX512F-64-NEXT:    vzeroupper
1459 ; AVX512F-64-NEXT:    retq
1460   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1461                                                <4 x float> %f1, <4 x float> %f2, metadata !"ult",
1462                                                metadata !"fpexcept.strict") #0
1463   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1464   ret <4 x i32> %res
1467 define <4 x i32> @test_v4f32_ule_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1468 ; SSE-32-LABEL: test_v4f32_ule_q:
1469 ; SSE-32:       # %bb.0:
1470 ; SSE-32-NEXT:    pushl %ebp
1471 ; SSE-32-NEXT:    movl %esp, %ebp
1472 ; SSE-32-NEXT:    andl $-16, %esp
1473 ; SSE-32-NEXT:    subl $16, %esp
1474 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
1475 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
1476 ; SSE-32-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
1477 ; SSE-32-NEXT:    movaps %xmm2, %xmm5
1478 ; SSE-32-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
1479 ; SSE-32-NEXT:    xorl %eax, %eax
1480 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm5
1481 ; SSE-32-NEXT:    movl $-1, %ecx
1482 ; SSE-32-NEXT:    movl $0, %edx
1483 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1484 ; SSE-32-NEXT:    movd %edx, %xmm5
1485 ; SSE-32-NEXT:    movaps %xmm3, %xmm4
1486 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm3[1]
1487 ; SSE-32-NEXT:    movaps %xmm2, %xmm6
1488 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
1489 ; SSE-32-NEXT:    ucomiss %xmm4, %xmm6
1490 ; SSE-32-NEXT:    movl $0, %edx
1491 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1492 ; SSE-32-NEXT:    movd %edx, %xmm4
1493 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
1494 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
1495 ; SSE-32-NEXT:    movl $0, %edx
1496 ; SSE-32-NEXT:    cmovbel %ecx, %edx
1497 ; SSE-32-NEXT:    movd %edx, %xmm5
1498 ; SSE-32-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1499 ; SSE-32-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1500 ; SSE-32-NEXT:    ucomiss %xmm3, %xmm2
1501 ; SSE-32-NEXT:    cmovbel %ecx, %eax
1502 ; SSE-32-NEXT:    movd %eax, %xmm2
1503 ; SSE-32-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
1504 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm4[0]
1505 ; SSE-32-NEXT:    pand %xmm5, %xmm0
1506 ; SSE-32-NEXT:    pandn %xmm1, %xmm5
1507 ; SSE-32-NEXT:    por %xmm5, %xmm0
1508 ; SSE-32-NEXT:    movl %ebp, %esp
1509 ; SSE-32-NEXT:    popl %ebp
1510 ; SSE-32-NEXT:    retl
1512 ; SSE-64-LABEL: test_v4f32_ule_q:
1513 ; SSE-64:       # %bb.0:
1514 ; SSE-64-NEXT:    movaps %xmm3, %xmm4
1515 ; SSE-64-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,3],xmm3[3,3]
1516 ; SSE-64-NEXT:    movaps %xmm2, %xmm5
1517 ; SSE-64-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm2[3,3]
1518 ; SSE-64-NEXT:    xorl %eax, %eax
1519 ; SSE-64-NEXT:    ucomiss %xmm4, %xmm5
1520 ; SSE-64-NEXT:    movl $-1, %ecx
1521 ; SSE-64-NEXT:    movl $0, %edx
1522 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1523 ; SSE-64-NEXT:    movd %edx, %xmm4
1524 ; SSE-64-NEXT:    movaps %xmm3, %xmm5
1525 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm3[1]
1526 ; SSE-64-NEXT:    movaps %xmm2, %xmm6
1527 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm2[1]
1528 ; SSE-64-NEXT:    ucomiss %xmm5, %xmm6
1529 ; SSE-64-NEXT:    movl $0, %edx
1530 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1531 ; SSE-64-NEXT:    movd %edx, %xmm5
1532 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1533 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
1534 ; SSE-64-NEXT:    movl $0, %edx
1535 ; SSE-64-NEXT:    cmovbel %ecx, %edx
1536 ; SSE-64-NEXT:    movd %edx, %xmm4
1537 ; SSE-64-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,1,1]
1538 ; SSE-64-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,1,1]
1539 ; SSE-64-NEXT:    ucomiss %xmm3, %xmm2
1540 ; SSE-64-NEXT:    cmovbel %ecx, %eax
1541 ; SSE-64-NEXT:    movd %eax, %xmm2
1542 ; SSE-64-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
1543 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
1544 ; SSE-64-NEXT:    pand %xmm4, %xmm0
1545 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
1546 ; SSE-64-NEXT:    por %xmm4, %xmm0
1547 ; SSE-64-NEXT:    retq
1549 ; AVX-32-LABEL: test_v4f32_ule_q:
1550 ; AVX-32:       # %bb.0:
1551 ; AVX-32-NEXT:    pushl %ebp
1552 ; AVX-32-NEXT:    movl %esp, %ebp
1553 ; AVX-32-NEXT:    andl $-16, %esp
1554 ; AVX-32-NEXT:    subl $16, %esp
1555 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
1556 ; AVX-32-NEXT:    vcmpnlt_uqps %xmm2, %xmm3, %xmm2
1557 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1558 ; AVX-32-NEXT:    movl %ebp, %esp
1559 ; AVX-32-NEXT:    popl %ebp
1560 ; AVX-32-NEXT:    retl
1562 ; AVX-64-LABEL: test_v4f32_ule_q:
1563 ; AVX-64:       # %bb.0:
1564 ; AVX-64-NEXT:    vcmpnlt_uqps %xmm2, %xmm3, %xmm2
1565 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1566 ; AVX-64-NEXT:    retq
1568 ; AVX512-32-LABEL: test_v4f32_ule_q:
1569 ; AVX512-32:       # %bb.0:
1570 ; AVX512-32-NEXT:    pushl %ebp
1571 ; AVX512-32-NEXT:    movl %esp, %ebp
1572 ; AVX512-32-NEXT:    andl $-16, %esp
1573 ; AVX512-32-NEXT:    subl $16, %esp
1574 ; AVX512-32-NEXT:    vcmpngt_uqps 8(%ebp), %xmm2, %k1
1575 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1576 ; AVX512-32-NEXT:    movl %ebp, %esp
1577 ; AVX512-32-NEXT:    popl %ebp
1578 ; AVX512-32-NEXT:    retl
1580 ; AVX512-64-LABEL: test_v4f32_ule_q:
1581 ; AVX512-64:       # %bb.0:
1582 ; AVX512-64-NEXT:    vcmpnlt_uqps %xmm2, %xmm3, %k1
1583 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1584 ; AVX512-64-NEXT:    retq
1586 ; AVX512F-32-LABEL: test_v4f32_ule_q:
1587 ; AVX512F-32:       # %bb.0:
1588 ; AVX512F-32-NEXT:    pushl %ebp
1589 ; AVX512F-32-NEXT:    movl %esp, %ebp
1590 ; AVX512F-32-NEXT:    andl $-16, %esp
1591 ; AVX512F-32-NEXT:    subl $16, %esp
1592 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1593 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1594 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
1595 ; AVX512F-32-NEXT:    vcmpnlt_uqps %xmm2, %xmm3, %xmm2
1596 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1597 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1598 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1599 ; AVX512F-32-NEXT:    movl %ebp, %esp
1600 ; AVX512F-32-NEXT:    popl %ebp
1601 ; AVX512F-32-NEXT:    vzeroupper
1602 ; AVX512F-32-NEXT:    retl
1604 ; AVX512F-64-LABEL: test_v4f32_ule_q:
1605 ; AVX512F-64:       # %bb.0:
1606 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1607 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1608 ; AVX512F-64-NEXT:    vcmpnlt_uqps %xmm2, %xmm3, %xmm2
1609 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1610 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1611 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1612 ; AVX512F-64-NEXT:    vzeroupper
1613 ; AVX512F-64-NEXT:    retq
1614   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1615                                                <4 x float> %f1, <4 x float> %f2, metadata !"ule",
1616                                                metadata !"fpexcept.strict") #0
1617   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1618   ret <4 x i32> %res
1621 define <4 x i32> @test_v4f32_une_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1622 ; SSE-32-LABEL: test_v4f32_une_q:
1623 ; SSE-32:       # %bb.0:
1624 ; SSE-32-NEXT:    pushl %ebp
1625 ; SSE-32-NEXT:    movl %esp, %ebp
1626 ; SSE-32-NEXT:    andl $-16, %esp
1627 ; SSE-32-NEXT:    subl $16, %esp
1628 ; SSE-32-NEXT:    cmpneqps 8(%ebp), %xmm2
1629 ; SSE-32-NEXT:    andps %xmm2, %xmm0
1630 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
1631 ; SSE-32-NEXT:    orps %xmm2, %xmm0
1632 ; SSE-32-NEXT:    movl %ebp, %esp
1633 ; SSE-32-NEXT:    popl %ebp
1634 ; SSE-32-NEXT:    retl
1636 ; SSE-64-LABEL: test_v4f32_une_q:
1637 ; SSE-64:       # %bb.0:
1638 ; SSE-64-NEXT:    cmpneqps %xmm3, %xmm2
1639 ; SSE-64-NEXT:    andps %xmm2, %xmm0
1640 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
1641 ; SSE-64-NEXT:    orps %xmm2, %xmm0
1642 ; SSE-64-NEXT:    retq
1644 ; AVX-32-LABEL: test_v4f32_une_q:
1645 ; AVX-32:       # %bb.0:
1646 ; AVX-32-NEXT:    pushl %ebp
1647 ; AVX-32-NEXT:    movl %esp, %ebp
1648 ; AVX-32-NEXT:    andl $-16, %esp
1649 ; AVX-32-NEXT:    subl $16, %esp
1650 ; AVX-32-NEXT:    vcmpneqps 8(%ebp), %xmm2, %xmm2
1651 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1652 ; AVX-32-NEXT:    movl %ebp, %esp
1653 ; AVX-32-NEXT:    popl %ebp
1654 ; AVX-32-NEXT:    retl
1656 ; AVX-64-LABEL: test_v4f32_une_q:
1657 ; AVX-64:       # %bb.0:
1658 ; AVX-64-NEXT:    vcmpneqps %xmm3, %xmm2, %xmm2
1659 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1660 ; AVX-64-NEXT:    retq
1662 ; AVX512-32-LABEL: test_v4f32_une_q:
1663 ; AVX512-32:       # %bb.0:
1664 ; AVX512-32-NEXT:    pushl %ebp
1665 ; AVX512-32-NEXT:    movl %esp, %ebp
1666 ; AVX512-32-NEXT:    andl $-16, %esp
1667 ; AVX512-32-NEXT:    subl $16, %esp
1668 ; AVX512-32-NEXT:    vcmpneqps 8(%ebp), %xmm2, %k1
1669 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1670 ; AVX512-32-NEXT:    movl %ebp, %esp
1671 ; AVX512-32-NEXT:    popl %ebp
1672 ; AVX512-32-NEXT:    retl
1674 ; AVX512-64-LABEL: test_v4f32_une_q:
1675 ; AVX512-64:       # %bb.0:
1676 ; AVX512-64-NEXT:    vcmpneqps %xmm3, %xmm2, %k1
1677 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1678 ; AVX512-64-NEXT:    retq
1680 ; AVX512F-32-LABEL: test_v4f32_une_q:
1681 ; AVX512F-32:       # %bb.0:
1682 ; AVX512F-32-NEXT:    pushl %ebp
1683 ; AVX512F-32-NEXT:    movl %esp, %ebp
1684 ; AVX512F-32-NEXT:    andl $-16, %esp
1685 ; AVX512F-32-NEXT:    subl $16, %esp
1686 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1687 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1688 ; AVX512F-32-NEXT:    vcmpneqps 8(%ebp), %xmm2, %xmm2
1689 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1690 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1691 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1692 ; AVX512F-32-NEXT:    movl %ebp, %esp
1693 ; AVX512F-32-NEXT:    popl %ebp
1694 ; AVX512F-32-NEXT:    vzeroupper
1695 ; AVX512F-32-NEXT:    retl
1697 ; AVX512F-64-LABEL: test_v4f32_une_q:
1698 ; AVX512F-64:       # %bb.0:
1699 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1700 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1701 ; AVX512F-64-NEXT:    vcmpneqps %xmm3, %xmm2, %xmm2
1702 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1703 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1704 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1705 ; AVX512F-64-NEXT:    vzeroupper
1706 ; AVX512F-64-NEXT:    retq
1707   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1708                                                <4 x float> %f1, <4 x float> %f2, metadata !"une",
1709                                                metadata !"fpexcept.strict") #0
1710   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1711   ret <4 x i32> %res
1714 define <4 x i32> @test_v4f32_uno_q(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
1715 ; SSE-32-LABEL: test_v4f32_uno_q:
1716 ; SSE-32:       # %bb.0:
1717 ; SSE-32-NEXT:    pushl %ebp
1718 ; SSE-32-NEXT:    movl %esp, %ebp
1719 ; SSE-32-NEXT:    andl $-16, %esp
1720 ; SSE-32-NEXT:    subl $16, %esp
1721 ; SSE-32-NEXT:    cmpunordps 8(%ebp), %xmm2
1722 ; SSE-32-NEXT:    andps %xmm2, %xmm0
1723 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
1724 ; SSE-32-NEXT:    orps %xmm2, %xmm0
1725 ; SSE-32-NEXT:    movl %ebp, %esp
1726 ; SSE-32-NEXT:    popl %ebp
1727 ; SSE-32-NEXT:    retl
1729 ; SSE-64-LABEL: test_v4f32_uno_q:
1730 ; SSE-64:       # %bb.0:
1731 ; SSE-64-NEXT:    cmpunordps %xmm3, %xmm2
1732 ; SSE-64-NEXT:    andps %xmm2, %xmm0
1733 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
1734 ; SSE-64-NEXT:    orps %xmm2, %xmm0
1735 ; SSE-64-NEXT:    retq
1737 ; AVX-32-LABEL: test_v4f32_uno_q:
1738 ; AVX-32:       # %bb.0:
1739 ; AVX-32-NEXT:    pushl %ebp
1740 ; AVX-32-NEXT:    movl %esp, %ebp
1741 ; AVX-32-NEXT:    andl $-16, %esp
1742 ; AVX-32-NEXT:    subl $16, %esp
1743 ; AVX-32-NEXT:    vcmpunordps 8(%ebp), %xmm2, %xmm2
1744 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1745 ; AVX-32-NEXT:    movl %ebp, %esp
1746 ; AVX-32-NEXT:    popl %ebp
1747 ; AVX-32-NEXT:    retl
1749 ; AVX-64-LABEL: test_v4f32_uno_q:
1750 ; AVX-64:       # %bb.0:
1751 ; AVX-64-NEXT:    vcmpunordps %xmm3, %xmm2, %xmm2
1752 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1753 ; AVX-64-NEXT:    retq
1755 ; AVX512-32-LABEL: test_v4f32_uno_q:
1756 ; AVX512-32:       # %bb.0:
1757 ; AVX512-32-NEXT:    pushl %ebp
1758 ; AVX512-32-NEXT:    movl %esp, %ebp
1759 ; AVX512-32-NEXT:    andl $-16, %esp
1760 ; AVX512-32-NEXT:    subl $16, %esp
1761 ; AVX512-32-NEXT:    vcmpunordps 8(%ebp), %xmm2, %k1
1762 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1763 ; AVX512-32-NEXT:    movl %ebp, %esp
1764 ; AVX512-32-NEXT:    popl %ebp
1765 ; AVX512-32-NEXT:    retl
1767 ; AVX512-64-LABEL: test_v4f32_uno_q:
1768 ; AVX512-64:       # %bb.0:
1769 ; AVX512-64-NEXT:    vcmpunordps %xmm3, %xmm2, %k1
1770 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1771 ; AVX512-64-NEXT:    retq
1773 ; AVX512F-32-LABEL: test_v4f32_uno_q:
1774 ; AVX512F-32:       # %bb.0:
1775 ; AVX512F-32-NEXT:    pushl %ebp
1776 ; AVX512F-32-NEXT:    movl %esp, %ebp
1777 ; AVX512F-32-NEXT:    andl $-16, %esp
1778 ; AVX512F-32-NEXT:    subl $16, %esp
1779 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1780 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1781 ; AVX512F-32-NEXT:    vcmpunordps 8(%ebp), %xmm2, %xmm2
1782 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
1783 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1784 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1785 ; AVX512F-32-NEXT:    movl %ebp, %esp
1786 ; AVX512F-32-NEXT:    popl %ebp
1787 ; AVX512F-32-NEXT:    vzeroupper
1788 ; AVX512F-32-NEXT:    retl
1790 ; AVX512F-64-LABEL: test_v4f32_uno_q:
1791 ; AVX512F-64:       # %bb.0:
1792 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1793 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1794 ; AVX512F-64-NEXT:    vcmpunordps %xmm3, %xmm2, %xmm2
1795 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
1796 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1797 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1798 ; AVX512F-64-NEXT:    vzeroupper
1799 ; AVX512F-64-NEXT:    retq
1800   %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(
1801                                                <4 x float> %f1, <4 x float> %f2, metadata !"uno",
1802                                                metadata !"fpexcept.strict") #0
1803   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
1804   ret <4 x i32> %res
1807 define <2 x i64> @test_v2f64_oeq_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
1808 ; SSE-32-LABEL: test_v2f64_oeq_q:
1809 ; SSE-32:       # %bb.0:
1810 ; SSE-32-NEXT:    pushl %ebp
1811 ; SSE-32-NEXT:    movl %esp, %ebp
1812 ; SSE-32-NEXT:    andl $-16, %esp
1813 ; SSE-32-NEXT:    subl $16, %esp
1814 ; SSE-32-NEXT:    cmpeqpd 8(%ebp), %xmm2
1815 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
1816 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
1817 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
1818 ; SSE-32-NEXT:    movl %ebp, %esp
1819 ; SSE-32-NEXT:    popl %ebp
1820 ; SSE-32-NEXT:    retl
1822 ; SSE-64-LABEL: test_v2f64_oeq_q:
1823 ; SSE-64:       # %bb.0:
1824 ; SSE-64-NEXT:    cmpeqpd %xmm3, %xmm2
1825 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
1826 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
1827 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
1828 ; SSE-64-NEXT:    retq
1830 ; AVX-32-LABEL: test_v2f64_oeq_q:
1831 ; AVX-32:       # %bb.0:
1832 ; AVX-32-NEXT:    pushl %ebp
1833 ; AVX-32-NEXT:    movl %esp, %ebp
1834 ; AVX-32-NEXT:    andl $-16, %esp
1835 ; AVX-32-NEXT:    subl $16, %esp
1836 ; AVX-32-NEXT:    vcmpeqpd 8(%ebp), %xmm2, %xmm2
1837 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1838 ; AVX-32-NEXT:    movl %ebp, %esp
1839 ; AVX-32-NEXT:    popl %ebp
1840 ; AVX-32-NEXT:    retl
1842 ; AVX-64-LABEL: test_v2f64_oeq_q:
1843 ; AVX-64:       # %bb.0:
1844 ; AVX-64-NEXT:    vcmpeqpd %xmm3, %xmm2, %xmm2
1845 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1846 ; AVX-64-NEXT:    retq
1848 ; AVX512-32-LABEL: test_v2f64_oeq_q:
1849 ; AVX512-32:       # %bb.0:
1850 ; AVX512-32-NEXT:    pushl %ebp
1851 ; AVX512-32-NEXT:    movl %esp, %ebp
1852 ; AVX512-32-NEXT:    andl $-16, %esp
1853 ; AVX512-32-NEXT:    subl $16, %esp
1854 ; AVX512-32-NEXT:    vcmpeqpd 8(%ebp), %xmm2, %k1
1855 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
1856 ; AVX512-32-NEXT:    movl %ebp, %esp
1857 ; AVX512-32-NEXT:    popl %ebp
1858 ; AVX512-32-NEXT:    retl
1860 ; AVX512-64-LABEL: test_v2f64_oeq_q:
1861 ; AVX512-64:       # %bb.0:
1862 ; AVX512-64-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1
1863 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
1864 ; AVX512-64-NEXT:    retq
1866 ; AVX512F-32-LABEL: test_v2f64_oeq_q:
1867 ; AVX512F-32:       # %bb.0:
1868 ; AVX512F-32-NEXT:    pushl %ebp
1869 ; AVX512F-32-NEXT:    movl %esp, %ebp
1870 ; AVX512F-32-NEXT:    andl $-16, %esp
1871 ; AVX512F-32-NEXT:    subl $16, %esp
1872 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1873 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1874 ; AVX512F-32-NEXT:    vcmpeqpd 8(%ebp), %xmm2, %xmm2
1875 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
1876 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1877 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1878 ; AVX512F-32-NEXT:    movl %ebp, %esp
1879 ; AVX512F-32-NEXT:    popl %ebp
1880 ; AVX512F-32-NEXT:    vzeroupper
1881 ; AVX512F-32-NEXT:    retl
1883 ; AVX512F-64-LABEL: test_v2f64_oeq_q:
1884 ; AVX512F-64:       # %bb.0:
1885 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1886 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1887 ; AVX512F-64-NEXT:    vcmpeqpd %xmm3, %xmm2, %xmm2
1888 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
1889 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1890 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1891 ; AVX512F-64-NEXT:    vzeroupper
1892 ; AVX512F-64-NEXT:    retq
1893   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
1894                                                <2 x double> %f1, <2 x double> %f2, metadata !"oeq",
1895                                                metadata !"fpexcept.strict") #0
1896   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
1897   ret <2 x i64> %res
1900 define <2 x i64> @test_v2f64_ogt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
1901 ; SSE-32-LABEL: test_v2f64_ogt_q:
1902 ; SSE-32:       # %bb.0:
1903 ; SSE-32-NEXT:    pushl %ebp
1904 ; SSE-32-NEXT:    movl %esp, %ebp
1905 ; SSE-32-NEXT:    andl $-16, %esp
1906 ; SSE-32-NEXT:    subl $16, %esp
1907 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
1908 ; SSE-32-NEXT:    xorl %eax, %eax
1909 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
1910 ; SSE-32-NEXT:    movl $-1, %ecx
1911 ; SSE-32-NEXT:    movl $0, %edx
1912 ; SSE-32-NEXT:    cmoval %ecx, %edx
1913 ; SSE-32-NEXT:    movd %edx, %xmm3
1914 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
1915 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
1916 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
1917 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
1918 ; SSE-32-NEXT:    cmoval %ecx, %eax
1919 ; SSE-32-NEXT:    movd %eax, %xmm2
1920 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
1921 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
1922 ; SSE-32-NEXT:    pand %xmm3, %xmm0
1923 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
1924 ; SSE-32-NEXT:    por %xmm3, %xmm0
1925 ; SSE-32-NEXT:    movl %ebp, %esp
1926 ; SSE-32-NEXT:    popl %ebp
1927 ; SSE-32-NEXT:    retl
1929 ; SSE-64-LABEL: test_v2f64_ogt_q:
1930 ; SSE-64:       # %bb.0:
1931 ; SSE-64-NEXT:    xorl %eax, %eax
1932 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
1933 ; SSE-64-NEXT:    movq $-1, %rcx
1934 ; SSE-64-NEXT:    movl $0, %edx
1935 ; SSE-64-NEXT:    cmovaq %rcx, %rdx
1936 ; SSE-64-NEXT:    movq %rdx, %xmm4
1937 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
1938 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
1939 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
1940 ; SSE-64-NEXT:    cmovaq %rcx, %rax
1941 ; SSE-64-NEXT:    movq %rax, %xmm2
1942 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
1943 ; SSE-64-NEXT:    pand %xmm4, %xmm0
1944 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
1945 ; SSE-64-NEXT:    por %xmm4, %xmm0
1946 ; SSE-64-NEXT:    retq
1948 ; AVX-32-LABEL: test_v2f64_ogt_q:
1949 ; AVX-32:       # %bb.0:
1950 ; AVX-32-NEXT:    pushl %ebp
1951 ; AVX-32-NEXT:    movl %esp, %ebp
1952 ; AVX-32-NEXT:    andl $-16, %esp
1953 ; AVX-32-NEXT:    subl $16, %esp
1954 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
1955 ; AVX-32-NEXT:    vcmplt_oqpd %xmm2, %xmm3, %xmm2
1956 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1957 ; AVX-32-NEXT:    movl %ebp, %esp
1958 ; AVX-32-NEXT:    popl %ebp
1959 ; AVX-32-NEXT:    retl
1961 ; AVX-64-LABEL: test_v2f64_ogt_q:
1962 ; AVX-64:       # %bb.0:
1963 ; AVX-64-NEXT:    vcmplt_oqpd %xmm2, %xmm3, %xmm2
1964 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1965 ; AVX-64-NEXT:    retq
1967 ; AVX512-32-LABEL: test_v2f64_ogt_q:
1968 ; AVX512-32:       # %bb.0:
1969 ; AVX512-32-NEXT:    pushl %ebp
1970 ; AVX512-32-NEXT:    movl %esp, %ebp
1971 ; AVX512-32-NEXT:    andl $-16, %esp
1972 ; AVX512-32-NEXT:    subl $16, %esp
1973 ; AVX512-32-NEXT:    vcmpgt_oqpd 8(%ebp), %xmm2, %k1
1974 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
1975 ; AVX512-32-NEXT:    movl %ebp, %esp
1976 ; AVX512-32-NEXT:    popl %ebp
1977 ; AVX512-32-NEXT:    retl
1979 ; AVX512-64-LABEL: test_v2f64_ogt_q:
1980 ; AVX512-64:       # %bb.0:
1981 ; AVX512-64-NEXT:    vcmplt_oqpd %xmm2, %xmm3, %k1
1982 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
1983 ; AVX512-64-NEXT:    retq
1985 ; AVX512F-32-LABEL: test_v2f64_ogt_q:
1986 ; AVX512F-32:       # %bb.0:
1987 ; AVX512F-32-NEXT:    pushl %ebp
1988 ; AVX512F-32-NEXT:    movl %esp, %ebp
1989 ; AVX512F-32-NEXT:    andl $-16, %esp
1990 ; AVX512F-32-NEXT:    subl $16, %esp
1991 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1992 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1993 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
1994 ; AVX512F-32-NEXT:    vcmplt_oqpd %xmm2, %xmm3, %xmm2
1995 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
1996 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1997 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1998 ; AVX512F-32-NEXT:    movl %ebp, %esp
1999 ; AVX512F-32-NEXT:    popl %ebp
2000 ; AVX512F-32-NEXT:    vzeroupper
2001 ; AVX512F-32-NEXT:    retl
2003 ; AVX512F-64-LABEL: test_v2f64_ogt_q:
2004 ; AVX512F-64:       # %bb.0:
2005 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2006 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2007 ; AVX512F-64-NEXT:    vcmplt_oqpd %xmm2, %xmm3, %xmm2
2008 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2009 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2010 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2011 ; AVX512F-64-NEXT:    vzeroupper
2012 ; AVX512F-64-NEXT:    retq
2013   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2014                                                <2 x double> %f1, <2 x double> %f2, metadata !"ogt",
2015                                                metadata !"fpexcept.strict") #0
2016   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2017   ret <2 x i64> %res
2020 define <2 x i64> @test_v2f64_oge_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2021 ; SSE-32-LABEL: test_v2f64_oge_q:
2022 ; SSE-32:       # %bb.0:
2023 ; SSE-32-NEXT:    pushl %ebp
2024 ; SSE-32-NEXT:    movl %esp, %ebp
2025 ; SSE-32-NEXT:    andl $-16, %esp
2026 ; SSE-32-NEXT:    subl $16, %esp
2027 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2028 ; SSE-32-NEXT:    xorl %eax, %eax
2029 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
2030 ; SSE-32-NEXT:    movl $-1, %ecx
2031 ; SSE-32-NEXT:    movl $0, %edx
2032 ; SSE-32-NEXT:    cmovael %ecx, %edx
2033 ; SSE-32-NEXT:    movd %edx, %xmm3
2034 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2035 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2036 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2037 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
2038 ; SSE-32-NEXT:    cmovael %ecx, %eax
2039 ; SSE-32-NEXT:    movd %eax, %xmm2
2040 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2041 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2042 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2043 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2044 ; SSE-32-NEXT:    por %xmm3, %xmm0
2045 ; SSE-32-NEXT:    movl %ebp, %esp
2046 ; SSE-32-NEXT:    popl %ebp
2047 ; SSE-32-NEXT:    retl
2049 ; SSE-64-LABEL: test_v2f64_oge_q:
2050 ; SSE-64:       # %bb.0:
2051 ; SSE-64-NEXT:    xorl %eax, %eax
2052 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
2053 ; SSE-64-NEXT:    movq $-1, %rcx
2054 ; SSE-64-NEXT:    movl $0, %edx
2055 ; SSE-64-NEXT:    cmovaeq %rcx, %rdx
2056 ; SSE-64-NEXT:    movq %rdx, %xmm4
2057 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2058 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2059 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
2060 ; SSE-64-NEXT:    cmovaeq %rcx, %rax
2061 ; SSE-64-NEXT:    movq %rax, %xmm2
2062 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2063 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2064 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2065 ; SSE-64-NEXT:    por %xmm4, %xmm0
2066 ; SSE-64-NEXT:    retq
2068 ; AVX-32-LABEL: test_v2f64_oge_q:
2069 ; AVX-32:       # %bb.0:
2070 ; AVX-32-NEXT:    pushl %ebp
2071 ; AVX-32-NEXT:    movl %esp, %ebp
2072 ; AVX-32-NEXT:    andl $-16, %esp
2073 ; AVX-32-NEXT:    subl $16, %esp
2074 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
2075 ; AVX-32-NEXT:    vcmple_oqpd %xmm2, %xmm3, %xmm2
2076 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2077 ; AVX-32-NEXT:    movl %ebp, %esp
2078 ; AVX-32-NEXT:    popl %ebp
2079 ; AVX-32-NEXT:    retl
2081 ; AVX-64-LABEL: test_v2f64_oge_q:
2082 ; AVX-64:       # %bb.0:
2083 ; AVX-64-NEXT:    vcmple_oqpd %xmm2, %xmm3, %xmm2
2084 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2085 ; AVX-64-NEXT:    retq
2087 ; AVX512-32-LABEL: test_v2f64_oge_q:
2088 ; AVX512-32:       # %bb.0:
2089 ; AVX512-32-NEXT:    pushl %ebp
2090 ; AVX512-32-NEXT:    movl %esp, %ebp
2091 ; AVX512-32-NEXT:    andl $-16, %esp
2092 ; AVX512-32-NEXT:    subl $16, %esp
2093 ; AVX512-32-NEXT:    vcmpge_oqpd 8(%ebp), %xmm2, %k1
2094 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2095 ; AVX512-32-NEXT:    movl %ebp, %esp
2096 ; AVX512-32-NEXT:    popl %ebp
2097 ; AVX512-32-NEXT:    retl
2099 ; AVX512-64-LABEL: test_v2f64_oge_q:
2100 ; AVX512-64:       # %bb.0:
2101 ; AVX512-64-NEXT:    vcmple_oqpd %xmm2, %xmm3, %k1
2102 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2103 ; AVX512-64-NEXT:    retq
2105 ; AVX512F-32-LABEL: test_v2f64_oge_q:
2106 ; AVX512F-32:       # %bb.0:
2107 ; AVX512F-32-NEXT:    pushl %ebp
2108 ; AVX512F-32-NEXT:    movl %esp, %ebp
2109 ; AVX512F-32-NEXT:    andl $-16, %esp
2110 ; AVX512F-32-NEXT:    subl $16, %esp
2111 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2112 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2113 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
2114 ; AVX512F-32-NEXT:    vcmple_oqpd %xmm2, %xmm3, %xmm2
2115 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2116 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2117 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2118 ; AVX512F-32-NEXT:    movl %ebp, %esp
2119 ; AVX512F-32-NEXT:    popl %ebp
2120 ; AVX512F-32-NEXT:    vzeroupper
2121 ; AVX512F-32-NEXT:    retl
2123 ; AVX512F-64-LABEL: test_v2f64_oge_q:
2124 ; AVX512F-64:       # %bb.0:
2125 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2126 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2127 ; AVX512F-64-NEXT:    vcmple_oqpd %xmm2, %xmm3, %xmm2
2128 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2129 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2130 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2131 ; AVX512F-64-NEXT:    vzeroupper
2132 ; AVX512F-64-NEXT:    retq
2133   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2134                                                <2 x double> %f1, <2 x double> %f2, metadata !"oge",
2135                                                metadata !"fpexcept.strict") #0
2136   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2137   ret <2 x i64> %res
2140 define <2 x i64> @test_v2f64_olt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2141 ; SSE-32-LABEL: test_v2f64_olt_q:
2142 ; SSE-32:       # %bb.0:
2143 ; SSE-32-NEXT:    pushl %ebp
2144 ; SSE-32-NEXT:    movl %esp, %ebp
2145 ; SSE-32-NEXT:    andl $-16, %esp
2146 ; SSE-32-NEXT:    subl $16, %esp
2147 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2148 ; SSE-32-NEXT:    xorl %eax, %eax
2149 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2150 ; SSE-32-NEXT:    movl $-1, %ecx
2151 ; SSE-32-NEXT:    movl $0, %edx
2152 ; SSE-32-NEXT:    cmoval %ecx, %edx
2153 ; SSE-32-NEXT:    movd %edx, %xmm3
2154 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2155 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2156 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2157 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2158 ; SSE-32-NEXT:    cmoval %ecx, %eax
2159 ; SSE-32-NEXT:    movd %eax, %xmm2
2160 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2161 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2162 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2163 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2164 ; SSE-32-NEXT:    por %xmm3, %xmm0
2165 ; SSE-32-NEXT:    movl %ebp, %esp
2166 ; SSE-32-NEXT:    popl %ebp
2167 ; SSE-32-NEXT:    retl
2169 ; SSE-64-LABEL: test_v2f64_olt_q:
2170 ; SSE-64:       # %bb.0:
2171 ; SSE-64-NEXT:    xorl %eax, %eax
2172 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2173 ; SSE-64-NEXT:    movq $-1, %rcx
2174 ; SSE-64-NEXT:    movl $0, %edx
2175 ; SSE-64-NEXT:    cmovaq %rcx, %rdx
2176 ; SSE-64-NEXT:    movq %rdx, %xmm4
2177 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2178 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2179 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2180 ; SSE-64-NEXT:    cmovaq %rcx, %rax
2181 ; SSE-64-NEXT:    movq %rax, %xmm2
2182 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2183 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2184 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2185 ; SSE-64-NEXT:    por %xmm4, %xmm0
2186 ; SSE-64-NEXT:    retq
2188 ; AVX-32-LABEL: test_v2f64_olt_q:
2189 ; AVX-32:       # %bb.0:
2190 ; AVX-32-NEXT:    pushl %ebp
2191 ; AVX-32-NEXT:    movl %esp, %ebp
2192 ; AVX-32-NEXT:    andl $-16, %esp
2193 ; AVX-32-NEXT:    subl $16, %esp
2194 ; AVX-32-NEXT:    vcmplt_oqpd 8(%ebp), %xmm2, %xmm2
2195 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2196 ; AVX-32-NEXT:    movl %ebp, %esp
2197 ; AVX-32-NEXT:    popl %ebp
2198 ; AVX-32-NEXT:    retl
2200 ; AVX-64-LABEL: test_v2f64_olt_q:
2201 ; AVX-64:       # %bb.0:
2202 ; AVX-64-NEXT:    vcmplt_oqpd %xmm3, %xmm2, %xmm2
2203 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2204 ; AVX-64-NEXT:    retq
2206 ; AVX512-32-LABEL: test_v2f64_olt_q:
2207 ; AVX512-32:       # %bb.0:
2208 ; AVX512-32-NEXT:    pushl %ebp
2209 ; AVX512-32-NEXT:    movl %esp, %ebp
2210 ; AVX512-32-NEXT:    andl $-16, %esp
2211 ; AVX512-32-NEXT:    subl $16, %esp
2212 ; AVX512-32-NEXT:    vcmplt_oqpd 8(%ebp), %xmm2, %k1
2213 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2214 ; AVX512-32-NEXT:    movl %ebp, %esp
2215 ; AVX512-32-NEXT:    popl %ebp
2216 ; AVX512-32-NEXT:    retl
2218 ; AVX512-64-LABEL: test_v2f64_olt_q:
2219 ; AVX512-64:       # %bb.0:
2220 ; AVX512-64-NEXT:    vcmplt_oqpd %xmm3, %xmm2, %k1
2221 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2222 ; AVX512-64-NEXT:    retq
2224 ; AVX512F-32-LABEL: test_v2f64_olt_q:
2225 ; AVX512F-32:       # %bb.0:
2226 ; AVX512F-32-NEXT:    pushl %ebp
2227 ; AVX512F-32-NEXT:    movl %esp, %ebp
2228 ; AVX512F-32-NEXT:    andl $-16, %esp
2229 ; AVX512F-32-NEXT:    subl $16, %esp
2230 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2231 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2232 ; AVX512F-32-NEXT:    vcmplt_oqpd 8(%ebp), %xmm2, %xmm2
2233 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2234 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2235 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2236 ; AVX512F-32-NEXT:    movl %ebp, %esp
2237 ; AVX512F-32-NEXT:    popl %ebp
2238 ; AVX512F-32-NEXT:    vzeroupper
2239 ; AVX512F-32-NEXT:    retl
2241 ; AVX512F-64-LABEL: test_v2f64_olt_q:
2242 ; AVX512F-64:       # %bb.0:
2243 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2244 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2245 ; AVX512F-64-NEXT:    vcmplt_oqpd %xmm3, %xmm2, %xmm2
2246 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2247 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2248 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2249 ; AVX512F-64-NEXT:    vzeroupper
2250 ; AVX512F-64-NEXT:    retq
2251   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2252                                                <2 x double> %f1, <2 x double> %f2, metadata !"olt",
2253                                                metadata !"fpexcept.strict") #0
2254   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2255   ret <2 x i64> %res
2258 define <2 x i64> @test_v2f64_ole_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2259 ; SSE-32-LABEL: test_v2f64_ole_q:
2260 ; SSE-32:       # %bb.0:
2261 ; SSE-32-NEXT:    pushl %ebp
2262 ; SSE-32-NEXT:    movl %esp, %ebp
2263 ; SSE-32-NEXT:    andl $-16, %esp
2264 ; SSE-32-NEXT:    subl $16, %esp
2265 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2266 ; SSE-32-NEXT:    xorl %eax, %eax
2267 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2268 ; SSE-32-NEXT:    movl $-1, %ecx
2269 ; SSE-32-NEXT:    movl $0, %edx
2270 ; SSE-32-NEXT:    cmovael %ecx, %edx
2271 ; SSE-32-NEXT:    movd %edx, %xmm3
2272 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2273 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2274 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2275 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2276 ; SSE-32-NEXT:    cmovael %ecx, %eax
2277 ; SSE-32-NEXT:    movd %eax, %xmm2
2278 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2279 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2280 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2281 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2282 ; SSE-32-NEXT:    por %xmm3, %xmm0
2283 ; SSE-32-NEXT:    movl %ebp, %esp
2284 ; SSE-32-NEXT:    popl %ebp
2285 ; SSE-32-NEXT:    retl
2287 ; SSE-64-LABEL: test_v2f64_ole_q:
2288 ; SSE-64:       # %bb.0:
2289 ; SSE-64-NEXT:    xorl %eax, %eax
2290 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2291 ; SSE-64-NEXT:    movq $-1, %rcx
2292 ; SSE-64-NEXT:    movl $0, %edx
2293 ; SSE-64-NEXT:    cmovaeq %rcx, %rdx
2294 ; SSE-64-NEXT:    movq %rdx, %xmm4
2295 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2296 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2297 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2298 ; SSE-64-NEXT:    cmovaeq %rcx, %rax
2299 ; SSE-64-NEXT:    movq %rax, %xmm2
2300 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2301 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2302 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2303 ; SSE-64-NEXT:    por %xmm4, %xmm0
2304 ; SSE-64-NEXT:    retq
2306 ; AVX-32-LABEL: test_v2f64_ole_q:
2307 ; AVX-32:       # %bb.0:
2308 ; AVX-32-NEXT:    pushl %ebp
2309 ; AVX-32-NEXT:    movl %esp, %ebp
2310 ; AVX-32-NEXT:    andl $-16, %esp
2311 ; AVX-32-NEXT:    subl $16, %esp
2312 ; AVX-32-NEXT:    vcmple_oqpd 8(%ebp), %xmm2, %xmm2
2313 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2314 ; AVX-32-NEXT:    movl %ebp, %esp
2315 ; AVX-32-NEXT:    popl %ebp
2316 ; AVX-32-NEXT:    retl
2318 ; AVX-64-LABEL: test_v2f64_ole_q:
2319 ; AVX-64:       # %bb.0:
2320 ; AVX-64-NEXT:    vcmple_oqpd %xmm3, %xmm2, %xmm2
2321 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2322 ; AVX-64-NEXT:    retq
2324 ; AVX512-32-LABEL: test_v2f64_ole_q:
2325 ; AVX512-32:       # %bb.0:
2326 ; AVX512-32-NEXT:    pushl %ebp
2327 ; AVX512-32-NEXT:    movl %esp, %ebp
2328 ; AVX512-32-NEXT:    andl $-16, %esp
2329 ; AVX512-32-NEXT:    subl $16, %esp
2330 ; AVX512-32-NEXT:    vcmple_oqpd 8(%ebp), %xmm2, %k1
2331 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2332 ; AVX512-32-NEXT:    movl %ebp, %esp
2333 ; AVX512-32-NEXT:    popl %ebp
2334 ; AVX512-32-NEXT:    retl
2336 ; AVX512-64-LABEL: test_v2f64_ole_q:
2337 ; AVX512-64:       # %bb.0:
2338 ; AVX512-64-NEXT:    vcmple_oqpd %xmm3, %xmm2, %k1
2339 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2340 ; AVX512-64-NEXT:    retq
2342 ; AVX512F-32-LABEL: test_v2f64_ole_q:
2343 ; AVX512F-32:       # %bb.0:
2344 ; AVX512F-32-NEXT:    pushl %ebp
2345 ; AVX512F-32-NEXT:    movl %esp, %ebp
2346 ; AVX512F-32-NEXT:    andl $-16, %esp
2347 ; AVX512F-32-NEXT:    subl $16, %esp
2348 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2349 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2350 ; AVX512F-32-NEXT:    vcmple_oqpd 8(%ebp), %xmm2, %xmm2
2351 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2352 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2353 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2354 ; AVX512F-32-NEXT:    movl %ebp, %esp
2355 ; AVX512F-32-NEXT:    popl %ebp
2356 ; AVX512F-32-NEXT:    vzeroupper
2357 ; AVX512F-32-NEXT:    retl
2359 ; AVX512F-64-LABEL: test_v2f64_ole_q:
2360 ; AVX512F-64:       # %bb.0:
2361 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2362 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2363 ; AVX512F-64-NEXT:    vcmple_oqpd %xmm3, %xmm2, %xmm2
2364 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2365 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2366 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2367 ; AVX512F-64-NEXT:    vzeroupper
2368 ; AVX512F-64-NEXT:    retq
2369   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2370                                                <2 x double> %f1, <2 x double> %f2, metadata !"ole",
2371                                                metadata !"fpexcept.strict") #0
2372   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2373   ret <2 x i64> %res
2376 define <2 x i64> @test_v2f64_one_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2377 ; SSE-32-LABEL: test_v2f64_one_q:
2378 ; SSE-32:       # %bb.0:
2379 ; SSE-32-NEXT:    pushl %ebp
2380 ; SSE-32-NEXT:    movl %esp, %ebp
2381 ; SSE-32-NEXT:    andl $-16, %esp
2382 ; SSE-32-NEXT:    subl $16, %esp
2383 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
2384 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
2385 ; SSE-32-NEXT:    cmpneqpd %xmm3, %xmm4
2386 ; SSE-32-NEXT:    cmpordpd %xmm2, %xmm3
2387 ; SSE-32-NEXT:    andpd %xmm4, %xmm3
2388 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
2389 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
2390 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
2391 ; SSE-32-NEXT:    movl %ebp, %esp
2392 ; SSE-32-NEXT:    popl %ebp
2393 ; SSE-32-NEXT:    retl
2395 ; SSE-64-LABEL: test_v2f64_one_q:
2396 ; SSE-64:       # %bb.0:
2397 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
2398 ; SSE-64-NEXT:    cmpneqpd %xmm3, %xmm4
2399 ; SSE-64-NEXT:    cmpordpd %xmm3, %xmm2
2400 ; SSE-64-NEXT:    andpd %xmm2, %xmm4
2401 ; SSE-64-NEXT:    andpd %xmm4, %xmm0
2402 ; SSE-64-NEXT:    andnpd %xmm1, %xmm4
2403 ; SSE-64-NEXT:    orpd %xmm4, %xmm0
2404 ; SSE-64-NEXT:    retq
2406 ; AVX-32-LABEL: test_v2f64_one_q:
2407 ; AVX-32:       # %bb.0:
2408 ; AVX-32-NEXT:    pushl %ebp
2409 ; AVX-32-NEXT:    movl %esp, %ebp
2410 ; AVX-32-NEXT:    andl $-16, %esp
2411 ; AVX-32-NEXT:    subl $16, %esp
2412 ; AVX-32-NEXT:    vcmpneq_oqpd 8(%ebp), %xmm2, %xmm2
2413 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2414 ; AVX-32-NEXT:    movl %ebp, %esp
2415 ; AVX-32-NEXT:    popl %ebp
2416 ; AVX-32-NEXT:    retl
2418 ; AVX-64-LABEL: test_v2f64_one_q:
2419 ; AVX-64:       # %bb.0:
2420 ; AVX-64-NEXT:    vcmpneq_oqpd %xmm3, %xmm2, %xmm2
2421 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2422 ; AVX-64-NEXT:    retq
2424 ; AVX512-32-LABEL: test_v2f64_one_q:
2425 ; AVX512-32:       # %bb.0:
2426 ; AVX512-32-NEXT:    pushl %ebp
2427 ; AVX512-32-NEXT:    movl %esp, %ebp
2428 ; AVX512-32-NEXT:    andl $-16, %esp
2429 ; AVX512-32-NEXT:    subl $16, %esp
2430 ; AVX512-32-NEXT:    vcmpneq_oqpd 8(%ebp), %xmm2, %k1
2431 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2432 ; AVX512-32-NEXT:    movl %ebp, %esp
2433 ; AVX512-32-NEXT:    popl %ebp
2434 ; AVX512-32-NEXT:    retl
2436 ; AVX512-64-LABEL: test_v2f64_one_q:
2437 ; AVX512-64:       # %bb.0:
2438 ; AVX512-64-NEXT:    vcmpneq_oqpd %xmm3, %xmm2, %k1
2439 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2440 ; AVX512-64-NEXT:    retq
2442 ; AVX512F-32-LABEL: test_v2f64_one_q:
2443 ; AVX512F-32:       # %bb.0:
2444 ; AVX512F-32-NEXT:    pushl %ebp
2445 ; AVX512F-32-NEXT:    movl %esp, %ebp
2446 ; AVX512F-32-NEXT:    andl $-16, %esp
2447 ; AVX512F-32-NEXT:    subl $16, %esp
2448 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2449 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2450 ; AVX512F-32-NEXT:    vcmpneq_oqpd 8(%ebp), %xmm2, %xmm2
2451 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2452 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2453 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2454 ; AVX512F-32-NEXT:    movl %ebp, %esp
2455 ; AVX512F-32-NEXT:    popl %ebp
2456 ; AVX512F-32-NEXT:    vzeroupper
2457 ; AVX512F-32-NEXT:    retl
2459 ; AVX512F-64-LABEL: test_v2f64_one_q:
2460 ; AVX512F-64:       # %bb.0:
2461 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2462 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2463 ; AVX512F-64-NEXT:    vcmpneq_oqpd %xmm3, %xmm2, %xmm2
2464 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2465 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2466 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2467 ; AVX512F-64-NEXT:    vzeroupper
2468 ; AVX512F-64-NEXT:    retq
2469   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2470                                                <2 x double> %f1, <2 x double> %f2, metadata !"one",
2471                                                metadata !"fpexcept.strict") #0
2472   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2473   ret <2 x i64> %res
2476 define <2 x i64> @test_v2f64_ord_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2477 ; SSE-32-LABEL: test_v2f64_ord_q:
2478 ; SSE-32:       # %bb.0:
2479 ; SSE-32-NEXT:    pushl %ebp
2480 ; SSE-32-NEXT:    movl %esp, %ebp
2481 ; SSE-32-NEXT:    andl $-16, %esp
2482 ; SSE-32-NEXT:    subl $16, %esp
2483 ; SSE-32-NEXT:    cmpordpd 8(%ebp), %xmm2
2484 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
2485 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
2486 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
2487 ; SSE-32-NEXT:    movl %ebp, %esp
2488 ; SSE-32-NEXT:    popl %ebp
2489 ; SSE-32-NEXT:    retl
2491 ; SSE-64-LABEL: test_v2f64_ord_q:
2492 ; SSE-64:       # %bb.0:
2493 ; SSE-64-NEXT:    cmpordpd %xmm3, %xmm2
2494 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
2495 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
2496 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
2497 ; SSE-64-NEXT:    retq
2499 ; AVX-32-LABEL: test_v2f64_ord_q:
2500 ; AVX-32:       # %bb.0:
2501 ; AVX-32-NEXT:    pushl %ebp
2502 ; AVX-32-NEXT:    movl %esp, %ebp
2503 ; AVX-32-NEXT:    andl $-16, %esp
2504 ; AVX-32-NEXT:    subl $16, %esp
2505 ; AVX-32-NEXT:    vcmpordpd 8(%ebp), %xmm2, %xmm2
2506 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2507 ; AVX-32-NEXT:    movl %ebp, %esp
2508 ; AVX-32-NEXT:    popl %ebp
2509 ; AVX-32-NEXT:    retl
2511 ; AVX-64-LABEL: test_v2f64_ord_q:
2512 ; AVX-64:       # %bb.0:
2513 ; AVX-64-NEXT:    vcmpordpd %xmm3, %xmm2, %xmm2
2514 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2515 ; AVX-64-NEXT:    retq
2517 ; AVX512-32-LABEL: test_v2f64_ord_q:
2518 ; AVX512-32:       # %bb.0:
2519 ; AVX512-32-NEXT:    pushl %ebp
2520 ; AVX512-32-NEXT:    movl %esp, %ebp
2521 ; AVX512-32-NEXT:    andl $-16, %esp
2522 ; AVX512-32-NEXT:    subl $16, %esp
2523 ; AVX512-32-NEXT:    vcmpordpd 8(%ebp), %xmm2, %k1
2524 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2525 ; AVX512-32-NEXT:    movl %ebp, %esp
2526 ; AVX512-32-NEXT:    popl %ebp
2527 ; AVX512-32-NEXT:    retl
2529 ; AVX512-64-LABEL: test_v2f64_ord_q:
2530 ; AVX512-64:       # %bb.0:
2531 ; AVX512-64-NEXT:    vcmpordpd %xmm3, %xmm2, %k1
2532 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2533 ; AVX512-64-NEXT:    retq
2535 ; AVX512F-32-LABEL: test_v2f64_ord_q:
2536 ; AVX512F-32:       # %bb.0:
2537 ; AVX512F-32-NEXT:    pushl %ebp
2538 ; AVX512F-32-NEXT:    movl %esp, %ebp
2539 ; AVX512F-32-NEXT:    andl $-16, %esp
2540 ; AVX512F-32-NEXT:    subl $16, %esp
2541 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2542 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2543 ; AVX512F-32-NEXT:    vcmpordpd 8(%ebp), %xmm2, %xmm2
2544 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2545 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2546 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2547 ; AVX512F-32-NEXT:    movl %ebp, %esp
2548 ; AVX512F-32-NEXT:    popl %ebp
2549 ; AVX512F-32-NEXT:    vzeroupper
2550 ; AVX512F-32-NEXT:    retl
2552 ; AVX512F-64-LABEL: test_v2f64_ord_q:
2553 ; AVX512F-64:       # %bb.0:
2554 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2555 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2556 ; AVX512F-64-NEXT:    vcmpordpd %xmm3, %xmm2, %xmm2
2557 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2558 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2559 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2560 ; AVX512F-64-NEXT:    vzeroupper
2561 ; AVX512F-64-NEXT:    retq
2562   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2563                                                <2 x double> %f1, <2 x double> %f2, metadata !"ord",
2564                                                metadata !"fpexcept.strict") #0
2565   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2566   ret <2 x i64> %res
2569 define <2 x i64> @test_v2f64_ueq_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2570 ; SSE-32-LABEL: test_v2f64_ueq_q:
2571 ; SSE-32:       # %bb.0:
2572 ; SSE-32-NEXT:    pushl %ebp
2573 ; SSE-32-NEXT:    movl %esp, %ebp
2574 ; SSE-32-NEXT:    andl $-16, %esp
2575 ; SSE-32-NEXT:    subl $16, %esp
2576 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
2577 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
2578 ; SSE-32-NEXT:    cmpeqpd %xmm3, %xmm4
2579 ; SSE-32-NEXT:    cmpunordpd %xmm2, %xmm3
2580 ; SSE-32-NEXT:    orpd %xmm4, %xmm3
2581 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
2582 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
2583 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
2584 ; SSE-32-NEXT:    movl %ebp, %esp
2585 ; SSE-32-NEXT:    popl %ebp
2586 ; SSE-32-NEXT:    retl
2588 ; SSE-64-LABEL: test_v2f64_ueq_q:
2589 ; SSE-64:       # %bb.0:
2590 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
2591 ; SSE-64-NEXT:    cmpeqpd %xmm3, %xmm4
2592 ; SSE-64-NEXT:    cmpunordpd %xmm3, %xmm2
2593 ; SSE-64-NEXT:    orpd %xmm2, %xmm4
2594 ; SSE-64-NEXT:    andpd %xmm4, %xmm0
2595 ; SSE-64-NEXT:    andnpd %xmm1, %xmm4
2596 ; SSE-64-NEXT:    orpd %xmm4, %xmm0
2597 ; SSE-64-NEXT:    retq
2599 ; AVX-32-LABEL: test_v2f64_ueq_q:
2600 ; AVX-32:       # %bb.0:
2601 ; AVX-32-NEXT:    pushl %ebp
2602 ; AVX-32-NEXT:    movl %esp, %ebp
2603 ; AVX-32-NEXT:    andl $-16, %esp
2604 ; AVX-32-NEXT:    subl $16, %esp
2605 ; AVX-32-NEXT:    vcmpeq_uqpd 8(%ebp), %xmm2, %xmm2
2606 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2607 ; AVX-32-NEXT:    movl %ebp, %esp
2608 ; AVX-32-NEXT:    popl %ebp
2609 ; AVX-32-NEXT:    retl
2611 ; AVX-64-LABEL: test_v2f64_ueq_q:
2612 ; AVX-64:       # %bb.0:
2613 ; AVX-64-NEXT:    vcmpeq_uqpd %xmm3, %xmm2, %xmm2
2614 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2615 ; AVX-64-NEXT:    retq
2617 ; AVX512-32-LABEL: test_v2f64_ueq_q:
2618 ; AVX512-32:       # %bb.0:
2619 ; AVX512-32-NEXT:    pushl %ebp
2620 ; AVX512-32-NEXT:    movl %esp, %ebp
2621 ; AVX512-32-NEXT:    andl $-16, %esp
2622 ; AVX512-32-NEXT:    subl $16, %esp
2623 ; AVX512-32-NEXT:    vcmpeq_uqpd 8(%ebp), %xmm2, %k1
2624 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2625 ; AVX512-32-NEXT:    movl %ebp, %esp
2626 ; AVX512-32-NEXT:    popl %ebp
2627 ; AVX512-32-NEXT:    retl
2629 ; AVX512-64-LABEL: test_v2f64_ueq_q:
2630 ; AVX512-64:       # %bb.0:
2631 ; AVX512-64-NEXT:    vcmpeq_uqpd %xmm3, %xmm2, %k1
2632 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2633 ; AVX512-64-NEXT:    retq
2635 ; AVX512F-32-LABEL: test_v2f64_ueq_q:
2636 ; AVX512F-32:       # %bb.0:
2637 ; AVX512F-32-NEXT:    pushl %ebp
2638 ; AVX512F-32-NEXT:    movl %esp, %ebp
2639 ; AVX512F-32-NEXT:    andl $-16, %esp
2640 ; AVX512F-32-NEXT:    subl $16, %esp
2641 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2642 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2643 ; AVX512F-32-NEXT:    vcmpeq_uqpd 8(%ebp), %xmm2, %xmm2
2644 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2645 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2646 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2647 ; AVX512F-32-NEXT:    movl %ebp, %esp
2648 ; AVX512F-32-NEXT:    popl %ebp
2649 ; AVX512F-32-NEXT:    vzeroupper
2650 ; AVX512F-32-NEXT:    retl
2652 ; AVX512F-64-LABEL: test_v2f64_ueq_q:
2653 ; AVX512F-64:       # %bb.0:
2654 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2655 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2656 ; AVX512F-64-NEXT:    vcmpeq_uqpd %xmm3, %xmm2, %xmm2
2657 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2658 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2659 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2660 ; AVX512F-64-NEXT:    vzeroupper
2661 ; AVX512F-64-NEXT:    retq
2662   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2663                                                <2 x double> %f1, <2 x double> %f2, metadata !"ueq",
2664                                                metadata !"fpexcept.strict") #0
2665   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2666   ret <2 x i64> %res
2669 define <2 x i64> @test_v2f64_ugt_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2670 ; SSE-32-LABEL: test_v2f64_ugt_q:
2671 ; SSE-32:       # %bb.0:
2672 ; SSE-32-NEXT:    pushl %ebp
2673 ; SSE-32-NEXT:    movl %esp, %ebp
2674 ; SSE-32-NEXT:    andl $-16, %esp
2675 ; SSE-32-NEXT:    subl $16, %esp
2676 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2677 ; SSE-32-NEXT:    xorl %eax, %eax
2678 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2679 ; SSE-32-NEXT:    movl $-1, %ecx
2680 ; SSE-32-NEXT:    movl $0, %edx
2681 ; SSE-32-NEXT:    cmovbl %ecx, %edx
2682 ; SSE-32-NEXT:    movd %edx, %xmm3
2683 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2684 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2685 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2686 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2687 ; SSE-32-NEXT:    cmovbl %ecx, %eax
2688 ; SSE-32-NEXT:    movd %eax, %xmm2
2689 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2690 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2691 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2692 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2693 ; SSE-32-NEXT:    por %xmm3, %xmm0
2694 ; SSE-32-NEXT:    movl %ebp, %esp
2695 ; SSE-32-NEXT:    popl %ebp
2696 ; SSE-32-NEXT:    retl
2698 ; SSE-64-LABEL: test_v2f64_ugt_q:
2699 ; SSE-64:       # %bb.0:
2700 ; SSE-64-NEXT:    xorl %eax, %eax
2701 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2702 ; SSE-64-NEXT:    movq $-1, %rcx
2703 ; SSE-64-NEXT:    movl $0, %edx
2704 ; SSE-64-NEXT:    cmovbq %rcx, %rdx
2705 ; SSE-64-NEXT:    movq %rdx, %xmm4
2706 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2707 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2708 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2709 ; SSE-64-NEXT:    cmovbq %rcx, %rax
2710 ; SSE-64-NEXT:    movq %rax, %xmm2
2711 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2712 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2713 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2714 ; SSE-64-NEXT:    por %xmm4, %xmm0
2715 ; SSE-64-NEXT:    retq
2717 ; AVX-32-LABEL: test_v2f64_ugt_q:
2718 ; AVX-32:       # %bb.0:
2719 ; AVX-32-NEXT:    pushl %ebp
2720 ; AVX-32-NEXT:    movl %esp, %ebp
2721 ; AVX-32-NEXT:    andl $-16, %esp
2722 ; AVX-32-NEXT:    subl $16, %esp
2723 ; AVX-32-NEXT:    vcmpnle_uqpd 8(%ebp), %xmm2, %xmm2
2724 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2725 ; AVX-32-NEXT:    movl %ebp, %esp
2726 ; AVX-32-NEXT:    popl %ebp
2727 ; AVX-32-NEXT:    retl
2729 ; AVX-64-LABEL: test_v2f64_ugt_q:
2730 ; AVX-64:       # %bb.0:
2731 ; AVX-64-NEXT:    vcmpnle_uqpd %xmm3, %xmm2, %xmm2
2732 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2733 ; AVX-64-NEXT:    retq
2735 ; AVX512-32-LABEL: test_v2f64_ugt_q:
2736 ; AVX512-32:       # %bb.0:
2737 ; AVX512-32-NEXT:    pushl %ebp
2738 ; AVX512-32-NEXT:    movl %esp, %ebp
2739 ; AVX512-32-NEXT:    andl $-16, %esp
2740 ; AVX512-32-NEXT:    subl $16, %esp
2741 ; AVX512-32-NEXT:    vcmpnle_uqpd 8(%ebp), %xmm2, %k1
2742 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2743 ; AVX512-32-NEXT:    movl %ebp, %esp
2744 ; AVX512-32-NEXT:    popl %ebp
2745 ; AVX512-32-NEXT:    retl
2747 ; AVX512-64-LABEL: test_v2f64_ugt_q:
2748 ; AVX512-64:       # %bb.0:
2749 ; AVX512-64-NEXT:    vcmpnle_uqpd %xmm3, %xmm2, %k1
2750 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2751 ; AVX512-64-NEXT:    retq
2753 ; AVX512F-32-LABEL: test_v2f64_ugt_q:
2754 ; AVX512F-32:       # %bb.0:
2755 ; AVX512F-32-NEXT:    pushl %ebp
2756 ; AVX512F-32-NEXT:    movl %esp, %ebp
2757 ; AVX512F-32-NEXT:    andl $-16, %esp
2758 ; AVX512F-32-NEXT:    subl $16, %esp
2759 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2760 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2761 ; AVX512F-32-NEXT:    vcmpnle_uqpd 8(%ebp), %xmm2, %xmm2
2762 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2763 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2764 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2765 ; AVX512F-32-NEXT:    movl %ebp, %esp
2766 ; AVX512F-32-NEXT:    popl %ebp
2767 ; AVX512F-32-NEXT:    vzeroupper
2768 ; AVX512F-32-NEXT:    retl
2770 ; AVX512F-64-LABEL: test_v2f64_ugt_q:
2771 ; AVX512F-64:       # %bb.0:
2772 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2773 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2774 ; AVX512F-64-NEXT:    vcmpnle_uqpd %xmm3, %xmm2, %xmm2
2775 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2776 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2777 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2778 ; AVX512F-64-NEXT:    vzeroupper
2779 ; AVX512F-64-NEXT:    retq
2780   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2781                                                <2 x double> %f1, <2 x double> %f2, metadata !"ugt",
2782                                                metadata !"fpexcept.strict") #0
2783   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2784   ret <2 x i64> %res
2787 define <2 x i64> @test_v2f64_uge_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2788 ; SSE-32-LABEL: test_v2f64_uge_q:
2789 ; SSE-32:       # %bb.0:
2790 ; SSE-32-NEXT:    pushl %ebp
2791 ; SSE-32-NEXT:    movl %esp, %ebp
2792 ; SSE-32-NEXT:    andl $-16, %esp
2793 ; SSE-32-NEXT:    subl $16, %esp
2794 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2795 ; SSE-32-NEXT:    xorl %eax, %eax
2796 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2797 ; SSE-32-NEXT:    movl $-1, %ecx
2798 ; SSE-32-NEXT:    movl $0, %edx
2799 ; SSE-32-NEXT:    cmovbel %ecx, %edx
2800 ; SSE-32-NEXT:    movd %edx, %xmm3
2801 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2802 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2803 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2804 ; SSE-32-NEXT:    ucomisd %xmm2, %xmm4
2805 ; SSE-32-NEXT:    cmovbel %ecx, %eax
2806 ; SSE-32-NEXT:    movd %eax, %xmm2
2807 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2808 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2809 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2810 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2811 ; SSE-32-NEXT:    por %xmm3, %xmm0
2812 ; SSE-32-NEXT:    movl %ebp, %esp
2813 ; SSE-32-NEXT:    popl %ebp
2814 ; SSE-32-NEXT:    retl
2816 ; SSE-64-LABEL: test_v2f64_uge_q:
2817 ; SSE-64:       # %bb.0:
2818 ; SSE-64-NEXT:    xorl %eax, %eax
2819 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2820 ; SSE-64-NEXT:    movq $-1, %rcx
2821 ; SSE-64-NEXT:    movl $0, %edx
2822 ; SSE-64-NEXT:    cmovbeq %rcx, %rdx
2823 ; SSE-64-NEXT:    movq %rdx, %xmm4
2824 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2825 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2826 ; SSE-64-NEXT:    ucomisd %xmm2, %xmm3
2827 ; SSE-64-NEXT:    cmovbeq %rcx, %rax
2828 ; SSE-64-NEXT:    movq %rax, %xmm2
2829 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2830 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2831 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2832 ; SSE-64-NEXT:    por %xmm4, %xmm0
2833 ; SSE-64-NEXT:    retq
2835 ; AVX-32-LABEL: test_v2f64_uge_q:
2836 ; AVX-32:       # %bb.0:
2837 ; AVX-32-NEXT:    pushl %ebp
2838 ; AVX-32-NEXT:    movl %esp, %ebp
2839 ; AVX-32-NEXT:    andl $-16, %esp
2840 ; AVX-32-NEXT:    subl $16, %esp
2841 ; AVX-32-NEXT:    vcmpnlt_uqpd 8(%ebp), %xmm2, %xmm2
2842 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2843 ; AVX-32-NEXT:    movl %ebp, %esp
2844 ; AVX-32-NEXT:    popl %ebp
2845 ; AVX-32-NEXT:    retl
2847 ; AVX-64-LABEL: test_v2f64_uge_q:
2848 ; AVX-64:       # %bb.0:
2849 ; AVX-64-NEXT:    vcmpnlt_uqpd %xmm3, %xmm2, %xmm2
2850 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2851 ; AVX-64-NEXT:    retq
2853 ; AVX512-32-LABEL: test_v2f64_uge_q:
2854 ; AVX512-32:       # %bb.0:
2855 ; AVX512-32-NEXT:    pushl %ebp
2856 ; AVX512-32-NEXT:    movl %esp, %ebp
2857 ; AVX512-32-NEXT:    andl $-16, %esp
2858 ; AVX512-32-NEXT:    subl $16, %esp
2859 ; AVX512-32-NEXT:    vcmpnlt_uqpd 8(%ebp), %xmm2, %k1
2860 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2861 ; AVX512-32-NEXT:    movl %ebp, %esp
2862 ; AVX512-32-NEXT:    popl %ebp
2863 ; AVX512-32-NEXT:    retl
2865 ; AVX512-64-LABEL: test_v2f64_uge_q:
2866 ; AVX512-64:       # %bb.0:
2867 ; AVX512-64-NEXT:    vcmpnlt_uqpd %xmm3, %xmm2, %k1
2868 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2869 ; AVX512-64-NEXT:    retq
2871 ; AVX512F-32-LABEL: test_v2f64_uge_q:
2872 ; AVX512F-32:       # %bb.0:
2873 ; AVX512F-32-NEXT:    pushl %ebp
2874 ; AVX512F-32-NEXT:    movl %esp, %ebp
2875 ; AVX512F-32-NEXT:    andl $-16, %esp
2876 ; AVX512F-32-NEXT:    subl $16, %esp
2877 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2878 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2879 ; AVX512F-32-NEXT:    vcmpnlt_uqpd 8(%ebp), %xmm2, %xmm2
2880 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
2881 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2882 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2883 ; AVX512F-32-NEXT:    movl %ebp, %esp
2884 ; AVX512F-32-NEXT:    popl %ebp
2885 ; AVX512F-32-NEXT:    vzeroupper
2886 ; AVX512F-32-NEXT:    retl
2888 ; AVX512F-64-LABEL: test_v2f64_uge_q:
2889 ; AVX512F-64:       # %bb.0:
2890 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2891 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2892 ; AVX512F-64-NEXT:    vcmpnlt_uqpd %xmm3, %xmm2, %xmm2
2893 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
2894 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2895 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2896 ; AVX512F-64-NEXT:    vzeroupper
2897 ; AVX512F-64-NEXT:    retq
2898   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
2899                                                <2 x double> %f1, <2 x double> %f2, metadata !"uge",
2900                                                metadata !"fpexcept.strict") #0
2901   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
2902   ret <2 x i64> %res
2905 define <2 x i64> @test_v2f64_ult_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
2906 ; SSE-32-LABEL: test_v2f64_ult_q:
2907 ; SSE-32:       # %bb.0:
2908 ; SSE-32-NEXT:    pushl %ebp
2909 ; SSE-32-NEXT:    movl %esp, %ebp
2910 ; SSE-32-NEXT:    andl $-16, %esp
2911 ; SSE-32-NEXT:    subl $16, %esp
2912 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
2913 ; SSE-32-NEXT:    xorl %eax, %eax
2914 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
2915 ; SSE-32-NEXT:    movl $-1, %ecx
2916 ; SSE-32-NEXT:    movl $0, %edx
2917 ; SSE-32-NEXT:    cmovbl %ecx, %edx
2918 ; SSE-32-NEXT:    movd %edx, %xmm3
2919 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
2920 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
2921 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2922 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
2923 ; SSE-32-NEXT:    cmovbl %ecx, %eax
2924 ; SSE-32-NEXT:    movd %eax, %xmm2
2925 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
2926 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2927 ; SSE-32-NEXT:    pand %xmm3, %xmm0
2928 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
2929 ; SSE-32-NEXT:    por %xmm3, %xmm0
2930 ; SSE-32-NEXT:    movl %ebp, %esp
2931 ; SSE-32-NEXT:    popl %ebp
2932 ; SSE-32-NEXT:    retl
2934 ; SSE-64-LABEL: test_v2f64_ult_q:
2935 ; SSE-64:       # %bb.0:
2936 ; SSE-64-NEXT:    xorl %eax, %eax
2937 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
2938 ; SSE-64-NEXT:    movq $-1, %rcx
2939 ; SSE-64-NEXT:    movl $0, %edx
2940 ; SSE-64-NEXT:    cmovbq %rcx, %rdx
2941 ; SSE-64-NEXT:    movq %rdx, %xmm4
2942 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
2943 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
2944 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
2945 ; SSE-64-NEXT:    cmovbq %rcx, %rax
2946 ; SSE-64-NEXT:    movq %rax, %xmm2
2947 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
2948 ; SSE-64-NEXT:    pand %xmm4, %xmm0
2949 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
2950 ; SSE-64-NEXT:    por %xmm4, %xmm0
2951 ; SSE-64-NEXT:    retq
2953 ; AVX-32-LABEL: test_v2f64_ult_q:
2954 ; AVX-32:       # %bb.0:
2955 ; AVX-32-NEXT:    pushl %ebp
2956 ; AVX-32-NEXT:    movl %esp, %ebp
2957 ; AVX-32-NEXT:    andl $-16, %esp
2958 ; AVX-32-NEXT:    subl $16, %esp
2959 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
2960 ; AVX-32-NEXT:    vcmpnle_uqpd %xmm2, %xmm3, %xmm2
2961 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2962 ; AVX-32-NEXT:    movl %ebp, %esp
2963 ; AVX-32-NEXT:    popl %ebp
2964 ; AVX-32-NEXT:    retl
2966 ; AVX-64-LABEL: test_v2f64_ult_q:
2967 ; AVX-64:       # %bb.0:
2968 ; AVX-64-NEXT:    vcmpnle_uqpd %xmm2, %xmm3, %xmm2
2969 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
2970 ; AVX-64-NEXT:    retq
2972 ; AVX512-32-LABEL: test_v2f64_ult_q:
2973 ; AVX512-32:       # %bb.0:
2974 ; AVX512-32-NEXT:    pushl %ebp
2975 ; AVX512-32-NEXT:    movl %esp, %ebp
2976 ; AVX512-32-NEXT:    andl $-16, %esp
2977 ; AVX512-32-NEXT:    subl $16, %esp
2978 ; AVX512-32-NEXT:    vcmpnge_uqpd 8(%ebp), %xmm2, %k1
2979 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2980 ; AVX512-32-NEXT:    movl %ebp, %esp
2981 ; AVX512-32-NEXT:    popl %ebp
2982 ; AVX512-32-NEXT:    retl
2984 ; AVX512-64-LABEL: test_v2f64_ult_q:
2985 ; AVX512-64:       # %bb.0:
2986 ; AVX512-64-NEXT:    vcmpnle_uqpd %xmm2, %xmm3, %k1
2987 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
2988 ; AVX512-64-NEXT:    retq
2990 ; AVX512F-32-LABEL: test_v2f64_ult_q:
2991 ; AVX512F-32:       # %bb.0:
2992 ; AVX512F-32-NEXT:    pushl %ebp
2993 ; AVX512F-32-NEXT:    movl %esp, %ebp
2994 ; AVX512F-32-NEXT:    andl $-16, %esp
2995 ; AVX512F-32-NEXT:    subl $16, %esp
2996 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2997 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2998 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
2999 ; AVX512F-32-NEXT:    vcmpnle_uqpd %xmm2, %xmm3, %xmm2
3000 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
3001 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3002 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3003 ; AVX512F-32-NEXT:    movl %ebp, %esp
3004 ; AVX512F-32-NEXT:    popl %ebp
3005 ; AVX512F-32-NEXT:    vzeroupper
3006 ; AVX512F-32-NEXT:    retl
3008 ; AVX512F-64-LABEL: test_v2f64_ult_q:
3009 ; AVX512F-64:       # %bb.0:
3010 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3011 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3012 ; AVX512F-64-NEXT:    vcmpnle_uqpd %xmm2, %xmm3, %xmm2
3013 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
3014 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3015 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3016 ; AVX512F-64-NEXT:    vzeroupper
3017 ; AVX512F-64-NEXT:    retq
3018   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
3019                                                <2 x double> %f1, <2 x double> %f2, metadata !"ult",
3020                                                metadata !"fpexcept.strict") #0
3021   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
3022   ret <2 x i64> %res
3025 define <2 x i64> @test_v2f64_ule_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
3026 ; SSE-32-LABEL: test_v2f64_ule_q:
3027 ; SSE-32:       # %bb.0:
3028 ; SSE-32-NEXT:    pushl %ebp
3029 ; SSE-32-NEXT:    movl %esp, %ebp
3030 ; SSE-32-NEXT:    andl $-16, %esp
3031 ; SSE-32-NEXT:    subl $16, %esp
3032 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm4
3033 ; SSE-32-NEXT:    xorl %eax, %eax
3034 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
3035 ; SSE-32-NEXT:    movl $-1, %ecx
3036 ; SSE-32-NEXT:    movl $0, %edx
3037 ; SSE-32-NEXT:    cmovbel %ecx, %edx
3038 ; SSE-32-NEXT:    movd %edx, %xmm3
3039 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
3040 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1,1]
3041 ; SSE-32-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
3042 ; SSE-32-NEXT:    ucomisd %xmm4, %xmm2
3043 ; SSE-32-NEXT:    cmovbel %ecx, %eax
3044 ; SSE-32-NEXT:    movd %eax, %xmm2
3045 ; SSE-32-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]
3046 ; SSE-32-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm2[0]
3047 ; SSE-32-NEXT:    pand %xmm3, %xmm0
3048 ; SSE-32-NEXT:    pandn %xmm1, %xmm3
3049 ; SSE-32-NEXT:    por %xmm3, %xmm0
3050 ; SSE-32-NEXT:    movl %ebp, %esp
3051 ; SSE-32-NEXT:    popl %ebp
3052 ; SSE-32-NEXT:    retl
3054 ; SSE-64-LABEL: test_v2f64_ule_q:
3055 ; SSE-64:       # %bb.0:
3056 ; SSE-64-NEXT:    xorl %eax, %eax
3057 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
3058 ; SSE-64-NEXT:    movq $-1, %rcx
3059 ; SSE-64-NEXT:    movl $0, %edx
3060 ; SSE-64-NEXT:    cmovbeq %rcx, %rdx
3061 ; SSE-64-NEXT:    movq %rdx, %xmm4
3062 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1,1]
3063 ; SSE-64-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]
3064 ; SSE-64-NEXT:    ucomisd %xmm3, %xmm2
3065 ; SSE-64-NEXT:    cmovbeq %rcx, %rax
3066 ; SSE-64-NEXT:    movq %rax, %xmm2
3067 ; SSE-64-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm2[0]
3068 ; SSE-64-NEXT:    pand %xmm4, %xmm0
3069 ; SSE-64-NEXT:    pandn %xmm1, %xmm4
3070 ; SSE-64-NEXT:    por %xmm4, %xmm0
3071 ; SSE-64-NEXT:    retq
3073 ; AVX-32-LABEL: test_v2f64_ule_q:
3074 ; AVX-32:       # %bb.0:
3075 ; AVX-32-NEXT:    pushl %ebp
3076 ; AVX-32-NEXT:    movl %esp, %ebp
3077 ; AVX-32-NEXT:    andl $-16, %esp
3078 ; AVX-32-NEXT:    subl $16, %esp
3079 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
3080 ; AVX-32-NEXT:    vcmpnlt_uqpd %xmm2, %xmm3, %xmm2
3081 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3082 ; AVX-32-NEXT:    movl %ebp, %esp
3083 ; AVX-32-NEXT:    popl %ebp
3084 ; AVX-32-NEXT:    retl
3086 ; AVX-64-LABEL: test_v2f64_ule_q:
3087 ; AVX-64:       # %bb.0:
3088 ; AVX-64-NEXT:    vcmpnlt_uqpd %xmm2, %xmm3, %xmm2
3089 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3090 ; AVX-64-NEXT:    retq
3092 ; AVX512-32-LABEL: test_v2f64_ule_q:
3093 ; AVX512-32:       # %bb.0:
3094 ; AVX512-32-NEXT:    pushl %ebp
3095 ; AVX512-32-NEXT:    movl %esp, %ebp
3096 ; AVX512-32-NEXT:    andl $-16, %esp
3097 ; AVX512-32-NEXT:    subl $16, %esp
3098 ; AVX512-32-NEXT:    vcmpngt_uqpd 8(%ebp), %xmm2, %k1
3099 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3100 ; AVX512-32-NEXT:    movl %ebp, %esp
3101 ; AVX512-32-NEXT:    popl %ebp
3102 ; AVX512-32-NEXT:    retl
3104 ; AVX512-64-LABEL: test_v2f64_ule_q:
3105 ; AVX512-64:       # %bb.0:
3106 ; AVX512-64-NEXT:    vcmpnlt_uqpd %xmm2, %xmm3, %k1
3107 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3108 ; AVX512-64-NEXT:    retq
3110 ; AVX512F-32-LABEL: test_v2f64_ule_q:
3111 ; AVX512F-32:       # %bb.0:
3112 ; AVX512F-32-NEXT:    pushl %ebp
3113 ; AVX512F-32-NEXT:    movl %esp, %ebp
3114 ; AVX512F-32-NEXT:    andl $-16, %esp
3115 ; AVX512F-32-NEXT:    subl $16, %esp
3116 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3117 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3118 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
3119 ; AVX512F-32-NEXT:    vcmpnlt_uqpd %xmm2, %xmm3, %xmm2
3120 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
3121 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3122 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3123 ; AVX512F-32-NEXT:    movl %ebp, %esp
3124 ; AVX512F-32-NEXT:    popl %ebp
3125 ; AVX512F-32-NEXT:    vzeroupper
3126 ; AVX512F-32-NEXT:    retl
3128 ; AVX512F-64-LABEL: test_v2f64_ule_q:
3129 ; AVX512F-64:       # %bb.0:
3130 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3131 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3132 ; AVX512F-64-NEXT:    vcmpnlt_uqpd %xmm2, %xmm3, %xmm2
3133 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
3134 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3135 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3136 ; AVX512F-64-NEXT:    vzeroupper
3137 ; AVX512F-64-NEXT:    retq
3138   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
3139                                                <2 x double> %f1, <2 x double> %f2, metadata !"ule",
3140                                                metadata !"fpexcept.strict") #0
3141   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
3142   ret <2 x i64> %res
3145 define <2 x i64> @test_v2f64_une_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
3146 ; SSE-32-LABEL: test_v2f64_une_q:
3147 ; SSE-32:       # %bb.0:
3148 ; SSE-32-NEXT:    pushl %ebp
3149 ; SSE-32-NEXT:    movl %esp, %ebp
3150 ; SSE-32-NEXT:    andl $-16, %esp
3151 ; SSE-32-NEXT:    subl $16, %esp
3152 ; SSE-32-NEXT:    cmpneqpd 8(%ebp), %xmm2
3153 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
3154 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
3155 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
3156 ; SSE-32-NEXT:    movl %ebp, %esp
3157 ; SSE-32-NEXT:    popl %ebp
3158 ; SSE-32-NEXT:    retl
3160 ; SSE-64-LABEL: test_v2f64_une_q:
3161 ; SSE-64:       # %bb.0:
3162 ; SSE-64-NEXT:    cmpneqpd %xmm3, %xmm2
3163 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
3164 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
3165 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
3166 ; SSE-64-NEXT:    retq
3168 ; AVX-32-LABEL: test_v2f64_une_q:
3169 ; AVX-32:       # %bb.0:
3170 ; AVX-32-NEXT:    pushl %ebp
3171 ; AVX-32-NEXT:    movl %esp, %ebp
3172 ; AVX-32-NEXT:    andl $-16, %esp
3173 ; AVX-32-NEXT:    subl $16, %esp
3174 ; AVX-32-NEXT:    vcmpneqpd 8(%ebp), %xmm2, %xmm2
3175 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3176 ; AVX-32-NEXT:    movl %ebp, %esp
3177 ; AVX-32-NEXT:    popl %ebp
3178 ; AVX-32-NEXT:    retl
3180 ; AVX-64-LABEL: test_v2f64_une_q:
3181 ; AVX-64:       # %bb.0:
3182 ; AVX-64-NEXT:    vcmpneqpd %xmm3, %xmm2, %xmm2
3183 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3184 ; AVX-64-NEXT:    retq
3186 ; AVX512-32-LABEL: test_v2f64_une_q:
3187 ; AVX512-32:       # %bb.0:
3188 ; AVX512-32-NEXT:    pushl %ebp
3189 ; AVX512-32-NEXT:    movl %esp, %ebp
3190 ; AVX512-32-NEXT:    andl $-16, %esp
3191 ; AVX512-32-NEXT:    subl $16, %esp
3192 ; AVX512-32-NEXT:    vcmpneqpd 8(%ebp), %xmm2, %k1
3193 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3194 ; AVX512-32-NEXT:    movl %ebp, %esp
3195 ; AVX512-32-NEXT:    popl %ebp
3196 ; AVX512-32-NEXT:    retl
3198 ; AVX512-64-LABEL: test_v2f64_une_q:
3199 ; AVX512-64:       # %bb.0:
3200 ; AVX512-64-NEXT:    vcmpneqpd %xmm3, %xmm2, %k1
3201 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3202 ; AVX512-64-NEXT:    retq
3204 ; AVX512F-32-LABEL: test_v2f64_une_q:
3205 ; AVX512F-32:       # %bb.0:
3206 ; AVX512F-32-NEXT:    pushl %ebp
3207 ; AVX512F-32-NEXT:    movl %esp, %ebp
3208 ; AVX512F-32-NEXT:    andl $-16, %esp
3209 ; AVX512F-32-NEXT:    subl $16, %esp
3210 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3211 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3212 ; AVX512F-32-NEXT:    vcmpneqpd 8(%ebp), %xmm2, %xmm2
3213 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
3214 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3215 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3216 ; AVX512F-32-NEXT:    movl %ebp, %esp
3217 ; AVX512F-32-NEXT:    popl %ebp
3218 ; AVX512F-32-NEXT:    vzeroupper
3219 ; AVX512F-32-NEXT:    retl
3221 ; AVX512F-64-LABEL: test_v2f64_une_q:
3222 ; AVX512F-64:       # %bb.0:
3223 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3224 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3225 ; AVX512F-64-NEXT:    vcmpneqpd %xmm3, %xmm2, %xmm2
3226 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
3227 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3228 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3229 ; AVX512F-64-NEXT:    vzeroupper
3230 ; AVX512F-64-NEXT:    retq
3231   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
3232                                                <2 x double> %f1, <2 x double> %f2, metadata !"une",
3233                                                metadata !"fpexcept.strict") #0
3234   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
3235   ret <2 x i64> %res
3238 define <2 x i64> @test_v2f64_uno_q(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
3239 ; SSE-32-LABEL: test_v2f64_uno_q:
3240 ; SSE-32:       # %bb.0:
3241 ; SSE-32-NEXT:    pushl %ebp
3242 ; SSE-32-NEXT:    movl %esp, %ebp
3243 ; SSE-32-NEXT:    andl $-16, %esp
3244 ; SSE-32-NEXT:    subl $16, %esp
3245 ; SSE-32-NEXT:    cmpunordpd 8(%ebp), %xmm2
3246 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
3247 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
3248 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
3249 ; SSE-32-NEXT:    movl %ebp, %esp
3250 ; SSE-32-NEXT:    popl %ebp
3251 ; SSE-32-NEXT:    retl
3253 ; SSE-64-LABEL: test_v2f64_uno_q:
3254 ; SSE-64:       # %bb.0:
3255 ; SSE-64-NEXT:    cmpunordpd %xmm3, %xmm2
3256 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
3257 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
3258 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
3259 ; SSE-64-NEXT:    retq
3261 ; AVX-32-LABEL: test_v2f64_uno_q:
3262 ; AVX-32:       # %bb.0:
3263 ; AVX-32-NEXT:    pushl %ebp
3264 ; AVX-32-NEXT:    movl %esp, %ebp
3265 ; AVX-32-NEXT:    andl $-16, %esp
3266 ; AVX-32-NEXT:    subl $16, %esp
3267 ; AVX-32-NEXT:    vcmpunordpd 8(%ebp), %xmm2, %xmm2
3268 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3269 ; AVX-32-NEXT:    movl %ebp, %esp
3270 ; AVX-32-NEXT:    popl %ebp
3271 ; AVX-32-NEXT:    retl
3273 ; AVX-64-LABEL: test_v2f64_uno_q:
3274 ; AVX-64:       # %bb.0:
3275 ; AVX-64-NEXT:    vcmpunordpd %xmm3, %xmm2, %xmm2
3276 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
3277 ; AVX-64-NEXT:    retq
3279 ; AVX512-32-LABEL: test_v2f64_uno_q:
3280 ; AVX512-32:       # %bb.0:
3281 ; AVX512-32-NEXT:    pushl %ebp
3282 ; AVX512-32-NEXT:    movl %esp, %ebp
3283 ; AVX512-32-NEXT:    andl $-16, %esp
3284 ; AVX512-32-NEXT:    subl $16, %esp
3285 ; AVX512-32-NEXT:    vcmpunordpd 8(%ebp), %xmm2, %k1
3286 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3287 ; AVX512-32-NEXT:    movl %ebp, %esp
3288 ; AVX512-32-NEXT:    popl %ebp
3289 ; AVX512-32-NEXT:    retl
3291 ; AVX512-64-LABEL: test_v2f64_uno_q:
3292 ; AVX512-64:       # %bb.0:
3293 ; AVX512-64-NEXT:    vcmpunordpd %xmm3, %xmm2, %k1
3294 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
3295 ; AVX512-64-NEXT:    retq
3297 ; AVX512F-32-LABEL: test_v2f64_uno_q:
3298 ; AVX512F-32:       # %bb.0:
3299 ; AVX512F-32-NEXT:    pushl %ebp
3300 ; AVX512F-32-NEXT:    movl %esp, %ebp
3301 ; AVX512F-32-NEXT:    andl $-16, %esp
3302 ; AVX512F-32-NEXT:    subl $16, %esp
3303 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3304 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3305 ; AVX512F-32-NEXT:    vcmpunordpd 8(%ebp), %xmm2, %xmm2
3306 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
3307 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3308 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3309 ; AVX512F-32-NEXT:    movl %ebp, %esp
3310 ; AVX512F-32-NEXT:    popl %ebp
3311 ; AVX512F-32-NEXT:    vzeroupper
3312 ; AVX512F-32-NEXT:    retl
3314 ; AVX512F-64-LABEL: test_v2f64_uno_q:
3315 ; AVX512F-64:       # %bb.0:
3316 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3317 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3318 ; AVX512F-64-NEXT:    vcmpunordpd %xmm3, %xmm2, %xmm2
3319 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
3320 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3321 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3322 ; AVX512F-64-NEXT:    vzeroupper
3323 ; AVX512F-64-NEXT:    retq
3324   %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(
3325                                                <2 x double> %f1, <2 x double> %f2, metadata !"uno",
3326                                                metadata !"fpexcept.strict") #0
3327   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
3328   ret <2 x i64> %res
3331 define <4 x i32> @test_v4f32_oeq_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3332 ; SSE-32-LABEL: test_v4f32_oeq_s:
3333 ; SSE-32:       # %bb.0:
3334 ; SSE-32-NEXT:    pushl %ebp
3335 ; SSE-32-NEXT:    movl %esp, %ebp
3336 ; SSE-32-NEXT:    andl $-16, %esp
3337 ; SSE-32-NEXT:    subl $16, %esp
3338 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
3339 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
3340 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
3341 ; SSE-32-NEXT:    cmpeqps %xmm2, %xmm3
3342 ; SSE-32-NEXT:    andps %xmm3, %xmm0
3343 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
3344 ; SSE-32-NEXT:    orps %xmm3, %xmm0
3345 ; SSE-32-NEXT:    movl %ebp, %esp
3346 ; SSE-32-NEXT:    popl %ebp
3347 ; SSE-32-NEXT:    retl
3349 ; SSE-64-LABEL: test_v4f32_oeq_s:
3350 ; SSE-64:       # %bb.0:
3351 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
3352 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
3353 ; SSE-64-NEXT:    cmpeqps %xmm3, %xmm2
3354 ; SSE-64-NEXT:    andps %xmm2, %xmm0
3355 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
3356 ; SSE-64-NEXT:    orps %xmm2, %xmm0
3357 ; SSE-64-NEXT:    retq
3359 ; AVX-32-LABEL: test_v4f32_oeq_s:
3360 ; AVX-32:       # %bb.0:
3361 ; AVX-32-NEXT:    pushl %ebp
3362 ; AVX-32-NEXT:    movl %esp, %ebp
3363 ; AVX-32-NEXT:    andl $-16, %esp
3364 ; AVX-32-NEXT:    subl $16, %esp
3365 ; AVX-32-NEXT:    vcmpeq_osps 8(%ebp), %xmm2, %xmm2
3366 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3367 ; AVX-32-NEXT:    movl %ebp, %esp
3368 ; AVX-32-NEXT:    popl %ebp
3369 ; AVX-32-NEXT:    retl
3371 ; AVX-64-LABEL: test_v4f32_oeq_s:
3372 ; AVX-64:       # %bb.0:
3373 ; AVX-64-NEXT:    vcmpeq_osps %xmm3, %xmm2, %xmm2
3374 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3375 ; AVX-64-NEXT:    retq
3377 ; AVX512-32-LABEL: test_v4f32_oeq_s:
3378 ; AVX512-32:       # %bb.0:
3379 ; AVX512-32-NEXT:    pushl %ebp
3380 ; AVX512-32-NEXT:    movl %esp, %ebp
3381 ; AVX512-32-NEXT:    andl $-16, %esp
3382 ; AVX512-32-NEXT:    subl $16, %esp
3383 ; AVX512-32-NEXT:    vcmpeq_osps 8(%ebp), %xmm2, %k1
3384 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3385 ; AVX512-32-NEXT:    movl %ebp, %esp
3386 ; AVX512-32-NEXT:    popl %ebp
3387 ; AVX512-32-NEXT:    retl
3389 ; AVX512-64-LABEL: test_v4f32_oeq_s:
3390 ; AVX512-64:       # %bb.0:
3391 ; AVX512-64-NEXT:    vcmpeq_osps %xmm3, %xmm2, %k1
3392 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3393 ; AVX512-64-NEXT:    retq
3395 ; AVX512F-32-LABEL: test_v4f32_oeq_s:
3396 ; AVX512F-32:       # %bb.0:
3397 ; AVX512F-32-NEXT:    pushl %ebp
3398 ; AVX512F-32-NEXT:    movl %esp, %ebp
3399 ; AVX512F-32-NEXT:    andl $-16, %esp
3400 ; AVX512F-32-NEXT:    subl $16, %esp
3401 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3402 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3403 ; AVX512F-32-NEXT:    vcmpeq_osps 8(%ebp), %xmm2, %xmm2
3404 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3405 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3406 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3407 ; AVX512F-32-NEXT:    movl %ebp, %esp
3408 ; AVX512F-32-NEXT:    popl %ebp
3409 ; AVX512F-32-NEXT:    vzeroupper
3410 ; AVX512F-32-NEXT:    retl
3412 ; AVX512F-64-LABEL: test_v4f32_oeq_s:
3413 ; AVX512F-64:       # %bb.0:
3414 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3415 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3416 ; AVX512F-64-NEXT:    vcmpeq_osps %xmm3, %xmm2, %xmm2
3417 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3418 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3419 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3420 ; AVX512F-64-NEXT:    vzeroupper
3421 ; AVX512F-64-NEXT:    retq
3422   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3423                                                <4 x float> %f1, <4 x float> %f2, metadata !"oeq",
3424                                                metadata !"fpexcept.strict") #0
3425   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3426   ret <4 x i32> %res
3429 define <4 x i32> @test_v4f32_ogt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3430 ; SSE-32-LABEL: test_v4f32_ogt_s:
3431 ; SSE-32:       # %bb.0:
3432 ; SSE-32-NEXT:    pushl %ebp
3433 ; SSE-32-NEXT:    movl %esp, %ebp
3434 ; SSE-32-NEXT:    andl $-16, %esp
3435 ; SSE-32-NEXT:    subl $16, %esp
3436 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
3437 ; SSE-32-NEXT:    cmpltps %xmm2, %xmm3
3438 ; SSE-32-NEXT:    andps %xmm3, %xmm0
3439 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
3440 ; SSE-32-NEXT:    orps %xmm3, %xmm0
3441 ; SSE-32-NEXT:    movl %ebp, %esp
3442 ; SSE-32-NEXT:    popl %ebp
3443 ; SSE-32-NEXT:    retl
3445 ; SSE-64-LABEL: test_v4f32_ogt_s:
3446 ; SSE-64:       # %bb.0:
3447 ; SSE-64-NEXT:    cmpltps %xmm2, %xmm3
3448 ; SSE-64-NEXT:    andps %xmm3, %xmm0
3449 ; SSE-64-NEXT:    andnps %xmm1, %xmm3
3450 ; SSE-64-NEXT:    orps %xmm3, %xmm0
3451 ; SSE-64-NEXT:    retq
3453 ; AVX-32-LABEL: test_v4f32_ogt_s:
3454 ; AVX-32:       # %bb.0:
3455 ; AVX-32-NEXT:    pushl %ebp
3456 ; AVX-32-NEXT:    movl %esp, %ebp
3457 ; AVX-32-NEXT:    andl $-16, %esp
3458 ; AVX-32-NEXT:    subl $16, %esp
3459 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
3460 ; AVX-32-NEXT:    vcmpltps %xmm2, %xmm3, %xmm2
3461 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3462 ; AVX-32-NEXT:    movl %ebp, %esp
3463 ; AVX-32-NEXT:    popl %ebp
3464 ; AVX-32-NEXT:    retl
3466 ; AVX-64-LABEL: test_v4f32_ogt_s:
3467 ; AVX-64:       # %bb.0:
3468 ; AVX-64-NEXT:    vcmpltps %xmm2, %xmm3, %xmm2
3469 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3470 ; AVX-64-NEXT:    retq
3472 ; AVX512-32-LABEL: test_v4f32_ogt_s:
3473 ; AVX512-32:       # %bb.0:
3474 ; AVX512-32-NEXT:    pushl %ebp
3475 ; AVX512-32-NEXT:    movl %esp, %ebp
3476 ; AVX512-32-NEXT:    andl $-16, %esp
3477 ; AVX512-32-NEXT:    subl $16, %esp
3478 ; AVX512-32-NEXT:    vcmpgtps 8(%ebp), %xmm2, %k1
3479 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3480 ; AVX512-32-NEXT:    movl %ebp, %esp
3481 ; AVX512-32-NEXT:    popl %ebp
3482 ; AVX512-32-NEXT:    retl
3484 ; AVX512-64-LABEL: test_v4f32_ogt_s:
3485 ; AVX512-64:       # %bb.0:
3486 ; AVX512-64-NEXT:    vcmpltps %xmm2, %xmm3, %k1
3487 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3488 ; AVX512-64-NEXT:    retq
3490 ; AVX512F-32-LABEL: test_v4f32_ogt_s:
3491 ; AVX512F-32:       # %bb.0:
3492 ; AVX512F-32-NEXT:    pushl %ebp
3493 ; AVX512F-32-NEXT:    movl %esp, %ebp
3494 ; AVX512F-32-NEXT:    andl $-16, %esp
3495 ; AVX512F-32-NEXT:    subl $16, %esp
3496 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3497 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3498 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
3499 ; AVX512F-32-NEXT:    vcmpltps %xmm2, %xmm3, %xmm2
3500 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3501 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3502 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3503 ; AVX512F-32-NEXT:    movl %ebp, %esp
3504 ; AVX512F-32-NEXT:    popl %ebp
3505 ; AVX512F-32-NEXT:    vzeroupper
3506 ; AVX512F-32-NEXT:    retl
3508 ; AVX512F-64-LABEL: test_v4f32_ogt_s:
3509 ; AVX512F-64:       # %bb.0:
3510 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3511 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3512 ; AVX512F-64-NEXT:    vcmpltps %xmm2, %xmm3, %xmm2
3513 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3514 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3515 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3516 ; AVX512F-64-NEXT:    vzeroupper
3517 ; AVX512F-64-NEXT:    retq
3518   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3519                                                <4 x float> %f1, <4 x float> %f2, metadata !"ogt",
3520                                                metadata !"fpexcept.strict") #0
3521   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3522   ret <4 x i32> %res
3525 define <4 x i32> @test_v4f32_oge_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3526 ; SSE-32-LABEL: test_v4f32_oge_s:
3527 ; SSE-32:       # %bb.0:
3528 ; SSE-32-NEXT:    pushl %ebp
3529 ; SSE-32-NEXT:    movl %esp, %ebp
3530 ; SSE-32-NEXT:    andl $-16, %esp
3531 ; SSE-32-NEXT:    subl $16, %esp
3532 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
3533 ; SSE-32-NEXT:    cmpleps %xmm2, %xmm3
3534 ; SSE-32-NEXT:    andps %xmm3, %xmm0
3535 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
3536 ; SSE-32-NEXT:    orps %xmm3, %xmm0
3537 ; SSE-32-NEXT:    movl %ebp, %esp
3538 ; SSE-32-NEXT:    popl %ebp
3539 ; SSE-32-NEXT:    retl
3541 ; SSE-64-LABEL: test_v4f32_oge_s:
3542 ; SSE-64:       # %bb.0:
3543 ; SSE-64-NEXT:    cmpleps %xmm2, %xmm3
3544 ; SSE-64-NEXT:    andps %xmm3, %xmm0
3545 ; SSE-64-NEXT:    andnps %xmm1, %xmm3
3546 ; SSE-64-NEXT:    orps %xmm3, %xmm0
3547 ; SSE-64-NEXT:    retq
3549 ; AVX-32-LABEL: test_v4f32_oge_s:
3550 ; AVX-32:       # %bb.0:
3551 ; AVX-32-NEXT:    pushl %ebp
3552 ; AVX-32-NEXT:    movl %esp, %ebp
3553 ; AVX-32-NEXT:    andl $-16, %esp
3554 ; AVX-32-NEXT:    subl $16, %esp
3555 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
3556 ; AVX-32-NEXT:    vcmpleps %xmm2, %xmm3, %xmm2
3557 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3558 ; AVX-32-NEXT:    movl %ebp, %esp
3559 ; AVX-32-NEXT:    popl %ebp
3560 ; AVX-32-NEXT:    retl
3562 ; AVX-64-LABEL: test_v4f32_oge_s:
3563 ; AVX-64:       # %bb.0:
3564 ; AVX-64-NEXT:    vcmpleps %xmm2, %xmm3, %xmm2
3565 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3566 ; AVX-64-NEXT:    retq
3568 ; AVX512-32-LABEL: test_v4f32_oge_s:
3569 ; AVX512-32:       # %bb.0:
3570 ; AVX512-32-NEXT:    pushl %ebp
3571 ; AVX512-32-NEXT:    movl %esp, %ebp
3572 ; AVX512-32-NEXT:    andl $-16, %esp
3573 ; AVX512-32-NEXT:    subl $16, %esp
3574 ; AVX512-32-NEXT:    vcmpgeps 8(%ebp), %xmm2, %k1
3575 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3576 ; AVX512-32-NEXT:    movl %ebp, %esp
3577 ; AVX512-32-NEXT:    popl %ebp
3578 ; AVX512-32-NEXT:    retl
3580 ; AVX512-64-LABEL: test_v4f32_oge_s:
3581 ; AVX512-64:       # %bb.0:
3582 ; AVX512-64-NEXT:    vcmpleps %xmm2, %xmm3, %k1
3583 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3584 ; AVX512-64-NEXT:    retq
3586 ; AVX512F-32-LABEL: test_v4f32_oge_s:
3587 ; AVX512F-32:       # %bb.0:
3588 ; AVX512F-32-NEXT:    pushl %ebp
3589 ; AVX512F-32-NEXT:    movl %esp, %ebp
3590 ; AVX512F-32-NEXT:    andl $-16, %esp
3591 ; AVX512F-32-NEXT:    subl $16, %esp
3592 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3593 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3594 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
3595 ; AVX512F-32-NEXT:    vcmpleps %xmm2, %xmm3, %xmm2
3596 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3597 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3598 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3599 ; AVX512F-32-NEXT:    movl %ebp, %esp
3600 ; AVX512F-32-NEXT:    popl %ebp
3601 ; AVX512F-32-NEXT:    vzeroupper
3602 ; AVX512F-32-NEXT:    retl
3604 ; AVX512F-64-LABEL: test_v4f32_oge_s:
3605 ; AVX512F-64:       # %bb.0:
3606 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3607 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3608 ; AVX512F-64-NEXT:    vcmpleps %xmm2, %xmm3, %xmm2
3609 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3610 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3611 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3612 ; AVX512F-64-NEXT:    vzeroupper
3613 ; AVX512F-64-NEXT:    retq
3614   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3615                                                <4 x float> %f1, <4 x float> %f2, metadata !"oge",
3616                                                metadata !"fpexcept.strict") #0
3617   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3618   ret <4 x i32> %res
3621 define <4 x i32> @test_v4f32_olt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3622 ; SSE-32-LABEL: test_v4f32_olt_s:
3623 ; SSE-32:       # %bb.0:
3624 ; SSE-32-NEXT:    pushl %ebp
3625 ; SSE-32-NEXT:    movl %esp, %ebp
3626 ; SSE-32-NEXT:    andl $-16, %esp
3627 ; SSE-32-NEXT:    subl $16, %esp
3628 ; SSE-32-NEXT:    cmpltps 8(%ebp), %xmm2
3629 ; SSE-32-NEXT:    andps %xmm2, %xmm0
3630 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
3631 ; SSE-32-NEXT:    orps %xmm2, %xmm0
3632 ; SSE-32-NEXT:    movl %ebp, %esp
3633 ; SSE-32-NEXT:    popl %ebp
3634 ; SSE-32-NEXT:    retl
3636 ; SSE-64-LABEL: test_v4f32_olt_s:
3637 ; SSE-64:       # %bb.0:
3638 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm2
3639 ; SSE-64-NEXT:    andps %xmm2, %xmm0
3640 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
3641 ; SSE-64-NEXT:    orps %xmm2, %xmm0
3642 ; SSE-64-NEXT:    retq
3644 ; AVX-32-LABEL: test_v4f32_olt_s:
3645 ; AVX-32:       # %bb.0:
3646 ; AVX-32-NEXT:    pushl %ebp
3647 ; AVX-32-NEXT:    movl %esp, %ebp
3648 ; AVX-32-NEXT:    andl $-16, %esp
3649 ; AVX-32-NEXT:    subl $16, %esp
3650 ; AVX-32-NEXT:    vcmpltps 8(%ebp), %xmm2, %xmm2
3651 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3652 ; AVX-32-NEXT:    movl %ebp, %esp
3653 ; AVX-32-NEXT:    popl %ebp
3654 ; AVX-32-NEXT:    retl
3656 ; AVX-64-LABEL: test_v4f32_olt_s:
3657 ; AVX-64:       # %bb.0:
3658 ; AVX-64-NEXT:    vcmpltps %xmm3, %xmm2, %xmm2
3659 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3660 ; AVX-64-NEXT:    retq
3662 ; AVX512-32-LABEL: test_v4f32_olt_s:
3663 ; AVX512-32:       # %bb.0:
3664 ; AVX512-32-NEXT:    pushl %ebp
3665 ; AVX512-32-NEXT:    movl %esp, %ebp
3666 ; AVX512-32-NEXT:    andl $-16, %esp
3667 ; AVX512-32-NEXT:    subl $16, %esp
3668 ; AVX512-32-NEXT:    vcmpltps 8(%ebp), %xmm2, %k1
3669 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3670 ; AVX512-32-NEXT:    movl %ebp, %esp
3671 ; AVX512-32-NEXT:    popl %ebp
3672 ; AVX512-32-NEXT:    retl
3674 ; AVX512-64-LABEL: test_v4f32_olt_s:
3675 ; AVX512-64:       # %bb.0:
3676 ; AVX512-64-NEXT:    vcmpltps %xmm3, %xmm2, %k1
3677 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3678 ; AVX512-64-NEXT:    retq
3680 ; AVX512F-32-LABEL: test_v4f32_olt_s:
3681 ; AVX512F-32:       # %bb.0:
3682 ; AVX512F-32-NEXT:    pushl %ebp
3683 ; AVX512F-32-NEXT:    movl %esp, %ebp
3684 ; AVX512F-32-NEXT:    andl $-16, %esp
3685 ; AVX512F-32-NEXT:    subl $16, %esp
3686 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3687 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3688 ; AVX512F-32-NEXT:    vcmpltps 8(%ebp), %xmm2, %xmm2
3689 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3690 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3691 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3692 ; AVX512F-32-NEXT:    movl %ebp, %esp
3693 ; AVX512F-32-NEXT:    popl %ebp
3694 ; AVX512F-32-NEXT:    vzeroupper
3695 ; AVX512F-32-NEXT:    retl
3697 ; AVX512F-64-LABEL: test_v4f32_olt_s:
3698 ; AVX512F-64:       # %bb.0:
3699 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3700 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3701 ; AVX512F-64-NEXT:    vcmpltps %xmm3, %xmm2, %xmm2
3702 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3703 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3704 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3705 ; AVX512F-64-NEXT:    vzeroupper
3706 ; AVX512F-64-NEXT:    retq
3707   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3708                                                <4 x float> %f1, <4 x float> %f2, metadata !"olt",
3709                                                metadata !"fpexcept.strict") #0
3710   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3711   ret <4 x i32> %res
3714 define <4 x i32> @test_v4f32_ole_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3715 ; SSE-32-LABEL: test_v4f32_ole_s:
3716 ; SSE-32:       # %bb.0:
3717 ; SSE-32-NEXT:    pushl %ebp
3718 ; SSE-32-NEXT:    movl %esp, %ebp
3719 ; SSE-32-NEXT:    andl $-16, %esp
3720 ; SSE-32-NEXT:    subl $16, %esp
3721 ; SSE-32-NEXT:    cmpleps 8(%ebp), %xmm2
3722 ; SSE-32-NEXT:    andps %xmm2, %xmm0
3723 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
3724 ; SSE-32-NEXT:    orps %xmm2, %xmm0
3725 ; SSE-32-NEXT:    movl %ebp, %esp
3726 ; SSE-32-NEXT:    popl %ebp
3727 ; SSE-32-NEXT:    retl
3729 ; SSE-64-LABEL: test_v4f32_ole_s:
3730 ; SSE-64:       # %bb.0:
3731 ; SSE-64-NEXT:    cmpleps %xmm3, %xmm2
3732 ; SSE-64-NEXT:    andps %xmm2, %xmm0
3733 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
3734 ; SSE-64-NEXT:    orps %xmm2, %xmm0
3735 ; SSE-64-NEXT:    retq
3737 ; AVX-32-LABEL: test_v4f32_ole_s:
3738 ; AVX-32:       # %bb.0:
3739 ; AVX-32-NEXT:    pushl %ebp
3740 ; AVX-32-NEXT:    movl %esp, %ebp
3741 ; AVX-32-NEXT:    andl $-16, %esp
3742 ; AVX-32-NEXT:    subl $16, %esp
3743 ; AVX-32-NEXT:    vcmpleps 8(%ebp), %xmm2, %xmm2
3744 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3745 ; AVX-32-NEXT:    movl %ebp, %esp
3746 ; AVX-32-NEXT:    popl %ebp
3747 ; AVX-32-NEXT:    retl
3749 ; AVX-64-LABEL: test_v4f32_ole_s:
3750 ; AVX-64:       # %bb.0:
3751 ; AVX-64-NEXT:    vcmpleps %xmm3, %xmm2, %xmm2
3752 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3753 ; AVX-64-NEXT:    retq
3755 ; AVX512-32-LABEL: test_v4f32_ole_s:
3756 ; AVX512-32:       # %bb.0:
3757 ; AVX512-32-NEXT:    pushl %ebp
3758 ; AVX512-32-NEXT:    movl %esp, %ebp
3759 ; AVX512-32-NEXT:    andl $-16, %esp
3760 ; AVX512-32-NEXT:    subl $16, %esp
3761 ; AVX512-32-NEXT:    vcmpleps 8(%ebp), %xmm2, %k1
3762 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3763 ; AVX512-32-NEXT:    movl %ebp, %esp
3764 ; AVX512-32-NEXT:    popl %ebp
3765 ; AVX512-32-NEXT:    retl
3767 ; AVX512-64-LABEL: test_v4f32_ole_s:
3768 ; AVX512-64:       # %bb.0:
3769 ; AVX512-64-NEXT:    vcmpleps %xmm3, %xmm2, %k1
3770 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3771 ; AVX512-64-NEXT:    retq
3773 ; AVX512F-32-LABEL: test_v4f32_ole_s:
3774 ; AVX512F-32:       # %bb.0:
3775 ; AVX512F-32-NEXT:    pushl %ebp
3776 ; AVX512F-32-NEXT:    movl %esp, %ebp
3777 ; AVX512F-32-NEXT:    andl $-16, %esp
3778 ; AVX512F-32-NEXT:    subl $16, %esp
3779 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3780 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3781 ; AVX512F-32-NEXT:    vcmpleps 8(%ebp), %xmm2, %xmm2
3782 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3783 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3784 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3785 ; AVX512F-32-NEXT:    movl %ebp, %esp
3786 ; AVX512F-32-NEXT:    popl %ebp
3787 ; AVX512F-32-NEXT:    vzeroupper
3788 ; AVX512F-32-NEXT:    retl
3790 ; AVX512F-64-LABEL: test_v4f32_ole_s:
3791 ; AVX512F-64:       # %bb.0:
3792 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3793 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3794 ; AVX512F-64-NEXT:    vcmpleps %xmm3, %xmm2, %xmm2
3795 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3796 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3797 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3798 ; AVX512F-64-NEXT:    vzeroupper
3799 ; AVX512F-64-NEXT:    retq
3800   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3801                                                <4 x float> %f1, <4 x float> %f2, metadata !"ole",
3802                                                metadata !"fpexcept.strict") #0
3803   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3804   ret <4 x i32> %res
3807 define <4 x i32> @test_v4f32_one_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3808 ; SSE-32-LABEL: test_v4f32_one_s:
3809 ; SSE-32:       # %bb.0:
3810 ; SSE-32-NEXT:    pushl %ebp
3811 ; SSE-32-NEXT:    movl %esp, %ebp
3812 ; SSE-32-NEXT:    andl $-16, %esp
3813 ; SSE-32-NEXT:    subl $16, %esp
3814 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
3815 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
3816 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
3817 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
3818 ; SSE-32-NEXT:    cmpneqps %xmm3, %xmm4
3819 ; SSE-32-NEXT:    cmpordps %xmm2, %xmm3
3820 ; SSE-32-NEXT:    andps %xmm4, %xmm3
3821 ; SSE-32-NEXT:    andps %xmm3, %xmm0
3822 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
3823 ; SSE-32-NEXT:    orps %xmm3, %xmm0
3824 ; SSE-32-NEXT:    movl %ebp, %esp
3825 ; SSE-32-NEXT:    popl %ebp
3826 ; SSE-32-NEXT:    retl
3828 ; SSE-64-LABEL: test_v4f32_one_s:
3829 ; SSE-64:       # %bb.0:
3830 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
3831 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
3832 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
3833 ; SSE-64-NEXT:    cmpneqps %xmm3, %xmm4
3834 ; SSE-64-NEXT:    cmpordps %xmm3, %xmm2
3835 ; SSE-64-NEXT:    andps %xmm2, %xmm4
3836 ; SSE-64-NEXT:    andps %xmm4, %xmm0
3837 ; SSE-64-NEXT:    andnps %xmm1, %xmm4
3838 ; SSE-64-NEXT:    orps %xmm4, %xmm0
3839 ; SSE-64-NEXT:    retq
3841 ; AVX-32-LABEL: test_v4f32_one_s:
3842 ; AVX-32:       # %bb.0:
3843 ; AVX-32-NEXT:    pushl %ebp
3844 ; AVX-32-NEXT:    movl %esp, %ebp
3845 ; AVX-32-NEXT:    andl $-16, %esp
3846 ; AVX-32-NEXT:    subl $16, %esp
3847 ; AVX-32-NEXT:    vcmpneq_osps 8(%ebp), %xmm2, %xmm2
3848 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3849 ; AVX-32-NEXT:    movl %ebp, %esp
3850 ; AVX-32-NEXT:    popl %ebp
3851 ; AVX-32-NEXT:    retl
3853 ; AVX-64-LABEL: test_v4f32_one_s:
3854 ; AVX-64:       # %bb.0:
3855 ; AVX-64-NEXT:    vcmpneq_osps %xmm3, %xmm2, %xmm2
3856 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3857 ; AVX-64-NEXT:    retq
3859 ; AVX512-32-LABEL: test_v4f32_one_s:
3860 ; AVX512-32:       # %bb.0:
3861 ; AVX512-32-NEXT:    pushl %ebp
3862 ; AVX512-32-NEXT:    movl %esp, %ebp
3863 ; AVX512-32-NEXT:    andl $-16, %esp
3864 ; AVX512-32-NEXT:    subl $16, %esp
3865 ; AVX512-32-NEXT:    vcmpneq_osps 8(%ebp), %xmm2, %k1
3866 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3867 ; AVX512-32-NEXT:    movl %ebp, %esp
3868 ; AVX512-32-NEXT:    popl %ebp
3869 ; AVX512-32-NEXT:    retl
3871 ; AVX512-64-LABEL: test_v4f32_one_s:
3872 ; AVX512-64:       # %bb.0:
3873 ; AVX512-64-NEXT:    vcmpneq_osps %xmm3, %xmm2, %k1
3874 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3875 ; AVX512-64-NEXT:    retq
3877 ; AVX512F-32-LABEL: test_v4f32_one_s:
3878 ; AVX512F-32:       # %bb.0:
3879 ; AVX512F-32-NEXT:    pushl %ebp
3880 ; AVX512F-32-NEXT:    movl %esp, %ebp
3881 ; AVX512F-32-NEXT:    andl $-16, %esp
3882 ; AVX512F-32-NEXT:    subl $16, %esp
3883 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3884 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3885 ; AVX512F-32-NEXT:    vcmpneq_osps 8(%ebp), %xmm2, %xmm2
3886 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3887 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3888 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3889 ; AVX512F-32-NEXT:    movl %ebp, %esp
3890 ; AVX512F-32-NEXT:    popl %ebp
3891 ; AVX512F-32-NEXT:    vzeroupper
3892 ; AVX512F-32-NEXT:    retl
3894 ; AVX512F-64-LABEL: test_v4f32_one_s:
3895 ; AVX512F-64:       # %bb.0:
3896 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3897 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3898 ; AVX512F-64-NEXT:    vcmpneq_osps %xmm3, %xmm2, %xmm2
3899 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3900 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3901 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3902 ; AVX512F-64-NEXT:    vzeroupper
3903 ; AVX512F-64-NEXT:    retq
3904   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
3905                                                <4 x float> %f1, <4 x float> %f2, metadata !"one",
3906                                                metadata !"fpexcept.strict") #0
3907   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
3908   ret <4 x i32> %res
3911 define <4 x i32> @test_v4f32_ord_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
3912 ; SSE-32-LABEL: test_v4f32_ord_s:
3913 ; SSE-32:       # %bb.0:
3914 ; SSE-32-NEXT:    pushl %ebp
3915 ; SSE-32-NEXT:    movl %esp, %ebp
3916 ; SSE-32-NEXT:    andl $-16, %esp
3917 ; SSE-32-NEXT:    subl $16, %esp
3918 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
3919 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
3920 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
3921 ; SSE-32-NEXT:    cmpordps %xmm2, %xmm3
3922 ; SSE-32-NEXT:    andps %xmm3, %xmm0
3923 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
3924 ; SSE-32-NEXT:    orps %xmm3, %xmm0
3925 ; SSE-32-NEXT:    movl %ebp, %esp
3926 ; SSE-32-NEXT:    popl %ebp
3927 ; SSE-32-NEXT:    retl
3929 ; SSE-64-LABEL: test_v4f32_ord_s:
3930 ; SSE-64:       # %bb.0:
3931 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
3932 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
3933 ; SSE-64-NEXT:    cmpordps %xmm3, %xmm2
3934 ; SSE-64-NEXT:    andps %xmm2, %xmm0
3935 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
3936 ; SSE-64-NEXT:    orps %xmm2, %xmm0
3937 ; SSE-64-NEXT:    retq
3939 ; AVX-32-LABEL: test_v4f32_ord_s:
3940 ; AVX-32:       # %bb.0:
3941 ; AVX-32-NEXT:    pushl %ebp
3942 ; AVX-32-NEXT:    movl %esp, %ebp
3943 ; AVX-32-NEXT:    andl $-16, %esp
3944 ; AVX-32-NEXT:    subl $16, %esp
3945 ; AVX-32-NEXT:    vcmpord_sps 8(%ebp), %xmm2, %xmm2
3946 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3947 ; AVX-32-NEXT:    movl %ebp, %esp
3948 ; AVX-32-NEXT:    popl %ebp
3949 ; AVX-32-NEXT:    retl
3951 ; AVX-64-LABEL: test_v4f32_ord_s:
3952 ; AVX-64:       # %bb.0:
3953 ; AVX-64-NEXT:    vcmpord_sps %xmm3, %xmm2, %xmm2
3954 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
3955 ; AVX-64-NEXT:    retq
3957 ; AVX512-32-LABEL: test_v4f32_ord_s:
3958 ; AVX512-32:       # %bb.0:
3959 ; AVX512-32-NEXT:    pushl %ebp
3960 ; AVX512-32-NEXT:    movl %esp, %ebp
3961 ; AVX512-32-NEXT:    andl $-16, %esp
3962 ; AVX512-32-NEXT:    subl $16, %esp
3963 ; AVX512-32-NEXT:    vcmpord_sps 8(%ebp), %xmm2, %k1
3964 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3965 ; AVX512-32-NEXT:    movl %ebp, %esp
3966 ; AVX512-32-NEXT:    popl %ebp
3967 ; AVX512-32-NEXT:    retl
3969 ; AVX512-64-LABEL: test_v4f32_ord_s:
3970 ; AVX512-64:       # %bb.0:
3971 ; AVX512-64-NEXT:    vcmpord_sps %xmm3, %xmm2, %k1
3972 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
3973 ; AVX512-64-NEXT:    retq
3975 ; AVX512F-32-LABEL: test_v4f32_ord_s:
3976 ; AVX512F-32:       # %bb.0:
3977 ; AVX512F-32-NEXT:    pushl %ebp
3978 ; AVX512F-32-NEXT:    movl %esp, %ebp
3979 ; AVX512F-32-NEXT:    andl $-16, %esp
3980 ; AVX512F-32-NEXT:    subl $16, %esp
3981 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3982 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3983 ; AVX512F-32-NEXT:    vcmpord_sps 8(%ebp), %xmm2, %xmm2
3984 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
3985 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3986 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
3987 ; AVX512F-32-NEXT:    movl %ebp, %esp
3988 ; AVX512F-32-NEXT:    popl %ebp
3989 ; AVX512F-32-NEXT:    vzeroupper
3990 ; AVX512F-32-NEXT:    retl
3992 ; AVX512F-64-LABEL: test_v4f32_ord_s:
3993 ; AVX512F-64:       # %bb.0:
3994 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
3995 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3996 ; AVX512F-64-NEXT:    vcmpord_sps %xmm3, %xmm2, %xmm2
3997 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
3998 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
3999 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4000 ; AVX512F-64-NEXT:    vzeroupper
4001 ; AVX512F-64-NEXT:    retq
4002   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4003                                                <4 x float> %f1, <4 x float> %f2, metadata !"ord",
4004                                                metadata !"fpexcept.strict") #0
4005   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4006   ret <4 x i32> %res
4009 define <4 x i32> @test_v4f32_ueq_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4010 ; SSE-32-LABEL: test_v4f32_ueq_s:
4011 ; SSE-32:       # %bb.0:
4012 ; SSE-32-NEXT:    pushl %ebp
4013 ; SSE-32-NEXT:    movl %esp, %ebp
4014 ; SSE-32-NEXT:    andl $-16, %esp
4015 ; SSE-32-NEXT:    subl $16, %esp
4016 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
4017 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
4018 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
4019 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
4020 ; SSE-32-NEXT:    cmpeqps %xmm3, %xmm4
4021 ; SSE-32-NEXT:    cmpunordps %xmm2, %xmm3
4022 ; SSE-32-NEXT:    orps %xmm4, %xmm3
4023 ; SSE-32-NEXT:    andps %xmm3, %xmm0
4024 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
4025 ; SSE-32-NEXT:    orps %xmm3, %xmm0
4026 ; SSE-32-NEXT:    movl %ebp, %esp
4027 ; SSE-32-NEXT:    popl %ebp
4028 ; SSE-32-NEXT:    retl
4030 ; SSE-64-LABEL: test_v4f32_ueq_s:
4031 ; SSE-64:       # %bb.0:
4032 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
4033 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
4034 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
4035 ; SSE-64-NEXT:    cmpeqps %xmm3, %xmm4
4036 ; SSE-64-NEXT:    cmpunordps %xmm3, %xmm2
4037 ; SSE-64-NEXT:    orps %xmm2, %xmm4
4038 ; SSE-64-NEXT:    andps %xmm4, %xmm0
4039 ; SSE-64-NEXT:    andnps %xmm1, %xmm4
4040 ; SSE-64-NEXT:    orps %xmm4, %xmm0
4041 ; SSE-64-NEXT:    retq
4043 ; AVX-32-LABEL: test_v4f32_ueq_s:
4044 ; AVX-32:       # %bb.0:
4045 ; AVX-32-NEXT:    pushl %ebp
4046 ; AVX-32-NEXT:    movl %esp, %ebp
4047 ; AVX-32-NEXT:    andl $-16, %esp
4048 ; AVX-32-NEXT:    subl $16, %esp
4049 ; AVX-32-NEXT:    vcmpeq_usps 8(%ebp), %xmm2, %xmm2
4050 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4051 ; AVX-32-NEXT:    movl %ebp, %esp
4052 ; AVX-32-NEXT:    popl %ebp
4053 ; AVX-32-NEXT:    retl
4055 ; AVX-64-LABEL: test_v4f32_ueq_s:
4056 ; AVX-64:       # %bb.0:
4057 ; AVX-64-NEXT:    vcmpeq_usps %xmm3, %xmm2, %xmm2
4058 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4059 ; AVX-64-NEXT:    retq
4061 ; AVX512-32-LABEL: test_v4f32_ueq_s:
4062 ; AVX512-32:       # %bb.0:
4063 ; AVX512-32-NEXT:    pushl %ebp
4064 ; AVX512-32-NEXT:    movl %esp, %ebp
4065 ; AVX512-32-NEXT:    andl $-16, %esp
4066 ; AVX512-32-NEXT:    subl $16, %esp
4067 ; AVX512-32-NEXT:    vcmpeq_usps 8(%ebp), %xmm2, %k1
4068 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4069 ; AVX512-32-NEXT:    movl %ebp, %esp
4070 ; AVX512-32-NEXT:    popl %ebp
4071 ; AVX512-32-NEXT:    retl
4073 ; AVX512-64-LABEL: test_v4f32_ueq_s:
4074 ; AVX512-64:       # %bb.0:
4075 ; AVX512-64-NEXT:    vcmpeq_usps %xmm3, %xmm2, %k1
4076 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4077 ; AVX512-64-NEXT:    retq
4079 ; AVX512F-32-LABEL: test_v4f32_ueq_s:
4080 ; AVX512F-32:       # %bb.0:
4081 ; AVX512F-32-NEXT:    pushl %ebp
4082 ; AVX512F-32-NEXT:    movl %esp, %ebp
4083 ; AVX512F-32-NEXT:    andl $-16, %esp
4084 ; AVX512F-32-NEXT:    subl $16, %esp
4085 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4086 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4087 ; AVX512F-32-NEXT:    vcmpeq_usps 8(%ebp), %xmm2, %xmm2
4088 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4089 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4090 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4091 ; AVX512F-32-NEXT:    movl %ebp, %esp
4092 ; AVX512F-32-NEXT:    popl %ebp
4093 ; AVX512F-32-NEXT:    vzeroupper
4094 ; AVX512F-32-NEXT:    retl
4096 ; AVX512F-64-LABEL: test_v4f32_ueq_s:
4097 ; AVX512F-64:       # %bb.0:
4098 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4099 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4100 ; AVX512F-64-NEXT:    vcmpeq_usps %xmm3, %xmm2, %xmm2
4101 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4102 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4103 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4104 ; AVX512F-64-NEXT:    vzeroupper
4105 ; AVX512F-64-NEXT:    retq
4106   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4107                                                <4 x float> %f1, <4 x float> %f2, metadata !"ueq",
4108                                                metadata !"fpexcept.strict") #0
4109   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4110   ret <4 x i32> %res
4113 define <4 x i32> @test_v4f32_ugt_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4114 ; SSE-32-LABEL: test_v4f32_ugt_s:
4115 ; SSE-32:       # %bb.0:
4116 ; SSE-32-NEXT:    pushl %ebp
4117 ; SSE-32-NEXT:    movl %esp, %ebp
4118 ; SSE-32-NEXT:    andl $-16, %esp
4119 ; SSE-32-NEXT:    subl $16, %esp
4120 ; SSE-32-NEXT:    cmpnleps 8(%ebp), %xmm2
4121 ; SSE-32-NEXT:    andps %xmm2, %xmm0
4122 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
4123 ; SSE-32-NEXT:    orps %xmm2, %xmm0
4124 ; SSE-32-NEXT:    movl %ebp, %esp
4125 ; SSE-32-NEXT:    popl %ebp
4126 ; SSE-32-NEXT:    retl
4128 ; SSE-64-LABEL: test_v4f32_ugt_s:
4129 ; SSE-64:       # %bb.0:
4130 ; SSE-64-NEXT:    cmpnleps %xmm3, %xmm2
4131 ; SSE-64-NEXT:    andps %xmm2, %xmm0
4132 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
4133 ; SSE-64-NEXT:    orps %xmm2, %xmm0
4134 ; SSE-64-NEXT:    retq
4136 ; AVX-32-LABEL: test_v4f32_ugt_s:
4137 ; AVX-32:       # %bb.0:
4138 ; AVX-32-NEXT:    pushl %ebp
4139 ; AVX-32-NEXT:    movl %esp, %ebp
4140 ; AVX-32-NEXT:    andl $-16, %esp
4141 ; AVX-32-NEXT:    subl $16, %esp
4142 ; AVX-32-NEXT:    vcmpnleps 8(%ebp), %xmm2, %xmm2
4143 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4144 ; AVX-32-NEXT:    movl %ebp, %esp
4145 ; AVX-32-NEXT:    popl %ebp
4146 ; AVX-32-NEXT:    retl
4148 ; AVX-64-LABEL: test_v4f32_ugt_s:
4149 ; AVX-64:       # %bb.0:
4150 ; AVX-64-NEXT:    vcmpnleps %xmm3, %xmm2, %xmm2
4151 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4152 ; AVX-64-NEXT:    retq
4154 ; AVX512-32-LABEL: test_v4f32_ugt_s:
4155 ; AVX512-32:       # %bb.0:
4156 ; AVX512-32-NEXT:    pushl %ebp
4157 ; AVX512-32-NEXT:    movl %esp, %ebp
4158 ; AVX512-32-NEXT:    andl $-16, %esp
4159 ; AVX512-32-NEXT:    subl $16, %esp
4160 ; AVX512-32-NEXT:    vcmpnleps 8(%ebp), %xmm2, %k1
4161 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4162 ; AVX512-32-NEXT:    movl %ebp, %esp
4163 ; AVX512-32-NEXT:    popl %ebp
4164 ; AVX512-32-NEXT:    retl
4166 ; AVX512-64-LABEL: test_v4f32_ugt_s:
4167 ; AVX512-64:       # %bb.0:
4168 ; AVX512-64-NEXT:    vcmpnleps %xmm3, %xmm2, %k1
4169 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4170 ; AVX512-64-NEXT:    retq
4172 ; AVX512F-32-LABEL: test_v4f32_ugt_s:
4173 ; AVX512F-32:       # %bb.0:
4174 ; AVX512F-32-NEXT:    pushl %ebp
4175 ; AVX512F-32-NEXT:    movl %esp, %ebp
4176 ; AVX512F-32-NEXT:    andl $-16, %esp
4177 ; AVX512F-32-NEXT:    subl $16, %esp
4178 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4179 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4180 ; AVX512F-32-NEXT:    vcmpnleps 8(%ebp), %xmm2, %xmm2
4181 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4182 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4183 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4184 ; AVX512F-32-NEXT:    movl %ebp, %esp
4185 ; AVX512F-32-NEXT:    popl %ebp
4186 ; AVX512F-32-NEXT:    vzeroupper
4187 ; AVX512F-32-NEXT:    retl
4189 ; AVX512F-64-LABEL: test_v4f32_ugt_s:
4190 ; AVX512F-64:       # %bb.0:
4191 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4192 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4193 ; AVX512F-64-NEXT:    vcmpnleps %xmm3, %xmm2, %xmm2
4194 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4195 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4196 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4197 ; AVX512F-64-NEXT:    vzeroupper
4198 ; AVX512F-64-NEXT:    retq
4199   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4200                                                <4 x float> %f1, <4 x float> %f2, metadata !"ugt",
4201                                                metadata !"fpexcept.strict") #0
4202   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4203   ret <4 x i32> %res
4206 define <4 x i32> @test_v4f32_uge_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4207 ; SSE-32-LABEL: test_v4f32_uge_s:
4208 ; SSE-32:       # %bb.0:
4209 ; SSE-32-NEXT:    pushl %ebp
4210 ; SSE-32-NEXT:    movl %esp, %ebp
4211 ; SSE-32-NEXT:    andl $-16, %esp
4212 ; SSE-32-NEXT:    subl $16, %esp
4213 ; SSE-32-NEXT:    cmpnltps 8(%ebp), %xmm2
4214 ; SSE-32-NEXT:    andps %xmm2, %xmm0
4215 ; SSE-32-NEXT:    andnps %xmm1, %xmm2
4216 ; SSE-32-NEXT:    orps %xmm2, %xmm0
4217 ; SSE-32-NEXT:    movl %ebp, %esp
4218 ; SSE-32-NEXT:    popl %ebp
4219 ; SSE-32-NEXT:    retl
4221 ; SSE-64-LABEL: test_v4f32_uge_s:
4222 ; SSE-64:       # %bb.0:
4223 ; SSE-64-NEXT:    cmpnltps %xmm3, %xmm2
4224 ; SSE-64-NEXT:    andps %xmm2, %xmm0
4225 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
4226 ; SSE-64-NEXT:    orps %xmm2, %xmm0
4227 ; SSE-64-NEXT:    retq
4229 ; AVX-32-LABEL: test_v4f32_uge_s:
4230 ; AVX-32:       # %bb.0:
4231 ; AVX-32-NEXT:    pushl %ebp
4232 ; AVX-32-NEXT:    movl %esp, %ebp
4233 ; AVX-32-NEXT:    andl $-16, %esp
4234 ; AVX-32-NEXT:    subl $16, %esp
4235 ; AVX-32-NEXT:    vcmpnltps 8(%ebp), %xmm2, %xmm2
4236 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4237 ; AVX-32-NEXT:    movl %ebp, %esp
4238 ; AVX-32-NEXT:    popl %ebp
4239 ; AVX-32-NEXT:    retl
4241 ; AVX-64-LABEL: test_v4f32_uge_s:
4242 ; AVX-64:       # %bb.0:
4243 ; AVX-64-NEXT:    vcmpnltps %xmm3, %xmm2, %xmm2
4244 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4245 ; AVX-64-NEXT:    retq
4247 ; AVX512-32-LABEL: test_v4f32_uge_s:
4248 ; AVX512-32:       # %bb.0:
4249 ; AVX512-32-NEXT:    pushl %ebp
4250 ; AVX512-32-NEXT:    movl %esp, %ebp
4251 ; AVX512-32-NEXT:    andl $-16, %esp
4252 ; AVX512-32-NEXT:    subl $16, %esp
4253 ; AVX512-32-NEXT:    vcmpnltps 8(%ebp), %xmm2, %k1
4254 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4255 ; AVX512-32-NEXT:    movl %ebp, %esp
4256 ; AVX512-32-NEXT:    popl %ebp
4257 ; AVX512-32-NEXT:    retl
4259 ; AVX512-64-LABEL: test_v4f32_uge_s:
4260 ; AVX512-64:       # %bb.0:
4261 ; AVX512-64-NEXT:    vcmpnltps %xmm3, %xmm2, %k1
4262 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4263 ; AVX512-64-NEXT:    retq
4265 ; AVX512F-32-LABEL: test_v4f32_uge_s:
4266 ; AVX512F-32:       # %bb.0:
4267 ; AVX512F-32-NEXT:    pushl %ebp
4268 ; AVX512F-32-NEXT:    movl %esp, %ebp
4269 ; AVX512F-32-NEXT:    andl $-16, %esp
4270 ; AVX512F-32-NEXT:    subl $16, %esp
4271 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4272 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4273 ; AVX512F-32-NEXT:    vcmpnltps 8(%ebp), %xmm2, %xmm2
4274 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4275 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4276 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4277 ; AVX512F-32-NEXT:    movl %ebp, %esp
4278 ; AVX512F-32-NEXT:    popl %ebp
4279 ; AVX512F-32-NEXT:    vzeroupper
4280 ; AVX512F-32-NEXT:    retl
4282 ; AVX512F-64-LABEL: test_v4f32_uge_s:
4283 ; AVX512F-64:       # %bb.0:
4284 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4285 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4286 ; AVX512F-64-NEXT:    vcmpnltps %xmm3, %xmm2, %xmm2
4287 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4288 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4289 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4290 ; AVX512F-64-NEXT:    vzeroupper
4291 ; AVX512F-64-NEXT:    retq
4292   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4293                                                <4 x float> %f1, <4 x float> %f2, metadata !"uge",
4294                                                metadata !"fpexcept.strict") #0
4295   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4296   ret <4 x i32> %res
4299 define <4 x i32> @test_v4f32_ult_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4300 ; SSE-32-LABEL: test_v4f32_ult_s:
4301 ; SSE-32:       # %bb.0:
4302 ; SSE-32-NEXT:    pushl %ebp
4303 ; SSE-32-NEXT:    movl %esp, %ebp
4304 ; SSE-32-NEXT:    andl $-16, %esp
4305 ; SSE-32-NEXT:    subl $16, %esp
4306 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
4307 ; SSE-32-NEXT:    cmpnleps %xmm2, %xmm3
4308 ; SSE-32-NEXT:    andps %xmm3, %xmm0
4309 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
4310 ; SSE-32-NEXT:    orps %xmm3, %xmm0
4311 ; SSE-32-NEXT:    movl %ebp, %esp
4312 ; SSE-32-NEXT:    popl %ebp
4313 ; SSE-32-NEXT:    retl
4315 ; SSE-64-LABEL: test_v4f32_ult_s:
4316 ; SSE-64:       # %bb.0:
4317 ; SSE-64-NEXT:    cmpnleps %xmm2, %xmm3
4318 ; SSE-64-NEXT:    andps %xmm3, %xmm0
4319 ; SSE-64-NEXT:    andnps %xmm1, %xmm3
4320 ; SSE-64-NEXT:    orps %xmm3, %xmm0
4321 ; SSE-64-NEXT:    retq
4323 ; AVX-32-LABEL: test_v4f32_ult_s:
4324 ; AVX-32:       # %bb.0:
4325 ; AVX-32-NEXT:    pushl %ebp
4326 ; AVX-32-NEXT:    movl %esp, %ebp
4327 ; AVX-32-NEXT:    andl $-16, %esp
4328 ; AVX-32-NEXT:    subl $16, %esp
4329 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
4330 ; AVX-32-NEXT:    vcmpnleps %xmm2, %xmm3, %xmm2
4331 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4332 ; AVX-32-NEXT:    movl %ebp, %esp
4333 ; AVX-32-NEXT:    popl %ebp
4334 ; AVX-32-NEXT:    retl
4336 ; AVX-64-LABEL: test_v4f32_ult_s:
4337 ; AVX-64:       # %bb.0:
4338 ; AVX-64-NEXT:    vcmpnleps %xmm2, %xmm3, %xmm2
4339 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4340 ; AVX-64-NEXT:    retq
4342 ; AVX512-32-LABEL: test_v4f32_ult_s:
4343 ; AVX512-32:       # %bb.0:
4344 ; AVX512-32-NEXT:    pushl %ebp
4345 ; AVX512-32-NEXT:    movl %esp, %ebp
4346 ; AVX512-32-NEXT:    andl $-16, %esp
4347 ; AVX512-32-NEXT:    subl $16, %esp
4348 ; AVX512-32-NEXT:    vcmpngeps 8(%ebp), %xmm2, %k1
4349 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4350 ; AVX512-32-NEXT:    movl %ebp, %esp
4351 ; AVX512-32-NEXT:    popl %ebp
4352 ; AVX512-32-NEXT:    retl
4354 ; AVX512-64-LABEL: test_v4f32_ult_s:
4355 ; AVX512-64:       # %bb.0:
4356 ; AVX512-64-NEXT:    vcmpnleps %xmm2, %xmm3, %k1
4357 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4358 ; AVX512-64-NEXT:    retq
4360 ; AVX512F-32-LABEL: test_v4f32_ult_s:
4361 ; AVX512F-32:       # %bb.0:
4362 ; AVX512F-32-NEXT:    pushl %ebp
4363 ; AVX512F-32-NEXT:    movl %esp, %ebp
4364 ; AVX512F-32-NEXT:    andl $-16, %esp
4365 ; AVX512F-32-NEXT:    subl $16, %esp
4366 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4367 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4368 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
4369 ; AVX512F-32-NEXT:    vcmpnleps %xmm2, %xmm3, %xmm2
4370 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4371 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4372 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4373 ; AVX512F-32-NEXT:    movl %ebp, %esp
4374 ; AVX512F-32-NEXT:    popl %ebp
4375 ; AVX512F-32-NEXT:    vzeroupper
4376 ; AVX512F-32-NEXT:    retl
4378 ; AVX512F-64-LABEL: test_v4f32_ult_s:
4379 ; AVX512F-64:       # %bb.0:
4380 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4381 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4382 ; AVX512F-64-NEXT:    vcmpnleps %xmm2, %xmm3, %xmm2
4383 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4384 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4385 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4386 ; AVX512F-64-NEXT:    vzeroupper
4387 ; AVX512F-64-NEXT:    retq
4388   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4389                                                <4 x float> %f1, <4 x float> %f2, metadata !"ult",
4390                                                metadata !"fpexcept.strict") #0
4391   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4392   ret <4 x i32> %res
4395 define <4 x i32> @test_v4f32_ule_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4396 ; SSE-32-LABEL: test_v4f32_ule_s:
4397 ; SSE-32:       # %bb.0:
4398 ; SSE-32-NEXT:    pushl %ebp
4399 ; SSE-32-NEXT:    movl %esp, %ebp
4400 ; SSE-32-NEXT:    andl $-16, %esp
4401 ; SSE-32-NEXT:    subl $16, %esp
4402 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
4403 ; SSE-32-NEXT:    cmpnltps %xmm2, %xmm3
4404 ; SSE-32-NEXT:    andps %xmm3, %xmm0
4405 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
4406 ; SSE-32-NEXT:    orps %xmm3, %xmm0
4407 ; SSE-32-NEXT:    movl %ebp, %esp
4408 ; SSE-32-NEXT:    popl %ebp
4409 ; SSE-32-NEXT:    retl
4411 ; SSE-64-LABEL: test_v4f32_ule_s:
4412 ; SSE-64:       # %bb.0:
4413 ; SSE-64-NEXT:    cmpnltps %xmm2, %xmm3
4414 ; SSE-64-NEXT:    andps %xmm3, %xmm0
4415 ; SSE-64-NEXT:    andnps %xmm1, %xmm3
4416 ; SSE-64-NEXT:    orps %xmm3, %xmm0
4417 ; SSE-64-NEXT:    retq
4419 ; AVX-32-LABEL: test_v4f32_ule_s:
4420 ; AVX-32:       # %bb.0:
4421 ; AVX-32-NEXT:    pushl %ebp
4422 ; AVX-32-NEXT:    movl %esp, %ebp
4423 ; AVX-32-NEXT:    andl $-16, %esp
4424 ; AVX-32-NEXT:    subl $16, %esp
4425 ; AVX-32-NEXT:    vmovaps 8(%ebp), %xmm3
4426 ; AVX-32-NEXT:    vcmpnltps %xmm2, %xmm3, %xmm2
4427 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4428 ; AVX-32-NEXT:    movl %ebp, %esp
4429 ; AVX-32-NEXT:    popl %ebp
4430 ; AVX-32-NEXT:    retl
4432 ; AVX-64-LABEL: test_v4f32_ule_s:
4433 ; AVX-64:       # %bb.0:
4434 ; AVX-64-NEXT:    vcmpnltps %xmm2, %xmm3, %xmm2
4435 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4436 ; AVX-64-NEXT:    retq
4438 ; AVX512-32-LABEL: test_v4f32_ule_s:
4439 ; AVX512-32:       # %bb.0:
4440 ; AVX512-32-NEXT:    pushl %ebp
4441 ; AVX512-32-NEXT:    movl %esp, %ebp
4442 ; AVX512-32-NEXT:    andl $-16, %esp
4443 ; AVX512-32-NEXT:    subl $16, %esp
4444 ; AVX512-32-NEXT:    vcmpngtps 8(%ebp), %xmm2, %k1
4445 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4446 ; AVX512-32-NEXT:    movl %ebp, %esp
4447 ; AVX512-32-NEXT:    popl %ebp
4448 ; AVX512-32-NEXT:    retl
4450 ; AVX512-64-LABEL: test_v4f32_ule_s:
4451 ; AVX512-64:       # %bb.0:
4452 ; AVX512-64-NEXT:    vcmpnltps %xmm2, %xmm3, %k1
4453 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4454 ; AVX512-64-NEXT:    retq
4456 ; AVX512F-32-LABEL: test_v4f32_ule_s:
4457 ; AVX512F-32:       # %bb.0:
4458 ; AVX512F-32-NEXT:    pushl %ebp
4459 ; AVX512F-32-NEXT:    movl %esp, %ebp
4460 ; AVX512F-32-NEXT:    andl $-16, %esp
4461 ; AVX512F-32-NEXT:    subl $16, %esp
4462 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4463 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4464 ; AVX512F-32-NEXT:    vmovaps 8(%ebp), %xmm3
4465 ; AVX512F-32-NEXT:    vcmpnltps %xmm2, %xmm3, %xmm2
4466 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4467 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4468 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4469 ; AVX512F-32-NEXT:    movl %ebp, %esp
4470 ; AVX512F-32-NEXT:    popl %ebp
4471 ; AVX512F-32-NEXT:    vzeroupper
4472 ; AVX512F-32-NEXT:    retl
4474 ; AVX512F-64-LABEL: test_v4f32_ule_s:
4475 ; AVX512F-64:       # %bb.0:
4476 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4477 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4478 ; AVX512F-64-NEXT:    vcmpnltps %xmm2, %xmm3, %xmm2
4479 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4480 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4481 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4482 ; AVX512F-64-NEXT:    vzeroupper
4483 ; AVX512F-64-NEXT:    retq
4484   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4485                                                <4 x float> %f1, <4 x float> %f2, metadata !"ule",
4486                                                metadata !"fpexcept.strict") #0
4487   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4488   ret <4 x i32> %res
4491 define <4 x i32> @test_v4f32_une_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4492 ; SSE-32-LABEL: test_v4f32_une_s:
4493 ; SSE-32:       # %bb.0:
4494 ; SSE-32-NEXT:    pushl %ebp
4495 ; SSE-32-NEXT:    movl %esp, %ebp
4496 ; SSE-32-NEXT:    andl $-16, %esp
4497 ; SSE-32-NEXT:    subl $16, %esp
4498 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
4499 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
4500 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
4501 ; SSE-32-NEXT:    cmpneqps %xmm2, %xmm3
4502 ; SSE-32-NEXT:    andps %xmm3, %xmm0
4503 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
4504 ; SSE-32-NEXT:    orps %xmm3, %xmm0
4505 ; SSE-32-NEXT:    movl %ebp, %esp
4506 ; SSE-32-NEXT:    popl %ebp
4507 ; SSE-32-NEXT:    retl
4509 ; SSE-64-LABEL: test_v4f32_une_s:
4510 ; SSE-64:       # %bb.0:
4511 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
4512 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
4513 ; SSE-64-NEXT:    cmpneqps %xmm3, %xmm2
4514 ; SSE-64-NEXT:    andps %xmm2, %xmm0
4515 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
4516 ; SSE-64-NEXT:    orps %xmm2, %xmm0
4517 ; SSE-64-NEXT:    retq
4519 ; AVX-32-LABEL: test_v4f32_une_s:
4520 ; AVX-32:       # %bb.0:
4521 ; AVX-32-NEXT:    pushl %ebp
4522 ; AVX-32-NEXT:    movl %esp, %ebp
4523 ; AVX-32-NEXT:    andl $-16, %esp
4524 ; AVX-32-NEXT:    subl $16, %esp
4525 ; AVX-32-NEXT:    vcmpneq_usps 8(%ebp), %xmm2, %xmm2
4526 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4527 ; AVX-32-NEXT:    movl %ebp, %esp
4528 ; AVX-32-NEXT:    popl %ebp
4529 ; AVX-32-NEXT:    retl
4531 ; AVX-64-LABEL: test_v4f32_une_s:
4532 ; AVX-64:       # %bb.0:
4533 ; AVX-64-NEXT:    vcmpneq_usps %xmm3, %xmm2, %xmm2
4534 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4535 ; AVX-64-NEXT:    retq
4537 ; AVX512-32-LABEL: test_v4f32_une_s:
4538 ; AVX512-32:       # %bb.0:
4539 ; AVX512-32-NEXT:    pushl %ebp
4540 ; AVX512-32-NEXT:    movl %esp, %ebp
4541 ; AVX512-32-NEXT:    andl $-16, %esp
4542 ; AVX512-32-NEXT:    subl $16, %esp
4543 ; AVX512-32-NEXT:    vcmpneq_usps 8(%ebp), %xmm2, %k1
4544 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4545 ; AVX512-32-NEXT:    movl %ebp, %esp
4546 ; AVX512-32-NEXT:    popl %ebp
4547 ; AVX512-32-NEXT:    retl
4549 ; AVX512-64-LABEL: test_v4f32_une_s:
4550 ; AVX512-64:       # %bb.0:
4551 ; AVX512-64-NEXT:    vcmpneq_usps %xmm3, %xmm2, %k1
4552 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4553 ; AVX512-64-NEXT:    retq
4555 ; AVX512F-32-LABEL: test_v4f32_une_s:
4556 ; AVX512F-32:       # %bb.0:
4557 ; AVX512F-32-NEXT:    pushl %ebp
4558 ; AVX512F-32-NEXT:    movl %esp, %ebp
4559 ; AVX512F-32-NEXT:    andl $-16, %esp
4560 ; AVX512F-32-NEXT:    subl $16, %esp
4561 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4562 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4563 ; AVX512F-32-NEXT:    vcmpneq_usps 8(%ebp), %xmm2, %xmm2
4564 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4565 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4566 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4567 ; AVX512F-32-NEXT:    movl %ebp, %esp
4568 ; AVX512F-32-NEXT:    popl %ebp
4569 ; AVX512F-32-NEXT:    vzeroupper
4570 ; AVX512F-32-NEXT:    retl
4572 ; AVX512F-64-LABEL: test_v4f32_une_s:
4573 ; AVX512F-64:       # %bb.0:
4574 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4575 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4576 ; AVX512F-64-NEXT:    vcmpneq_usps %xmm3, %xmm2, %xmm2
4577 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4578 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4579 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4580 ; AVX512F-64-NEXT:    vzeroupper
4581 ; AVX512F-64-NEXT:    retq
4582   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4583                                                <4 x float> %f1, <4 x float> %f2, metadata !"une",
4584                                                metadata !"fpexcept.strict") #0
4585   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4586   ret <4 x i32> %res
4589 define <4 x i32> @test_v4f32_uno_s(<4 x i32> %a, <4 x i32> %b, <4 x float> %f1, <4 x float> %f2) #0 {
4590 ; SSE-32-LABEL: test_v4f32_uno_s:
4591 ; SSE-32:       # %bb.0:
4592 ; SSE-32-NEXT:    pushl %ebp
4593 ; SSE-32-NEXT:    movl %esp, %ebp
4594 ; SSE-32-NEXT:    andl $-16, %esp
4595 ; SSE-32-NEXT:    subl $16, %esp
4596 ; SSE-32-NEXT:    movaps 8(%ebp), %xmm3
4597 ; SSE-32-NEXT:    movaps %xmm2, %xmm4
4598 ; SSE-32-NEXT:    cmpltps %xmm3, %xmm4
4599 ; SSE-32-NEXT:    cmpunordps %xmm2, %xmm3
4600 ; SSE-32-NEXT:    andps %xmm3, %xmm0
4601 ; SSE-32-NEXT:    andnps %xmm1, %xmm3
4602 ; SSE-32-NEXT:    orps %xmm3, %xmm0
4603 ; SSE-32-NEXT:    movl %ebp, %esp
4604 ; SSE-32-NEXT:    popl %ebp
4605 ; SSE-32-NEXT:    retl
4607 ; SSE-64-LABEL: test_v4f32_uno_s:
4608 ; SSE-64:       # %bb.0:
4609 ; SSE-64-NEXT:    movaps %xmm2, %xmm4
4610 ; SSE-64-NEXT:    cmpltps %xmm3, %xmm4
4611 ; SSE-64-NEXT:    cmpunordps %xmm3, %xmm2
4612 ; SSE-64-NEXT:    andps %xmm2, %xmm0
4613 ; SSE-64-NEXT:    andnps %xmm1, %xmm2
4614 ; SSE-64-NEXT:    orps %xmm2, %xmm0
4615 ; SSE-64-NEXT:    retq
4617 ; AVX-32-LABEL: test_v4f32_uno_s:
4618 ; AVX-32:       # %bb.0:
4619 ; AVX-32-NEXT:    pushl %ebp
4620 ; AVX-32-NEXT:    movl %esp, %ebp
4621 ; AVX-32-NEXT:    andl $-16, %esp
4622 ; AVX-32-NEXT:    subl $16, %esp
4623 ; AVX-32-NEXT:    vcmpunord_sps 8(%ebp), %xmm2, %xmm2
4624 ; AVX-32-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4625 ; AVX-32-NEXT:    movl %ebp, %esp
4626 ; AVX-32-NEXT:    popl %ebp
4627 ; AVX-32-NEXT:    retl
4629 ; AVX-64-LABEL: test_v4f32_uno_s:
4630 ; AVX-64:       # %bb.0:
4631 ; AVX-64-NEXT:    vcmpunord_sps %xmm3, %xmm2, %xmm2
4632 ; AVX-64-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0
4633 ; AVX-64-NEXT:    retq
4635 ; AVX512-32-LABEL: test_v4f32_uno_s:
4636 ; AVX512-32:       # %bb.0:
4637 ; AVX512-32-NEXT:    pushl %ebp
4638 ; AVX512-32-NEXT:    movl %esp, %ebp
4639 ; AVX512-32-NEXT:    andl $-16, %esp
4640 ; AVX512-32-NEXT:    subl $16, %esp
4641 ; AVX512-32-NEXT:    vcmpunord_sps 8(%ebp), %xmm2, %k1
4642 ; AVX512-32-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4643 ; AVX512-32-NEXT:    movl %ebp, %esp
4644 ; AVX512-32-NEXT:    popl %ebp
4645 ; AVX512-32-NEXT:    retl
4647 ; AVX512-64-LABEL: test_v4f32_uno_s:
4648 ; AVX512-64:       # %bb.0:
4649 ; AVX512-64-NEXT:    vcmpunord_sps %xmm3, %xmm2, %k1
4650 ; AVX512-64-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
4651 ; AVX512-64-NEXT:    retq
4653 ; AVX512F-32-LABEL: test_v4f32_uno_s:
4654 ; AVX512F-32:       # %bb.0:
4655 ; AVX512F-32-NEXT:    pushl %ebp
4656 ; AVX512F-32-NEXT:    movl %esp, %ebp
4657 ; AVX512F-32-NEXT:    andl $-16, %esp
4658 ; AVX512F-32-NEXT:    subl $16, %esp
4659 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4660 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4661 ; AVX512F-32-NEXT:    vcmpunord_sps 8(%ebp), %xmm2, %xmm2
4662 ; AVX512F-32-NEXT:    vptestmd %zmm2, %zmm2, %k1
4663 ; AVX512F-32-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4664 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4665 ; AVX512F-32-NEXT:    movl %ebp, %esp
4666 ; AVX512F-32-NEXT:    popl %ebp
4667 ; AVX512F-32-NEXT:    vzeroupper
4668 ; AVX512F-32-NEXT:    retl
4670 ; AVX512F-64-LABEL: test_v4f32_uno_s:
4671 ; AVX512F-64:       # %bb.0:
4672 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4673 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4674 ; AVX512F-64-NEXT:    vcmpunord_sps %xmm3, %xmm2, %xmm2
4675 ; AVX512F-64-NEXT:    vptestmd %zmm2, %zmm2, %k1
4676 ; AVX512F-64-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
4677 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4678 ; AVX512F-64-NEXT:    vzeroupper
4679 ; AVX512F-64-NEXT:    retq
4680   %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(
4681                                                <4 x float> %f1, <4 x float> %f2, metadata !"uno",
4682                                                metadata !"fpexcept.strict") #0
4683   %res = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> %b
4684   ret <4 x i32> %res
4687 define <2 x i64> @test_v2f64_oeq_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
4688 ; SSE-32-LABEL: test_v2f64_oeq_s:
4689 ; SSE-32:       # %bb.0:
4690 ; SSE-32-NEXT:    pushl %ebp
4691 ; SSE-32-NEXT:    movl %esp, %ebp
4692 ; SSE-32-NEXT:    andl $-16, %esp
4693 ; SSE-32-NEXT:    subl $16, %esp
4694 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
4695 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
4696 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
4697 ; SSE-32-NEXT:    cmpeqpd %xmm2, %xmm3
4698 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
4699 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
4700 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
4701 ; SSE-32-NEXT:    movl %ebp, %esp
4702 ; SSE-32-NEXT:    popl %ebp
4703 ; SSE-32-NEXT:    retl
4705 ; SSE-64-LABEL: test_v2f64_oeq_s:
4706 ; SSE-64:       # %bb.0:
4707 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
4708 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
4709 ; SSE-64-NEXT:    cmpeqpd %xmm3, %xmm2
4710 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
4711 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
4712 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
4713 ; SSE-64-NEXT:    retq
4715 ; AVX-32-LABEL: test_v2f64_oeq_s:
4716 ; AVX-32:       # %bb.0:
4717 ; AVX-32-NEXT:    pushl %ebp
4718 ; AVX-32-NEXT:    movl %esp, %ebp
4719 ; AVX-32-NEXT:    andl $-16, %esp
4720 ; AVX-32-NEXT:    subl $16, %esp
4721 ; AVX-32-NEXT:    vcmpeq_ospd 8(%ebp), %xmm2, %xmm2
4722 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4723 ; AVX-32-NEXT:    movl %ebp, %esp
4724 ; AVX-32-NEXT:    popl %ebp
4725 ; AVX-32-NEXT:    retl
4727 ; AVX-64-LABEL: test_v2f64_oeq_s:
4728 ; AVX-64:       # %bb.0:
4729 ; AVX-64-NEXT:    vcmpeq_ospd %xmm3, %xmm2, %xmm2
4730 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4731 ; AVX-64-NEXT:    retq
4733 ; AVX512-32-LABEL: test_v2f64_oeq_s:
4734 ; AVX512-32:       # %bb.0:
4735 ; AVX512-32-NEXT:    pushl %ebp
4736 ; AVX512-32-NEXT:    movl %esp, %ebp
4737 ; AVX512-32-NEXT:    andl $-16, %esp
4738 ; AVX512-32-NEXT:    subl $16, %esp
4739 ; AVX512-32-NEXT:    vcmpeq_ospd 8(%ebp), %xmm2, %k1
4740 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4741 ; AVX512-32-NEXT:    movl %ebp, %esp
4742 ; AVX512-32-NEXT:    popl %ebp
4743 ; AVX512-32-NEXT:    retl
4745 ; AVX512-64-LABEL: test_v2f64_oeq_s:
4746 ; AVX512-64:       # %bb.0:
4747 ; AVX512-64-NEXT:    vcmpeq_ospd %xmm3, %xmm2, %k1
4748 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4749 ; AVX512-64-NEXT:    retq
4751 ; AVX512F-32-LABEL: test_v2f64_oeq_s:
4752 ; AVX512F-32:       # %bb.0:
4753 ; AVX512F-32-NEXT:    pushl %ebp
4754 ; AVX512F-32-NEXT:    movl %esp, %ebp
4755 ; AVX512F-32-NEXT:    andl $-16, %esp
4756 ; AVX512F-32-NEXT:    subl $16, %esp
4757 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4758 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4759 ; AVX512F-32-NEXT:    vcmpeq_ospd 8(%ebp), %xmm2, %xmm2
4760 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
4761 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4762 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4763 ; AVX512F-32-NEXT:    movl %ebp, %esp
4764 ; AVX512F-32-NEXT:    popl %ebp
4765 ; AVX512F-32-NEXT:    vzeroupper
4766 ; AVX512F-32-NEXT:    retl
4768 ; AVX512F-64-LABEL: test_v2f64_oeq_s:
4769 ; AVX512F-64:       # %bb.0:
4770 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4771 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4772 ; AVX512F-64-NEXT:    vcmpeq_ospd %xmm3, %xmm2, %xmm2
4773 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
4774 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4775 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4776 ; AVX512F-64-NEXT:    vzeroupper
4777 ; AVX512F-64-NEXT:    retq
4778   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
4779                                                <2 x double> %f1, <2 x double> %f2, metadata !"oeq",
4780                                                metadata !"fpexcept.strict") #0
4781   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
4782   ret <2 x i64> %res
4785 define <2 x i64> @test_v2f64_ogt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
4786 ; SSE-32-LABEL: test_v2f64_ogt_s:
4787 ; SSE-32:       # %bb.0:
4788 ; SSE-32-NEXT:    pushl %ebp
4789 ; SSE-32-NEXT:    movl %esp, %ebp
4790 ; SSE-32-NEXT:    andl $-16, %esp
4791 ; SSE-32-NEXT:    subl $16, %esp
4792 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
4793 ; SSE-32-NEXT:    cmpltpd %xmm2, %xmm3
4794 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
4795 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
4796 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
4797 ; SSE-32-NEXT:    movl %ebp, %esp
4798 ; SSE-32-NEXT:    popl %ebp
4799 ; SSE-32-NEXT:    retl
4801 ; SSE-64-LABEL: test_v2f64_ogt_s:
4802 ; SSE-64:       # %bb.0:
4803 ; SSE-64-NEXT:    cmpltpd %xmm2, %xmm3
4804 ; SSE-64-NEXT:    andpd %xmm3, %xmm0
4805 ; SSE-64-NEXT:    andnpd %xmm1, %xmm3
4806 ; SSE-64-NEXT:    orpd %xmm3, %xmm0
4807 ; SSE-64-NEXT:    retq
4809 ; AVX-32-LABEL: test_v2f64_ogt_s:
4810 ; AVX-32:       # %bb.0:
4811 ; AVX-32-NEXT:    pushl %ebp
4812 ; AVX-32-NEXT:    movl %esp, %ebp
4813 ; AVX-32-NEXT:    andl $-16, %esp
4814 ; AVX-32-NEXT:    subl $16, %esp
4815 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
4816 ; AVX-32-NEXT:    vcmpltpd %xmm2, %xmm3, %xmm2
4817 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4818 ; AVX-32-NEXT:    movl %ebp, %esp
4819 ; AVX-32-NEXT:    popl %ebp
4820 ; AVX-32-NEXT:    retl
4822 ; AVX-64-LABEL: test_v2f64_ogt_s:
4823 ; AVX-64:       # %bb.0:
4824 ; AVX-64-NEXT:    vcmpltpd %xmm2, %xmm3, %xmm2
4825 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4826 ; AVX-64-NEXT:    retq
4828 ; AVX512-32-LABEL: test_v2f64_ogt_s:
4829 ; AVX512-32:       # %bb.0:
4830 ; AVX512-32-NEXT:    pushl %ebp
4831 ; AVX512-32-NEXT:    movl %esp, %ebp
4832 ; AVX512-32-NEXT:    andl $-16, %esp
4833 ; AVX512-32-NEXT:    subl $16, %esp
4834 ; AVX512-32-NEXT:    vcmpgtpd 8(%ebp), %xmm2, %k1
4835 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4836 ; AVX512-32-NEXT:    movl %ebp, %esp
4837 ; AVX512-32-NEXT:    popl %ebp
4838 ; AVX512-32-NEXT:    retl
4840 ; AVX512-64-LABEL: test_v2f64_ogt_s:
4841 ; AVX512-64:       # %bb.0:
4842 ; AVX512-64-NEXT:    vcmpltpd %xmm2, %xmm3, %k1
4843 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4844 ; AVX512-64-NEXT:    retq
4846 ; AVX512F-32-LABEL: test_v2f64_ogt_s:
4847 ; AVX512F-32:       # %bb.0:
4848 ; AVX512F-32-NEXT:    pushl %ebp
4849 ; AVX512F-32-NEXT:    movl %esp, %ebp
4850 ; AVX512F-32-NEXT:    andl $-16, %esp
4851 ; AVX512F-32-NEXT:    subl $16, %esp
4852 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4853 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4854 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
4855 ; AVX512F-32-NEXT:    vcmpltpd %xmm2, %xmm3, %xmm2
4856 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
4857 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4858 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4859 ; AVX512F-32-NEXT:    movl %ebp, %esp
4860 ; AVX512F-32-NEXT:    popl %ebp
4861 ; AVX512F-32-NEXT:    vzeroupper
4862 ; AVX512F-32-NEXT:    retl
4864 ; AVX512F-64-LABEL: test_v2f64_ogt_s:
4865 ; AVX512F-64:       # %bb.0:
4866 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4867 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4868 ; AVX512F-64-NEXT:    vcmpltpd %xmm2, %xmm3, %xmm2
4869 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
4870 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4871 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4872 ; AVX512F-64-NEXT:    vzeroupper
4873 ; AVX512F-64-NEXT:    retq
4874   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
4875                                                <2 x double> %f1, <2 x double> %f2, metadata !"ogt",
4876                                                metadata !"fpexcept.strict") #0
4877   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
4878   ret <2 x i64> %res
4881 define <2 x i64> @test_v2f64_oge_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
4882 ; SSE-32-LABEL: test_v2f64_oge_s:
4883 ; SSE-32:       # %bb.0:
4884 ; SSE-32-NEXT:    pushl %ebp
4885 ; SSE-32-NEXT:    movl %esp, %ebp
4886 ; SSE-32-NEXT:    andl $-16, %esp
4887 ; SSE-32-NEXT:    subl $16, %esp
4888 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
4889 ; SSE-32-NEXT:    cmplepd %xmm2, %xmm3
4890 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
4891 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
4892 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
4893 ; SSE-32-NEXT:    movl %ebp, %esp
4894 ; SSE-32-NEXT:    popl %ebp
4895 ; SSE-32-NEXT:    retl
4897 ; SSE-64-LABEL: test_v2f64_oge_s:
4898 ; SSE-64:       # %bb.0:
4899 ; SSE-64-NEXT:    cmplepd %xmm2, %xmm3
4900 ; SSE-64-NEXT:    andpd %xmm3, %xmm0
4901 ; SSE-64-NEXT:    andnpd %xmm1, %xmm3
4902 ; SSE-64-NEXT:    orpd %xmm3, %xmm0
4903 ; SSE-64-NEXT:    retq
4905 ; AVX-32-LABEL: test_v2f64_oge_s:
4906 ; AVX-32:       # %bb.0:
4907 ; AVX-32-NEXT:    pushl %ebp
4908 ; AVX-32-NEXT:    movl %esp, %ebp
4909 ; AVX-32-NEXT:    andl $-16, %esp
4910 ; AVX-32-NEXT:    subl $16, %esp
4911 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
4912 ; AVX-32-NEXT:    vcmplepd %xmm2, %xmm3, %xmm2
4913 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4914 ; AVX-32-NEXT:    movl %ebp, %esp
4915 ; AVX-32-NEXT:    popl %ebp
4916 ; AVX-32-NEXT:    retl
4918 ; AVX-64-LABEL: test_v2f64_oge_s:
4919 ; AVX-64:       # %bb.0:
4920 ; AVX-64-NEXT:    vcmplepd %xmm2, %xmm3, %xmm2
4921 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
4922 ; AVX-64-NEXT:    retq
4924 ; AVX512-32-LABEL: test_v2f64_oge_s:
4925 ; AVX512-32:       # %bb.0:
4926 ; AVX512-32-NEXT:    pushl %ebp
4927 ; AVX512-32-NEXT:    movl %esp, %ebp
4928 ; AVX512-32-NEXT:    andl $-16, %esp
4929 ; AVX512-32-NEXT:    subl $16, %esp
4930 ; AVX512-32-NEXT:    vcmpgepd 8(%ebp), %xmm2, %k1
4931 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4932 ; AVX512-32-NEXT:    movl %ebp, %esp
4933 ; AVX512-32-NEXT:    popl %ebp
4934 ; AVX512-32-NEXT:    retl
4936 ; AVX512-64-LABEL: test_v2f64_oge_s:
4937 ; AVX512-64:       # %bb.0:
4938 ; AVX512-64-NEXT:    vcmplepd %xmm2, %xmm3, %k1
4939 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
4940 ; AVX512-64-NEXT:    retq
4942 ; AVX512F-32-LABEL: test_v2f64_oge_s:
4943 ; AVX512F-32:       # %bb.0:
4944 ; AVX512F-32-NEXT:    pushl %ebp
4945 ; AVX512F-32-NEXT:    movl %esp, %ebp
4946 ; AVX512F-32-NEXT:    andl $-16, %esp
4947 ; AVX512F-32-NEXT:    subl $16, %esp
4948 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4949 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4950 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
4951 ; AVX512F-32-NEXT:    vcmplepd %xmm2, %xmm3, %xmm2
4952 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
4953 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4954 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4955 ; AVX512F-32-NEXT:    movl %ebp, %esp
4956 ; AVX512F-32-NEXT:    popl %ebp
4957 ; AVX512F-32-NEXT:    vzeroupper
4958 ; AVX512F-32-NEXT:    retl
4960 ; AVX512F-64-LABEL: test_v2f64_oge_s:
4961 ; AVX512F-64:       # %bb.0:
4962 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4963 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4964 ; AVX512F-64-NEXT:    vcmplepd %xmm2, %xmm3, %xmm2
4965 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
4966 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
4967 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
4968 ; AVX512F-64-NEXT:    vzeroupper
4969 ; AVX512F-64-NEXT:    retq
4970   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
4971                                                <2 x double> %f1, <2 x double> %f2, metadata !"oge",
4972                                                metadata !"fpexcept.strict") #0
4973   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
4974   ret <2 x i64> %res
4977 define <2 x i64> @test_v2f64_olt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
4978 ; SSE-32-LABEL: test_v2f64_olt_s:
4979 ; SSE-32:       # %bb.0:
4980 ; SSE-32-NEXT:    pushl %ebp
4981 ; SSE-32-NEXT:    movl %esp, %ebp
4982 ; SSE-32-NEXT:    andl $-16, %esp
4983 ; SSE-32-NEXT:    subl $16, %esp
4984 ; SSE-32-NEXT:    cmpltpd 8(%ebp), %xmm2
4985 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
4986 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
4987 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
4988 ; SSE-32-NEXT:    movl %ebp, %esp
4989 ; SSE-32-NEXT:    popl %ebp
4990 ; SSE-32-NEXT:    retl
4992 ; SSE-64-LABEL: test_v2f64_olt_s:
4993 ; SSE-64:       # %bb.0:
4994 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm2
4995 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
4996 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
4997 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
4998 ; SSE-64-NEXT:    retq
5000 ; AVX-32-LABEL: test_v2f64_olt_s:
5001 ; AVX-32:       # %bb.0:
5002 ; AVX-32-NEXT:    pushl %ebp
5003 ; AVX-32-NEXT:    movl %esp, %ebp
5004 ; AVX-32-NEXT:    andl $-16, %esp
5005 ; AVX-32-NEXT:    subl $16, %esp
5006 ; AVX-32-NEXT:    vcmpltpd 8(%ebp), %xmm2, %xmm2
5007 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5008 ; AVX-32-NEXT:    movl %ebp, %esp
5009 ; AVX-32-NEXT:    popl %ebp
5010 ; AVX-32-NEXT:    retl
5012 ; AVX-64-LABEL: test_v2f64_olt_s:
5013 ; AVX-64:       # %bb.0:
5014 ; AVX-64-NEXT:    vcmpltpd %xmm3, %xmm2, %xmm2
5015 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5016 ; AVX-64-NEXT:    retq
5018 ; AVX512-32-LABEL: test_v2f64_olt_s:
5019 ; AVX512-32:       # %bb.0:
5020 ; AVX512-32-NEXT:    pushl %ebp
5021 ; AVX512-32-NEXT:    movl %esp, %ebp
5022 ; AVX512-32-NEXT:    andl $-16, %esp
5023 ; AVX512-32-NEXT:    subl $16, %esp
5024 ; AVX512-32-NEXT:    vcmpltpd 8(%ebp), %xmm2, %k1
5025 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5026 ; AVX512-32-NEXT:    movl %ebp, %esp
5027 ; AVX512-32-NEXT:    popl %ebp
5028 ; AVX512-32-NEXT:    retl
5030 ; AVX512-64-LABEL: test_v2f64_olt_s:
5031 ; AVX512-64:       # %bb.0:
5032 ; AVX512-64-NEXT:    vcmpltpd %xmm3, %xmm2, %k1
5033 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5034 ; AVX512-64-NEXT:    retq
5036 ; AVX512F-32-LABEL: test_v2f64_olt_s:
5037 ; AVX512F-32:       # %bb.0:
5038 ; AVX512F-32-NEXT:    pushl %ebp
5039 ; AVX512F-32-NEXT:    movl %esp, %ebp
5040 ; AVX512F-32-NEXT:    andl $-16, %esp
5041 ; AVX512F-32-NEXT:    subl $16, %esp
5042 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5043 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5044 ; AVX512F-32-NEXT:    vcmpltpd 8(%ebp), %xmm2, %xmm2
5045 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5046 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5047 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5048 ; AVX512F-32-NEXT:    movl %ebp, %esp
5049 ; AVX512F-32-NEXT:    popl %ebp
5050 ; AVX512F-32-NEXT:    vzeroupper
5051 ; AVX512F-32-NEXT:    retl
5053 ; AVX512F-64-LABEL: test_v2f64_olt_s:
5054 ; AVX512F-64:       # %bb.0:
5055 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5056 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5057 ; AVX512F-64-NEXT:    vcmpltpd %xmm3, %xmm2, %xmm2
5058 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5059 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5060 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5061 ; AVX512F-64-NEXT:    vzeroupper
5062 ; AVX512F-64-NEXT:    retq
5063   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5064                                                <2 x double> %f1, <2 x double> %f2, metadata !"olt",
5065                                                metadata !"fpexcept.strict") #0
5066   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5067   ret <2 x i64> %res
5070 define <2 x i64> @test_v2f64_ole_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5071 ; SSE-32-LABEL: test_v2f64_ole_s:
5072 ; SSE-32:       # %bb.0:
5073 ; SSE-32-NEXT:    pushl %ebp
5074 ; SSE-32-NEXT:    movl %esp, %ebp
5075 ; SSE-32-NEXT:    andl $-16, %esp
5076 ; SSE-32-NEXT:    subl $16, %esp
5077 ; SSE-32-NEXT:    cmplepd 8(%ebp), %xmm2
5078 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
5079 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
5080 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
5081 ; SSE-32-NEXT:    movl %ebp, %esp
5082 ; SSE-32-NEXT:    popl %ebp
5083 ; SSE-32-NEXT:    retl
5085 ; SSE-64-LABEL: test_v2f64_ole_s:
5086 ; SSE-64:       # %bb.0:
5087 ; SSE-64-NEXT:    cmplepd %xmm3, %xmm2
5088 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5089 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5090 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5091 ; SSE-64-NEXT:    retq
5093 ; AVX-32-LABEL: test_v2f64_ole_s:
5094 ; AVX-32:       # %bb.0:
5095 ; AVX-32-NEXT:    pushl %ebp
5096 ; AVX-32-NEXT:    movl %esp, %ebp
5097 ; AVX-32-NEXT:    andl $-16, %esp
5098 ; AVX-32-NEXT:    subl $16, %esp
5099 ; AVX-32-NEXT:    vcmplepd 8(%ebp), %xmm2, %xmm2
5100 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5101 ; AVX-32-NEXT:    movl %ebp, %esp
5102 ; AVX-32-NEXT:    popl %ebp
5103 ; AVX-32-NEXT:    retl
5105 ; AVX-64-LABEL: test_v2f64_ole_s:
5106 ; AVX-64:       # %bb.0:
5107 ; AVX-64-NEXT:    vcmplepd %xmm3, %xmm2, %xmm2
5108 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5109 ; AVX-64-NEXT:    retq
5111 ; AVX512-32-LABEL: test_v2f64_ole_s:
5112 ; AVX512-32:       # %bb.0:
5113 ; AVX512-32-NEXT:    pushl %ebp
5114 ; AVX512-32-NEXT:    movl %esp, %ebp
5115 ; AVX512-32-NEXT:    andl $-16, %esp
5116 ; AVX512-32-NEXT:    subl $16, %esp
5117 ; AVX512-32-NEXT:    vcmplepd 8(%ebp), %xmm2, %k1
5118 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5119 ; AVX512-32-NEXT:    movl %ebp, %esp
5120 ; AVX512-32-NEXT:    popl %ebp
5121 ; AVX512-32-NEXT:    retl
5123 ; AVX512-64-LABEL: test_v2f64_ole_s:
5124 ; AVX512-64:       # %bb.0:
5125 ; AVX512-64-NEXT:    vcmplepd %xmm3, %xmm2, %k1
5126 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5127 ; AVX512-64-NEXT:    retq
5129 ; AVX512F-32-LABEL: test_v2f64_ole_s:
5130 ; AVX512F-32:       # %bb.0:
5131 ; AVX512F-32-NEXT:    pushl %ebp
5132 ; AVX512F-32-NEXT:    movl %esp, %ebp
5133 ; AVX512F-32-NEXT:    andl $-16, %esp
5134 ; AVX512F-32-NEXT:    subl $16, %esp
5135 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5136 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5137 ; AVX512F-32-NEXT:    vcmplepd 8(%ebp), %xmm2, %xmm2
5138 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5139 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5140 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5141 ; AVX512F-32-NEXT:    movl %ebp, %esp
5142 ; AVX512F-32-NEXT:    popl %ebp
5143 ; AVX512F-32-NEXT:    vzeroupper
5144 ; AVX512F-32-NEXT:    retl
5146 ; AVX512F-64-LABEL: test_v2f64_ole_s:
5147 ; AVX512F-64:       # %bb.0:
5148 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5149 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5150 ; AVX512F-64-NEXT:    vcmplepd %xmm3, %xmm2, %xmm2
5151 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5152 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5153 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5154 ; AVX512F-64-NEXT:    vzeroupper
5155 ; AVX512F-64-NEXT:    retq
5156   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5157                                                <2 x double> %f1, <2 x double> %f2, metadata !"ole",
5158                                                metadata !"fpexcept.strict") #0
5159   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5160   ret <2 x i64> %res
5163 define <2 x i64> @test_v2f64_one_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5164 ; SSE-32-LABEL: test_v2f64_one_s:
5165 ; SSE-32:       # %bb.0:
5166 ; SSE-32-NEXT:    pushl %ebp
5167 ; SSE-32-NEXT:    movl %esp, %ebp
5168 ; SSE-32-NEXT:    andl $-16, %esp
5169 ; SSE-32-NEXT:    subl $16, %esp
5170 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5171 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5172 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
5173 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5174 ; SSE-32-NEXT:    cmpneqpd %xmm3, %xmm4
5175 ; SSE-32-NEXT:    cmpordpd %xmm2, %xmm3
5176 ; SSE-32-NEXT:    andpd %xmm4, %xmm3
5177 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5178 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5179 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5180 ; SSE-32-NEXT:    movl %ebp, %esp
5181 ; SSE-32-NEXT:    popl %ebp
5182 ; SSE-32-NEXT:    retl
5184 ; SSE-64-LABEL: test_v2f64_one_s:
5185 ; SSE-64:       # %bb.0:
5186 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5187 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
5188 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5189 ; SSE-64-NEXT:    cmpneqpd %xmm3, %xmm4
5190 ; SSE-64-NEXT:    cmpordpd %xmm3, %xmm2
5191 ; SSE-64-NEXT:    andpd %xmm2, %xmm4
5192 ; SSE-64-NEXT:    andpd %xmm4, %xmm0
5193 ; SSE-64-NEXT:    andnpd %xmm1, %xmm4
5194 ; SSE-64-NEXT:    orpd %xmm4, %xmm0
5195 ; SSE-64-NEXT:    retq
5197 ; AVX-32-LABEL: test_v2f64_one_s:
5198 ; AVX-32:       # %bb.0:
5199 ; AVX-32-NEXT:    pushl %ebp
5200 ; AVX-32-NEXT:    movl %esp, %ebp
5201 ; AVX-32-NEXT:    andl $-16, %esp
5202 ; AVX-32-NEXT:    subl $16, %esp
5203 ; AVX-32-NEXT:    vcmpneq_ospd 8(%ebp), %xmm2, %xmm2
5204 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5205 ; AVX-32-NEXT:    movl %ebp, %esp
5206 ; AVX-32-NEXT:    popl %ebp
5207 ; AVX-32-NEXT:    retl
5209 ; AVX-64-LABEL: test_v2f64_one_s:
5210 ; AVX-64:       # %bb.0:
5211 ; AVX-64-NEXT:    vcmpneq_ospd %xmm3, %xmm2, %xmm2
5212 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5213 ; AVX-64-NEXT:    retq
5215 ; AVX512-32-LABEL: test_v2f64_one_s:
5216 ; AVX512-32:       # %bb.0:
5217 ; AVX512-32-NEXT:    pushl %ebp
5218 ; AVX512-32-NEXT:    movl %esp, %ebp
5219 ; AVX512-32-NEXT:    andl $-16, %esp
5220 ; AVX512-32-NEXT:    subl $16, %esp
5221 ; AVX512-32-NEXT:    vcmpneq_ospd 8(%ebp), %xmm2, %k1
5222 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5223 ; AVX512-32-NEXT:    movl %ebp, %esp
5224 ; AVX512-32-NEXT:    popl %ebp
5225 ; AVX512-32-NEXT:    retl
5227 ; AVX512-64-LABEL: test_v2f64_one_s:
5228 ; AVX512-64:       # %bb.0:
5229 ; AVX512-64-NEXT:    vcmpneq_ospd %xmm3, %xmm2, %k1
5230 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5231 ; AVX512-64-NEXT:    retq
5233 ; AVX512F-32-LABEL: test_v2f64_one_s:
5234 ; AVX512F-32:       # %bb.0:
5235 ; AVX512F-32-NEXT:    pushl %ebp
5236 ; AVX512F-32-NEXT:    movl %esp, %ebp
5237 ; AVX512F-32-NEXT:    andl $-16, %esp
5238 ; AVX512F-32-NEXT:    subl $16, %esp
5239 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5240 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5241 ; AVX512F-32-NEXT:    vcmpneq_ospd 8(%ebp), %xmm2, %xmm2
5242 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5243 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5244 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5245 ; AVX512F-32-NEXT:    movl %ebp, %esp
5246 ; AVX512F-32-NEXT:    popl %ebp
5247 ; AVX512F-32-NEXT:    vzeroupper
5248 ; AVX512F-32-NEXT:    retl
5250 ; AVX512F-64-LABEL: test_v2f64_one_s:
5251 ; AVX512F-64:       # %bb.0:
5252 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5253 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5254 ; AVX512F-64-NEXT:    vcmpneq_ospd %xmm3, %xmm2, %xmm2
5255 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5256 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5257 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5258 ; AVX512F-64-NEXT:    vzeroupper
5259 ; AVX512F-64-NEXT:    retq
5260   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5261                                                <2 x double> %f1, <2 x double> %f2, metadata !"one",
5262                                                metadata !"fpexcept.strict") #0
5263   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5264   ret <2 x i64> %res
5267 define <2 x i64> @test_v2f64_ord_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5268 ; SSE-32-LABEL: test_v2f64_ord_s:
5269 ; SSE-32:       # %bb.0:
5270 ; SSE-32-NEXT:    pushl %ebp
5271 ; SSE-32-NEXT:    movl %esp, %ebp
5272 ; SSE-32-NEXT:    andl $-16, %esp
5273 ; SSE-32-NEXT:    subl $16, %esp
5274 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5275 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5276 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
5277 ; SSE-32-NEXT:    cmpordpd %xmm2, %xmm3
5278 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5279 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5280 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5281 ; SSE-32-NEXT:    movl %ebp, %esp
5282 ; SSE-32-NEXT:    popl %ebp
5283 ; SSE-32-NEXT:    retl
5285 ; SSE-64-LABEL: test_v2f64_ord_s:
5286 ; SSE-64:       # %bb.0:
5287 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5288 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
5289 ; SSE-64-NEXT:    cmpordpd %xmm3, %xmm2
5290 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5291 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5292 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5293 ; SSE-64-NEXT:    retq
5295 ; AVX-32-LABEL: test_v2f64_ord_s:
5296 ; AVX-32:       # %bb.0:
5297 ; AVX-32-NEXT:    pushl %ebp
5298 ; AVX-32-NEXT:    movl %esp, %ebp
5299 ; AVX-32-NEXT:    andl $-16, %esp
5300 ; AVX-32-NEXT:    subl $16, %esp
5301 ; AVX-32-NEXT:    vcmpord_spd 8(%ebp), %xmm2, %xmm2
5302 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5303 ; AVX-32-NEXT:    movl %ebp, %esp
5304 ; AVX-32-NEXT:    popl %ebp
5305 ; AVX-32-NEXT:    retl
5307 ; AVX-64-LABEL: test_v2f64_ord_s:
5308 ; AVX-64:       # %bb.0:
5309 ; AVX-64-NEXT:    vcmpord_spd %xmm3, %xmm2, %xmm2
5310 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5311 ; AVX-64-NEXT:    retq
5313 ; AVX512-32-LABEL: test_v2f64_ord_s:
5314 ; AVX512-32:       # %bb.0:
5315 ; AVX512-32-NEXT:    pushl %ebp
5316 ; AVX512-32-NEXT:    movl %esp, %ebp
5317 ; AVX512-32-NEXT:    andl $-16, %esp
5318 ; AVX512-32-NEXT:    subl $16, %esp
5319 ; AVX512-32-NEXT:    vcmpord_spd 8(%ebp), %xmm2, %k1
5320 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5321 ; AVX512-32-NEXT:    movl %ebp, %esp
5322 ; AVX512-32-NEXT:    popl %ebp
5323 ; AVX512-32-NEXT:    retl
5325 ; AVX512-64-LABEL: test_v2f64_ord_s:
5326 ; AVX512-64:       # %bb.0:
5327 ; AVX512-64-NEXT:    vcmpord_spd %xmm3, %xmm2, %k1
5328 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5329 ; AVX512-64-NEXT:    retq
5331 ; AVX512F-32-LABEL: test_v2f64_ord_s:
5332 ; AVX512F-32:       # %bb.0:
5333 ; AVX512F-32-NEXT:    pushl %ebp
5334 ; AVX512F-32-NEXT:    movl %esp, %ebp
5335 ; AVX512F-32-NEXT:    andl $-16, %esp
5336 ; AVX512F-32-NEXT:    subl $16, %esp
5337 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5338 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5339 ; AVX512F-32-NEXT:    vcmpord_spd 8(%ebp), %xmm2, %xmm2
5340 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5341 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5342 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5343 ; AVX512F-32-NEXT:    movl %ebp, %esp
5344 ; AVX512F-32-NEXT:    popl %ebp
5345 ; AVX512F-32-NEXT:    vzeroupper
5346 ; AVX512F-32-NEXT:    retl
5348 ; AVX512F-64-LABEL: test_v2f64_ord_s:
5349 ; AVX512F-64:       # %bb.0:
5350 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5351 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5352 ; AVX512F-64-NEXT:    vcmpord_spd %xmm3, %xmm2, %xmm2
5353 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5354 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5355 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5356 ; AVX512F-64-NEXT:    vzeroupper
5357 ; AVX512F-64-NEXT:    retq
5358   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5359                                                <2 x double> %f1, <2 x double> %f2, metadata !"ord",
5360                                                metadata !"fpexcept.strict") #0
5361   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5362   ret <2 x i64> %res
5365 define <2 x i64> @test_v2f64_ueq_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5366 ; SSE-32-LABEL: test_v2f64_ueq_s:
5367 ; SSE-32:       # %bb.0:
5368 ; SSE-32-NEXT:    pushl %ebp
5369 ; SSE-32-NEXT:    movl %esp, %ebp
5370 ; SSE-32-NEXT:    andl $-16, %esp
5371 ; SSE-32-NEXT:    subl $16, %esp
5372 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5373 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5374 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
5375 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5376 ; SSE-32-NEXT:    cmpeqpd %xmm3, %xmm4
5377 ; SSE-32-NEXT:    cmpunordpd %xmm2, %xmm3
5378 ; SSE-32-NEXT:    orpd %xmm4, %xmm3
5379 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5380 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5381 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5382 ; SSE-32-NEXT:    movl %ebp, %esp
5383 ; SSE-32-NEXT:    popl %ebp
5384 ; SSE-32-NEXT:    retl
5386 ; SSE-64-LABEL: test_v2f64_ueq_s:
5387 ; SSE-64:       # %bb.0:
5388 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5389 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
5390 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5391 ; SSE-64-NEXT:    cmpeqpd %xmm3, %xmm4
5392 ; SSE-64-NEXT:    cmpunordpd %xmm3, %xmm2
5393 ; SSE-64-NEXT:    orpd %xmm2, %xmm4
5394 ; SSE-64-NEXT:    andpd %xmm4, %xmm0
5395 ; SSE-64-NEXT:    andnpd %xmm1, %xmm4
5396 ; SSE-64-NEXT:    orpd %xmm4, %xmm0
5397 ; SSE-64-NEXT:    retq
5399 ; AVX-32-LABEL: test_v2f64_ueq_s:
5400 ; AVX-32:       # %bb.0:
5401 ; AVX-32-NEXT:    pushl %ebp
5402 ; AVX-32-NEXT:    movl %esp, %ebp
5403 ; AVX-32-NEXT:    andl $-16, %esp
5404 ; AVX-32-NEXT:    subl $16, %esp
5405 ; AVX-32-NEXT:    vcmpeq_uspd 8(%ebp), %xmm2, %xmm2
5406 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5407 ; AVX-32-NEXT:    movl %ebp, %esp
5408 ; AVX-32-NEXT:    popl %ebp
5409 ; AVX-32-NEXT:    retl
5411 ; AVX-64-LABEL: test_v2f64_ueq_s:
5412 ; AVX-64:       # %bb.0:
5413 ; AVX-64-NEXT:    vcmpeq_uspd %xmm3, %xmm2, %xmm2
5414 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5415 ; AVX-64-NEXT:    retq
5417 ; AVX512-32-LABEL: test_v2f64_ueq_s:
5418 ; AVX512-32:       # %bb.0:
5419 ; AVX512-32-NEXT:    pushl %ebp
5420 ; AVX512-32-NEXT:    movl %esp, %ebp
5421 ; AVX512-32-NEXT:    andl $-16, %esp
5422 ; AVX512-32-NEXT:    subl $16, %esp
5423 ; AVX512-32-NEXT:    vcmpeq_uspd 8(%ebp), %xmm2, %k1
5424 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5425 ; AVX512-32-NEXT:    movl %ebp, %esp
5426 ; AVX512-32-NEXT:    popl %ebp
5427 ; AVX512-32-NEXT:    retl
5429 ; AVX512-64-LABEL: test_v2f64_ueq_s:
5430 ; AVX512-64:       # %bb.0:
5431 ; AVX512-64-NEXT:    vcmpeq_uspd %xmm3, %xmm2, %k1
5432 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5433 ; AVX512-64-NEXT:    retq
5435 ; AVX512F-32-LABEL: test_v2f64_ueq_s:
5436 ; AVX512F-32:       # %bb.0:
5437 ; AVX512F-32-NEXT:    pushl %ebp
5438 ; AVX512F-32-NEXT:    movl %esp, %ebp
5439 ; AVX512F-32-NEXT:    andl $-16, %esp
5440 ; AVX512F-32-NEXT:    subl $16, %esp
5441 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5442 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5443 ; AVX512F-32-NEXT:    vcmpeq_uspd 8(%ebp), %xmm2, %xmm2
5444 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5445 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5446 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5447 ; AVX512F-32-NEXT:    movl %ebp, %esp
5448 ; AVX512F-32-NEXT:    popl %ebp
5449 ; AVX512F-32-NEXT:    vzeroupper
5450 ; AVX512F-32-NEXT:    retl
5452 ; AVX512F-64-LABEL: test_v2f64_ueq_s:
5453 ; AVX512F-64:       # %bb.0:
5454 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5455 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5456 ; AVX512F-64-NEXT:    vcmpeq_uspd %xmm3, %xmm2, %xmm2
5457 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5458 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5459 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5460 ; AVX512F-64-NEXT:    vzeroupper
5461 ; AVX512F-64-NEXT:    retq
5462   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5463                                                <2 x double> %f1, <2 x double> %f2, metadata !"ueq",
5464                                                metadata !"fpexcept.strict") #0
5465   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5466   ret <2 x i64> %res
5469 define <2 x i64> @test_v2f64_ugt_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5470 ; SSE-32-LABEL: test_v2f64_ugt_s:
5471 ; SSE-32:       # %bb.0:
5472 ; SSE-32-NEXT:    pushl %ebp
5473 ; SSE-32-NEXT:    movl %esp, %ebp
5474 ; SSE-32-NEXT:    andl $-16, %esp
5475 ; SSE-32-NEXT:    subl $16, %esp
5476 ; SSE-32-NEXT:    cmpnlepd 8(%ebp), %xmm2
5477 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
5478 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
5479 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
5480 ; SSE-32-NEXT:    movl %ebp, %esp
5481 ; SSE-32-NEXT:    popl %ebp
5482 ; SSE-32-NEXT:    retl
5484 ; SSE-64-LABEL: test_v2f64_ugt_s:
5485 ; SSE-64:       # %bb.0:
5486 ; SSE-64-NEXT:    cmpnlepd %xmm3, %xmm2
5487 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5488 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5489 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5490 ; SSE-64-NEXT:    retq
5492 ; AVX-32-LABEL: test_v2f64_ugt_s:
5493 ; AVX-32:       # %bb.0:
5494 ; AVX-32-NEXT:    pushl %ebp
5495 ; AVX-32-NEXT:    movl %esp, %ebp
5496 ; AVX-32-NEXT:    andl $-16, %esp
5497 ; AVX-32-NEXT:    subl $16, %esp
5498 ; AVX-32-NEXT:    vcmpnlepd 8(%ebp), %xmm2, %xmm2
5499 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5500 ; AVX-32-NEXT:    movl %ebp, %esp
5501 ; AVX-32-NEXT:    popl %ebp
5502 ; AVX-32-NEXT:    retl
5504 ; AVX-64-LABEL: test_v2f64_ugt_s:
5505 ; AVX-64:       # %bb.0:
5506 ; AVX-64-NEXT:    vcmpnlepd %xmm3, %xmm2, %xmm2
5507 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5508 ; AVX-64-NEXT:    retq
5510 ; AVX512-32-LABEL: test_v2f64_ugt_s:
5511 ; AVX512-32:       # %bb.0:
5512 ; AVX512-32-NEXT:    pushl %ebp
5513 ; AVX512-32-NEXT:    movl %esp, %ebp
5514 ; AVX512-32-NEXT:    andl $-16, %esp
5515 ; AVX512-32-NEXT:    subl $16, %esp
5516 ; AVX512-32-NEXT:    vcmpnlepd 8(%ebp), %xmm2, %k1
5517 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5518 ; AVX512-32-NEXT:    movl %ebp, %esp
5519 ; AVX512-32-NEXT:    popl %ebp
5520 ; AVX512-32-NEXT:    retl
5522 ; AVX512-64-LABEL: test_v2f64_ugt_s:
5523 ; AVX512-64:       # %bb.0:
5524 ; AVX512-64-NEXT:    vcmpnlepd %xmm3, %xmm2, %k1
5525 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5526 ; AVX512-64-NEXT:    retq
5528 ; AVX512F-32-LABEL: test_v2f64_ugt_s:
5529 ; AVX512F-32:       # %bb.0:
5530 ; AVX512F-32-NEXT:    pushl %ebp
5531 ; AVX512F-32-NEXT:    movl %esp, %ebp
5532 ; AVX512F-32-NEXT:    andl $-16, %esp
5533 ; AVX512F-32-NEXT:    subl $16, %esp
5534 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5535 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5536 ; AVX512F-32-NEXT:    vcmpnlepd 8(%ebp), %xmm2, %xmm2
5537 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5538 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5539 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5540 ; AVX512F-32-NEXT:    movl %ebp, %esp
5541 ; AVX512F-32-NEXT:    popl %ebp
5542 ; AVX512F-32-NEXT:    vzeroupper
5543 ; AVX512F-32-NEXT:    retl
5545 ; AVX512F-64-LABEL: test_v2f64_ugt_s:
5546 ; AVX512F-64:       # %bb.0:
5547 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5548 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5549 ; AVX512F-64-NEXT:    vcmpnlepd %xmm3, %xmm2, %xmm2
5550 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5551 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5552 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5553 ; AVX512F-64-NEXT:    vzeroupper
5554 ; AVX512F-64-NEXT:    retq
5555   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5556                                                <2 x double> %f1, <2 x double> %f2, metadata !"ugt",
5557                                                metadata !"fpexcept.strict") #0
5558   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5559   ret <2 x i64> %res
5562 define <2 x i64> @test_v2f64_uge_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5563 ; SSE-32-LABEL: test_v2f64_uge_s:
5564 ; SSE-32:       # %bb.0:
5565 ; SSE-32-NEXT:    pushl %ebp
5566 ; SSE-32-NEXT:    movl %esp, %ebp
5567 ; SSE-32-NEXT:    andl $-16, %esp
5568 ; SSE-32-NEXT:    subl $16, %esp
5569 ; SSE-32-NEXT:    cmpnltpd 8(%ebp), %xmm2
5570 ; SSE-32-NEXT:    andpd %xmm2, %xmm0
5571 ; SSE-32-NEXT:    andnpd %xmm1, %xmm2
5572 ; SSE-32-NEXT:    orpd %xmm2, %xmm0
5573 ; SSE-32-NEXT:    movl %ebp, %esp
5574 ; SSE-32-NEXT:    popl %ebp
5575 ; SSE-32-NEXT:    retl
5577 ; SSE-64-LABEL: test_v2f64_uge_s:
5578 ; SSE-64:       # %bb.0:
5579 ; SSE-64-NEXT:    cmpnltpd %xmm3, %xmm2
5580 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5581 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5582 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5583 ; SSE-64-NEXT:    retq
5585 ; AVX-32-LABEL: test_v2f64_uge_s:
5586 ; AVX-32:       # %bb.0:
5587 ; AVX-32-NEXT:    pushl %ebp
5588 ; AVX-32-NEXT:    movl %esp, %ebp
5589 ; AVX-32-NEXT:    andl $-16, %esp
5590 ; AVX-32-NEXT:    subl $16, %esp
5591 ; AVX-32-NEXT:    vcmpnltpd 8(%ebp), %xmm2, %xmm2
5592 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5593 ; AVX-32-NEXT:    movl %ebp, %esp
5594 ; AVX-32-NEXT:    popl %ebp
5595 ; AVX-32-NEXT:    retl
5597 ; AVX-64-LABEL: test_v2f64_uge_s:
5598 ; AVX-64:       # %bb.0:
5599 ; AVX-64-NEXT:    vcmpnltpd %xmm3, %xmm2, %xmm2
5600 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5601 ; AVX-64-NEXT:    retq
5603 ; AVX512-32-LABEL: test_v2f64_uge_s:
5604 ; AVX512-32:       # %bb.0:
5605 ; AVX512-32-NEXT:    pushl %ebp
5606 ; AVX512-32-NEXT:    movl %esp, %ebp
5607 ; AVX512-32-NEXT:    andl $-16, %esp
5608 ; AVX512-32-NEXT:    subl $16, %esp
5609 ; AVX512-32-NEXT:    vcmpnltpd 8(%ebp), %xmm2, %k1
5610 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5611 ; AVX512-32-NEXT:    movl %ebp, %esp
5612 ; AVX512-32-NEXT:    popl %ebp
5613 ; AVX512-32-NEXT:    retl
5615 ; AVX512-64-LABEL: test_v2f64_uge_s:
5616 ; AVX512-64:       # %bb.0:
5617 ; AVX512-64-NEXT:    vcmpnltpd %xmm3, %xmm2, %k1
5618 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5619 ; AVX512-64-NEXT:    retq
5621 ; AVX512F-32-LABEL: test_v2f64_uge_s:
5622 ; AVX512F-32:       # %bb.0:
5623 ; AVX512F-32-NEXT:    pushl %ebp
5624 ; AVX512F-32-NEXT:    movl %esp, %ebp
5625 ; AVX512F-32-NEXT:    andl $-16, %esp
5626 ; AVX512F-32-NEXT:    subl $16, %esp
5627 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5628 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5629 ; AVX512F-32-NEXT:    vcmpnltpd 8(%ebp), %xmm2, %xmm2
5630 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5631 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5632 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5633 ; AVX512F-32-NEXT:    movl %ebp, %esp
5634 ; AVX512F-32-NEXT:    popl %ebp
5635 ; AVX512F-32-NEXT:    vzeroupper
5636 ; AVX512F-32-NEXT:    retl
5638 ; AVX512F-64-LABEL: test_v2f64_uge_s:
5639 ; AVX512F-64:       # %bb.0:
5640 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5641 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5642 ; AVX512F-64-NEXT:    vcmpnltpd %xmm3, %xmm2, %xmm2
5643 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5644 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5645 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5646 ; AVX512F-64-NEXT:    vzeroupper
5647 ; AVX512F-64-NEXT:    retq
5648   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5649                                                <2 x double> %f1, <2 x double> %f2, metadata !"uge",
5650                                                metadata !"fpexcept.strict") #0
5651   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5652   ret <2 x i64> %res
5655 define <2 x i64> @test_v2f64_ult_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5656 ; SSE-32-LABEL: test_v2f64_ult_s:
5657 ; SSE-32:       # %bb.0:
5658 ; SSE-32-NEXT:    pushl %ebp
5659 ; SSE-32-NEXT:    movl %esp, %ebp
5660 ; SSE-32-NEXT:    andl $-16, %esp
5661 ; SSE-32-NEXT:    subl $16, %esp
5662 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5663 ; SSE-32-NEXT:    cmpnlepd %xmm2, %xmm3
5664 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5665 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5666 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5667 ; SSE-32-NEXT:    movl %ebp, %esp
5668 ; SSE-32-NEXT:    popl %ebp
5669 ; SSE-32-NEXT:    retl
5671 ; SSE-64-LABEL: test_v2f64_ult_s:
5672 ; SSE-64:       # %bb.0:
5673 ; SSE-64-NEXT:    cmpnlepd %xmm2, %xmm3
5674 ; SSE-64-NEXT:    andpd %xmm3, %xmm0
5675 ; SSE-64-NEXT:    andnpd %xmm1, %xmm3
5676 ; SSE-64-NEXT:    orpd %xmm3, %xmm0
5677 ; SSE-64-NEXT:    retq
5679 ; AVX-32-LABEL: test_v2f64_ult_s:
5680 ; AVX-32:       # %bb.0:
5681 ; AVX-32-NEXT:    pushl %ebp
5682 ; AVX-32-NEXT:    movl %esp, %ebp
5683 ; AVX-32-NEXT:    andl $-16, %esp
5684 ; AVX-32-NEXT:    subl $16, %esp
5685 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
5686 ; AVX-32-NEXT:    vcmpnlepd %xmm2, %xmm3, %xmm2
5687 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5688 ; AVX-32-NEXT:    movl %ebp, %esp
5689 ; AVX-32-NEXT:    popl %ebp
5690 ; AVX-32-NEXT:    retl
5692 ; AVX-64-LABEL: test_v2f64_ult_s:
5693 ; AVX-64:       # %bb.0:
5694 ; AVX-64-NEXT:    vcmpnlepd %xmm2, %xmm3, %xmm2
5695 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5696 ; AVX-64-NEXT:    retq
5698 ; AVX512-32-LABEL: test_v2f64_ult_s:
5699 ; AVX512-32:       # %bb.0:
5700 ; AVX512-32-NEXT:    pushl %ebp
5701 ; AVX512-32-NEXT:    movl %esp, %ebp
5702 ; AVX512-32-NEXT:    andl $-16, %esp
5703 ; AVX512-32-NEXT:    subl $16, %esp
5704 ; AVX512-32-NEXT:    vcmpngepd 8(%ebp), %xmm2, %k1
5705 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5706 ; AVX512-32-NEXT:    movl %ebp, %esp
5707 ; AVX512-32-NEXT:    popl %ebp
5708 ; AVX512-32-NEXT:    retl
5710 ; AVX512-64-LABEL: test_v2f64_ult_s:
5711 ; AVX512-64:       # %bb.0:
5712 ; AVX512-64-NEXT:    vcmpnlepd %xmm2, %xmm3, %k1
5713 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5714 ; AVX512-64-NEXT:    retq
5716 ; AVX512F-32-LABEL: test_v2f64_ult_s:
5717 ; AVX512F-32:       # %bb.0:
5718 ; AVX512F-32-NEXT:    pushl %ebp
5719 ; AVX512F-32-NEXT:    movl %esp, %ebp
5720 ; AVX512F-32-NEXT:    andl $-16, %esp
5721 ; AVX512F-32-NEXT:    subl $16, %esp
5722 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5723 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5724 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
5725 ; AVX512F-32-NEXT:    vcmpnlepd %xmm2, %xmm3, %xmm2
5726 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5727 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5728 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5729 ; AVX512F-32-NEXT:    movl %ebp, %esp
5730 ; AVX512F-32-NEXT:    popl %ebp
5731 ; AVX512F-32-NEXT:    vzeroupper
5732 ; AVX512F-32-NEXT:    retl
5734 ; AVX512F-64-LABEL: test_v2f64_ult_s:
5735 ; AVX512F-64:       # %bb.0:
5736 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5737 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5738 ; AVX512F-64-NEXT:    vcmpnlepd %xmm2, %xmm3, %xmm2
5739 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5740 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5741 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5742 ; AVX512F-64-NEXT:    vzeroupper
5743 ; AVX512F-64-NEXT:    retq
5744   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5745                                                <2 x double> %f1, <2 x double> %f2, metadata !"ult",
5746                                                metadata !"fpexcept.strict") #0
5747   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5748   ret <2 x i64> %res
5751 define <2 x i64> @test_v2f64_ule_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5752 ; SSE-32-LABEL: test_v2f64_ule_s:
5753 ; SSE-32:       # %bb.0:
5754 ; SSE-32-NEXT:    pushl %ebp
5755 ; SSE-32-NEXT:    movl %esp, %ebp
5756 ; SSE-32-NEXT:    andl $-16, %esp
5757 ; SSE-32-NEXT:    subl $16, %esp
5758 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5759 ; SSE-32-NEXT:    cmpnltpd %xmm2, %xmm3
5760 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5761 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5762 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5763 ; SSE-32-NEXT:    movl %ebp, %esp
5764 ; SSE-32-NEXT:    popl %ebp
5765 ; SSE-32-NEXT:    retl
5767 ; SSE-64-LABEL: test_v2f64_ule_s:
5768 ; SSE-64:       # %bb.0:
5769 ; SSE-64-NEXT:    cmpnltpd %xmm2, %xmm3
5770 ; SSE-64-NEXT:    andpd %xmm3, %xmm0
5771 ; SSE-64-NEXT:    andnpd %xmm1, %xmm3
5772 ; SSE-64-NEXT:    orpd %xmm3, %xmm0
5773 ; SSE-64-NEXT:    retq
5775 ; AVX-32-LABEL: test_v2f64_ule_s:
5776 ; AVX-32:       # %bb.0:
5777 ; AVX-32-NEXT:    pushl %ebp
5778 ; AVX-32-NEXT:    movl %esp, %ebp
5779 ; AVX-32-NEXT:    andl $-16, %esp
5780 ; AVX-32-NEXT:    subl $16, %esp
5781 ; AVX-32-NEXT:    vmovapd 8(%ebp), %xmm3
5782 ; AVX-32-NEXT:    vcmpnltpd %xmm2, %xmm3, %xmm2
5783 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5784 ; AVX-32-NEXT:    movl %ebp, %esp
5785 ; AVX-32-NEXT:    popl %ebp
5786 ; AVX-32-NEXT:    retl
5788 ; AVX-64-LABEL: test_v2f64_ule_s:
5789 ; AVX-64:       # %bb.0:
5790 ; AVX-64-NEXT:    vcmpnltpd %xmm2, %xmm3, %xmm2
5791 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5792 ; AVX-64-NEXT:    retq
5794 ; AVX512-32-LABEL: test_v2f64_ule_s:
5795 ; AVX512-32:       # %bb.0:
5796 ; AVX512-32-NEXT:    pushl %ebp
5797 ; AVX512-32-NEXT:    movl %esp, %ebp
5798 ; AVX512-32-NEXT:    andl $-16, %esp
5799 ; AVX512-32-NEXT:    subl $16, %esp
5800 ; AVX512-32-NEXT:    vcmpngtpd 8(%ebp), %xmm2, %k1
5801 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5802 ; AVX512-32-NEXT:    movl %ebp, %esp
5803 ; AVX512-32-NEXT:    popl %ebp
5804 ; AVX512-32-NEXT:    retl
5806 ; AVX512-64-LABEL: test_v2f64_ule_s:
5807 ; AVX512-64:       # %bb.0:
5808 ; AVX512-64-NEXT:    vcmpnltpd %xmm2, %xmm3, %k1
5809 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5810 ; AVX512-64-NEXT:    retq
5812 ; AVX512F-32-LABEL: test_v2f64_ule_s:
5813 ; AVX512F-32:       # %bb.0:
5814 ; AVX512F-32-NEXT:    pushl %ebp
5815 ; AVX512F-32-NEXT:    movl %esp, %ebp
5816 ; AVX512F-32-NEXT:    andl $-16, %esp
5817 ; AVX512F-32-NEXT:    subl $16, %esp
5818 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5819 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5820 ; AVX512F-32-NEXT:    vmovapd 8(%ebp), %xmm3
5821 ; AVX512F-32-NEXT:    vcmpnltpd %xmm2, %xmm3, %xmm2
5822 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5823 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5824 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5825 ; AVX512F-32-NEXT:    movl %ebp, %esp
5826 ; AVX512F-32-NEXT:    popl %ebp
5827 ; AVX512F-32-NEXT:    vzeroupper
5828 ; AVX512F-32-NEXT:    retl
5830 ; AVX512F-64-LABEL: test_v2f64_ule_s:
5831 ; AVX512F-64:       # %bb.0:
5832 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5833 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5834 ; AVX512F-64-NEXT:    vcmpnltpd %xmm2, %xmm3, %xmm2
5835 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5836 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5837 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5838 ; AVX512F-64-NEXT:    vzeroupper
5839 ; AVX512F-64-NEXT:    retq
5840   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5841                                                <2 x double> %f1, <2 x double> %f2, metadata !"ule",
5842                                                metadata !"fpexcept.strict") #0
5843   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5844   ret <2 x i64> %res
5847 define <2 x i64> @test_v2f64_une_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5848 ; SSE-32-LABEL: test_v2f64_une_s:
5849 ; SSE-32:       # %bb.0:
5850 ; SSE-32-NEXT:    pushl %ebp
5851 ; SSE-32-NEXT:    movl %esp, %ebp
5852 ; SSE-32-NEXT:    andl $-16, %esp
5853 ; SSE-32-NEXT:    subl $16, %esp
5854 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5855 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5856 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
5857 ; SSE-32-NEXT:    cmpneqpd %xmm2, %xmm3
5858 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5859 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5860 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5861 ; SSE-32-NEXT:    movl %ebp, %esp
5862 ; SSE-32-NEXT:    popl %ebp
5863 ; SSE-32-NEXT:    retl
5865 ; SSE-64-LABEL: test_v2f64_une_s:
5866 ; SSE-64:       # %bb.0:
5867 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5868 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
5869 ; SSE-64-NEXT:    cmpneqpd %xmm3, %xmm2
5870 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5871 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5872 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5873 ; SSE-64-NEXT:    retq
5875 ; AVX-32-LABEL: test_v2f64_une_s:
5876 ; AVX-32:       # %bb.0:
5877 ; AVX-32-NEXT:    pushl %ebp
5878 ; AVX-32-NEXT:    movl %esp, %ebp
5879 ; AVX-32-NEXT:    andl $-16, %esp
5880 ; AVX-32-NEXT:    subl $16, %esp
5881 ; AVX-32-NEXT:    vcmpneq_uspd 8(%ebp), %xmm2, %xmm2
5882 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5883 ; AVX-32-NEXT:    movl %ebp, %esp
5884 ; AVX-32-NEXT:    popl %ebp
5885 ; AVX-32-NEXT:    retl
5887 ; AVX-64-LABEL: test_v2f64_une_s:
5888 ; AVX-64:       # %bb.0:
5889 ; AVX-64-NEXT:    vcmpneq_uspd %xmm3, %xmm2, %xmm2
5890 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5891 ; AVX-64-NEXT:    retq
5893 ; AVX512-32-LABEL: test_v2f64_une_s:
5894 ; AVX512-32:       # %bb.0:
5895 ; AVX512-32-NEXT:    pushl %ebp
5896 ; AVX512-32-NEXT:    movl %esp, %ebp
5897 ; AVX512-32-NEXT:    andl $-16, %esp
5898 ; AVX512-32-NEXT:    subl $16, %esp
5899 ; AVX512-32-NEXT:    vcmpneq_uspd 8(%ebp), %xmm2, %k1
5900 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5901 ; AVX512-32-NEXT:    movl %ebp, %esp
5902 ; AVX512-32-NEXT:    popl %ebp
5903 ; AVX512-32-NEXT:    retl
5905 ; AVX512-64-LABEL: test_v2f64_une_s:
5906 ; AVX512-64:       # %bb.0:
5907 ; AVX512-64-NEXT:    vcmpneq_uspd %xmm3, %xmm2, %k1
5908 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5909 ; AVX512-64-NEXT:    retq
5911 ; AVX512F-32-LABEL: test_v2f64_une_s:
5912 ; AVX512F-32:       # %bb.0:
5913 ; AVX512F-32-NEXT:    pushl %ebp
5914 ; AVX512F-32-NEXT:    movl %esp, %ebp
5915 ; AVX512F-32-NEXT:    andl $-16, %esp
5916 ; AVX512F-32-NEXT:    subl $16, %esp
5917 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5918 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5919 ; AVX512F-32-NEXT:    vcmpneq_uspd 8(%ebp), %xmm2, %xmm2
5920 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
5921 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5922 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5923 ; AVX512F-32-NEXT:    movl %ebp, %esp
5924 ; AVX512F-32-NEXT:    popl %ebp
5925 ; AVX512F-32-NEXT:    vzeroupper
5926 ; AVX512F-32-NEXT:    retl
5928 ; AVX512F-64-LABEL: test_v2f64_une_s:
5929 ; AVX512F-64:       # %bb.0:
5930 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5931 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5932 ; AVX512F-64-NEXT:    vcmpneq_uspd %xmm3, %xmm2, %xmm2
5933 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
5934 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
5935 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5936 ; AVX512F-64-NEXT:    vzeroupper
5937 ; AVX512F-64-NEXT:    retq
5938   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
5939                                                <2 x double> %f1, <2 x double> %f2, metadata !"une",
5940                                                metadata !"fpexcept.strict") #0
5941   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
5942   ret <2 x i64> %res
5945 define <2 x i64> @test_v2f64_uno_s(<2 x i64> %a, <2 x i64> %b, <2 x double> %f1, <2 x double> %f2) #0 {
5946 ; SSE-32-LABEL: test_v2f64_uno_s:
5947 ; SSE-32:       # %bb.0:
5948 ; SSE-32-NEXT:    pushl %ebp
5949 ; SSE-32-NEXT:    movl %esp, %ebp
5950 ; SSE-32-NEXT:    andl $-16, %esp
5951 ; SSE-32-NEXT:    subl $16, %esp
5952 ; SSE-32-NEXT:    movapd 8(%ebp), %xmm3
5953 ; SSE-32-NEXT:    movapd %xmm2, %xmm4
5954 ; SSE-32-NEXT:    cmpltpd %xmm3, %xmm4
5955 ; SSE-32-NEXT:    cmpunordpd %xmm2, %xmm3
5956 ; SSE-32-NEXT:    andpd %xmm3, %xmm0
5957 ; SSE-32-NEXT:    andnpd %xmm1, %xmm3
5958 ; SSE-32-NEXT:    orpd %xmm3, %xmm0
5959 ; SSE-32-NEXT:    movl %ebp, %esp
5960 ; SSE-32-NEXT:    popl %ebp
5961 ; SSE-32-NEXT:    retl
5963 ; SSE-64-LABEL: test_v2f64_uno_s:
5964 ; SSE-64:       # %bb.0:
5965 ; SSE-64-NEXT:    movapd %xmm2, %xmm4
5966 ; SSE-64-NEXT:    cmpltpd %xmm3, %xmm4
5967 ; SSE-64-NEXT:    cmpunordpd %xmm3, %xmm2
5968 ; SSE-64-NEXT:    andpd %xmm2, %xmm0
5969 ; SSE-64-NEXT:    andnpd %xmm1, %xmm2
5970 ; SSE-64-NEXT:    orpd %xmm2, %xmm0
5971 ; SSE-64-NEXT:    retq
5973 ; AVX-32-LABEL: test_v2f64_uno_s:
5974 ; AVX-32:       # %bb.0:
5975 ; AVX-32-NEXT:    pushl %ebp
5976 ; AVX-32-NEXT:    movl %esp, %ebp
5977 ; AVX-32-NEXT:    andl $-16, %esp
5978 ; AVX-32-NEXT:    subl $16, %esp
5979 ; AVX-32-NEXT:    vcmpunord_spd 8(%ebp), %xmm2, %xmm2
5980 ; AVX-32-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5981 ; AVX-32-NEXT:    movl %ebp, %esp
5982 ; AVX-32-NEXT:    popl %ebp
5983 ; AVX-32-NEXT:    retl
5985 ; AVX-64-LABEL: test_v2f64_uno_s:
5986 ; AVX-64:       # %bb.0:
5987 ; AVX-64-NEXT:    vcmpunord_spd %xmm3, %xmm2, %xmm2
5988 ; AVX-64-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
5989 ; AVX-64-NEXT:    retq
5991 ; AVX512-32-LABEL: test_v2f64_uno_s:
5992 ; AVX512-32:       # %bb.0:
5993 ; AVX512-32-NEXT:    pushl %ebp
5994 ; AVX512-32-NEXT:    movl %esp, %ebp
5995 ; AVX512-32-NEXT:    andl $-16, %esp
5996 ; AVX512-32-NEXT:    subl $16, %esp
5997 ; AVX512-32-NEXT:    vcmpunord_spd 8(%ebp), %xmm2, %k1
5998 ; AVX512-32-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
5999 ; AVX512-32-NEXT:    movl %ebp, %esp
6000 ; AVX512-32-NEXT:    popl %ebp
6001 ; AVX512-32-NEXT:    retl
6003 ; AVX512-64-LABEL: test_v2f64_uno_s:
6004 ; AVX512-64:       # %bb.0:
6005 ; AVX512-64-NEXT:    vcmpunord_spd %xmm3, %xmm2, %k1
6006 ; AVX512-64-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
6007 ; AVX512-64-NEXT:    retq
6009 ; AVX512F-32-LABEL: test_v2f64_uno_s:
6010 ; AVX512F-32:       # %bb.0:
6011 ; AVX512F-32-NEXT:    pushl %ebp
6012 ; AVX512F-32-NEXT:    movl %esp, %ebp
6013 ; AVX512F-32-NEXT:    andl $-16, %esp
6014 ; AVX512F-32-NEXT:    subl $16, %esp
6015 ; AVX512F-32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
6016 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6017 ; AVX512F-32-NEXT:    vcmpunord_spd 8(%ebp), %xmm2, %xmm2
6018 ; AVX512F-32-NEXT:    vptestmq %zmm2, %zmm2, %k1
6019 ; AVX512F-32-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
6020 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
6021 ; AVX512F-32-NEXT:    movl %ebp, %esp
6022 ; AVX512F-32-NEXT:    popl %ebp
6023 ; AVX512F-32-NEXT:    vzeroupper
6024 ; AVX512F-32-NEXT:    retl
6026 ; AVX512F-64-LABEL: test_v2f64_uno_s:
6027 ; AVX512F-64:       # %bb.0:
6028 ; AVX512F-64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
6029 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6030 ; AVX512F-64-NEXT:    vcmpunord_spd %xmm3, %xmm2, %xmm2
6031 ; AVX512F-64-NEXT:    vptestmq %zmm2, %zmm2, %k1
6032 ; AVX512F-64-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
6033 ; AVX512F-64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
6034 ; AVX512F-64-NEXT:    vzeroupper
6035 ; AVX512F-64-NEXT:    retq
6036   %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(
6037                                                <2 x double> %f1, <2 x double> %f2, metadata !"uno",
6038                                                metadata !"fpexcept.strict") #0
6039   %res = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
6040   ret <2 x i64> %res
6043 attributes #0 = { strictfp nounwind }
6045 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)
6046 declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6047 declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float>, <4 x float>, metadata, metadata)
6048 declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double>, <2 x double>, metadata, metadata)