blob: aa16c7c9e50d263c12e6feef597f16dd5e7aa962 [file] [log] [blame]
Craig Topper05a4cf22020-01-03 17:18:07 -08001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Wang, Pengfei40f7ac12020-11-02 14:30:40 +08002; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08008
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 {
Craig Topper05a4cf22020-01-03 17:18:07 -080010; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +080027;
28; AVX512-32-LABEL: test_v8f32_oeq_q:
29; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -080030; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +080035; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -080036; AVX512-32-NEXT: movl %ebp, %esp
37; AVX512-32-NEXT: popl %ebp
38; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +080039;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -080044; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -080045;
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
Craig Topperaf150822020-02-12 20:39:30 -080052; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
53; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -080054; AVX512F-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %ymm2
55; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -080056; 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:
Craig Topperaf150822020-02-12 20:39:30 -080064; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
65; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -080066; AVX512F-64-NEXT: vcmpeqps %ymm3, %ymm2, %ymm2
67; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -080068; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
69; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
70; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +080071 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -080079; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +080097;
98; AVX512-32-LABEL: test_v8f32_ogt_q:
99; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800100; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800105; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800106; AVX512-32-NEXT: movl %ebp, %esp
107; AVX512-32-NEXT: popl %ebp
108; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800109;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800114; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800115;
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
Craig Topperaf150822020-02-12 20:39:30 -0800122; 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
Craig Topperc2e8a422020-02-13 11:10:57 -0800125; AVX512F-32-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
126; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800127; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800135; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
136; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800137; AVX512F-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2
138; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800139; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
140; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
141; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800142 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800150; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800168;
169; AVX512-32-LABEL: test_v8f32_oge_q:
170; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800171; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800176; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800177; AVX512-32-NEXT: movl %ebp, %esp
178; AVX512-32-NEXT: popl %ebp
179; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800180;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800185; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800186;
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
Craig Topperaf150822020-02-12 20:39:30 -0800193; 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
Craig Topperc2e8a422020-02-13 11:10:57 -0800196; AVX512F-32-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
197; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800198; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800206; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
207; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800208; AVX512F-64-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2
209; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800210; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
211; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
212; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800213 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800221; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800238;
239; AVX512-32-LABEL: test_v8f32_olt_q:
240; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800241; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800246; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800247; AVX512-32-NEXT: movl %ebp, %esp
248; AVX512-32-NEXT: popl %ebp
249; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800250;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800255; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800256;
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
Craig Topperaf150822020-02-12 20:39:30 -0800263; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
264; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800265; AVX512F-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %ymm2
266; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800267; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800275; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
276; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800277; AVX512F-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %ymm2
278; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800279; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
280; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
281; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800282 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800290; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800307;
308; AVX512-32-LABEL: test_v8f32_ole_q:
309; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800310; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800315; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800316; AVX512-32-NEXT: movl %ebp, %esp
317; AVX512-32-NEXT: popl %ebp
318; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800319;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800324; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800325;
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
Craig Topperaf150822020-02-12 20:39:30 -0800332; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
333; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800334; AVX512F-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %ymm2
335; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800336; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800344; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
345; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800346; AVX512F-64-NEXT: vcmple_oqps %ymm3, %ymm2, %ymm2
347; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800348; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
349; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
350; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800351 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800359; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800376;
377; AVX512-32-LABEL: test_v8f32_one_q:
378; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800379; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800384; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800385; AVX512-32-NEXT: movl %ebp, %esp
386; AVX512-32-NEXT: popl %ebp
387; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800388;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800393; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800394;
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
Craig Topperaf150822020-02-12 20:39:30 -0800401; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
402; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800403; AVX512F-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %ymm2
404; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800405; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800413; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
414; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800415; AVX512F-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %ymm2
416; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800417; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
418; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
419; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800420 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800428; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800445;
446; AVX512-32-LABEL: test_v8f32_ord_q:
447; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800448; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800453; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800454; AVX512-32-NEXT: movl %ebp, %esp
455; AVX512-32-NEXT: popl %ebp
456; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800457;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800462; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800463;
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
Craig Topperaf150822020-02-12 20:39:30 -0800470; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
471; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800472; AVX512F-32-NEXT: vcmpordps 8(%ebp), %ymm2, %ymm2
473; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800474; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800482; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
483; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800484; AVX512F-64-NEXT: vcmpordps %ymm3, %ymm2, %ymm2
485; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800486; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
487; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
488; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800489 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800497; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800514;
515; AVX512-32-LABEL: test_v8f32_ueq_q:
516; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800517; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800522; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800523; AVX512-32-NEXT: movl %ebp, %esp
524; AVX512-32-NEXT: popl %ebp
525; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800526;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800531; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800532;
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
Craig Topperaf150822020-02-12 20:39:30 -0800539; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
540; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800541; AVX512F-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %ymm2
542; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800543; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800551; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
552; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800553; AVX512F-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %ymm2
554; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800555; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
556; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
557; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800558 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800566; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800583;
584; AVX512-32-LABEL: test_v8f32_ugt_q:
585; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800586; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800591; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800592; AVX512-32-NEXT: movl %ebp, %esp
593; AVX512-32-NEXT: popl %ebp
594; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800595;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800600; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800601;
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
Craig Topperaf150822020-02-12 20:39:30 -0800608; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
609; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800610; AVX512F-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %ymm2
611; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800612; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800620; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
621; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800622; AVX512F-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %ymm2
623; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800624; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
625; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
626; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800627 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800635; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800652;
653; AVX512-32-LABEL: test_v8f32_uge_q:
654; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800655; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800660; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800661; AVX512-32-NEXT: movl %ebp, %esp
662; AVX512-32-NEXT: popl %ebp
663; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800664;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800669; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800670;
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
Craig Topperaf150822020-02-12 20:39:30 -0800677; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
678; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800679; AVX512F-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %ymm2
680; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800681; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800689; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
690; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800691; AVX512F-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %ymm2
692; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800693; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
694; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
695; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800696 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800704; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800722;
723; AVX512-32-LABEL: test_v8f32_ult_q:
724; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800725; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800730; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800731; AVX512-32-NEXT: movl %ebp, %esp
732; AVX512-32-NEXT: popl %ebp
733; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800734;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800739; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800740;
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
Craig Topperaf150822020-02-12 20:39:30 -0800747; 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
Craig Topperc2e8a422020-02-13 11:10:57 -0800750; AVX512F-32-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
751; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800752; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800760; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
761; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800762; AVX512F-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2
763; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800764; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
765; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
766; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800767 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800775; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800793;
794; AVX512-32-LABEL: test_v8f32_ule_q:
795; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800796; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800801; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800802; AVX512-32-NEXT: movl %ebp, %esp
803; AVX512-32-NEXT: popl %ebp
804; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800805;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800810; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800811;
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
Craig Topperaf150822020-02-12 20:39:30 -0800818; 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
Craig Topperc2e8a422020-02-13 11:10:57 -0800821; AVX512F-32-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
822; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800823; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800831; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
832; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800833; AVX512F-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2
834; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800835; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
836; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
837; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800838 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800846; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800863;
864; AVX512-32-LABEL: test_v8f32_une_q:
865; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800866; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800871; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800872; AVX512-32-NEXT: movl %ebp, %esp
873; AVX512-32-NEXT: popl %ebp
874; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800875;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800880; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800881;
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
Craig Topperaf150822020-02-12 20:39:30 -0800888; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
889; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800890; AVX512F-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %ymm2
891; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800892; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800900; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
901; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800902; AVX512F-64-NEXT: vcmpneqps %ymm3, %ymm2, %ymm2
903; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800904; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
905; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
906; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800907 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800915; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800932;
933; AVX512-32-LABEL: test_v8f32_uno_q:
934; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -0800935; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800940; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -0800941; AVX512-32-NEXT: movl %ebp, %esp
942; AVX512-32-NEXT: popl %ebp
943; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800944;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -0800949; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -0800950;
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
Craig Topperaf150822020-02-12 20:39:30 -0800957; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
958; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800959; AVX512F-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %ymm2
960; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800961; 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:
Craig Topperaf150822020-02-12 20:39:30 -0800969; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
970; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -0800971; AVX512F-64-NEXT: vcmpunordps %ymm3, %ymm2, %ymm2
972; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -0800973; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
974; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
975; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +0800976 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -0800984; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001001;
1002; AVX512-32-LABEL: test_v4f64_oeq_q:
1003; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001004; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001009; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001010; AVX512-32-NEXT: movl %ebp, %esp
1011; AVX512-32-NEXT: popl %ebp
1012; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001013;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001018; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001019;
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
Craig Topperaf150822020-02-12 20:39:30 -08001026; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1027; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001028; AVX512F-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %ymm2
1029; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001030; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001038; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1039; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001040; AVX512F-64-NEXT: vcmpeqpd %ymm3, %ymm2, %ymm2
1041; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001042; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1043; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1044; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001045 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001053; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001071;
1072; AVX512-32-LABEL: test_v4f64_ogt_q:
1073; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001074; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001079; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001080; AVX512-32-NEXT: movl %ebp, %esp
1081; AVX512-32-NEXT: popl %ebp
1082; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001083;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001088; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001089;
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
Craig Topperaf150822020-02-12 20:39:30 -08001096; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08001099; AVX512F-32-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1100; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001101; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001109; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1110; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001111; AVX512F-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2
1112; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001113; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1114; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1115; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001116 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001124; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001142;
1143; AVX512-32-LABEL: test_v4f64_oge_q:
1144; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001145; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001150; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001151; AVX512-32-NEXT: movl %ebp, %esp
1152; AVX512-32-NEXT: popl %ebp
1153; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001154;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001159; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001160;
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
Craig Topperaf150822020-02-12 20:39:30 -08001167; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08001170; AVX512F-32-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1171; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001172; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001180; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1181; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001182; AVX512F-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2
1183; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001184; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1185; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1186; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001187 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001195; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001212;
1213; AVX512-32-LABEL: test_v4f64_olt_q:
1214; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001215; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001220; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001221; AVX512-32-NEXT: movl %ebp, %esp
1222; AVX512-32-NEXT: popl %ebp
1223; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001224;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001229; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001230;
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
Craig Topperaf150822020-02-12 20:39:30 -08001237; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1238; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001239; AVX512F-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %ymm2
1240; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001241; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001249; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1250; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001251; AVX512F-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %ymm2
1252; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001253; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1254; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1255; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001256 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001264; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001281;
1282; AVX512-32-LABEL: test_v4f64_ole_q:
1283; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001284; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001289; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001290; AVX512-32-NEXT: movl %ebp, %esp
1291; AVX512-32-NEXT: popl %ebp
1292; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001293;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001298; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001299;
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
Craig Topperaf150822020-02-12 20:39:30 -08001306; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1307; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001308; AVX512F-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %ymm2
1309; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001310; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001318; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1319; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001320; AVX512F-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %ymm2
1321; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001322; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1323; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1324; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001325 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001333; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001350;
1351; AVX512-32-LABEL: test_v4f64_one_q:
1352; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001353; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001358; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001359; AVX512-32-NEXT: movl %ebp, %esp
1360; AVX512-32-NEXT: popl %ebp
1361; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001362;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001367; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001368;
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
Craig Topperaf150822020-02-12 20:39:30 -08001375; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1376; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001377; AVX512F-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %ymm2
1378; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001379; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001387; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1388; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001389; AVX512F-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %ymm2
1390; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001391; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1392; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1393; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001394 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001402; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001419;
1420; AVX512-32-LABEL: test_v4f64_ord_q:
1421; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001422; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001427; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001428; AVX512-32-NEXT: movl %ebp, %esp
1429; AVX512-32-NEXT: popl %ebp
1430; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001431;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001436; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001437;
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
Craig Topperaf150822020-02-12 20:39:30 -08001444; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1445; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001446; AVX512F-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %ymm2
1447; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001448; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001456; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1457; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001458; AVX512F-64-NEXT: vcmpordpd %ymm3, %ymm2, %ymm2
1459; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001460; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1461; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1462; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001463 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001471; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001488;
1489; AVX512-32-LABEL: test_v4f64_ueq_q:
1490; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001491; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001496; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001497; AVX512-32-NEXT: movl %ebp, %esp
1498; AVX512-32-NEXT: popl %ebp
1499; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001500;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001505; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001506;
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
Craig Topperaf150822020-02-12 20:39:30 -08001513; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1514; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001515; AVX512F-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %ymm2
1516; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001517; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001525; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1526; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001527; AVX512F-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %ymm2
1528; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001529; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1530; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1531; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001532 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001540; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001557;
1558; AVX512-32-LABEL: test_v4f64_ugt_q:
1559; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001560; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001565; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001566; AVX512-32-NEXT: movl %ebp, %esp
1567; AVX512-32-NEXT: popl %ebp
1568; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001569;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001574; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001575;
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
Craig Topperaf150822020-02-12 20:39:30 -08001582; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1583; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001584; AVX512F-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %ymm2
1585; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001586; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001594; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1595; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001596; AVX512F-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %ymm2
1597; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001598; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1599; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1600; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001601 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001609; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001626;
1627; AVX512-32-LABEL: test_v4f64_uge_q:
1628; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001629; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001634; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001635; AVX512-32-NEXT: movl %ebp, %esp
1636; AVX512-32-NEXT: popl %ebp
1637; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001638;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001643; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001644;
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
Craig Topperaf150822020-02-12 20:39:30 -08001651; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1652; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001653; AVX512F-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %ymm2
1654; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001655; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001663; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1664; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001665; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %ymm2
1666; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001667; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1668; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1669; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001670 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001678; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001696;
1697; AVX512-32-LABEL: test_v4f64_ult_q:
1698; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001699; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001704; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001705; AVX512-32-NEXT: movl %ebp, %esp
1706; AVX512-32-NEXT: popl %ebp
1707; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001708;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001713; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001714;
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
Craig Topperaf150822020-02-12 20:39:30 -08001721; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08001724; AVX512F-32-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1725; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001726; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001734; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1735; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001736; AVX512F-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2
1737; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001738; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1739; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1740; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001741 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001749; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001767;
1768; AVX512-32-LABEL: test_v4f64_ule_q:
1769; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001770; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001775; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001776; AVX512-32-NEXT: movl %ebp, %esp
1777; AVX512-32-NEXT: popl %ebp
1778; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001779;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001784; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001785;
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
Craig Topperaf150822020-02-12 20:39:30 -08001792; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08001795; AVX512F-32-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1796; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001797; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001805; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1806; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001807; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2
1808; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001809; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1810; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1811; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001812 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001820; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001837;
1838; AVX512-32-LABEL: test_v4f64_une_q:
1839; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001840; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001845; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001846; AVX512-32-NEXT: movl %ebp, %esp
1847; AVX512-32-NEXT: popl %ebp
1848; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001849;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001854; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001855;
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
Craig Topperaf150822020-02-12 20:39:30 -08001862; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1863; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001864; AVX512F-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %ymm2
1865; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001866; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001874; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1875; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001876; AVX512F-64-NEXT: vcmpneqpd %ymm3, %ymm2, %ymm2
1877; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001878; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1879; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1880; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001881 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001889; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001906;
1907; AVX512-32-LABEL: test_v4f64_uno_q:
1908; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001909; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001914; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001915; AVX512-32-NEXT: movl %ebp, %esp
1916; AVX512-32-NEXT: popl %ebp
1917; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001918;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001923; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001924;
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
Craig Topperaf150822020-02-12 20:39:30 -08001931; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1932; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001933; AVX512F-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %ymm2
1934; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001935; 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:
Craig Topperaf150822020-02-12 20:39:30 -08001943; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
1944; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08001945; AVX512F-64-NEXT: vcmpunordpd %ymm3, %ymm2, %ymm2
1946; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08001947; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1948; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
1949; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001950 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08001958; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001975;
1976; AVX512-32-LABEL: test_v8f32_oeq_s:
1977; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08001978; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001983; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08001984; AVX512-32-NEXT: movl %ebp, %esp
1985; AVX512-32-NEXT: popl %ebp
1986; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08001987;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08001992; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08001993;
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
Craig Topperaf150822020-02-12 20:39:30 -08002000; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2001; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002002; AVX512F-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %ymm2
2003; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002004; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002012; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2013; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002014; AVX512F-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %ymm2
2015; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002016; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2017; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2018; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002019 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002027; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002045;
2046; AVX512-32-LABEL: test_v8f32_ogt_s:
2047; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002048; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002053; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002054; AVX512-32-NEXT: movl %ebp, %esp
2055; AVX512-32-NEXT: popl %ebp
2056; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002057;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002062; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002063;
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
Craig Topperaf150822020-02-12 20:39:30 -08002070; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08002073; AVX512F-32-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2074; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002075; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002083; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2084; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002085; AVX512F-64-NEXT: vcmpltps %ymm2, %ymm3, %ymm2
2086; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002087; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2088; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2089; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002090 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002098; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002116;
2117; AVX512-32-LABEL: test_v8f32_oge_s:
2118; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002119; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002124; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002125; AVX512-32-NEXT: movl %ebp, %esp
2126; AVX512-32-NEXT: popl %ebp
2127; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002128;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002133; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002134;
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
Craig Topperaf150822020-02-12 20:39:30 -08002141; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08002144; AVX512F-32-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2145; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002146; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002154; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2155; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002156; AVX512F-64-NEXT: vcmpleps %ymm2, %ymm3, %ymm2
2157; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002158; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2159; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2160; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002161 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002169; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002186;
2187; AVX512-32-LABEL: test_v8f32_olt_s:
2188; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002189; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002194; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002195; AVX512-32-NEXT: movl %ebp, %esp
2196; AVX512-32-NEXT: popl %ebp
2197; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002198;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002203; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002204;
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
Craig Topperaf150822020-02-12 20:39:30 -08002211; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2212; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002213; AVX512F-32-NEXT: vcmpltps 8(%ebp), %ymm2, %ymm2
2214; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002215; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002223; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2224; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002225; AVX512F-64-NEXT: vcmpltps %ymm3, %ymm2, %ymm2
2226; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002227; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2228; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2229; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002230 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002238; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002255;
2256; AVX512-32-LABEL: test_v8f32_ole_s:
2257; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002258; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002263; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002264; AVX512-32-NEXT: movl %ebp, %esp
2265; AVX512-32-NEXT: popl %ebp
2266; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002267;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002272; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002273;
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
Craig Topperaf150822020-02-12 20:39:30 -08002280; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2281; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002282; AVX512F-32-NEXT: vcmpleps 8(%ebp), %ymm2, %ymm2
2283; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002284; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002292; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2293; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002294; AVX512F-64-NEXT: vcmpleps %ymm3, %ymm2, %ymm2
2295; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002296; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2297; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2298; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002299 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002307; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002324;
2325; AVX512-32-LABEL: test_v8f32_one_s:
2326; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002327; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002332; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002333; AVX512-32-NEXT: movl %ebp, %esp
2334; AVX512-32-NEXT: popl %ebp
2335; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002336;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002341; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002342;
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
Craig Topperaf150822020-02-12 20:39:30 -08002349; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2350; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002351; AVX512F-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %ymm2
2352; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002353; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002361; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2362; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002363; AVX512F-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %ymm2
2364; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002365; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2366; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2367; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002368 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002376; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002393;
2394; AVX512-32-LABEL: test_v8f32_ord_s:
2395; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002396; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002401; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002402; AVX512-32-NEXT: movl %ebp, %esp
2403; AVX512-32-NEXT: popl %ebp
2404; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002405;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002410; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002411;
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
Craig Topperaf150822020-02-12 20:39:30 -08002418; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2419; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002420; AVX512F-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %ymm2
2421; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002422; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002430; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2431; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002432; AVX512F-64-NEXT: vcmpord_sps %ymm3, %ymm2, %ymm2
2433; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002434; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2435; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2436; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002437 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002445; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002462;
2463; AVX512-32-LABEL: test_v8f32_ueq_s:
2464; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002465; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002470; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002471; AVX512-32-NEXT: movl %ebp, %esp
2472; AVX512-32-NEXT: popl %ebp
2473; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002474;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002479; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002480;
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
Craig Topperaf150822020-02-12 20:39:30 -08002487; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2488; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002489; AVX512F-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %ymm2
2490; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002491; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002499; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2500; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002501; AVX512F-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %ymm2
2502; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002503; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2504; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2505; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002506 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002514; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002531;
2532; AVX512-32-LABEL: test_v8f32_ugt_s:
2533; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002534; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002539; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002540; AVX512-32-NEXT: movl %ebp, %esp
2541; AVX512-32-NEXT: popl %ebp
2542; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002543;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002548; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002549;
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
Craig Topperaf150822020-02-12 20:39:30 -08002556; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2557; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002558; AVX512F-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %ymm2
2559; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002560; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002568; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2569; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002570; AVX512F-64-NEXT: vcmpnleps %ymm3, %ymm2, %ymm2
2571; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002572; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2573; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2574; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002575 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002583; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002600;
2601; AVX512-32-LABEL: test_v8f32_uge_s:
2602; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002603; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002608; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002609; AVX512-32-NEXT: movl %ebp, %esp
2610; AVX512-32-NEXT: popl %ebp
2611; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002612;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002617; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002618;
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
Craig Topperaf150822020-02-12 20:39:30 -08002625; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2626; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002627; AVX512F-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %ymm2
2628; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002629; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002637; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2638; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002639; AVX512F-64-NEXT: vcmpnltps %ymm3, %ymm2, %ymm2
2640; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002641; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2642; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2643; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002644 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002652; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002670;
2671; AVX512-32-LABEL: test_v8f32_ult_s:
2672; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002673; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002678; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002679; AVX512-32-NEXT: movl %ebp, %esp
2680; AVX512-32-NEXT: popl %ebp
2681; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002682;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002687; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002688;
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
Craig Topperaf150822020-02-12 20:39:30 -08002695; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08002698; AVX512F-32-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2699; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002700; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002708; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2709; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002710; AVX512F-64-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2
2711; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002712; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2713; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2714; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002715 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002723; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002741;
2742; AVX512-32-LABEL: test_v8f32_ule_s:
2743; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002744; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002749; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002750; AVX512-32-NEXT: movl %ebp, %esp
2751; AVX512-32-NEXT: popl %ebp
2752; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002753;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002758; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002759;
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
Craig Topperaf150822020-02-12 20:39:30 -08002766; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08002769; AVX512F-32-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2770; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002771; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002779; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2780; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002781; AVX512F-64-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2
2782; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002783; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2784; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2785; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002786 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002794; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002811;
2812; AVX512-32-LABEL: test_v8f32_une_s:
2813; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002814; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002819; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002820; AVX512-32-NEXT: movl %ebp, %esp
2821; AVX512-32-NEXT: popl %ebp
2822; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002823;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002828; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002829;
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
Craig Topperaf150822020-02-12 20:39:30 -08002836; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2837; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002838; AVX512F-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %ymm2
2839; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002840; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002848; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2849; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002850; AVX512F-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %ymm2
2851; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002852; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2853; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2854; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002855 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002863; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002880;
2881; AVX512-32-LABEL: test_v8f32_uno_s:
2882; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002883; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002888; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002889; AVX512-32-NEXT: movl %ebp, %esp
2890; AVX512-32-NEXT: popl %ebp
2891; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002892;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002897; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002898;
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
Craig Topperaf150822020-02-12 20:39:30 -08002905; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2906; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002907; AVX512F-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %ymm2
2908; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002909; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002917; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2918; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002919; AVX512F-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %ymm2
2920; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002921; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
2922; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2923; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002924 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08002932; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002949;
2950; AVX512-32-LABEL: test_v4f64_oeq_s:
2951; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08002952; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002957; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08002958; AVX512-32-NEXT: movl %ebp, %esp
2959; AVX512-32-NEXT: popl %ebp
2960; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002961;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08002966; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08002967;
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
Craig Topperaf150822020-02-12 20:39:30 -08002974; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2975; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002976; AVX512F-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %ymm2
2977; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002978; 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:
Craig Topperaf150822020-02-12 20:39:30 -08002986; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
2987; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08002988; AVX512F-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %ymm2
2989; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08002990; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
2991; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
2992; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08002993 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003001; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003019;
3020; AVX512-32-LABEL: test_v4f64_ogt_s:
3021; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003022; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003027; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003028; AVX512-32-NEXT: movl %ebp, %esp
3029; AVX512-32-NEXT: popl %ebp
3030; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003031;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003036; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003037;
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
Craig Topperaf150822020-02-12 20:39:30 -08003044; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08003047; AVX512F-32-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3048; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003049; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003057; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3058; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003059; AVX512F-64-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2
3060; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003061; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3062; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3063; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003064 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003072; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003090;
3091; AVX512-32-LABEL: test_v4f64_oge_s:
3092; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003093; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003098; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003099; AVX512-32-NEXT: movl %ebp, %esp
3100; AVX512-32-NEXT: popl %ebp
3101; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003102;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003107; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003108;
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
Craig Topperaf150822020-02-12 20:39:30 -08003115; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08003118; AVX512F-32-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3119; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003120; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003128; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3129; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003130; AVX512F-64-NEXT: vcmplepd %ymm2, %ymm3, %ymm2
3131; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003132; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3133; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3134; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003135 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003143; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003160;
3161; AVX512-32-LABEL: test_v4f64_olt_s:
3162; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003163; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003168; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003169; AVX512-32-NEXT: movl %ebp, %esp
3170; AVX512-32-NEXT: popl %ebp
3171; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003172;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003177; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003178;
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
Craig Topperaf150822020-02-12 20:39:30 -08003185; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3186; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003187; AVX512F-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %ymm2
3188; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003189; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003197; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3198; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003199; AVX512F-64-NEXT: vcmpltpd %ymm3, %ymm2, %ymm2
3200; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003201; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3202; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3203; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003204 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003212; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003229;
3230; AVX512-32-LABEL: test_v4f64_ole_s:
3231; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003232; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003237; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003238; AVX512-32-NEXT: movl %ebp, %esp
3239; AVX512-32-NEXT: popl %ebp
3240; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003241;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003246; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003247;
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
Craig Topperaf150822020-02-12 20:39:30 -08003254; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3255; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003256; AVX512F-32-NEXT: vcmplepd 8(%ebp), %ymm2, %ymm2
3257; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003258; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003266; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3267; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003268; AVX512F-64-NEXT: vcmplepd %ymm3, %ymm2, %ymm2
3269; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003270; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3271; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3272; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003273 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003281; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003298;
3299; AVX512-32-LABEL: test_v4f64_one_s:
3300; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003301; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003306; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003307; AVX512-32-NEXT: movl %ebp, %esp
3308; AVX512-32-NEXT: popl %ebp
3309; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003310;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003315; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003316;
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
Craig Topperaf150822020-02-12 20:39:30 -08003323; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3324; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003325; AVX512F-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %ymm2
3326; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003327; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003335; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3336; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003337; AVX512F-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %ymm2
3338; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003339; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3340; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3341; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003342 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003350; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003367;
3368; AVX512-32-LABEL: test_v4f64_ord_s:
3369; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003370; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003375; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003376; AVX512-32-NEXT: movl %ebp, %esp
3377; AVX512-32-NEXT: popl %ebp
3378; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003379;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003384; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003385;
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
Craig Topperaf150822020-02-12 20:39:30 -08003392; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3393; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003394; AVX512F-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %ymm2
3395; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003396; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003404; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3405; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003406; AVX512F-64-NEXT: vcmpord_spd %ymm3, %ymm2, %ymm2
3407; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003408; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3409; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3410; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003411 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003419; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003436;
3437; AVX512-32-LABEL: test_v4f64_ueq_s:
3438; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003439; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003444; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003445; AVX512-32-NEXT: movl %ebp, %esp
3446; AVX512-32-NEXT: popl %ebp
3447; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003448;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003453; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003454;
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
Craig Topperaf150822020-02-12 20:39:30 -08003461; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3462; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003463; AVX512F-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %ymm2
3464; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003465; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003473; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3474; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003475; AVX512F-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %ymm2
3476; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003477; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3478; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3479; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003480 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003488; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003505;
3506; AVX512-32-LABEL: test_v4f64_ugt_s:
3507; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003508; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003513; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003514; AVX512-32-NEXT: movl %ebp, %esp
3515; AVX512-32-NEXT: popl %ebp
3516; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003517;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003522; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003523;
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
Craig Topperaf150822020-02-12 20:39:30 -08003530; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3531; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003532; AVX512F-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %ymm2
3533; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003534; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003542; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3543; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003544; AVX512F-64-NEXT: vcmpnlepd %ymm3, %ymm2, %ymm2
3545; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003546; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3547; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3548; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003549 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003557; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003574;
3575; AVX512-32-LABEL: test_v4f64_uge_s:
3576; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003577; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003582; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003583; AVX512-32-NEXT: movl %ebp, %esp
3584; AVX512-32-NEXT: popl %ebp
3585; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003586;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003591; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003592;
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
Craig Topperaf150822020-02-12 20:39:30 -08003599; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3600; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003601; AVX512F-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %ymm2
3602; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003603; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003611; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3612; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003613; AVX512F-64-NEXT: vcmpnltpd %ymm3, %ymm2, %ymm2
3614; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003615; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3616; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3617; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003618 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003626; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003644;
3645; AVX512-32-LABEL: test_v4f64_ult_s:
3646; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003647; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003652; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003653; AVX512-32-NEXT: movl %ebp, %esp
3654; AVX512-32-NEXT: popl %ebp
3655; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003656;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003661; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003662;
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
Craig Topperaf150822020-02-12 20:39:30 -08003669; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08003672; AVX512F-32-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3673; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003674; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003682; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3683; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003684; AVX512F-64-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2
3685; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003686; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3687; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3688; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003689 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003697; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003715;
3716; AVX512-32-LABEL: test_v4f64_ule_s:
3717; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003718; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003723; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003724; AVX512-32-NEXT: movl %ebp, %esp
3725; AVX512-32-NEXT: popl %ebp
3726; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003727;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003732; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003733;
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
Craig Topperaf150822020-02-12 20:39:30 -08003740; 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
Craig Topperc2e8a422020-02-13 11:10:57 -08003743; AVX512F-32-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3744; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003745; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003753; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3754; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003755; AVX512F-64-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2
3756; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003757; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3758; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3759; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003760 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003768; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003785;
3786; AVX512-32-LABEL: test_v4f64_une_s:
3787; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003788; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003793; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003794; AVX512-32-NEXT: movl %ebp, %esp
3795; AVX512-32-NEXT: popl %ebp
3796; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003797;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003802; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003803;
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
Craig Topperaf150822020-02-12 20:39:30 -08003810; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3811; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003812; AVX512F-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %ymm2
3813; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003814; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003822; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3823; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003824; AVX512F-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %ymm2
3825; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003826; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3827; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3828; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003829 %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 {
Craig Topper05a4cf22020-01-03 17:18:07 -08003837; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003854;
3855; AVX512-32-LABEL: test_v4f64_uno_s:
3856; AVX512-32: # %bb.0:
Craig Topper05a4cf22020-01-03 17:18:07 -08003857; 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
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003862; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
Craig Topper05a4cf22020-01-03 17:18:07 -08003863; AVX512-32-NEXT: movl %ebp, %esp
3864; AVX512-32-NEXT: popl %ebp
3865; AVX512-32-NEXT: retl
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003866;
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}
Craig Topper05a4cf22020-01-03 17:18:07 -08003871; AVX512-64-NEXT: retq
Craig Topperaf150822020-02-12 20:39:30 -08003872;
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
Craig Topperaf150822020-02-12 20:39:30 -08003879; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3880; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003881; AVX512F-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %ymm2
3882; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003883; 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:
Craig Topperaf150822020-02-12 20:39:30 -08003891; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
3892; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
Craig Topperc2e8a422020-02-13 11:10:57 -08003893; AVX512F-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %ymm2
3894; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1
Craig Topperaf150822020-02-12 20:39:30 -08003895; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
3896; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
3897; AVX512F-64-NEXT: retq
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003898 %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
Craig Topper05a4cf22020-01-03 17:18:07 -08003905attributes #0 = { strictfp nounwind }
Wang, Pengfei21bc8632019-12-04 08:39:21 +08003906
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)