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