1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s
7 declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half>, <1 x half>, metadata, metadata)
8 define <1 x i1> @fcmp_oeq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
9 ; CHECK-LABEL: fcmp_oeq_vv_v1f16:
11 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
12 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
14 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
18 define <1 x i1> @fcmp_oeq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
19 ; CHECK-LABEL: fcmp_oeq_vf_v1f16:
21 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
22 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
24 %head = insertelement <1 x half> poison, half %b, i32 0
25 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
26 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
30 define <1 x i1> @fcmp_oeq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
31 ; CHECK-LABEL: fcmp_oeq_fv_v1f16:
33 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
34 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
36 %head = insertelement <1 x half> poison, half %b, i32 0
37 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
38 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
42 define <1 x i1> @fcmp_ogt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
43 ; CHECK-LABEL: fcmp_ogt_vv_v1f16:
45 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
46 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
47 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
48 ; CHECK-NEXT: vmand.mm v0, v11, v10
49 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
51 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
55 define <1 x i1> @fcmp_ogt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
56 ; CHECK-LABEL: fcmp_ogt_vf_v1f16:
58 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
59 ; CHECK-NEXT: vfmv.s.f v9, fa0
60 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
61 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
62 ; CHECK-NEXT: vmand.mm v0, v9, v10
63 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
65 %head = insertelement <1 x half> poison, half %b, i32 0
66 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
67 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
71 define <1 x i1> @fcmp_ogt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
72 ; CHECK-LABEL: fcmp_ogt_fv_v1f16:
74 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
75 ; CHECK-NEXT: vfmv.s.f v9, fa0
76 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
77 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
78 ; CHECK-NEXT: vmand.mm v0, v10, v9
79 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
81 %head = insertelement <1 x half> poison, half %b, i32 0
82 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
83 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
87 define <1 x i1> @fcmp_oge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
88 ; CHECK-LABEL: fcmp_oge_vv_v1f16:
90 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
91 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
92 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
93 ; CHECK-NEXT: vmand.mm v0, v11, v10
94 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
96 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
100 define <1 x i1> @fcmp_oge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
101 ; CHECK-LABEL: fcmp_oge_vf_v1f16:
103 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
104 ; CHECK-NEXT: vfmv.s.f v9, fa0
105 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
106 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
107 ; CHECK-NEXT: vmand.mm v0, v9, v10
108 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
110 %head = insertelement <1 x half> poison, half %b, i32 0
111 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
112 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
116 define <1 x i1> @fcmp_oge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
117 ; CHECK-LABEL: fcmp_oge_fv_v1f16:
119 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
120 ; CHECK-NEXT: vfmv.s.f v9, fa0
121 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
122 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
123 ; CHECK-NEXT: vmand.mm v0, v10, v9
124 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
126 %head = insertelement <1 x half> poison, half %b, i32 0
127 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
128 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
132 define <1 x i1> @fcmp_olt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
133 ; CHECK-LABEL: fcmp_olt_vv_v1f16:
135 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
136 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
137 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
138 ; CHECK-NEXT: vmand.mm v0, v11, v10
139 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
141 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
145 define <1 x i1> @fcmp_olt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
146 ; CHECK-LABEL: fcmp_olt_vf_v1f16:
148 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
149 ; CHECK-NEXT: vfmv.s.f v9, fa0
150 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
151 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
152 ; CHECK-NEXT: vmand.mm v0, v10, v9
153 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
155 %head = insertelement <1 x half> poison, half %b, i32 0
156 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
157 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
161 define <1 x i1> @fcmp_olt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
162 ; CHECK-LABEL: fcmp_olt_fv_v1f16:
164 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
165 ; CHECK-NEXT: vfmv.s.f v9, fa0
166 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
167 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
168 ; CHECK-NEXT: vmand.mm v0, v9, v10
169 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
171 %head = insertelement <1 x half> poison, half %b, i32 0
172 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
173 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
177 define <1 x i1> @fcmp_ole_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
178 ; CHECK-LABEL: fcmp_ole_vv_v1f16:
180 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
181 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
182 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
183 ; CHECK-NEXT: vmand.mm v0, v11, v10
184 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
186 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
190 define <1 x i1> @fcmp_ole_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
191 ; CHECK-LABEL: fcmp_ole_vf_v1f16:
193 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
194 ; CHECK-NEXT: vfmv.s.f v9, fa0
195 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
196 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
197 ; CHECK-NEXT: vmand.mm v0, v10, v9
198 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
200 %head = insertelement <1 x half> poison, half %b, i32 0
201 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
202 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
206 define <1 x i1> @fcmp_ole_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
207 ; CHECK-LABEL: fcmp_ole_fv_v1f16:
209 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
210 ; CHECK-NEXT: vfmv.s.f v9, fa0
211 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
212 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
213 ; CHECK-NEXT: vmand.mm v0, v9, v10
214 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
216 %head = insertelement <1 x half> poison, half %b, i32 0
217 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
218 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
222 define <1 x i1> @fcmp_one_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
223 ; CHECK-LABEL: fcmp_one_vv_v1f16:
225 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
226 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
227 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
228 ; CHECK-NEXT: vmand.mm v0, v11, v10
229 ; CHECK-NEXT: vmv1r.v v10, v0
230 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
231 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
232 ; CHECK-NEXT: vmor.mm v0, v0, v10
234 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
238 define <1 x i1> @fcmp_one_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
239 ; CHECK-LABEL: fcmp_one_vf_v1f16:
241 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
242 ; CHECK-NEXT: vfmv.s.f v9, fa0
243 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
244 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
245 ; CHECK-NEXT: vmand.mm v0, v10, v9
246 ; CHECK-NEXT: vmv1r.v v9, v0
247 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
248 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
249 ; CHECK-NEXT: vmor.mm v0, v0, v9
251 %head = insertelement <1 x half> poison, half %b, i32 0
252 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
253 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
257 define <1 x i1> @fcmp_one_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
258 ; CHECK-LABEL: fcmp_one_fv_v1f16:
260 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
261 ; CHECK-NEXT: vfmv.s.f v9, fa0
262 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
263 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
264 ; CHECK-NEXT: vmand.mm v0, v9, v10
265 ; CHECK-NEXT: vmv1r.v v9, v0
266 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
267 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
268 ; CHECK-NEXT: vmor.mm v0, v0, v9
270 %head = insertelement <1 x half> poison, half %b, i32 0
271 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
272 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
276 define <1 x i1> @fcmp_ord_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
277 ; CHECK-LABEL: fcmp_ord_vv_v1f16:
279 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
280 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
281 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
282 ; CHECK-NEXT: vmand.mm v0, v8, v9
284 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
288 define <1 x i1> @fcmp_ord_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
289 ; CHECK-LABEL: fcmp_ord_vf_v1f16:
291 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
292 ; CHECK-NEXT: vfmv.s.f v9, fa0
293 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
294 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
295 ; CHECK-NEXT: vmand.mm v0, v8, v9
297 %head = insertelement <1 x half> poison, half %b, i32 0
298 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
299 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
303 define <1 x i1> @fcmp_ord_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
304 ; CHECK-LABEL: fcmp_ord_fv_v1f16:
306 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
307 ; CHECK-NEXT: vfmv.s.f v9, fa0
308 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
309 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
310 ; CHECK-NEXT: vmand.mm v0, v9, v8
312 %head = insertelement <1 x half> poison, half %b, i32 0
313 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
314 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
318 define <1 x i1> @fcmp_ueq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
319 ; CHECK-LABEL: fcmp_ueq_vv_v1f16:
321 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
322 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
323 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
324 ; CHECK-NEXT: vmand.mm v0, v11, v10
325 ; CHECK-NEXT: vmv1r.v v10, v0
326 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
327 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
328 ; CHECK-NEXT: vmnor.mm v0, v0, v10
330 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
334 define <1 x i1> @fcmp_ueq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
335 ; CHECK-LABEL: fcmp_ueq_vf_v1f16:
337 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
338 ; CHECK-NEXT: vfmv.s.f v9, fa0
339 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
340 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
341 ; CHECK-NEXT: vmand.mm v0, v10, v9
342 ; CHECK-NEXT: vmv1r.v v9, v0
343 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
344 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
345 ; CHECK-NEXT: vmnor.mm v0, v0, v9
347 %head = insertelement <1 x half> poison, half %b, i32 0
348 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
349 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
353 define <1 x i1> @fcmp_ueq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
354 ; CHECK-LABEL: fcmp_ueq_fv_v1f16:
356 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
357 ; CHECK-NEXT: vfmv.s.f v9, fa0
358 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
359 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
360 ; CHECK-NEXT: vmand.mm v0, v9, v10
361 ; CHECK-NEXT: vmv1r.v v9, v0
362 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
363 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
364 ; CHECK-NEXT: vmnor.mm v0, v0, v9
366 %head = insertelement <1 x half> poison, half %b, i32 0
367 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
368 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
372 define <1 x i1> @fcmp_ugt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
373 ; CHECK-LABEL: fcmp_ugt_vv_v1f16:
375 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
376 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
377 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
378 ; CHECK-NEXT: vmand.mm v0, v11, v10
379 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
380 ; CHECK-NEXT: vmnot.m v0, v0
382 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
386 define <1 x i1> @fcmp_ugt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
387 ; CHECK-LABEL: fcmp_ugt_vf_v1f16:
389 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
390 ; CHECK-NEXT: vfmv.s.f v9, fa0
391 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
392 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
393 ; CHECK-NEXT: vmand.mm v0, v10, v9
394 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
395 ; CHECK-NEXT: vmnot.m v0, v0
397 %head = insertelement <1 x half> poison, half %b, i32 0
398 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
399 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
403 define <1 x i1> @fcmp_ugt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
404 ; CHECK-LABEL: fcmp_ugt_fv_v1f16:
406 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
407 ; CHECK-NEXT: vfmv.s.f v9, fa0
408 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
409 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
410 ; CHECK-NEXT: vmand.mm v0, v9, v10
411 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
412 ; CHECK-NEXT: vmnot.m v0, v0
414 %head = insertelement <1 x half> poison, half %b, i32 0
415 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
416 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
420 define <1 x i1> @fcmp_uge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
421 ; CHECK-LABEL: fcmp_uge_vv_v1f16:
423 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
424 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
425 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
426 ; CHECK-NEXT: vmand.mm v0, v11, v10
427 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
428 ; CHECK-NEXT: vmnot.m v0, v0
430 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
434 define <1 x i1> @fcmp_uge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
435 ; CHECK-LABEL: fcmp_uge_vf_v1f16:
437 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
438 ; CHECK-NEXT: vfmv.s.f v9, fa0
439 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
440 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
441 ; CHECK-NEXT: vmand.mm v0, v10, v9
442 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
443 ; CHECK-NEXT: vmnot.m v0, v0
445 %head = insertelement <1 x half> poison, half %b, i32 0
446 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
447 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
451 define <1 x i1> @fcmp_uge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
452 ; CHECK-LABEL: fcmp_uge_fv_v1f16:
454 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
455 ; CHECK-NEXT: vfmv.s.f v9, fa0
456 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
457 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
458 ; CHECK-NEXT: vmand.mm v0, v9, v10
459 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
460 ; CHECK-NEXT: vmnot.m v0, v0
462 %head = insertelement <1 x half> poison, half %b, i32 0
463 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
464 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
468 define <1 x i1> @fcmp_ult_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
469 ; CHECK-LABEL: fcmp_ult_vv_v1f16:
471 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
472 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
473 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
474 ; CHECK-NEXT: vmand.mm v0, v11, v10
475 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
476 ; CHECK-NEXT: vmnot.m v0, v0
478 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
482 define <1 x i1> @fcmp_ult_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
483 ; CHECK-LABEL: fcmp_ult_vf_v1f16:
485 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
486 ; CHECK-NEXT: vfmv.s.f v9, fa0
487 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
488 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
489 ; CHECK-NEXT: vmand.mm v0, v9, v10
490 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
491 ; CHECK-NEXT: vmnot.m v0, v0
493 %head = insertelement <1 x half> poison, half %b, i32 0
494 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
495 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
499 define <1 x i1> @fcmp_ult_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
500 ; CHECK-LABEL: fcmp_ult_fv_v1f16:
502 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
503 ; CHECK-NEXT: vfmv.s.f v9, fa0
504 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
505 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
506 ; CHECK-NEXT: vmand.mm v0, v10, v9
507 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
508 ; CHECK-NEXT: vmnot.m v0, v0
510 %head = insertelement <1 x half> poison, half %b, i32 0
511 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
512 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
516 define <1 x i1> @fcmp_ule_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
517 ; CHECK-LABEL: fcmp_ule_vv_v1f16:
519 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
520 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
521 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
522 ; CHECK-NEXT: vmand.mm v0, v11, v10
523 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
524 ; CHECK-NEXT: vmnot.m v0, v0
526 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
530 define <1 x i1> @fcmp_ule_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
531 ; CHECK-LABEL: fcmp_ule_vf_v1f16:
533 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
534 ; CHECK-NEXT: vfmv.s.f v9, fa0
535 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
536 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
537 ; CHECK-NEXT: vmand.mm v0, v9, v10
538 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
539 ; CHECK-NEXT: vmnot.m v0, v0
541 %head = insertelement <1 x half> poison, half %b, i32 0
542 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
543 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
547 define <1 x i1> @fcmp_ule_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
548 ; CHECK-LABEL: fcmp_ule_fv_v1f16:
550 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu
551 ; CHECK-NEXT: vfmv.s.f v9, fa0
552 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
553 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
554 ; CHECK-NEXT: vmand.mm v0, v10, v9
555 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
556 ; CHECK-NEXT: vmnot.m v0, v0
558 %head = insertelement <1 x half> poison, half %b, i32 0
559 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
560 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
564 define <1 x i1> @fcmp_une_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
565 ; CHECK-LABEL: fcmp_une_vv_v1f16:
567 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
568 ; CHECK-NEXT: vmfne.vv v0, v8, v9
570 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
574 define <1 x i1> @fcmp_une_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
575 ; CHECK-LABEL: fcmp_une_vf_v1f16:
577 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
578 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
580 %head = insertelement <1 x half> poison, half %b, i32 0
581 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
582 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
586 define <1 x i1> @fcmp_une_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
587 ; CHECK-LABEL: fcmp_une_fv_v1f16:
589 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
590 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
592 %head = insertelement <1 x half> poison, half %b, i32 0
593 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
594 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
598 define <1 x i1> @fcmp_uno_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
599 ; CHECK-LABEL: fcmp_uno_vv_v1f16:
601 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
602 ; CHECK-NEXT: vmfne.vv v9, v9, v9
603 ; CHECK-NEXT: vmfne.vv v8, v8, v8
604 ; CHECK-NEXT: vmor.mm v0, v8, v9
606 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
610 define <1 x i1> @fcmp_uno_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
611 ; CHECK-LABEL: fcmp_uno_vf_v1f16:
613 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
614 ; CHECK-NEXT: vfmv.s.f v9, fa0
615 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
616 ; CHECK-NEXT: vmfne.vv v8, v8, v8
617 ; CHECK-NEXT: vmor.mm v0, v8, v9
619 %head = insertelement <1 x half> poison, half %b, i32 0
620 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
621 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
625 define <1 x i1> @fcmp_uno_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
626 ; CHECK-LABEL: fcmp_uno_fv_v1f16:
628 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
629 ; CHECK-NEXT: vfmv.s.f v9, fa0
630 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
631 ; CHECK-NEXT: vmfne.vv v8, v8, v8
632 ; CHECK-NEXT: vmor.mm v0, v9, v8
634 %head = insertelement <1 x half> poison, half %b, i32 0
635 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
636 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
640 declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half>, <2 x half>, metadata, metadata)
641 define <2 x i1> @fcmp_oeq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
642 ; CHECK-LABEL: fcmp_oeq_vv_v2f16:
644 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
645 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
647 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
651 define <2 x i1> @fcmp_oeq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
652 ; CHECK-LABEL: fcmp_oeq_vf_v2f16:
654 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
655 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
657 %head = insertelement <2 x half> poison, half %b, i32 0
658 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
659 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
663 define <2 x i1> @fcmp_oeq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
664 ; CHECK-LABEL: fcmp_oeq_fv_v2f16:
666 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
667 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
669 %head = insertelement <2 x half> poison, half %b, i32 0
670 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
671 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
675 define <2 x i1> @fcmp_ogt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
676 ; CHECK-LABEL: fcmp_ogt_vv_v2f16:
678 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
679 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
680 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
681 ; CHECK-NEXT: vmand.mm v0, v11, v10
682 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
684 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
688 define <2 x i1> @fcmp_ogt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
689 ; CHECK-LABEL: fcmp_ogt_vf_v2f16:
691 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
692 ; CHECK-NEXT: vfmv.v.f v9, fa0
693 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
694 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
695 ; CHECK-NEXT: vmand.mm v0, v9, v10
696 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
698 %head = insertelement <2 x half> poison, half %b, i32 0
699 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
700 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
704 define <2 x i1> @fcmp_ogt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
705 ; CHECK-LABEL: fcmp_ogt_fv_v2f16:
707 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
708 ; CHECK-NEXT: vfmv.v.f v9, fa0
709 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
710 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
711 ; CHECK-NEXT: vmand.mm v0, v10, v9
712 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
714 %head = insertelement <2 x half> poison, half %b, i32 0
715 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
716 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
720 define <2 x i1> @fcmp_oge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
721 ; CHECK-LABEL: fcmp_oge_vv_v2f16:
723 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
724 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
725 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
726 ; CHECK-NEXT: vmand.mm v0, v11, v10
727 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
729 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
733 define <2 x i1> @fcmp_oge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
734 ; CHECK-LABEL: fcmp_oge_vf_v2f16:
736 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
737 ; CHECK-NEXT: vfmv.v.f v9, fa0
738 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
739 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
740 ; CHECK-NEXT: vmand.mm v0, v9, v10
741 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
743 %head = insertelement <2 x half> poison, half %b, i32 0
744 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
745 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
749 define <2 x i1> @fcmp_oge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
750 ; CHECK-LABEL: fcmp_oge_fv_v2f16:
752 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
753 ; CHECK-NEXT: vfmv.v.f v9, fa0
754 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
755 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
756 ; CHECK-NEXT: vmand.mm v0, v10, v9
757 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
759 %head = insertelement <2 x half> poison, half %b, i32 0
760 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
761 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
765 define <2 x i1> @fcmp_olt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
766 ; CHECK-LABEL: fcmp_olt_vv_v2f16:
768 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
769 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
770 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
771 ; CHECK-NEXT: vmand.mm v0, v11, v10
772 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
774 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
778 define <2 x i1> @fcmp_olt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
779 ; CHECK-LABEL: fcmp_olt_vf_v2f16:
781 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
782 ; CHECK-NEXT: vfmv.v.f v9, fa0
783 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
784 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
785 ; CHECK-NEXT: vmand.mm v0, v10, v9
786 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
788 %head = insertelement <2 x half> poison, half %b, i32 0
789 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
790 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
794 define <2 x i1> @fcmp_olt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
795 ; CHECK-LABEL: fcmp_olt_fv_v2f16:
797 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
798 ; CHECK-NEXT: vfmv.v.f v9, fa0
799 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
800 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
801 ; CHECK-NEXT: vmand.mm v0, v9, v10
802 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
804 %head = insertelement <2 x half> poison, half %b, i32 0
805 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
806 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
810 define <2 x i1> @fcmp_ole_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
811 ; CHECK-LABEL: fcmp_ole_vv_v2f16:
813 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
814 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
815 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
816 ; CHECK-NEXT: vmand.mm v0, v11, v10
817 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
819 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
823 define <2 x i1> @fcmp_ole_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
824 ; CHECK-LABEL: fcmp_ole_vf_v2f16:
826 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
827 ; CHECK-NEXT: vfmv.v.f v9, fa0
828 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
829 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
830 ; CHECK-NEXT: vmand.mm v0, v10, v9
831 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
833 %head = insertelement <2 x half> poison, half %b, i32 0
834 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
835 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
839 define <2 x i1> @fcmp_ole_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
840 ; CHECK-LABEL: fcmp_ole_fv_v2f16:
842 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
843 ; CHECK-NEXT: vfmv.v.f v9, fa0
844 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
845 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
846 ; CHECK-NEXT: vmand.mm v0, v9, v10
847 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
849 %head = insertelement <2 x half> poison, half %b, i32 0
850 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
851 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
855 define <2 x i1> @fcmp_one_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
856 ; CHECK-LABEL: fcmp_one_vv_v2f16:
858 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
859 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
860 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
861 ; CHECK-NEXT: vmand.mm v0, v11, v10
862 ; CHECK-NEXT: vmv1r.v v10, v0
863 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
864 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
865 ; CHECK-NEXT: vmor.mm v0, v0, v10
867 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
871 define <2 x i1> @fcmp_one_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
872 ; CHECK-LABEL: fcmp_one_vf_v2f16:
874 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
875 ; CHECK-NEXT: vfmv.v.f v9, fa0
876 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
877 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
878 ; CHECK-NEXT: vmand.mm v0, v10, v9
879 ; CHECK-NEXT: vmv1r.v v9, v0
880 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
881 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
882 ; CHECK-NEXT: vmor.mm v0, v0, v9
884 %head = insertelement <2 x half> poison, half %b, i32 0
885 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
886 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
890 define <2 x i1> @fcmp_one_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
891 ; CHECK-LABEL: fcmp_one_fv_v2f16:
893 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
894 ; CHECK-NEXT: vfmv.v.f v9, fa0
895 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
896 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
897 ; CHECK-NEXT: vmand.mm v0, v9, v10
898 ; CHECK-NEXT: vmv1r.v v9, v0
899 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
900 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
901 ; CHECK-NEXT: vmor.mm v0, v0, v9
903 %head = insertelement <2 x half> poison, half %b, i32 0
904 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
905 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
909 define <2 x i1> @fcmp_ord_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
910 ; CHECK-LABEL: fcmp_ord_vv_v2f16:
912 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
913 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
914 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
915 ; CHECK-NEXT: vmand.mm v0, v8, v9
917 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
921 define <2 x i1> @fcmp_ord_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
922 ; CHECK-LABEL: fcmp_ord_vf_v2f16:
924 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
925 ; CHECK-NEXT: vfmv.v.f v9, fa0
926 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
927 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
928 ; CHECK-NEXT: vmand.mm v0, v8, v9
930 %head = insertelement <2 x half> poison, half %b, i32 0
931 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
932 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
936 define <2 x i1> @fcmp_ord_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
937 ; CHECK-LABEL: fcmp_ord_fv_v2f16:
939 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
940 ; CHECK-NEXT: vfmv.v.f v9, fa0
941 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
942 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
943 ; CHECK-NEXT: vmand.mm v0, v9, v8
945 %head = insertelement <2 x half> poison, half %b, i32 0
946 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
947 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
951 define <2 x i1> @fcmp_ueq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
952 ; CHECK-LABEL: fcmp_ueq_vv_v2f16:
954 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
955 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
956 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
957 ; CHECK-NEXT: vmand.mm v0, v11, v10
958 ; CHECK-NEXT: vmv1r.v v10, v0
959 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
960 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
961 ; CHECK-NEXT: vmnor.mm v0, v0, v10
963 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
967 define <2 x i1> @fcmp_ueq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
968 ; CHECK-LABEL: fcmp_ueq_vf_v2f16:
970 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
971 ; CHECK-NEXT: vfmv.v.f v9, fa0
972 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
973 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
974 ; CHECK-NEXT: vmand.mm v0, v10, v9
975 ; CHECK-NEXT: vmv1r.v v9, v0
976 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
977 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
978 ; CHECK-NEXT: vmnor.mm v0, v0, v9
980 %head = insertelement <2 x half> poison, half %b, i32 0
981 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
982 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
986 define <2 x i1> @fcmp_ueq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
987 ; CHECK-LABEL: fcmp_ueq_fv_v2f16:
989 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
990 ; CHECK-NEXT: vfmv.v.f v9, fa0
991 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
992 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
993 ; CHECK-NEXT: vmand.mm v0, v9, v10
994 ; CHECK-NEXT: vmv1r.v v9, v0
995 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
996 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
997 ; CHECK-NEXT: vmnor.mm v0, v0, v9
999 %head = insertelement <2 x half> poison, half %b, i32 0
1000 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1001 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1005 define <2 x i1> @fcmp_ugt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1006 ; CHECK-LABEL: fcmp_ugt_vv_v2f16:
1008 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1009 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1010 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1011 ; CHECK-NEXT: vmand.mm v0, v11, v10
1012 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
1013 ; CHECK-NEXT: vmnot.m v0, v0
1015 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1019 define <2 x i1> @fcmp_ugt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1020 ; CHECK-LABEL: fcmp_ugt_vf_v2f16:
1022 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1023 ; CHECK-NEXT: vfmv.v.f v9, fa0
1024 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1025 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1026 ; CHECK-NEXT: vmand.mm v0, v10, v9
1027 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1028 ; CHECK-NEXT: vmnot.m v0, v0
1030 %head = insertelement <2 x half> poison, half %b, i32 0
1031 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1032 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1036 define <2 x i1> @fcmp_ugt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1037 ; CHECK-LABEL: fcmp_ugt_fv_v2f16:
1039 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1040 ; CHECK-NEXT: vfmv.v.f v9, fa0
1041 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1042 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1043 ; CHECK-NEXT: vmand.mm v0, v9, v10
1044 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1045 ; CHECK-NEXT: vmnot.m v0, v0
1047 %head = insertelement <2 x half> poison, half %b, i32 0
1048 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1049 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1053 define <2 x i1> @fcmp_uge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1054 ; CHECK-LABEL: fcmp_uge_vv_v2f16:
1056 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1057 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1058 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1059 ; CHECK-NEXT: vmand.mm v0, v11, v10
1060 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
1061 ; CHECK-NEXT: vmnot.m v0, v0
1063 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1067 define <2 x i1> @fcmp_uge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1068 ; CHECK-LABEL: fcmp_uge_vf_v2f16:
1070 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1071 ; CHECK-NEXT: vfmv.v.f v9, fa0
1072 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1073 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1074 ; CHECK-NEXT: vmand.mm v0, v10, v9
1075 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1076 ; CHECK-NEXT: vmnot.m v0, v0
1078 %head = insertelement <2 x half> poison, half %b, i32 0
1079 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1080 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1084 define <2 x i1> @fcmp_uge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1085 ; CHECK-LABEL: fcmp_uge_fv_v2f16:
1087 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1088 ; CHECK-NEXT: vfmv.v.f v9, fa0
1089 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1090 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1091 ; CHECK-NEXT: vmand.mm v0, v9, v10
1092 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1093 ; CHECK-NEXT: vmnot.m v0, v0
1095 %head = insertelement <2 x half> poison, half %b, i32 0
1096 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1097 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1101 define <2 x i1> @fcmp_ult_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1102 ; CHECK-LABEL: fcmp_ult_vv_v2f16:
1104 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1105 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1106 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1107 ; CHECK-NEXT: vmand.mm v0, v11, v10
1108 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
1109 ; CHECK-NEXT: vmnot.m v0, v0
1111 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1115 define <2 x i1> @fcmp_ult_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1116 ; CHECK-LABEL: fcmp_ult_vf_v2f16:
1118 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1119 ; CHECK-NEXT: vfmv.v.f v9, fa0
1120 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1121 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1122 ; CHECK-NEXT: vmand.mm v0, v9, v10
1123 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1124 ; CHECK-NEXT: vmnot.m v0, v0
1126 %head = insertelement <2 x half> poison, half %b, i32 0
1127 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1128 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1132 define <2 x i1> @fcmp_ult_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1133 ; CHECK-LABEL: fcmp_ult_fv_v2f16:
1135 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1136 ; CHECK-NEXT: vfmv.v.f v9, fa0
1137 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1138 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1139 ; CHECK-NEXT: vmand.mm v0, v10, v9
1140 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1141 ; CHECK-NEXT: vmnot.m v0, v0
1143 %head = insertelement <2 x half> poison, half %b, i32 0
1144 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1145 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1149 define <2 x i1> @fcmp_ule_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1150 ; CHECK-LABEL: fcmp_ule_vv_v2f16:
1152 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1153 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1154 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1155 ; CHECK-NEXT: vmand.mm v0, v11, v10
1156 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1157 ; CHECK-NEXT: vmnot.m v0, v0
1159 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1163 define <2 x i1> @fcmp_ule_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1164 ; CHECK-LABEL: fcmp_ule_vf_v2f16:
1166 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1167 ; CHECK-NEXT: vfmv.v.f v9, fa0
1168 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1169 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1170 ; CHECK-NEXT: vmand.mm v0, v9, v10
1171 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1172 ; CHECK-NEXT: vmnot.m v0, v0
1174 %head = insertelement <2 x half> poison, half %b, i32 0
1175 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1176 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1180 define <2 x i1> @fcmp_ule_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1181 ; CHECK-LABEL: fcmp_ule_fv_v2f16:
1183 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu
1184 ; CHECK-NEXT: vfmv.v.f v9, fa0
1185 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1186 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1187 ; CHECK-NEXT: vmand.mm v0, v10, v9
1188 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1189 ; CHECK-NEXT: vmnot.m v0, v0
1191 %head = insertelement <2 x half> poison, half %b, i32 0
1192 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1193 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1197 define <2 x i1> @fcmp_une_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1198 ; CHECK-LABEL: fcmp_une_vv_v2f16:
1200 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1201 ; CHECK-NEXT: vmfne.vv v0, v8, v9
1203 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1207 define <2 x i1> @fcmp_une_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1208 ; CHECK-LABEL: fcmp_une_vf_v2f16:
1210 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1211 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
1213 %head = insertelement <2 x half> poison, half %b, i32 0
1214 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1215 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1219 define <2 x i1> @fcmp_une_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1220 ; CHECK-LABEL: fcmp_une_fv_v2f16:
1222 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1223 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
1225 %head = insertelement <2 x half> poison, half %b, i32 0
1226 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1227 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1231 define <2 x i1> @fcmp_uno_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1232 ; CHECK-LABEL: fcmp_uno_vv_v2f16:
1234 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1235 ; CHECK-NEXT: vmfne.vv v9, v9, v9
1236 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1237 ; CHECK-NEXT: vmor.mm v0, v8, v9
1239 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1243 define <2 x i1> @fcmp_uno_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1244 ; CHECK-LABEL: fcmp_uno_vf_v2f16:
1246 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1247 ; CHECK-NEXT: vfmv.v.f v9, fa0
1248 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
1249 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1250 ; CHECK-NEXT: vmor.mm v0, v8, v9
1252 %head = insertelement <2 x half> poison, half %b, i32 0
1253 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1254 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1258 define <2 x i1> @fcmp_uno_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1259 ; CHECK-LABEL: fcmp_uno_fv_v2f16:
1261 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1262 ; CHECK-NEXT: vfmv.v.f v9, fa0
1263 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
1264 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1265 ; CHECK-NEXT: vmor.mm v0, v9, v8
1267 %head = insertelement <2 x half> poison, half %b, i32 0
1268 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1269 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1273 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half>, <4 x half>, metadata, metadata)
1274 define <4 x i1> @fcmp_oeq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1275 ; CHECK-LABEL: fcmp_oeq_vv_v4f16:
1277 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1278 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
1280 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1284 define <4 x i1> @fcmp_oeq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1285 ; CHECK-LABEL: fcmp_oeq_vf_v4f16:
1287 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1288 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1290 %head = insertelement <4 x half> poison, half %b, i32 0
1291 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1292 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1296 define <4 x i1> @fcmp_oeq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1297 ; CHECK-LABEL: fcmp_oeq_fv_v4f16:
1299 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1300 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1302 %head = insertelement <4 x half> poison, half %b, i32 0
1303 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1304 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1308 define <4 x i1> @fcmp_ogt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1309 ; CHECK-LABEL: fcmp_ogt_vv_v4f16:
1311 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1312 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1313 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1314 ; CHECK-NEXT: vmand.mm v0, v11, v10
1315 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1317 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1321 define <4 x i1> @fcmp_ogt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1322 ; CHECK-LABEL: fcmp_ogt_vf_v4f16:
1324 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1325 ; CHECK-NEXT: vfmv.v.f v9, fa0
1326 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1327 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1328 ; CHECK-NEXT: vmand.mm v0, v9, v10
1329 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1331 %head = insertelement <4 x half> poison, half %b, i32 0
1332 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1333 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1337 define <4 x i1> @fcmp_ogt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1338 ; CHECK-LABEL: fcmp_ogt_fv_v4f16:
1340 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1341 ; CHECK-NEXT: vfmv.v.f v9, fa0
1342 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1343 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1344 ; CHECK-NEXT: vmand.mm v0, v10, v9
1345 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1347 %head = insertelement <4 x half> poison, half %b, i32 0
1348 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1349 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1353 define <4 x i1> @fcmp_oge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1354 ; CHECK-LABEL: fcmp_oge_vv_v4f16:
1356 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1357 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1358 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1359 ; CHECK-NEXT: vmand.mm v0, v11, v10
1360 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
1362 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
1366 define <4 x i1> @fcmp_oge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1367 ; CHECK-LABEL: fcmp_oge_vf_v4f16:
1369 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1370 ; CHECK-NEXT: vfmv.v.f v9, fa0
1371 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1372 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1373 ; CHECK-NEXT: vmand.mm v0, v9, v10
1374 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1376 %head = insertelement <4 x half> poison, half %b, i32 0
1377 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1378 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
1382 define <4 x i1> @fcmp_oge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1383 ; CHECK-LABEL: fcmp_oge_fv_v4f16:
1385 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1386 ; CHECK-NEXT: vfmv.v.f v9, fa0
1387 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1388 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1389 ; CHECK-NEXT: vmand.mm v0, v10, v9
1390 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1392 %head = insertelement <4 x half> poison, half %b, i32 0
1393 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1394 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
1398 define <4 x i1> @fcmp_olt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1399 ; CHECK-LABEL: fcmp_olt_vv_v4f16:
1401 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1402 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1403 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1404 ; CHECK-NEXT: vmand.mm v0, v11, v10
1405 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
1407 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
1411 define <4 x i1> @fcmp_olt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1412 ; CHECK-LABEL: fcmp_olt_vf_v4f16:
1414 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1415 ; CHECK-NEXT: vfmv.v.f v9, fa0
1416 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1417 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1418 ; CHECK-NEXT: vmand.mm v0, v10, v9
1419 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1421 %head = insertelement <4 x half> poison, half %b, i32 0
1422 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1423 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
1427 define <4 x i1> @fcmp_olt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1428 ; CHECK-LABEL: fcmp_olt_fv_v4f16:
1430 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1431 ; CHECK-NEXT: vfmv.v.f v9, fa0
1432 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1433 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1434 ; CHECK-NEXT: vmand.mm v0, v9, v10
1435 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1437 %head = insertelement <4 x half> poison, half %b, i32 0
1438 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1439 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
1443 define <4 x i1> @fcmp_ole_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1444 ; CHECK-LABEL: fcmp_ole_vv_v4f16:
1446 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1447 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1448 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1449 ; CHECK-NEXT: vmand.mm v0, v11, v10
1450 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
1452 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
1456 define <4 x i1> @fcmp_ole_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1457 ; CHECK-LABEL: fcmp_ole_vf_v4f16:
1459 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1460 ; CHECK-NEXT: vfmv.v.f v9, fa0
1461 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1462 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1463 ; CHECK-NEXT: vmand.mm v0, v10, v9
1464 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1466 %head = insertelement <4 x half> poison, half %b, i32 0
1467 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1468 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
1472 define <4 x i1> @fcmp_ole_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1473 ; CHECK-LABEL: fcmp_ole_fv_v4f16:
1475 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1476 ; CHECK-NEXT: vfmv.v.f v9, fa0
1477 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1478 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1479 ; CHECK-NEXT: vmand.mm v0, v9, v10
1480 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1482 %head = insertelement <4 x half> poison, half %b, i32 0
1483 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1484 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
1488 define <4 x i1> @fcmp_one_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1489 ; CHECK-LABEL: fcmp_one_vv_v4f16:
1491 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1492 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1493 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1494 ; CHECK-NEXT: vmand.mm v0, v11, v10
1495 ; CHECK-NEXT: vmv1r.v v10, v0
1496 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
1497 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1498 ; CHECK-NEXT: vmor.mm v0, v0, v10
1500 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
1504 define <4 x i1> @fcmp_one_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1505 ; CHECK-LABEL: fcmp_one_vf_v4f16:
1507 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1508 ; CHECK-NEXT: vfmv.v.f v9, fa0
1509 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1510 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1511 ; CHECK-NEXT: vmand.mm v0, v10, v9
1512 ; CHECK-NEXT: vmv1r.v v9, v0
1513 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
1514 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1515 ; CHECK-NEXT: vmor.mm v0, v0, v9
1517 %head = insertelement <4 x half> poison, half %b, i32 0
1518 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1519 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
1523 define <4 x i1> @fcmp_one_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1524 ; CHECK-LABEL: fcmp_one_fv_v4f16:
1526 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1527 ; CHECK-NEXT: vfmv.v.f v9, fa0
1528 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1529 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1530 ; CHECK-NEXT: vmand.mm v0, v9, v10
1531 ; CHECK-NEXT: vmv1r.v v9, v0
1532 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
1533 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1534 ; CHECK-NEXT: vmor.mm v0, v0, v9
1536 %head = insertelement <4 x half> poison, half %b, i32 0
1537 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1538 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
1542 define <4 x i1> @fcmp_ord_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1543 ; CHECK-LABEL: fcmp_ord_vv_v4f16:
1545 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1546 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
1547 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
1548 ; CHECK-NEXT: vmand.mm v0, v8, v9
1550 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
1554 define <4 x i1> @fcmp_ord_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1555 ; CHECK-LABEL: fcmp_ord_vf_v4f16:
1557 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1558 ; CHECK-NEXT: vfmv.v.f v9, fa0
1559 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1560 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
1561 ; CHECK-NEXT: vmand.mm v0, v8, v9
1563 %head = insertelement <4 x half> poison, half %b, i32 0
1564 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1565 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
1569 define <4 x i1> @fcmp_ord_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1570 ; CHECK-LABEL: fcmp_ord_fv_v4f16:
1572 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1573 ; CHECK-NEXT: vfmv.v.f v9, fa0
1574 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1575 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
1576 ; CHECK-NEXT: vmand.mm v0, v9, v8
1578 %head = insertelement <4 x half> poison, half %b, i32 0
1579 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1580 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
1584 define <4 x i1> @fcmp_ueq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1585 ; CHECK-LABEL: fcmp_ueq_vv_v4f16:
1587 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1588 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1589 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1590 ; CHECK-NEXT: vmand.mm v0, v11, v10
1591 ; CHECK-NEXT: vmv1r.v v10, v0
1592 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
1593 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1594 ; CHECK-NEXT: vmnor.mm v0, v0, v10
1596 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1600 define <4 x i1> @fcmp_ueq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1601 ; CHECK-LABEL: fcmp_ueq_vf_v4f16:
1603 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1604 ; CHECK-NEXT: vfmv.v.f v9, fa0
1605 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1606 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1607 ; CHECK-NEXT: vmand.mm v0, v10, v9
1608 ; CHECK-NEXT: vmv1r.v v9, v0
1609 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
1610 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1611 ; CHECK-NEXT: vmnor.mm v0, v0, v9
1613 %head = insertelement <4 x half> poison, half %b, i32 0
1614 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1615 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1619 define <4 x i1> @fcmp_ueq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1620 ; CHECK-LABEL: fcmp_ueq_fv_v4f16:
1622 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1623 ; CHECK-NEXT: vfmv.v.f v9, fa0
1624 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1625 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1626 ; CHECK-NEXT: vmand.mm v0, v9, v10
1627 ; CHECK-NEXT: vmv1r.v v9, v0
1628 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
1629 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1630 ; CHECK-NEXT: vmnor.mm v0, v0, v9
1632 %head = insertelement <4 x half> poison, half %b, i32 0
1633 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1634 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1638 define <4 x i1> @fcmp_ugt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1639 ; CHECK-LABEL: fcmp_ugt_vv_v4f16:
1641 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1642 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1643 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1644 ; CHECK-NEXT: vmand.mm v0, v11, v10
1645 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
1646 ; CHECK-NEXT: vmnot.m v0, v0
1648 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1652 define <4 x i1> @fcmp_ugt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1653 ; CHECK-LABEL: fcmp_ugt_vf_v4f16:
1655 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1656 ; CHECK-NEXT: vfmv.v.f v9, fa0
1657 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1658 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1659 ; CHECK-NEXT: vmand.mm v0, v10, v9
1660 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1661 ; CHECK-NEXT: vmnot.m v0, v0
1663 %head = insertelement <4 x half> poison, half %b, i32 0
1664 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1665 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1669 define <4 x i1> @fcmp_ugt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1670 ; CHECK-LABEL: fcmp_ugt_fv_v4f16:
1672 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1673 ; CHECK-NEXT: vfmv.v.f v9, fa0
1674 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1675 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1676 ; CHECK-NEXT: vmand.mm v0, v9, v10
1677 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1678 ; CHECK-NEXT: vmnot.m v0, v0
1680 %head = insertelement <4 x half> poison, half %b, i32 0
1681 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1682 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1686 define <4 x i1> @fcmp_uge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1687 ; CHECK-LABEL: fcmp_uge_vv_v4f16:
1689 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1690 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
1691 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
1692 ; CHECK-NEXT: vmand.mm v0, v11, v10
1693 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
1694 ; CHECK-NEXT: vmnot.m v0, v0
1696 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1700 define <4 x i1> @fcmp_uge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1701 ; CHECK-LABEL: fcmp_uge_vf_v4f16:
1703 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1704 ; CHECK-NEXT: vfmv.v.f v9, fa0
1705 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1706 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1707 ; CHECK-NEXT: vmand.mm v0, v10, v9
1708 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1709 ; CHECK-NEXT: vmnot.m v0, v0
1711 %head = insertelement <4 x half> poison, half %b, i32 0
1712 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1713 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1717 define <4 x i1> @fcmp_uge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1718 ; CHECK-LABEL: fcmp_uge_fv_v4f16:
1720 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1721 ; CHECK-NEXT: vfmv.v.f v9, fa0
1722 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1723 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1724 ; CHECK-NEXT: vmand.mm v0, v9, v10
1725 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1726 ; CHECK-NEXT: vmnot.m v0, v0
1728 %head = insertelement <4 x half> poison, half %b, i32 0
1729 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1730 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1734 define <4 x i1> @fcmp_ult_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1735 ; CHECK-LABEL: fcmp_ult_vv_v4f16:
1737 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1738 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1739 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1740 ; CHECK-NEXT: vmand.mm v0, v11, v10
1741 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
1742 ; CHECK-NEXT: vmnot.m v0, v0
1744 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1748 define <4 x i1> @fcmp_ult_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1749 ; CHECK-LABEL: fcmp_ult_vf_v4f16:
1751 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1752 ; CHECK-NEXT: vfmv.v.f v9, fa0
1753 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1754 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1755 ; CHECK-NEXT: vmand.mm v0, v9, v10
1756 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
1757 ; CHECK-NEXT: vmnot.m v0, v0
1759 %head = insertelement <4 x half> poison, half %b, i32 0
1760 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1761 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1765 define <4 x i1> @fcmp_ult_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1766 ; CHECK-LABEL: fcmp_ult_fv_v4f16:
1768 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1769 ; CHECK-NEXT: vfmv.v.f v9, fa0
1770 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1771 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1772 ; CHECK-NEXT: vmand.mm v0, v10, v9
1773 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
1774 ; CHECK-NEXT: vmnot.m v0, v0
1776 %head = insertelement <4 x half> poison, half %b, i32 0
1777 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1778 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1782 define <4 x i1> @fcmp_ule_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1783 ; CHECK-LABEL: fcmp_ule_vv_v4f16:
1785 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1786 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1787 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1788 ; CHECK-NEXT: vmand.mm v0, v11, v10
1789 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1790 ; CHECK-NEXT: vmnot.m v0, v0
1792 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1796 define <4 x i1> @fcmp_ule_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1797 ; CHECK-LABEL: fcmp_ule_vf_v4f16:
1799 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1800 ; CHECK-NEXT: vfmv.v.f v9, fa0
1801 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1802 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1803 ; CHECK-NEXT: vmand.mm v0, v9, v10
1804 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1805 ; CHECK-NEXT: vmnot.m v0, v0
1807 %head = insertelement <4 x half> poison, half %b, i32 0
1808 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1809 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1813 define <4 x i1> @fcmp_ule_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1814 ; CHECK-LABEL: fcmp_ule_fv_v4f16:
1816 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1817 ; CHECK-NEXT: vfmv.v.f v9, fa0
1818 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1819 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1820 ; CHECK-NEXT: vmand.mm v0, v10, v9
1821 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1822 ; CHECK-NEXT: vmnot.m v0, v0
1824 %head = insertelement <4 x half> poison, half %b, i32 0
1825 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1826 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1830 define <4 x i1> @fcmp_une_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1831 ; CHECK-LABEL: fcmp_une_vv_v4f16:
1833 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1834 ; CHECK-NEXT: vmfne.vv v0, v8, v9
1836 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1840 define <4 x i1> @fcmp_une_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1841 ; CHECK-LABEL: fcmp_une_vf_v4f16:
1843 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1844 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
1846 %head = insertelement <4 x half> poison, half %b, i32 0
1847 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1848 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1852 define <4 x i1> @fcmp_une_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1853 ; CHECK-LABEL: fcmp_une_fv_v4f16:
1855 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1856 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
1858 %head = insertelement <4 x half> poison, half %b, i32 0
1859 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1860 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1864 define <4 x i1> @fcmp_uno_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1865 ; CHECK-LABEL: fcmp_uno_vv_v4f16:
1867 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1868 ; CHECK-NEXT: vmfne.vv v9, v9, v9
1869 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1870 ; CHECK-NEXT: vmor.mm v0, v8, v9
1872 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1876 define <4 x i1> @fcmp_uno_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1877 ; CHECK-LABEL: fcmp_uno_vf_v4f16:
1879 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1880 ; CHECK-NEXT: vfmv.v.f v9, fa0
1881 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
1882 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1883 ; CHECK-NEXT: vmor.mm v0, v8, v9
1885 %head = insertelement <4 x half> poison, half %b, i32 0
1886 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1887 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1891 define <4 x i1> @fcmp_uno_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1892 ; CHECK-LABEL: fcmp_uno_fv_v4f16:
1894 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1895 ; CHECK-NEXT: vfmv.v.f v9, fa0
1896 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
1897 ; CHECK-NEXT: vmfne.vv v8, v8, v8
1898 ; CHECK-NEXT: vmor.mm v0, v9, v8
1900 %head = insertelement <4 x half> poison, half %b, i32 0
1901 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1902 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1906 declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half>, <8 x half>, metadata, metadata)
1907 define <8 x i1> @fcmp_oeq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1908 ; CHECK-LABEL: fcmp_oeq_vv_v8f16:
1910 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
1911 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
1913 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1917 define <8 x i1> @fcmp_oeq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1918 ; CHECK-LABEL: fcmp_oeq_vf_v8f16:
1920 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
1921 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1923 %head = insertelement <8 x half> poison, half %b, i32 0
1924 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1925 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1929 define <8 x i1> @fcmp_oeq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1930 ; CHECK-LABEL: fcmp_oeq_fv_v8f16:
1932 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
1933 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1935 %head = insertelement <8 x half> poison, half %b, i32 0
1936 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1937 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1941 define <8 x i1> @fcmp_ogt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1942 ; CHECK-LABEL: fcmp_ogt_vv_v8f16:
1944 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
1945 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1946 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1947 ; CHECK-NEXT: vmand.mm v0, v11, v10
1948 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
1950 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1954 define <8 x i1> @fcmp_ogt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1955 ; CHECK-LABEL: fcmp_ogt_vf_v8f16:
1957 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
1958 ; CHECK-NEXT: vfmv.v.f v9, fa0
1959 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1960 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1961 ; CHECK-NEXT: vmand.mm v0, v9, v10
1962 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
1964 %head = insertelement <8 x half> poison, half %b, i32 0
1965 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1966 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1970 define <8 x i1> @fcmp_ogt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1971 ; CHECK-LABEL: fcmp_ogt_fv_v8f16:
1973 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
1974 ; CHECK-NEXT: vfmv.v.f v9, fa0
1975 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1976 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
1977 ; CHECK-NEXT: vmand.mm v0, v10, v9
1978 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
1980 %head = insertelement <8 x half> poison, half %b, i32 0
1981 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1982 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1986 define <8 x i1> @fcmp_oge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1987 ; CHECK-LABEL: fcmp_oge_vv_v8f16:
1989 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
1990 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
1991 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
1992 ; CHECK-NEXT: vmand.mm v0, v11, v10
1993 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
1995 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
1999 define <8 x i1> @fcmp_oge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2000 ; CHECK-LABEL: fcmp_oge_vf_v8f16:
2002 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2003 ; CHECK-NEXT: vfmv.v.f v9, fa0
2004 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2005 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2006 ; CHECK-NEXT: vmand.mm v0, v9, v10
2007 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
2009 %head = insertelement <8 x half> poison, half %b, i32 0
2010 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2011 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2015 define <8 x i1> @fcmp_oge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2016 ; CHECK-LABEL: fcmp_oge_fv_v8f16:
2018 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2019 ; CHECK-NEXT: vfmv.v.f v9, fa0
2020 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2021 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2022 ; CHECK-NEXT: vmand.mm v0, v10, v9
2023 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
2025 %head = insertelement <8 x half> poison, half %b, i32 0
2026 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2027 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2031 define <8 x i1> @fcmp_olt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2032 ; CHECK-LABEL: fcmp_olt_vv_v8f16:
2034 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2035 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2036 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2037 ; CHECK-NEXT: vmand.mm v0, v11, v10
2038 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
2040 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2044 define <8 x i1> @fcmp_olt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2045 ; CHECK-LABEL: fcmp_olt_vf_v8f16:
2047 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2048 ; CHECK-NEXT: vfmv.v.f v9, fa0
2049 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2050 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2051 ; CHECK-NEXT: vmand.mm v0, v10, v9
2052 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
2054 %head = insertelement <8 x half> poison, half %b, i32 0
2055 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2056 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2060 define <8 x i1> @fcmp_olt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2061 ; CHECK-LABEL: fcmp_olt_fv_v8f16:
2063 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2064 ; CHECK-NEXT: vfmv.v.f v9, fa0
2065 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2066 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2067 ; CHECK-NEXT: vmand.mm v0, v9, v10
2068 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
2070 %head = insertelement <8 x half> poison, half %b, i32 0
2071 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2072 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2076 define <8 x i1> @fcmp_ole_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2077 ; CHECK-LABEL: fcmp_ole_vv_v8f16:
2079 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2080 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2081 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2082 ; CHECK-NEXT: vmand.mm v0, v11, v10
2083 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
2085 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2089 define <8 x i1> @fcmp_ole_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2090 ; CHECK-LABEL: fcmp_ole_vf_v8f16:
2092 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2093 ; CHECK-NEXT: vfmv.v.f v9, fa0
2094 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2095 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2096 ; CHECK-NEXT: vmand.mm v0, v10, v9
2097 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
2099 %head = insertelement <8 x half> poison, half %b, i32 0
2100 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2101 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2105 define <8 x i1> @fcmp_ole_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2106 ; CHECK-LABEL: fcmp_ole_fv_v8f16:
2108 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2109 ; CHECK-NEXT: vfmv.v.f v9, fa0
2110 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2111 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2112 ; CHECK-NEXT: vmand.mm v0, v9, v10
2113 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
2115 %head = insertelement <8 x half> poison, half %b, i32 0
2116 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2117 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2121 define <8 x i1> @fcmp_one_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2122 ; CHECK-LABEL: fcmp_one_vv_v8f16:
2124 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2125 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2126 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2127 ; CHECK-NEXT: vmand.mm v0, v11, v10
2128 ; CHECK-NEXT: vmv.v.v v10, v0
2129 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
2130 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
2131 ; CHECK-NEXT: vmor.mm v0, v0, v10
2133 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2137 define <8 x i1> @fcmp_one_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2138 ; CHECK-LABEL: fcmp_one_vf_v8f16:
2140 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2141 ; CHECK-NEXT: vfmv.v.f v9, fa0
2142 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2143 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2144 ; CHECK-NEXT: vmand.mm v0, v10, v9
2145 ; CHECK-NEXT: vmv.v.v v9, v0
2146 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
2147 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
2148 ; CHECK-NEXT: vmor.mm v0, v0, v9
2150 %head = insertelement <8 x half> poison, half %b, i32 0
2151 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2152 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2156 define <8 x i1> @fcmp_one_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2157 ; CHECK-LABEL: fcmp_one_fv_v8f16:
2159 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2160 ; CHECK-NEXT: vfmv.v.f v9, fa0
2161 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2162 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2163 ; CHECK-NEXT: vmand.mm v0, v9, v10
2164 ; CHECK-NEXT: vmv.v.v v9, v0
2165 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
2166 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
2167 ; CHECK-NEXT: vmor.mm v0, v0, v9
2169 %head = insertelement <8 x half> poison, half %b, i32 0
2170 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2171 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2175 define <8 x i1> @fcmp_ord_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2176 ; CHECK-LABEL: fcmp_ord_vv_v8f16:
2178 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2179 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
2180 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
2181 ; CHECK-NEXT: vmand.mm v0, v8, v9
2183 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2187 define <8 x i1> @fcmp_ord_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2188 ; CHECK-LABEL: fcmp_ord_vf_v8f16:
2190 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2191 ; CHECK-NEXT: vfmv.v.f v9, fa0
2192 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2193 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
2194 ; CHECK-NEXT: vmand.mm v0, v8, v9
2196 %head = insertelement <8 x half> poison, half %b, i32 0
2197 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2198 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2202 define <8 x i1> @fcmp_ord_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2203 ; CHECK-LABEL: fcmp_ord_fv_v8f16:
2205 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2206 ; CHECK-NEXT: vfmv.v.f v9, fa0
2207 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2208 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
2209 ; CHECK-NEXT: vmand.mm v0, v9, v8
2211 %head = insertelement <8 x half> poison, half %b, i32 0
2212 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2213 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2217 define <8 x i1> @fcmp_ueq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2218 ; CHECK-LABEL: fcmp_ueq_vv_v8f16:
2220 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2221 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2222 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2223 ; CHECK-NEXT: vmand.mm v0, v11, v10
2224 ; CHECK-NEXT: vmv.v.v v10, v0
2225 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
2226 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
2227 ; CHECK-NEXT: vmnor.mm v0, v0, v10
2229 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2233 define <8 x i1> @fcmp_ueq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2234 ; CHECK-LABEL: fcmp_ueq_vf_v8f16:
2236 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2237 ; CHECK-NEXT: vfmv.v.f v9, fa0
2238 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2239 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2240 ; CHECK-NEXT: vmand.mm v0, v10, v9
2241 ; CHECK-NEXT: vmv.v.v v9, v0
2242 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
2243 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
2244 ; CHECK-NEXT: vmnor.mm v0, v0, v9
2246 %head = insertelement <8 x half> poison, half %b, i32 0
2247 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2248 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2252 define <8 x i1> @fcmp_ueq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2253 ; CHECK-LABEL: fcmp_ueq_fv_v8f16:
2255 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2256 ; CHECK-NEXT: vfmv.v.f v9, fa0
2257 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2258 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2259 ; CHECK-NEXT: vmand.mm v0, v9, v10
2260 ; CHECK-NEXT: vmv.v.v v9, v0
2261 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
2262 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
2263 ; CHECK-NEXT: vmnor.mm v0, v0, v9
2265 %head = insertelement <8 x half> poison, half %b, i32 0
2266 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2267 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2271 define <8 x i1> @fcmp_ugt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2272 ; CHECK-LABEL: fcmp_ugt_vv_v8f16:
2274 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2275 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2276 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2277 ; CHECK-NEXT: vmand.mm v0, v11, v10
2278 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
2279 ; CHECK-NEXT: vmnot.m v0, v0
2281 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2285 define <8 x i1> @fcmp_ugt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2286 ; CHECK-LABEL: fcmp_ugt_vf_v8f16:
2288 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2289 ; CHECK-NEXT: vfmv.v.f v9, fa0
2290 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2291 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2292 ; CHECK-NEXT: vmand.mm v0, v10, v9
2293 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
2294 ; CHECK-NEXT: vmnot.m v0, v0
2296 %head = insertelement <8 x half> poison, half %b, i32 0
2297 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2298 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2302 define <8 x i1> @fcmp_ugt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2303 ; CHECK-LABEL: fcmp_ugt_fv_v8f16:
2305 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2306 ; CHECK-NEXT: vfmv.v.f v9, fa0
2307 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2308 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2309 ; CHECK-NEXT: vmand.mm v0, v9, v10
2310 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
2311 ; CHECK-NEXT: vmnot.m v0, v0
2313 %head = insertelement <8 x half> poison, half %b, i32 0
2314 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2315 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2319 define <8 x i1> @fcmp_uge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2320 ; CHECK-LABEL: fcmp_uge_vv_v8f16:
2322 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2323 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
2324 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
2325 ; CHECK-NEXT: vmand.mm v0, v11, v10
2326 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
2327 ; CHECK-NEXT: vmnot.m v0, v0
2329 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
2333 define <8 x i1> @fcmp_uge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2334 ; CHECK-LABEL: fcmp_uge_vf_v8f16:
2336 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2337 ; CHECK-NEXT: vfmv.v.f v9, fa0
2338 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2339 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2340 ; CHECK-NEXT: vmand.mm v0, v10, v9
2341 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
2342 ; CHECK-NEXT: vmnot.m v0, v0
2344 %head = insertelement <8 x half> poison, half %b, i32 0
2345 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2346 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
2350 define <8 x i1> @fcmp_uge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2351 ; CHECK-LABEL: fcmp_uge_fv_v8f16:
2353 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2354 ; CHECK-NEXT: vfmv.v.f v9, fa0
2355 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2356 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2357 ; CHECK-NEXT: vmand.mm v0, v9, v10
2358 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
2359 ; CHECK-NEXT: vmnot.m v0, v0
2361 %head = insertelement <8 x half> poison, half %b, i32 0
2362 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2363 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
2367 define <8 x i1> @fcmp_ult_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2368 ; CHECK-LABEL: fcmp_ult_vv_v8f16:
2370 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2371 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2372 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
2373 ; CHECK-NEXT: vmand.mm v0, v11, v10
2374 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
2375 ; CHECK-NEXT: vmnot.m v0, v0
2377 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
2381 define <8 x i1> @fcmp_ult_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2382 ; CHECK-LABEL: fcmp_ult_vf_v8f16:
2384 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2385 ; CHECK-NEXT: vfmv.v.f v9, fa0
2386 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2387 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2388 ; CHECK-NEXT: vmand.mm v0, v9, v10
2389 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
2390 ; CHECK-NEXT: vmnot.m v0, v0
2392 %head = insertelement <8 x half> poison, half %b, i32 0
2393 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2394 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
2398 define <8 x i1> @fcmp_ult_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2399 ; CHECK-LABEL: fcmp_ult_fv_v8f16:
2401 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2402 ; CHECK-NEXT: vfmv.v.f v9, fa0
2403 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2404 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2405 ; CHECK-NEXT: vmand.mm v0, v10, v9
2406 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
2407 ; CHECK-NEXT: vmnot.m v0, v0
2409 %head = insertelement <8 x half> poison, half %b, i32 0
2410 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2411 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
2415 define <8 x i1> @fcmp_ule_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2416 ; CHECK-LABEL: fcmp_ule_vv_v8f16:
2418 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2419 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2420 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
2421 ; CHECK-NEXT: vmand.mm v0, v11, v10
2422 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
2423 ; CHECK-NEXT: vmnot.m v0, v0
2425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
2429 define <8 x i1> @fcmp_ule_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2430 ; CHECK-LABEL: fcmp_ule_vf_v8f16:
2432 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2433 ; CHECK-NEXT: vfmv.v.f v9, fa0
2434 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2435 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2436 ; CHECK-NEXT: vmand.mm v0, v9, v10
2437 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
2438 ; CHECK-NEXT: vmnot.m v0, v0
2440 %head = insertelement <8 x half> poison, half %b, i32 0
2441 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2442 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
2446 define <8 x i1> @fcmp_ule_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2447 ; CHECK-LABEL: fcmp_ule_fv_v8f16:
2449 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
2450 ; CHECK-NEXT: vfmv.v.f v9, fa0
2451 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2452 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
2453 ; CHECK-NEXT: vmand.mm v0, v10, v9
2454 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
2455 ; CHECK-NEXT: vmnot.m v0, v0
2457 %head = insertelement <8 x half> poison, half %b, i32 0
2458 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2459 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
2463 define <8 x i1> @fcmp_une_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2464 ; CHECK-LABEL: fcmp_une_vv_v8f16:
2466 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2467 ; CHECK-NEXT: vmfne.vv v0, v8, v9
2469 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
2473 define <8 x i1> @fcmp_une_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2474 ; CHECK-LABEL: fcmp_une_vf_v8f16:
2476 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2477 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2479 %head = insertelement <8 x half> poison, half %b, i32 0
2480 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2481 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
2485 define <8 x i1> @fcmp_une_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2486 ; CHECK-LABEL: fcmp_une_fv_v8f16:
2488 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2489 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2491 %head = insertelement <8 x half> poison, half %b, i32 0
2492 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2493 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
2497 define <8 x i1> @fcmp_uno_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2498 ; CHECK-LABEL: fcmp_uno_vv_v8f16:
2500 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2501 ; CHECK-NEXT: vmfne.vv v9, v9, v9
2502 ; CHECK-NEXT: vmfne.vv v8, v8, v8
2503 ; CHECK-NEXT: vmor.mm v0, v8, v9
2505 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
2509 define <8 x i1> @fcmp_uno_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2510 ; CHECK-LABEL: fcmp_uno_vf_v8f16:
2512 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2513 ; CHECK-NEXT: vfmv.v.f v9, fa0
2514 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
2515 ; CHECK-NEXT: vmfne.vv v8, v8, v8
2516 ; CHECK-NEXT: vmor.mm v0, v8, v9
2518 %head = insertelement <8 x half> poison, half %b, i32 0
2519 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2520 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
2524 define <8 x i1> @fcmp_uno_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2525 ; CHECK-LABEL: fcmp_uno_fv_v8f16:
2527 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2528 ; CHECK-NEXT: vfmv.v.f v9, fa0
2529 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
2530 ; CHECK-NEXT: vmfne.vv v8, v8, v8
2531 ; CHECK-NEXT: vmor.mm v0, v9, v8
2533 %head = insertelement <8 x half> poison, half %b, i32 0
2534 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2535 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
2539 declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half>, <16 x half>, metadata, metadata)
2540 define <16 x i1> @fcmp_oeq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2541 ; CHECK-LABEL: fcmp_oeq_vv_v16f16:
2543 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2544 ; CHECK-NEXT: vmfeq.vv v0, v8, v10
2546 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2550 define <16 x i1> @fcmp_oeq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2551 ; CHECK-LABEL: fcmp_oeq_vf_v16f16:
2553 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2554 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2556 %head = insertelement <16 x half> poison, half %b, i32 0
2557 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2558 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2562 define <16 x i1> @fcmp_oeq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2563 ; CHECK-LABEL: fcmp_oeq_fv_v16f16:
2565 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2566 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2568 %head = insertelement <16 x half> poison, half %b, i32 0
2569 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2570 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2574 define <16 x i1> @fcmp_ogt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2575 ; CHECK-LABEL: fcmp_ogt_vv_v16f16:
2577 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2578 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2579 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
2580 ; CHECK-NEXT: vmand.mm v12, v13, v12
2581 ; CHECK-NEXT: vmv1r.v v0, v12
2582 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
2583 ; CHECK-NEXT: vmv1r.v v0, v12
2585 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2589 define <16 x i1> @fcmp_ogt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2590 ; CHECK-LABEL: fcmp_ogt_vf_v16f16:
2592 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2593 ; CHECK-NEXT: vfmv.v.f v10, fa0
2594 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2595 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2596 ; CHECK-NEXT: vmand.mm v10, v12, v10
2597 ; CHECK-NEXT: vmv1r.v v0, v10
2598 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
2599 ; CHECK-NEXT: vmv1r.v v0, v10
2601 %head = insertelement <16 x half> poison, half %b, i32 0
2602 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2603 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2607 define <16 x i1> @fcmp_ogt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2608 ; CHECK-LABEL: fcmp_ogt_fv_v16f16:
2610 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2611 ; CHECK-NEXT: vfmv.v.f v10, fa0
2612 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2613 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2614 ; CHECK-NEXT: vmand.mm v10, v10, v12
2615 ; CHECK-NEXT: vmv1r.v v0, v10
2616 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
2617 ; CHECK-NEXT: vmv1r.v v0, v10
2619 %head = insertelement <16 x half> poison, half %b, i32 0
2620 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2621 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2625 define <16 x i1> @fcmp_oge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2626 ; CHECK-LABEL: fcmp_oge_vv_v16f16:
2628 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2629 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2630 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
2631 ; CHECK-NEXT: vmand.mm v12, v13, v12
2632 ; CHECK-NEXT: vmv1r.v v0, v12
2633 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
2634 ; CHECK-NEXT: vmv1r.v v0, v12
2636 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
2640 define <16 x i1> @fcmp_oge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2641 ; CHECK-LABEL: fcmp_oge_vf_v16f16:
2643 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2644 ; CHECK-NEXT: vfmv.v.f v10, fa0
2645 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2646 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2647 ; CHECK-NEXT: vmand.mm v10, v12, v10
2648 ; CHECK-NEXT: vmv1r.v v0, v10
2649 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
2650 ; CHECK-NEXT: vmv1r.v v0, v10
2652 %head = insertelement <16 x half> poison, half %b, i32 0
2653 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2654 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2658 define <16 x i1> @fcmp_oge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2659 ; CHECK-LABEL: fcmp_oge_fv_v16f16:
2661 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2662 ; CHECK-NEXT: vfmv.v.f v10, fa0
2663 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2664 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2665 ; CHECK-NEXT: vmand.mm v10, v10, v12
2666 ; CHECK-NEXT: vmv1r.v v0, v10
2667 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
2668 ; CHECK-NEXT: vmv1r.v v0, v10
2670 %head = insertelement <16 x half> poison, half %b, i32 0
2671 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2672 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2676 define <16 x i1> @fcmp_olt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2677 ; CHECK-LABEL: fcmp_olt_vv_v16f16:
2679 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2680 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2681 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2682 ; CHECK-NEXT: vmand.mm v12, v13, v12
2683 ; CHECK-NEXT: vmv1r.v v0, v12
2684 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
2685 ; CHECK-NEXT: vmv1r.v v0, v12
2687 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2691 define <16 x i1> @fcmp_olt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2692 ; CHECK-LABEL: fcmp_olt_vf_v16f16:
2694 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2695 ; CHECK-NEXT: vfmv.v.f v10, fa0
2696 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2697 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2698 ; CHECK-NEXT: vmand.mm v10, v10, v12
2699 ; CHECK-NEXT: vmv1r.v v0, v10
2700 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
2701 ; CHECK-NEXT: vmv1r.v v0, v10
2703 %head = insertelement <16 x half> poison, half %b, i32 0
2704 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2705 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2709 define <16 x i1> @fcmp_olt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2710 ; CHECK-LABEL: fcmp_olt_fv_v16f16:
2712 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2713 ; CHECK-NEXT: vfmv.v.f v10, fa0
2714 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2715 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2716 ; CHECK-NEXT: vmand.mm v10, v12, v10
2717 ; CHECK-NEXT: vmv1r.v v0, v10
2718 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
2719 ; CHECK-NEXT: vmv1r.v v0, v10
2721 %head = insertelement <16 x half> poison, half %b, i32 0
2722 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2723 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2727 define <16 x i1> @fcmp_ole_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2728 ; CHECK-LABEL: fcmp_ole_vv_v16f16:
2730 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2731 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2732 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2733 ; CHECK-NEXT: vmand.mm v12, v13, v12
2734 ; CHECK-NEXT: vmv1r.v v0, v12
2735 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
2736 ; CHECK-NEXT: vmv1r.v v0, v12
2738 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2742 define <16 x i1> @fcmp_ole_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2743 ; CHECK-LABEL: fcmp_ole_vf_v16f16:
2745 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2746 ; CHECK-NEXT: vfmv.v.f v10, fa0
2747 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2748 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2749 ; CHECK-NEXT: vmand.mm v10, v10, v12
2750 ; CHECK-NEXT: vmv1r.v v0, v10
2751 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
2752 ; CHECK-NEXT: vmv1r.v v0, v10
2754 %head = insertelement <16 x half> poison, half %b, i32 0
2755 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2756 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2760 define <16 x i1> @fcmp_ole_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2761 ; CHECK-LABEL: fcmp_ole_fv_v16f16:
2763 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2764 ; CHECK-NEXT: vfmv.v.f v10, fa0
2765 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2766 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2767 ; CHECK-NEXT: vmand.mm v10, v12, v10
2768 ; CHECK-NEXT: vmv1r.v v0, v10
2769 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
2770 ; CHECK-NEXT: vmv1r.v v0, v10
2772 %head = insertelement <16 x half> poison, half %b, i32 0
2773 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2774 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2778 define <16 x i1> @fcmp_one_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2779 ; CHECK-LABEL: fcmp_one_vv_v16f16:
2781 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2782 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2783 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2784 ; CHECK-NEXT: vmand.mm v12, v13, v12
2785 ; CHECK-NEXT: vmv1r.v v13, v12
2786 ; CHECK-NEXT: vmv1r.v v0, v12
2787 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
2788 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
2789 ; CHECK-NEXT: vmor.mm v0, v12, v13
2791 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2795 define <16 x i1> @fcmp_one_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2796 ; CHECK-LABEL: fcmp_one_vf_v16f16:
2798 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2799 ; CHECK-NEXT: vfmv.v.f v10, fa0
2800 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2801 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
2802 ; CHECK-NEXT: vmand.mm v10, v12, v13
2803 ; CHECK-NEXT: vmv1r.v v11, v10
2804 ; CHECK-NEXT: vmv1r.v v0, v10
2805 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
2806 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
2807 ; CHECK-NEXT: vmor.mm v0, v10, v11
2809 %head = insertelement <16 x half> poison, half %b, i32 0
2810 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2811 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2815 define <16 x i1> @fcmp_one_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2816 ; CHECK-LABEL: fcmp_one_fv_v16f16:
2818 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2819 ; CHECK-NEXT: vfmv.v.f v10, fa0
2820 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2821 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
2822 ; CHECK-NEXT: vmand.mm v10, v13, v12
2823 ; CHECK-NEXT: vmv1r.v v11, v10
2824 ; CHECK-NEXT: vmv1r.v v0, v10
2825 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
2826 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
2827 ; CHECK-NEXT: vmor.mm v0, v10, v11
2829 %head = insertelement <16 x half> poison, half %b, i32 0
2830 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2831 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2835 define <16 x i1> @fcmp_ord_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2836 ; CHECK-LABEL: fcmp_ord_vv_v16f16:
2838 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2839 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2840 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2841 ; CHECK-NEXT: vmand.mm v0, v10, v12
2843 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2847 define <16 x i1> @fcmp_ord_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2848 ; CHECK-LABEL: fcmp_ord_vf_v16f16:
2850 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2851 ; CHECK-NEXT: vfmv.v.f v10, fa0
2852 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2853 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2854 ; CHECK-NEXT: vmand.mm v0, v10, v12
2856 %head = insertelement <16 x half> poison, half %b, i32 0
2857 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2858 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2862 define <16 x i1> @fcmp_ord_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2863 ; CHECK-LABEL: fcmp_ord_fv_v16f16:
2865 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2866 ; CHECK-NEXT: vfmv.v.f v10, fa0
2867 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2868 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2869 ; CHECK-NEXT: vmand.mm v0, v12, v10
2871 %head = insertelement <16 x half> poison, half %b, i32 0
2872 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2873 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2877 define <16 x i1> @fcmp_ueq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2878 ; CHECK-LABEL: fcmp_ueq_vv_v16f16:
2880 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2881 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2882 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2883 ; CHECK-NEXT: vmand.mm v12, v13, v12
2884 ; CHECK-NEXT: vmv1r.v v13, v12
2885 ; CHECK-NEXT: vmv1r.v v0, v12
2886 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
2887 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
2888 ; CHECK-NEXT: vmnor.mm v0, v12, v13
2890 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2894 define <16 x i1> @fcmp_ueq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2895 ; CHECK-LABEL: fcmp_ueq_vf_v16f16:
2897 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2898 ; CHECK-NEXT: vfmv.v.f v10, fa0
2899 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2900 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
2901 ; CHECK-NEXT: vmand.mm v10, v12, v13
2902 ; CHECK-NEXT: vmv1r.v v11, v10
2903 ; CHECK-NEXT: vmv1r.v v0, v10
2904 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
2905 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
2906 ; CHECK-NEXT: vmnor.mm v0, v10, v11
2908 %head = insertelement <16 x half> poison, half %b, i32 0
2909 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2910 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2914 define <16 x i1> @fcmp_ueq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2915 ; CHECK-LABEL: fcmp_ueq_fv_v16f16:
2917 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2918 ; CHECK-NEXT: vfmv.v.f v10, fa0
2919 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2920 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
2921 ; CHECK-NEXT: vmand.mm v10, v13, v12
2922 ; CHECK-NEXT: vmv1r.v v11, v10
2923 ; CHECK-NEXT: vmv1r.v v0, v10
2924 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
2925 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
2926 ; CHECK-NEXT: vmnor.mm v0, v10, v11
2928 %head = insertelement <16 x half> poison, half %b, i32 0
2929 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2930 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2934 define <16 x i1> @fcmp_ugt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2935 ; CHECK-LABEL: fcmp_ugt_vv_v16f16:
2937 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2938 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2939 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2940 ; CHECK-NEXT: vmand.mm v12, v13, v12
2941 ; CHECK-NEXT: vmv1r.v v0, v12
2942 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
2943 ; CHECK-NEXT: vmnot.m v0, v12
2945 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2949 define <16 x i1> @fcmp_ugt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2950 ; CHECK-LABEL: fcmp_ugt_vf_v16f16:
2952 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2953 ; CHECK-NEXT: vfmv.v.f v10, fa0
2954 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2955 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2956 ; CHECK-NEXT: vmand.mm v10, v10, v12
2957 ; CHECK-NEXT: vmv1r.v v0, v10
2958 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
2959 ; CHECK-NEXT: vmnot.m v0, v10
2961 %head = insertelement <16 x half> poison, half %b, i32 0
2962 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2963 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2967 define <16 x i1> @fcmp_ugt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2968 ; CHECK-LABEL: fcmp_ugt_fv_v16f16:
2970 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2971 ; CHECK-NEXT: vfmv.v.f v10, fa0
2972 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
2973 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
2974 ; CHECK-NEXT: vmand.mm v10, v12, v10
2975 ; CHECK-NEXT: vmv1r.v v0, v10
2976 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
2977 ; CHECK-NEXT: vmnot.m v0, v10
2979 %head = insertelement <16 x half> poison, half %b, i32 0
2980 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2981 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2985 define <16 x i1> @fcmp_uge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2986 ; CHECK-LABEL: fcmp_uge_vv_v16f16:
2988 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
2989 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
2990 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
2991 ; CHECK-NEXT: vmand.mm v12, v13, v12
2992 ; CHECK-NEXT: vmv1r.v v0, v12
2993 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
2994 ; CHECK-NEXT: vmnot.m v0, v12
2996 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
3000 define <16 x i1> @fcmp_uge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3001 ; CHECK-LABEL: fcmp_uge_vf_v16f16:
3003 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3004 ; CHECK-NEXT: vfmv.v.f v10, fa0
3005 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3006 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3007 ; CHECK-NEXT: vmand.mm v10, v10, v12
3008 ; CHECK-NEXT: vmv1r.v v0, v10
3009 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
3010 ; CHECK-NEXT: vmnot.m v0, v10
3012 %head = insertelement <16 x half> poison, half %b, i32 0
3013 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3014 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3018 define <16 x i1> @fcmp_uge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3019 ; CHECK-LABEL: fcmp_uge_fv_v16f16:
3021 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3022 ; CHECK-NEXT: vfmv.v.f v10, fa0
3023 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3024 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3025 ; CHECK-NEXT: vmand.mm v10, v12, v10
3026 ; CHECK-NEXT: vmv1r.v v0, v10
3027 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
3028 ; CHECK-NEXT: vmnot.m v0, v10
3030 %head = insertelement <16 x half> poison, half %b, i32 0
3031 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3032 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3036 define <16 x i1> @fcmp_ult_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3037 ; CHECK-LABEL: fcmp_ult_vv_v16f16:
3039 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3040 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3041 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
3042 ; CHECK-NEXT: vmand.mm v12, v13, v12
3043 ; CHECK-NEXT: vmv1r.v v0, v12
3044 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
3045 ; CHECK-NEXT: vmnot.m v0, v12
3047 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3051 define <16 x i1> @fcmp_ult_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3052 ; CHECK-LABEL: fcmp_ult_vf_v16f16:
3054 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3055 ; CHECK-NEXT: vfmv.v.f v10, fa0
3056 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3057 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3058 ; CHECK-NEXT: vmand.mm v10, v12, v10
3059 ; CHECK-NEXT: vmv1r.v v0, v10
3060 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
3061 ; CHECK-NEXT: vmnot.m v0, v10
3063 %head = insertelement <16 x half> poison, half %b, i32 0
3064 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3065 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3069 define <16 x i1> @fcmp_ult_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3070 ; CHECK-LABEL: fcmp_ult_fv_v16f16:
3072 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3073 ; CHECK-NEXT: vfmv.v.f v10, fa0
3074 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3075 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3076 ; CHECK-NEXT: vmand.mm v10, v10, v12
3077 ; CHECK-NEXT: vmv1r.v v0, v10
3078 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
3079 ; CHECK-NEXT: vmnot.m v0, v10
3081 %head = insertelement <16 x half> poison, half %b, i32 0
3082 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3083 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3087 define <16 x i1> @fcmp_ule_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3088 ; CHECK-LABEL: fcmp_ule_vv_v16f16:
3090 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3091 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3092 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
3093 ; CHECK-NEXT: vmand.mm v12, v13, v12
3094 ; CHECK-NEXT: vmv1r.v v0, v12
3095 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
3096 ; CHECK-NEXT: vmnot.m v0, v12
3098 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3102 define <16 x i1> @fcmp_ule_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3103 ; CHECK-LABEL: fcmp_ule_vf_v16f16:
3105 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3106 ; CHECK-NEXT: vfmv.v.f v10, fa0
3107 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3108 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3109 ; CHECK-NEXT: vmand.mm v10, v12, v10
3110 ; CHECK-NEXT: vmv1r.v v0, v10
3111 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
3112 ; CHECK-NEXT: vmnot.m v0, v10
3114 %head = insertelement <16 x half> poison, half %b, i32 0
3115 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3116 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3120 define <16 x i1> @fcmp_ule_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3121 ; CHECK-LABEL: fcmp_ule_fv_v16f16:
3123 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu
3124 ; CHECK-NEXT: vfmv.v.f v10, fa0
3125 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
3126 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3127 ; CHECK-NEXT: vmand.mm v10, v10, v12
3128 ; CHECK-NEXT: vmv1r.v v0, v10
3129 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
3130 ; CHECK-NEXT: vmnot.m v0, v10
3132 %head = insertelement <16 x half> poison, half %b, i32 0
3133 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3134 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3138 define <16 x i1> @fcmp_une_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3139 ; CHECK-LABEL: fcmp_une_vv_v16f16:
3141 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3142 ; CHECK-NEXT: vmfne.vv v0, v8, v10
3144 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3148 define <16 x i1> @fcmp_une_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3149 ; CHECK-LABEL: fcmp_une_vf_v16f16:
3151 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3152 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3154 %head = insertelement <16 x half> poison, half %b, i32 0
3155 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3156 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3160 define <16 x i1> @fcmp_une_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3161 ; CHECK-LABEL: fcmp_une_fv_v16f16:
3163 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3164 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3166 %head = insertelement <16 x half> poison, half %b, i32 0
3167 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3168 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3172 define <16 x i1> @fcmp_uno_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3173 ; CHECK-LABEL: fcmp_uno_vv_v16f16:
3175 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3176 ; CHECK-NEXT: vmfne.vv v12, v10, v10
3177 ; CHECK-NEXT: vmfne.vv v10, v8, v8
3178 ; CHECK-NEXT: vmor.mm v0, v10, v12
3180 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3184 define <16 x i1> @fcmp_uno_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3185 ; CHECK-LABEL: fcmp_uno_vf_v16f16:
3187 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3188 ; CHECK-NEXT: vfmv.v.f v10, fa0
3189 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
3190 ; CHECK-NEXT: vmfne.vv v10, v8, v8
3191 ; CHECK-NEXT: vmor.mm v0, v10, v12
3193 %head = insertelement <16 x half> poison, half %b, i32 0
3194 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3195 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3199 define <16 x i1> @fcmp_uno_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3200 ; CHECK-LABEL: fcmp_uno_fv_v16f16:
3202 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
3203 ; CHECK-NEXT: vfmv.v.f v10, fa0
3204 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
3205 ; CHECK-NEXT: vmfne.vv v10, v8, v8
3206 ; CHECK-NEXT: vmor.mm v0, v12, v10
3208 %head = insertelement <16 x half> poison, half %b, i32 0
3209 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3210 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3214 declare <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half>, <32 x half>, metadata, metadata)
3215 define <32 x i1> @fcmp_oeq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3216 ; CHECK-LABEL: fcmp_oeq_vv_v32f16:
3218 ; CHECK-NEXT: li a0, 32
3219 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3220 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
3222 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3226 define <32 x i1> @fcmp_oeq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3227 ; CHECK-LABEL: fcmp_oeq_vf_v32f16:
3229 ; CHECK-NEXT: li a0, 32
3230 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3231 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
3233 %head = insertelement <32 x half> poison, half %b, i32 0
3234 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3235 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3239 define <32 x i1> @fcmp_oeq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3240 ; CHECK-LABEL: fcmp_oeq_fv_v32f16:
3242 ; CHECK-NEXT: li a0, 32
3243 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3244 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
3246 %head = insertelement <32 x half> poison, half %b, i32 0
3247 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3248 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3252 define <32 x i1> @fcmp_ogt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3253 ; CHECK-LABEL: fcmp_ogt_vv_v32f16:
3255 ; CHECK-NEXT: li a0, 32
3256 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3257 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
3258 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
3259 ; CHECK-NEXT: vmand.mm v16, v17, v16
3260 ; CHECK-NEXT: vmv1r.v v0, v16
3261 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
3262 ; CHECK-NEXT: vmv1r.v v0, v16
3264 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3268 define <32 x i1> @fcmp_ogt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3269 ; CHECK-LABEL: fcmp_ogt_vf_v32f16:
3271 ; CHECK-NEXT: li a0, 32
3272 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3273 ; CHECK-NEXT: vfmv.v.f v12, fa0
3274 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3275 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3276 ; CHECK-NEXT: vmand.mm v12, v16, v12
3277 ; CHECK-NEXT: vmv1r.v v0, v12
3278 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3279 ; CHECK-NEXT: vmv1r.v v0, v12
3281 %head = insertelement <32 x half> poison, half %b, i32 0
3282 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3283 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3287 define <32 x i1> @fcmp_ogt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3288 ; CHECK-LABEL: fcmp_ogt_fv_v32f16:
3290 ; CHECK-NEXT: li a0, 32
3291 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3292 ; CHECK-NEXT: vfmv.v.f v12, fa0
3293 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3294 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3295 ; CHECK-NEXT: vmand.mm v12, v12, v16
3296 ; CHECK-NEXT: vmv1r.v v0, v12
3297 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3298 ; CHECK-NEXT: vmv1r.v v0, v12
3300 %head = insertelement <32 x half> poison, half %b, i32 0
3301 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3302 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3306 define <32 x i1> @fcmp_oge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3307 ; CHECK-LABEL: fcmp_oge_vv_v32f16:
3309 ; CHECK-NEXT: li a0, 32
3310 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3311 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
3312 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
3313 ; CHECK-NEXT: vmand.mm v16, v17, v16
3314 ; CHECK-NEXT: vmv1r.v v0, v16
3315 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
3316 ; CHECK-NEXT: vmv1r.v v0, v16
3318 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
3322 define <32 x i1> @fcmp_oge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3323 ; CHECK-LABEL: fcmp_oge_vf_v32f16:
3325 ; CHECK-NEXT: li a0, 32
3326 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3327 ; CHECK-NEXT: vfmv.v.f v12, fa0
3328 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3329 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3330 ; CHECK-NEXT: vmand.mm v12, v16, v12
3331 ; CHECK-NEXT: vmv1r.v v0, v12
3332 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
3333 ; CHECK-NEXT: vmv1r.v v0, v12
3335 %head = insertelement <32 x half> poison, half %b, i32 0
3336 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3337 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
3341 define <32 x i1> @fcmp_oge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3342 ; CHECK-LABEL: fcmp_oge_fv_v32f16:
3344 ; CHECK-NEXT: li a0, 32
3345 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3346 ; CHECK-NEXT: vfmv.v.f v12, fa0
3347 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3348 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3349 ; CHECK-NEXT: vmand.mm v12, v12, v16
3350 ; CHECK-NEXT: vmv1r.v v0, v12
3351 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
3352 ; CHECK-NEXT: vmv1r.v v0, v12
3354 %head = insertelement <32 x half> poison, half %b, i32 0
3355 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3356 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
3360 define <32 x i1> @fcmp_olt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3361 ; CHECK-LABEL: fcmp_olt_vv_v32f16:
3363 ; CHECK-NEXT: li a0, 32
3364 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3365 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3366 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3367 ; CHECK-NEXT: vmand.mm v16, v17, v16
3368 ; CHECK-NEXT: vmv1r.v v0, v16
3369 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
3370 ; CHECK-NEXT: vmv1r.v v0, v16
3372 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
3376 define <32 x i1> @fcmp_olt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3377 ; CHECK-LABEL: fcmp_olt_vf_v32f16:
3379 ; CHECK-NEXT: li a0, 32
3380 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3381 ; CHECK-NEXT: vfmv.v.f v12, fa0
3382 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3383 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3384 ; CHECK-NEXT: vmand.mm v12, v12, v16
3385 ; CHECK-NEXT: vmv1r.v v0, v12
3386 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3387 ; CHECK-NEXT: vmv1r.v v0, v12
3389 %head = insertelement <32 x half> poison, half %b, i32 0
3390 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3391 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
3395 define <32 x i1> @fcmp_olt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3396 ; CHECK-LABEL: fcmp_olt_fv_v32f16:
3398 ; CHECK-NEXT: li a0, 32
3399 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3400 ; CHECK-NEXT: vfmv.v.f v12, fa0
3401 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3402 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3403 ; CHECK-NEXT: vmand.mm v12, v16, v12
3404 ; CHECK-NEXT: vmv1r.v v0, v12
3405 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3406 ; CHECK-NEXT: vmv1r.v v0, v12
3408 %head = insertelement <32 x half> poison, half %b, i32 0
3409 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3410 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
3414 define <32 x i1> @fcmp_ole_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3415 ; CHECK-LABEL: fcmp_ole_vv_v32f16:
3417 ; CHECK-NEXT: li a0, 32
3418 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3419 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3420 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3421 ; CHECK-NEXT: vmand.mm v16, v17, v16
3422 ; CHECK-NEXT: vmv1r.v v0, v16
3423 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
3424 ; CHECK-NEXT: vmv1r.v v0, v16
3426 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
3430 define <32 x i1> @fcmp_ole_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3431 ; CHECK-LABEL: fcmp_ole_vf_v32f16:
3433 ; CHECK-NEXT: li a0, 32
3434 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3435 ; CHECK-NEXT: vfmv.v.f v12, fa0
3436 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3437 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3438 ; CHECK-NEXT: vmand.mm v12, v12, v16
3439 ; CHECK-NEXT: vmv1r.v v0, v12
3440 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
3441 ; CHECK-NEXT: vmv1r.v v0, v12
3443 %head = insertelement <32 x half> poison, half %b, i32 0
3444 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3445 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
3449 define <32 x i1> @fcmp_ole_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3450 ; CHECK-LABEL: fcmp_ole_fv_v32f16:
3452 ; CHECK-NEXT: li a0, 32
3453 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3454 ; CHECK-NEXT: vfmv.v.f v12, fa0
3455 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3456 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3457 ; CHECK-NEXT: vmand.mm v12, v16, v12
3458 ; CHECK-NEXT: vmv1r.v v0, v12
3459 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
3460 ; CHECK-NEXT: vmv1r.v v0, v12
3462 %head = insertelement <32 x half> poison, half %b, i32 0
3463 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3464 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
3468 define <32 x i1> @fcmp_one_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3469 ; CHECK-LABEL: fcmp_one_vv_v32f16:
3471 ; CHECK-NEXT: li a0, 32
3472 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3473 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3474 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3475 ; CHECK-NEXT: vmand.mm v16, v17, v16
3476 ; CHECK-NEXT: vmv1r.v v17, v16
3477 ; CHECK-NEXT: vmv1r.v v0, v16
3478 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
3479 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
3480 ; CHECK-NEXT: vmor.mm v0, v16, v17
3482 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
3486 define <32 x i1> @fcmp_one_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3487 ; CHECK-LABEL: fcmp_one_vf_v32f16:
3489 ; CHECK-NEXT: li a0, 32
3490 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3491 ; CHECK-NEXT: vfmv.v.f v12, fa0
3492 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3493 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3494 ; CHECK-NEXT: vmand.mm v12, v12, v16
3495 ; CHECK-NEXT: vmv1r.v v13, v12
3496 ; CHECK-NEXT: vmv1r.v v0, v12
3497 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
3498 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3499 ; CHECK-NEXT: vmor.mm v0, v12, v13
3501 %head = insertelement <32 x half> poison, half %b, i32 0
3502 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3503 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
3507 define <32 x i1> @fcmp_one_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3508 ; CHECK-LABEL: fcmp_one_fv_v32f16:
3510 ; CHECK-NEXT: li a0, 32
3511 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3512 ; CHECK-NEXT: vfmv.v.f v12, fa0
3513 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3514 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3515 ; CHECK-NEXT: vmand.mm v12, v16, v12
3516 ; CHECK-NEXT: vmv1r.v v13, v12
3517 ; CHECK-NEXT: vmv1r.v v0, v12
3518 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
3519 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3520 ; CHECK-NEXT: vmor.mm v0, v12, v13
3522 %head = insertelement <32 x half> poison, half %b, i32 0
3523 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3524 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
3528 define <32 x i1> @fcmp_ord_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3529 ; CHECK-LABEL: fcmp_ord_vv_v32f16:
3531 ; CHECK-NEXT: li a0, 32
3532 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3533 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3534 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3535 ; CHECK-NEXT: vmand.mm v0, v12, v16
3537 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
3541 define <32 x i1> @fcmp_ord_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3542 ; CHECK-LABEL: fcmp_ord_vf_v32f16:
3544 ; CHECK-NEXT: li a0, 32
3545 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3546 ; CHECK-NEXT: vfmv.v.f v12, fa0
3547 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3548 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3549 ; CHECK-NEXT: vmand.mm v0, v12, v16
3551 %head = insertelement <32 x half> poison, half %b, i32 0
3552 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3553 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
3557 define <32 x i1> @fcmp_ord_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3558 ; CHECK-LABEL: fcmp_ord_fv_v32f16:
3560 ; CHECK-NEXT: li a0, 32
3561 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3562 ; CHECK-NEXT: vfmv.v.f v12, fa0
3563 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3564 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3565 ; CHECK-NEXT: vmand.mm v0, v16, v12
3567 %head = insertelement <32 x half> poison, half %b, i32 0
3568 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3569 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
3573 define <32 x i1> @fcmp_ueq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3574 ; CHECK-LABEL: fcmp_ueq_vv_v32f16:
3576 ; CHECK-NEXT: li a0, 32
3577 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3578 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3579 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3580 ; CHECK-NEXT: vmand.mm v16, v17, v16
3581 ; CHECK-NEXT: vmv1r.v v17, v16
3582 ; CHECK-NEXT: vmv1r.v v0, v16
3583 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
3584 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
3585 ; CHECK-NEXT: vmnor.mm v0, v16, v17
3587 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3591 define <32 x i1> @fcmp_ueq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3592 ; CHECK-LABEL: fcmp_ueq_vf_v32f16:
3594 ; CHECK-NEXT: li a0, 32
3595 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3596 ; CHECK-NEXT: vfmv.v.f v12, fa0
3597 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3598 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3599 ; CHECK-NEXT: vmand.mm v12, v12, v16
3600 ; CHECK-NEXT: vmv1r.v v13, v12
3601 ; CHECK-NEXT: vmv1r.v v0, v12
3602 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
3603 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3604 ; CHECK-NEXT: vmnor.mm v0, v12, v13
3606 %head = insertelement <32 x half> poison, half %b, i32 0
3607 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3608 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3612 define <32 x i1> @fcmp_ueq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3613 ; CHECK-LABEL: fcmp_ueq_fv_v32f16:
3615 ; CHECK-NEXT: li a0, 32
3616 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3617 ; CHECK-NEXT: vfmv.v.f v12, fa0
3618 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3619 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3620 ; CHECK-NEXT: vmand.mm v12, v16, v12
3621 ; CHECK-NEXT: vmv1r.v v13, v12
3622 ; CHECK-NEXT: vmv1r.v v0, v12
3623 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
3624 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3625 ; CHECK-NEXT: vmnor.mm v0, v12, v13
3627 %head = insertelement <32 x half> poison, half %b, i32 0
3628 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3629 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3633 define <32 x i1> @fcmp_ugt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3634 ; CHECK-LABEL: fcmp_ugt_vv_v32f16:
3636 ; CHECK-NEXT: li a0, 32
3637 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3638 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3639 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3640 ; CHECK-NEXT: vmand.mm v16, v17, v16
3641 ; CHECK-NEXT: vmv1r.v v0, v16
3642 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
3643 ; CHECK-NEXT: vmnot.m v0, v16
3645 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3649 define <32 x i1> @fcmp_ugt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3650 ; CHECK-LABEL: fcmp_ugt_vf_v32f16:
3652 ; CHECK-NEXT: li a0, 32
3653 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3654 ; CHECK-NEXT: vfmv.v.f v12, fa0
3655 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3656 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3657 ; CHECK-NEXT: vmand.mm v12, v12, v16
3658 ; CHECK-NEXT: vmv1r.v v0, v12
3659 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
3660 ; CHECK-NEXT: vmnot.m v0, v12
3662 %head = insertelement <32 x half> poison, half %b, i32 0
3663 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3664 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3668 define <32 x i1> @fcmp_ugt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3669 ; CHECK-LABEL: fcmp_ugt_fv_v32f16:
3671 ; CHECK-NEXT: li a0, 32
3672 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3673 ; CHECK-NEXT: vfmv.v.f v12, fa0
3674 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3675 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3676 ; CHECK-NEXT: vmand.mm v12, v16, v12
3677 ; CHECK-NEXT: vmv1r.v v0, v12
3678 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
3679 ; CHECK-NEXT: vmnot.m v0, v12
3681 %head = insertelement <32 x half> poison, half %b, i32 0
3682 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3683 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3687 define <32 x i1> @fcmp_uge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3688 ; CHECK-LABEL: fcmp_uge_vv_v32f16:
3690 ; CHECK-NEXT: li a0, 32
3691 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3692 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
3693 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
3694 ; CHECK-NEXT: vmand.mm v16, v17, v16
3695 ; CHECK-NEXT: vmv1r.v v0, v16
3696 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
3697 ; CHECK-NEXT: vmnot.m v0, v16
3699 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
3703 define <32 x i1> @fcmp_uge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3704 ; CHECK-LABEL: fcmp_uge_vf_v32f16:
3706 ; CHECK-NEXT: li a0, 32
3707 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3708 ; CHECK-NEXT: vfmv.v.f v12, fa0
3709 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3710 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3711 ; CHECK-NEXT: vmand.mm v12, v12, v16
3712 ; CHECK-NEXT: vmv1r.v v0, v12
3713 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3714 ; CHECK-NEXT: vmnot.m v0, v12
3716 %head = insertelement <32 x half> poison, half %b, i32 0
3717 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3718 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3722 define <32 x i1> @fcmp_uge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3723 ; CHECK-LABEL: fcmp_uge_fv_v32f16:
3725 ; CHECK-NEXT: li a0, 32
3726 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3727 ; CHECK-NEXT: vfmv.v.f v12, fa0
3728 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3729 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3730 ; CHECK-NEXT: vmand.mm v12, v16, v12
3731 ; CHECK-NEXT: vmv1r.v v0, v12
3732 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3733 ; CHECK-NEXT: vmnot.m v0, v12
3735 %head = insertelement <32 x half> poison, half %b, i32 0
3736 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3737 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3741 define <32 x i1> @fcmp_ult_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3742 ; CHECK-LABEL: fcmp_ult_vv_v32f16:
3744 ; CHECK-NEXT: li a0, 32
3745 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3746 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
3747 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
3748 ; CHECK-NEXT: vmand.mm v16, v17, v16
3749 ; CHECK-NEXT: vmv1r.v v0, v16
3750 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
3751 ; CHECK-NEXT: vmnot.m v0, v16
3753 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3757 define <32 x i1> @fcmp_ult_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3758 ; CHECK-LABEL: fcmp_ult_vf_v32f16:
3760 ; CHECK-NEXT: li a0, 32
3761 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3762 ; CHECK-NEXT: vfmv.v.f v12, fa0
3763 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3764 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3765 ; CHECK-NEXT: vmand.mm v12, v16, v12
3766 ; CHECK-NEXT: vmv1r.v v0, v12
3767 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
3768 ; CHECK-NEXT: vmnot.m v0, v12
3770 %head = insertelement <32 x half> poison, half %b, i32 0
3771 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3772 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3776 define <32 x i1> @fcmp_ult_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3777 ; CHECK-LABEL: fcmp_ult_fv_v32f16:
3779 ; CHECK-NEXT: li a0, 32
3780 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3781 ; CHECK-NEXT: vfmv.v.f v12, fa0
3782 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3783 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3784 ; CHECK-NEXT: vmand.mm v12, v12, v16
3785 ; CHECK-NEXT: vmv1r.v v0, v12
3786 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
3787 ; CHECK-NEXT: vmnot.m v0, v12
3789 %head = insertelement <32 x half> poison, half %b, i32 0
3790 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3791 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3795 define <32 x i1> @fcmp_ule_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3796 ; CHECK-LABEL: fcmp_ule_vv_v32f16:
3798 ; CHECK-NEXT: li a0, 32
3799 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3800 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
3801 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
3802 ; CHECK-NEXT: vmand.mm v16, v17, v16
3803 ; CHECK-NEXT: vmv1r.v v0, v16
3804 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
3805 ; CHECK-NEXT: vmnot.m v0, v16
3807 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3811 define <32 x i1> @fcmp_ule_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3812 ; CHECK-LABEL: fcmp_ule_vf_v32f16:
3814 ; CHECK-NEXT: li a0, 32
3815 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3816 ; CHECK-NEXT: vfmv.v.f v12, fa0
3817 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3818 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3819 ; CHECK-NEXT: vmand.mm v12, v16, v12
3820 ; CHECK-NEXT: vmv1r.v v0, v12
3821 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
3822 ; CHECK-NEXT: vmnot.m v0, v12
3824 %head = insertelement <32 x half> poison, half %b, i32 0
3825 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3826 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3830 define <32 x i1> @fcmp_ule_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3831 ; CHECK-LABEL: fcmp_ule_fv_v32f16:
3833 ; CHECK-NEXT: li a0, 32
3834 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
3835 ; CHECK-NEXT: vfmv.v.f v12, fa0
3836 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
3837 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
3838 ; CHECK-NEXT: vmand.mm v12, v12, v16
3839 ; CHECK-NEXT: vmv1r.v v0, v12
3840 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
3841 ; CHECK-NEXT: vmnot.m v0, v12
3843 %head = insertelement <32 x half> poison, half %b, i32 0
3844 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3845 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3849 define <32 x i1> @fcmp_une_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3850 ; CHECK-LABEL: fcmp_une_vv_v32f16:
3852 ; CHECK-NEXT: li a0, 32
3853 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3854 ; CHECK-NEXT: vmfne.vv v0, v8, v12
3856 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3860 define <32 x i1> @fcmp_une_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3861 ; CHECK-LABEL: fcmp_une_vf_v32f16:
3863 ; CHECK-NEXT: li a0, 32
3864 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3865 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3867 %head = insertelement <32 x half> poison, half %b, i32 0
3868 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3869 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3873 define <32 x i1> @fcmp_une_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3874 ; CHECK-LABEL: fcmp_une_fv_v32f16:
3876 ; CHECK-NEXT: li a0, 32
3877 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3878 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3880 %head = insertelement <32 x half> poison, half %b, i32 0
3881 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3882 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3886 define <32 x i1> @fcmp_uno_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3887 ; CHECK-LABEL: fcmp_uno_vv_v32f16:
3889 ; CHECK-NEXT: li a0, 32
3890 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3891 ; CHECK-NEXT: vmfne.vv v16, v12, v12
3892 ; CHECK-NEXT: vmfne.vv v12, v8, v8
3893 ; CHECK-NEXT: vmor.mm v0, v12, v16
3895 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3899 define <32 x i1> @fcmp_uno_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3900 ; CHECK-LABEL: fcmp_uno_vf_v32f16:
3902 ; CHECK-NEXT: li a0, 32
3903 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3904 ; CHECK-NEXT: vfmv.v.f v12, fa0
3905 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
3906 ; CHECK-NEXT: vmfne.vv v12, v8, v8
3907 ; CHECK-NEXT: vmor.mm v0, v12, v16
3909 %head = insertelement <32 x half> poison, half %b, i32 0
3910 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3911 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3915 define <32 x i1> @fcmp_uno_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3916 ; CHECK-LABEL: fcmp_uno_fv_v32f16:
3918 ; CHECK-NEXT: li a0, 32
3919 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3920 ; CHECK-NEXT: vfmv.v.f v12, fa0
3921 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
3922 ; CHECK-NEXT: vmfne.vv v12, v8, v8
3923 ; CHECK-NEXT: vmor.mm v0, v16, v12
3925 %head = insertelement <32 x half> poison, half %b, i32 0
3926 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3927 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3931 declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float>, <1 x float>, metadata, metadata)
3932 define <1 x i1> @fcmp_oeq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
3933 ; CHECK-LABEL: fcmp_oeq_vv_v1f32:
3935 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
3936 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
3938 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3942 define <1 x i1> @fcmp_oeq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3943 ; CHECK-LABEL: fcmp_oeq_vf_v1f32:
3945 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
3946 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
3948 %head = insertelement <1 x float> poison, float %b, i32 0
3949 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3950 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3954 define <1 x i1> @fcmp_oeq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3955 ; CHECK-LABEL: fcmp_oeq_fv_v1f32:
3957 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
3958 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
3960 %head = insertelement <1 x float> poison, float %b, i32 0
3961 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3962 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3966 define <1 x i1> @fcmp_ogt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
3967 ; CHECK-LABEL: fcmp_ogt_vv_v1f32:
3969 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
3970 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3971 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
3972 ; CHECK-NEXT: vmand.mm v0, v11, v10
3973 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
3975 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3979 define <1 x i1> @fcmp_ogt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3980 ; CHECK-LABEL: fcmp_ogt_vf_v1f32:
3982 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
3983 ; CHECK-NEXT: vfmv.s.f v9, fa0
3984 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
3985 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
3986 ; CHECK-NEXT: vmand.mm v0, v9, v10
3987 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
3989 %head = insertelement <1 x float> poison, float %b, i32 0
3990 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3991 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3995 define <1 x i1> @fcmp_ogt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3996 ; CHECK-LABEL: fcmp_ogt_fv_v1f32:
3998 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
3999 ; CHECK-NEXT: vfmv.s.f v9, fa0
4000 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4001 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4002 ; CHECK-NEXT: vmand.mm v0, v10, v9
4003 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4005 %head = insertelement <1 x float> poison, float %b, i32 0
4006 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4007 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4011 define <1 x i1> @fcmp_oge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4012 ; CHECK-LABEL: fcmp_oge_vv_v1f32:
4014 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4015 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4016 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
4017 ; CHECK-NEXT: vmand.mm v0, v11, v10
4018 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
4020 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4024 define <1 x i1> @fcmp_oge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4025 ; CHECK-LABEL: fcmp_oge_vf_v1f32:
4027 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4028 ; CHECK-NEXT: vfmv.s.f v9, fa0
4029 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4030 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4031 ; CHECK-NEXT: vmand.mm v0, v9, v10
4032 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4034 %head = insertelement <1 x float> poison, float %b, i32 0
4035 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4036 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4040 define <1 x i1> @fcmp_oge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4041 ; CHECK-LABEL: fcmp_oge_fv_v1f32:
4043 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4044 ; CHECK-NEXT: vfmv.s.f v9, fa0
4045 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4046 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4047 ; CHECK-NEXT: vmand.mm v0, v10, v9
4048 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4050 %head = insertelement <1 x float> poison, float %b, i32 0
4051 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4052 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4056 define <1 x i1> @fcmp_olt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4057 ; CHECK-LABEL: fcmp_olt_vv_v1f32:
4059 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4060 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4061 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4062 ; CHECK-NEXT: vmand.mm v0, v11, v10
4063 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
4065 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4069 define <1 x i1> @fcmp_olt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4070 ; CHECK-LABEL: fcmp_olt_vf_v1f32:
4072 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4073 ; CHECK-NEXT: vfmv.s.f v9, fa0
4074 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4075 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4076 ; CHECK-NEXT: vmand.mm v0, v10, v9
4077 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4079 %head = insertelement <1 x float> poison, float %b, i32 0
4080 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4081 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4085 define <1 x i1> @fcmp_olt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4086 ; CHECK-LABEL: fcmp_olt_fv_v1f32:
4088 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4089 ; CHECK-NEXT: vfmv.s.f v9, fa0
4090 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4091 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4092 ; CHECK-NEXT: vmand.mm v0, v9, v10
4093 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4095 %head = insertelement <1 x float> poison, float %b, i32 0
4096 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4097 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4101 define <1 x i1> @fcmp_ole_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4102 ; CHECK-LABEL: fcmp_ole_vv_v1f32:
4104 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4105 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4106 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4107 ; CHECK-NEXT: vmand.mm v0, v11, v10
4108 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
4110 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4114 define <1 x i1> @fcmp_ole_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4115 ; CHECK-LABEL: fcmp_ole_vf_v1f32:
4117 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4118 ; CHECK-NEXT: vfmv.s.f v9, fa0
4119 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4120 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4121 ; CHECK-NEXT: vmand.mm v0, v10, v9
4122 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4124 %head = insertelement <1 x float> poison, float %b, i32 0
4125 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4126 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4130 define <1 x i1> @fcmp_ole_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4131 ; CHECK-LABEL: fcmp_ole_fv_v1f32:
4133 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4134 ; CHECK-NEXT: vfmv.s.f v9, fa0
4135 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4136 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4137 ; CHECK-NEXT: vmand.mm v0, v9, v10
4138 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4140 %head = insertelement <1 x float> poison, float %b, i32 0
4141 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4142 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4146 define <1 x i1> @fcmp_one_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4147 ; CHECK-LABEL: fcmp_one_vv_v1f32:
4149 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4150 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4151 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4152 ; CHECK-NEXT: vmand.mm v0, v11, v10
4153 ; CHECK-NEXT: vmv1r.v v10, v0
4154 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
4155 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4156 ; CHECK-NEXT: vmor.mm v0, v0, v10
4158 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4162 define <1 x i1> @fcmp_one_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4163 ; CHECK-LABEL: fcmp_one_vf_v1f32:
4165 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4166 ; CHECK-NEXT: vfmv.s.f v9, fa0
4167 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4168 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4169 ; CHECK-NEXT: vmand.mm v0, v10, v9
4170 ; CHECK-NEXT: vmv1r.v v9, v0
4171 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
4172 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4173 ; CHECK-NEXT: vmor.mm v0, v0, v9
4175 %head = insertelement <1 x float> poison, float %b, i32 0
4176 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4177 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4181 define <1 x i1> @fcmp_one_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4182 ; CHECK-LABEL: fcmp_one_fv_v1f32:
4184 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4185 ; CHECK-NEXT: vfmv.s.f v9, fa0
4186 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4187 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4188 ; CHECK-NEXT: vmand.mm v0, v9, v10
4189 ; CHECK-NEXT: vmv1r.v v9, v0
4190 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
4191 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4192 ; CHECK-NEXT: vmor.mm v0, v0, v9
4194 %head = insertelement <1 x float> poison, float %b, i32 0
4195 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4196 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4200 define <1 x i1> @fcmp_ord_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4201 ; CHECK-LABEL: fcmp_ord_vv_v1f32:
4203 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4204 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
4205 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4206 ; CHECK-NEXT: vmand.mm v0, v8, v9
4208 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4212 define <1 x i1> @fcmp_ord_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4213 ; CHECK-LABEL: fcmp_ord_vf_v1f32:
4215 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4216 ; CHECK-NEXT: vfmv.s.f v9, fa0
4217 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4218 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4219 ; CHECK-NEXT: vmand.mm v0, v8, v9
4221 %head = insertelement <1 x float> poison, float %b, i32 0
4222 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4223 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4227 define <1 x i1> @fcmp_ord_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4228 ; CHECK-LABEL: fcmp_ord_fv_v1f32:
4230 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4231 ; CHECK-NEXT: vfmv.s.f v9, fa0
4232 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4233 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4234 ; CHECK-NEXT: vmand.mm v0, v9, v8
4236 %head = insertelement <1 x float> poison, float %b, i32 0
4237 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4238 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4242 define <1 x i1> @fcmp_ueq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4243 ; CHECK-LABEL: fcmp_ueq_vv_v1f32:
4245 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4246 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4247 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4248 ; CHECK-NEXT: vmand.mm v0, v11, v10
4249 ; CHECK-NEXT: vmv1r.v v10, v0
4250 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
4251 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4252 ; CHECK-NEXT: vmnor.mm v0, v0, v10
4254 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4258 define <1 x i1> @fcmp_ueq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4259 ; CHECK-LABEL: fcmp_ueq_vf_v1f32:
4261 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4262 ; CHECK-NEXT: vfmv.s.f v9, fa0
4263 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4264 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4265 ; CHECK-NEXT: vmand.mm v0, v10, v9
4266 ; CHECK-NEXT: vmv1r.v v9, v0
4267 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
4268 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4269 ; CHECK-NEXT: vmnor.mm v0, v0, v9
4271 %head = insertelement <1 x float> poison, float %b, i32 0
4272 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4273 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4277 define <1 x i1> @fcmp_ueq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4278 ; CHECK-LABEL: fcmp_ueq_fv_v1f32:
4280 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4281 ; CHECK-NEXT: vfmv.s.f v9, fa0
4282 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4283 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4284 ; CHECK-NEXT: vmand.mm v0, v9, v10
4285 ; CHECK-NEXT: vmv1r.v v9, v0
4286 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
4287 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4288 ; CHECK-NEXT: vmnor.mm v0, v0, v9
4290 %head = insertelement <1 x float> poison, float %b, i32 0
4291 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4292 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4296 define <1 x i1> @fcmp_ugt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4297 ; CHECK-LABEL: fcmp_ugt_vv_v1f32:
4299 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4300 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4301 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4302 ; CHECK-NEXT: vmand.mm v0, v11, v10
4303 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
4304 ; CHECK-NEXT: vmnot.m v0, v0
4306 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4310 define <1 x i1> @fcmp_ugt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4311 ; CHECK-LABEL: fcmp_ugt_vf_v1f32:
4313 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4314 ; CHECK-NEXT: vfmv.s.f v9, fa0
4315 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4316 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4317 ; CHECK-NEXT: vmand.mm v0, v10, v9
4318 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4319 ; CHECK-NEXT: vmnot.m v0, v0
4321 %head = insertelement <1 x float> poison, float %b, i32 0
4322 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4323 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4327 define <1 x i1> @fcmp_ugt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4328 ; CHECK-LABEL: fcmp_ugt_fv_v1f32:
4330 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4331 ; CHECK-NEXT: vfmv.s.f v9, fa0
4332 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4333 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4334 ; CHECK-NEXT: vmand.mm v0, v9, v10
4335 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4336 ; CHECK-NEXT: vmnot.m v0, v0
4338 %head = insertelement <1 x float> poison, float %b, i32 0
4339 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4340 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4344 define <1 x i1> @fcmp_uge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4345 ; CHECK-LABEL: fcmp_uge_vv_v1f32:
4347 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4348 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4349 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4350 ; CHECK-NEXT: vmand.mm v0, v11, v10
4351 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
4352 ; CHECK-NEXT: vmnot.m v0, v0
4354 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4358 define <1 x i1> @fcmp_uge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4359 ; CHECK-LABEL: fcmp_uge_vf_v1f32:
4361 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4362 ; CHECK-NEXT: vfmv.s.f v9, fa0
4363 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4364 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4365 ; CHECK-NEXT: vmand.mm v0, v10, v9
4366 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4367 ; CHECK-NEXT: vmnot.m v0, v0
4369 %head = insertelement <1 x float> poison, float %b, i32 0
4370 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4371 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
4375 define <1 x i1> @fcmp_uge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4376 ; CHECK-LABEL: fcmp_uge_fv_v1f32:
4378 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4379 ; CHECK-NEXT: vfmv.s.f v9, fa0
4380 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4381 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4382 ; CHECK-NEXT: vmand.mm v0, v9, v10
4383 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4384 ; CHECK-NEXT: vmnot.m v0, v0
4386 %head = insertelement <1 x float> poison, float %b, i32 0
4387 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4388 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
4392 define <1 x i1> @fcmp_ult_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4393 ; CHECK-LABEL: fcmp_ult_vv_v1f32:
4395 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4396 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4397 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
4398 ; CHECK-NEXT: vmand.mm v0, v11, v10
4399 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
4400 ; CHECK-NEXT: vmnot.m v0, v0
4402 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
4406 define <1 x i1> @fcmp_ult_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4407 ; CHECK-LABEL: fcmp_ult_vf_v1f32:
4409 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4410 ; CHECK-NEXT: vfmv.s.f v9, fa0
4411 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4412 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4413 ; CHECK-NEXT: vmand.mm v0, v9, v10
4414 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4415 ; CHECK-NEXT: vmnot.m v0, v0
4417 %head = insertelement <1 x float> poison, float %b, i32 0
4418 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4419 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
4423 define <1 x i1> @fcmp_ult_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4424 ; CHECK-LABEL: fcmp_ult_fv_v1f32:
4426 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4427 ; CHECK-NEXT: vfmv.s.f v9, fa0
4428 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4429 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4430 ; CHECK-NEXT: vmand.mm v0, v10, v9
4431 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4432 ; CHECK-NEXT: vmnot.m v0, v0
4434 %head = insertelement <1 x float> poison, float %b, i32 0
4435 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4436 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
4440 define <1 x i1> @fcmp_ule_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4441 ; CHECK-LABEL: fcmp_ule_vv_v1f32:
4443 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4444 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4445 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
4446 ; CHECK-NEXT: vmand.mm v0, v11, v10
4447 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4448 ; CHECK-NEXT: vmnot.m v0, v0
4450 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
4454 define <1 x i1> @fcmp_ule_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4455 ; CHECK-LABEL: fcmp_ule_vf_v1f32:
4457 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4458 ; CHECK-NEXT: vfmv.s.f v9, fa0
4459 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4460 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4461 ; CHECK-NEXT: vmand.mm v0, v9, v10
4462 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4463 ; CHECK-NEXT: vmnot.m v0, v0
4465 %head = insertelement <1 x float> poison, float %b, i32 0
4466 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4467 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
4471 define <1 x i1> @fcmp_ule_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4472 ; CHECK-LABEL: fcmp_ule_fv_v1f32:
4474 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu
4475 ; CHECK-NEXT: vfmv.s.f v9, fa0
4476 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4477 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4478 ; CHECK-NEXT: vmand.mm v0, v10, v9
4479 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4480 ; CHECK-NEXT: vmnot.m v0, v0
4482 %head = insertelement <1 x float> poison, float %b, i32 0
4483 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4484 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
4488 define <1 x i1> @fcmp_une_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4489 ; CHECK-LABEL: fcmp_une_vv_v1f32:
4491 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4492 ; CHECK-NEXT: vmfne.vv v0, v8, v9
4494 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
4498 define <1 x i1> @fcmp_une_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4499 ; CHECK-LABEL: fcmp_une_vf_v1f32:
4501 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4502 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
4504 %head = insertelement <1 x float> poison, float %b, i32 0
4505 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4506 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
4510 define <1 x i1> @fcmp_une_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4511 ; CHECK-LABEL: fcmp_une_fv_v1f32:
4513 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4514 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
4516 %head = insertelement <1 x float> poison, float %b, i32 0
4517 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4518 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
4522 define <1 x i1> @fcmp_uno_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4523 ; CHECK-LABEL: fcmp_uno_vv_v1f32:
4525 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4526 ; CHECK-NEXT: vmfne.vv v9, v9, v9
4527 ; CHECK-NEXT: vmfne.vv v8, v8, v8
4528 ; CHECK-NEXT: vmor.mm v0, v8, v9
4530 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
4534 define <1 x i1> @fcmp_uno_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4535 ; CHECK-LABEL: fcmp_uno_vf_v1f32:
4537 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4538 ; CHECK-NEXT: vfmv.s.f v9, fa0
4539 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
4540 ; CHECK-NEXT: vmfne.vv v8, v8, v8
4541 ; CHECK-NEXT: vmor.mm v0, v8, v9
4543 %head = insertelement <1 x float> poison, float %b, i32 0
4544 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4545 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
4549 define <1 x i1> @fcmp_uno_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4550 ; CHECK-LABEL: fcmp_uno_fv_v1f32:
4552 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
4553 ; CHECK-NEXT: vfmv.s.f v9, fa0
4554 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
4555 ; CHECK-NEXT: vmfne.vv v8, v8, v8
4556 ; CHECK-NEXT: vmor.mm v0, v9, v8
4558 %head = insertelement <1 x float> poison, float %b, i32 0
4559 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4560 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
4564 declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float>, <2 x float>, metadata, metadata)
4565 define <2 x i1> @fcmp_oeq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4566 ; CHECK-LABEL: fcmp_oeq_vv_v2f32:
4568 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4569 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
4571 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4575 define <2 x i1> @fcmp_oeq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4576 ; CHECK-LABEL: fcmp_oeq_vf_v2f32:
4578 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4579 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
4581 %head = insertelement <2 x float> poison, float %b, i32 0
4582 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4583 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4587 define <2 x i1> @fcmp_oeq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4588 ; CHECK-LABEL: fcmp_oeq_fv_v2f32:
4590 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4591 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
4593 %head = insertelement <2 x float> poison, float %b, i32 0
4594 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4595 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4599 define <2 x i1> @fcmp_ogt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4600 ; CHECK-LABEL: fcmp_ogt_vv_v2f32:
4602 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4603 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4604 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
4605 ; CHECK-NEXT: vmand.mm v0, v11, v10
4606 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4608 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4612 define <2 x i1> @fcmp_ogt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4613 ; CHECK-LABEL: fcmp_ogt_vf_v2f32:
4615 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4616 ; CHECK-NEXT: vfmv.v.f v9, fa0
4617 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4618 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4619 ; CHECK-NEXT: vmand.mm v0, v9, v10
4620 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4622 %head = insertelement <2 x float> poison, float %b, i32 0
4623 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4624 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4628 define <2 x i1> @fcmp_ogt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4629 ; CHECK-LABEL: fcmp_ogt_fv_v2f32:
4631 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4632 ; CHECK-NEXT: vfmv.v.f v9, fa0
4633 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4634 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4635 ; CHECK-NEXT: vmand.mm v0, v10, v9
4636 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4638 %head = insertelement <2 x float> poison, float %b, i32 0
4639 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4640 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4644 define <2 x i1> @fcmp_oge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4645 ; CHECK-LABEL: fcmp_oge_vv_v2f32:
4647 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4648 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4649 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
4650 ; CHECK-NEXT: vmand.mm v0, v11, v10
4651 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
4653 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4657 define <2 x i1> @fcmp_oge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4658 ; CHECK-LABEL: fcmp_oge_vf_v2f32:
4660 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4661 ; CHECK-NEXT: vfmv.v.f v9, fa0
4662 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4663 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4664 ; CHECK-NEXT: vmand.mm v0, v9, v10
4665 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4667 %head = insertelement <2 x float> poison, float %b, i32 0
4668 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4669 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4673 define <2 x i1> @fcmp_oge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4674 ; CHECK-LABEL: fcmp_oge_fv_v2f32:
4676 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4677 ; CHECK-NEXT: vfmv.v.f v9, fa0
4678 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4679 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4680 ; CHECK-NEXT: vmand.mm v0, v10, v9
4681 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4683 %head = insertelement <2 x float> poison, float %b, i32 0
4684 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4685 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4689 define <2 x i1> @fcmp_olt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4690 ; CHECK-LABEL: fcmp_olt_vv_v2f32:
4692 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4693 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4694 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4695 ; CHECK-NEXT: vmand.mm v0, v11, v10
4696 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
4698 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4702 define <2 x i1> @fcmp_olt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4703 ; CHECK-LABEL: fcmp_olt_vf_v2f32:
4705 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4706 ; CHECK-NEXT: vfmv.v.f v9, fa0
4707 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4708 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4709 ; CHECK-NEXT: vmand.mm v0, v10, v9
4710 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4712 %head = insertelement <2 x float> poison, float %b, i32 0
4713 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4714 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4718 define <2 x i1> @fcmp_olt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4719 ; CHECK-LABEL: fcmp_olt_fv_v2f32:
4721 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4722 ; CHECK-NEXT: vfmv.v.f v9, fa0
4723 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4724 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4725 ; CHECK-NEXT: vmand.mm v0, v9, v10
4726 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4728 %head = insertelement <2 x float> poison, float %b, i32 0
4729 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4730 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4734 define <2 x i1> @fcmp_ole_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4735 ; CHECK-LABEL: fcmp_ole_vv_v2f32:
4737 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4738 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4739 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4740 ; CHECK-NEXT: vmand.mm v0, v11, v10
4741 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
4743 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4747 define <2 x i1> @fcmp_ole_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4748 ; CHECK-LABEL: fcmp_ole_vf_v2f32:
4750 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4751 ; CHECK-NEXT: vfmv.v.f v9, fa0
4752 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4753 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4754 ; CHECK-NEXT: vmand.mm v0, v10, v9
4755 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4757 %head = insertelement <2 x float> poison, float %b, i32 0
4758 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4759 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4763 define <2 x i1> @fcmp_ole_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4764 ; CHECK-LABEL: fcmp_ole_fv_v2f32:
4766 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4767 ; CHECK-NEXT: vfmv.v.f v9, fa0
4768 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4769 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4770 ; CHECK-NEXT: vmand.mm v0, v9, v10
4771 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4773 %head = insertelement <2 x float> poison, float %b, i32 0
4774 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4775 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4779 define <2 x i1> @fcmp_one_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4780 ; CHECK-LABEL: fcmp_one_vv_v2f32:
4782 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4783 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4784 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4785 ; CHECK-NEXT: vmand.mm v0, v11, v10
4786 ; CHECK-NEXT: vmv1r.v v10, v0
4787 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
4788 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4789 ; CHECK-NEXT: vmor.mm v0, v0, v10
4791 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4795 define <2 x i1> @fcmp_one_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4796 ; CHECK-LABEL: fcmp_one_vf_v2f32:
4798 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4799 ; CHECK-NEXT: vfmv.v.f v9, fa0
4800 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4801 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4802 ; CHECK-NEXT: vmand.mm v0, v10, v9
4803 ; CHECK-NEXT: vmv1r.v v9, v0
4804 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
4805 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4806 ; CHECK-NEXT: vmor.mm v0, v0, v9
4808 %head = insertelement <2 x float> poison, float %b, i32 0
4809 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4810 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4814 define <2 x i1> @fcmp_one_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4815 ; CHECK-LABEL: fcmp_one_fv_v2f32:
4817 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4818 ; CHECK-NEXT: vfmv.v.f v9, fa0
4819 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4820 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4821 ; CHECK-NEXT: vmand.mm v0, v9, v10
4822 ; CHECK-NEXT: vmv1r.v v9, v0
4823 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
4824 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4825 ; CHECK-NEXT: vmor.mm v0, v0, v9
4827 %head = insertelement <2 x float> poison, float %b, i32 0
4828 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4829 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4833 define <2 x i1> @fcmp_ord_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4834 ; CHECK-LABEL: fcmp_ord_vv_v2f32:
4836 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4837 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
4838 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4839 ; CHECK-NEXT: vmand.mm v0, v8, v9
4841 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4845 define <2 x i1> @fcmp_ord_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4846 ; CHECK-LABEL: fcmp_ord_vf_v2f32:
4848 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4849 ; CHECK-NEXT: vfmv.v.f v9, fa0
4850 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4851 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4852 ; CHECK-NEXT: vmand.mm v0, v8, v9
4854 %head = insertelement <2 x float> poison, float %b, i32 0
4855 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4856 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4860 define <2 x i1> @fcmp_ord_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4861 ; CHECK-LABEL: fcmp_ord_fv_v2f32:
4863 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
4864 ; CHECK-NEXT: vfmv.v.f v9, fa0
4865 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4866 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
4867 ; CHECK-NEXT: vmand.mm v0, v9, v8
4869 %head = insertelement <2 x float> poison, float %b, i32 0
4870 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4871 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4875 define <2 x i1> @fcmp_ueq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4876 ; CHECK-LABEL: fcmp_ueq_vv_v2f32:
4878 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4879 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4880 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4881 ; CHECK-NEXT: vmand.mm v0, v11, v10
4882 ; CHECK-NEXT: vmv1r.v v10, v0
4883 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
4884 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
4885 ; CHECK-NEXT: vmnor.mm v0, v0, v10
4887 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4891 define <2 x i1> @fcmp_ueq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4892 ; CHECK-LABEL: fcmp_ueq_vf_v2f32:
4894 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4895 ; CHECK-NEXT: vfmv.v.f v9, fa0
4896 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4897 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4898 ; CHECK-NEXT: vmand.mm v0, v10, v9
4899 ; CHECK-NEXT: vmv1r.v v9, v0
4900 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
4901 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
4902 ; CHECK-NEXT: vmnor.mm v0, v0, v9
4904 %head = insertelement <2 x float> poison, float %b, i32 0
4905 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4906 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4910 define <2 x i1> @fcmp_ueq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4911 ; CHECK-LABEL: fcmp_ueq_fv_v2f32:
4913 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4914 ; CHECK-NEXT: vfmv.v.f v9, fa0
4915 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4916 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4917 ; CHECK-NEXT: vmand.mm v0, v9, v10
4918 ; CHECK-NEXT: vmv1r.v v9, v0
4919 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
4920 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
4921 ; CHECK-NEXT: vmnor.mm v0, v0, v9
4923 %head = insertelement <2 x float> poison, float %b, i32 0
4924 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4925 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4929 define <2 x i1> @fcmp_ugt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4930 ; CHECK-LABEL: fcmp_ugt_vv_v2f32:
4932 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4933 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4934 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4935 ; CHECK-NEXT: vmand.mm v0, v11, v10
4936 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
4937 ; CHECK-NEXT: vmnot.m v0, v0
4939 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4943 define <2 x i1> @fcmp_ugt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4944 ; CHECK-LABEL: fcmp_ugt_vf_v2f32:
4946 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4947 ; CHECK-NEXT: vfmv.v.f v9, fa0
4948 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4949 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4950 ; CHECK-NEXT: vmand.mm v0, v10, v9
4951 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
4952 ; CHECK-NEXT: vmnot.m v0, v0
4954 %head = insertelement <2 x float> poison, float %b, i32 0
4955 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4956 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4960 define <2 x i1> @fcmp_ugt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4961 ; CHECK-LABEL: fcmp_ugt_fv_v2f32:
4963 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4964 ; CHECK-NEXT: vfmv.v.f v9, fa0
4965 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4966 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4967 ; CHECK-NEXT: vmand.mm v0, v9, v10
4968 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
4969 ; CHECK-NEXT: vmnot.m v0, v0
4971 %head = insertelement <2 x float> poison, float %b, i32 0
4972 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4973 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4977 define <2 x i1> @fcmp_uge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4978 ; CHECK-LABEL: fcmp_uge_vv_v2f32:
4980 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4981 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
4982 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
4983 ; CHECK-NEXT: vmand.mm v0, v11, v10
4984 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
4985 ; CHECK-NEXT: vmnot.m v0, v0
4987 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4991 define <2 x i1> @fcmp_uge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4992 ; CHECK-LABEL: fcmp_uge_vf_v2f32:
4994 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
4995 ; CHECK-NEXT: vfmv.v.f v9, fa0
4996 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
4997 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
4998 ; CHECK-NEXT: vmand.mm v0, v10, v9
4999 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5000 ; CHECK-NEXT: vmnot.m v0, v0
5002 %head = insertelement <2 x float> poison, float %b, i32 0
5003 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5004 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5008 define <2 x i1> @fcmp_uge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5009 ; CHECK-LABEL: fcmp_uge_fv_v2f32:
5011 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5012 ; CHECK-NEXT: vfmv.v.f v9, fa0
5013 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5014 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5015 ; CHECK-NEXT: vmand.mm v0, v9, v10
5016 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5017 ; CHECK-NEXT: vmnot.m v0, v0
5019 %head = insertelement <2 x float> poison, float %b, i32 0
5020 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5021 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5025 define <2 x i1> @fcmp_ult_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5026 ; CHECK-LABEL: fcmp_ult_vv_v2f32:
5028 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5029 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5030 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5031 ; CHECK-NEXT: vmand.mm v0, v11, v10
5032 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
5033 ; CHECK-NEXT: vmnot.m v0, v0
5035 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5039 define <2 x i1> @fcmp_ult_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5040 ; CHECK-LABEL: fcmp_ult_vf_v2f32:
5042 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5043 ; CHECK-NEXT: vfmv.v.f v9, fa0
5044 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5045 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5046 ; CHECK-NEXT: vmand.mm v0, v9, v10
5047 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
5048 ; CHECK-NEXT: vmnot.m v0, v0
5050 %head = insertelement <2 x float> poison, float %b, i32 0
5051 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5052 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5056 define <2 x i1> @fcmp_ult_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5057 ; CHECK-LABEL: fcmp_ult_fv_v2f32:
5059 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5060 ; CHECK-NEXT: vfmv.v.f v9, fa0
5061 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5062 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5063 ; CHECK-NEXT: vmand.mm v0, v10, v9
5064 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
5065 ; CHECK-NEXT: vmnot.m v0, v0
5067 %head = insertelement <2 x float> poison, float %b, i32 0
5068 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5069 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5073 define <2 x i1> @fcmp_ule_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5074 ; CHECK-LABEL: fcmp_ule_vv_v2f32:
5076 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5077 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5078 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5079 ; CHECK-NEXT: vmand.mm v0, v11, v10
5080 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
5081 ; CHECK-NEXT: vmnot.m v0, v0
5083 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5087 define <2 x i1> @fcmp_ule_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5088 ; CHECK-LABEL: fcmp_ule_vf_v2f32:
5090 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5091 ; CHECK-NEXT: vfmv.v.f v9, fa0
5092 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5093 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5094 ; CHECK-NEXT: vmand.mm v0, v9, v10
5095 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5096 ; CHECK-NEXT: vmnot.m v0, v0
5098 %head = insertelement <2 x float> poison, float %b, i32 0
5099 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5100 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5104 define <2 x i1> @fcmp_ule_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5105 ; CHECK-LABEL: fcmp_ule_fv_v2f32:
5107 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
5108 ; CHECK-NEXT: vfmv.v.f v9, fa0
5109 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5110 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5111 ; CHECK-NEXT: vmand.mm v0, v10, v9
5112 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5113 ; CHECK-NEXT: vmnot.m v0, v0
5115 %head = insertelement <2 x float> poison, float %b, i32 0
5116 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5117 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5121 define <2 x i1> @fcmp_une_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5122 ; CHECK-LABEL: fcmp_une_vv_v2f32:
5124 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5125 ; CHECK-NEXT: vmfne.vv v0, v8, v9
5127 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5131 define <2 x i1> @fcmp_une_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5132 ; CHECK-LABEL: fcmp_une_vf_v2f32:
5134 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5135 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
5137 %head = insertelement <2 x float> poison, float %b, i32 0
5138 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5139 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5143 define <2 x i1> @fcmp_une_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5144 ; CHECK-LABEL: fcmp_une_fv_v2f32:
5146 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5147 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
5149 %head = insertelement <2 x float> poison, float %b, i32 0
5150 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5151 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5155 define <2 x i1> @fcmp_uno_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5156 ; CHECK-LABEL: fcmp_uno_vv_v2f32:
5158 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5159 ; CHECK-NEXT: vmfne.vv v9, v9, v9
5160 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5161 ; CHECK-NEXT: vmor.mm v0, v8, v9
5163 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5167 define <2 x i1> @fcmp_uno_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5168 ; CHECK-LABEL: fcmp_uno_vf_v2f32:
5170 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5171 ; CHECK-NEXT: vfmv.v.f v9, fa0
5172 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
5173 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5174 ; CHECK-NEXT: vmor.mm v0, v8, v9
5176 %head = insertelement <2 x float> poison, float %b, i32 0
5177 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5178 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5182 define <2 x i1> @fcmp_uno_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5183 ; CHECK-LABEL: fcmp_uno_fv_v2f32:
5185 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
5186 ; CHECK-NEXT: vfmv.v.f v9, fa0
5187 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
5188 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5189 ; CHECK-NEXT: vmor.mm v0, v9, v8
5191 %head = insertelement <2 x float> poison, float %b, i32 0
5192 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5193 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5197 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)
5198 define <4 x i1> @fcmp_oeq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5199 ; CHECK-LABEL: fcmp_oeq_vv_v4f32:
5201 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5202 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
5204 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5208 define <4 x i1> @fcmp_oeq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5209 ; CHECK-LABEL: fcmp_oeq_vf_v4f32:
5211 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5212 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
5214 %head = insertelement <4 x float> poison, float %b, i32 0
5215 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5216 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5220 define <4 x i1> @fcmp_oeq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5221 ; CHECK-LABEL: fcmp_oeq_fv_v4f32:
5223 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5224 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
5226 %head = insertelement <4 x float> poison, float %b, i32 0
5227 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5228 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5232 define <4 x i1> @fcmp_ogt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5233 ; CHECK-LABEL: fcmp_ogt_vv_v4f32:
5235 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5236 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5237 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5238 ; CHECK-NEXT: vmand.mm v0, v11, v10
5239 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
5241 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5245 define <4 x i1> @fcmp_ogt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5246 ; CHECK-LABEL: fcmp_ogt_vf_v4f32:
5248 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5249 ; CHECK-NEXT: vfmv.v.f v9, fa0
5250 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5251 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5252 ; CHECK-NEXT: vmand.mm v0, v9, v10
5253 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5255 %head = insertelement <4 x float> poison, float %b, i32 0
5256 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5257 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5261 define <4 x i1> @fcmp_ogt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5262 ; CHECK-LABEL: fcmp_ogt_fv_v4f32:
5264 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5265 ; CHECK-NEXT: vfmv.v.f v9, fa0
5266 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5267 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5268 ; CHECK-NEXT: vmand.mm v0, v10, v9
5269 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5271 %head = insertelement <4 x float> poison, float %b, i32 0
5272 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5273 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5277 define <4 x i1> @fcmp_oge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5278 ; CHECK-LABEL: fcmp_oge_vv_v4f32:
5280 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5281 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5282 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5283 ; CHECK-NEXT: vmand.mm v0, v11, v10
5284 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
5286 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5290 define <4 x i1> @fcmp_oge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5291 ; CHECK-LABEL: fcmp_oge_vf_v4f32:
5293 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5294 ; CHECK-NEXT: vfmv.v.f v9, fa0
5295 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5296 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5297 ; CHECK-NEXT: vmand.mm v0, v9, v10
5298 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
5300 %head = insertelement <4 x float> poison, float %b, i32 0
5301 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5302 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5306 define <4 x i1> @fcmp_oge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5307 ; CHECK-LABEL: fcmp_oge_fv_v4f32:
5309 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5310 ; CHECK-NEXT: vfmv.v.f v9, fa0
5311 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5312 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5313 ; CHECK-NEXT: vmand.mm v0, v10, v9
5314 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
5316 %head = insertelement <4 x float> poison, float %b, i32 0
5317 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5318 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
5322 define <4 x i1> @fcmp_olt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5323 ; CHECK-LABEL: fcmp_olt_vv_v4f32:
5325 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5326 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5327 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5328 ; CHECK-NEXT: vmand.mm v0, v11, v10
5329 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
5331 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
5335 define <4 x i1> @fcmp_olt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5336 ; CHECK-LABEL: fcmp_olt_vf_v4f32:
5338 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5339 ; CHECK-NEXT: vfmv.v.f v9, fa0
5340 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5341 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5342 ; CHECK-NEXT: vmand.mm v0, v10, v9
5343 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5345 %head = insertelement <4 x float> poison, float %b, i32 0
5346 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5347 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
5351 define <4 x i1> @fcmp_olt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5352 ; CHECK-LABEL: fcmp_olt_fv_v4f32:
5354 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5355 ; CHECK-NEXT: vfmv.v.f v9, fa0
5356 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5357 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5358 ; CHECK-NEXT: vmand.mm v0, v9, v10
5359 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5361 %head = insertelement <4 x float> poison, float %b, i32 0
5362 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5363 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
5367 define <4 x i1> @fcmp_ole_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5368 ; CHECK-LABEL: fcmp_ole_vv_v4f32:
5370 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5371 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5372 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5373 ; CHECK-NEXT: vmand.mm v0, v11, v10
5374 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
5376 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
5380 define <4 x i1> @fcmp_ole_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5381 ; CHECK-LABEL: fcmp_ole_vf_v4f32:
5383 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5384 ; CHECK-NEXT: vfmv.v.f v9, fa0
5385 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5386 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5387 ; CHECK-NEXT: vmand.mm v0, v10, v9
5388 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
5390 %head = insertelement <4 x float> poison, float %b, i32 0
5391 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5392 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
5396 define <4 x i1> @fcmp_ole_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5397 ; CHECK-LABEL: fcmp_ole_fv_v4f32:
5399 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5400 ; CHECK-NEXT: vfmv.v.f v9, fa0
5401 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5402 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5403 ; CHECK-NEXT: vmand.mm v0, v9, v10
5404 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
5406 %head = insertelement <4 x float> poison, float %b, i32 0
5407 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5408 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
5412 define <4 x i1> @fcmp_one_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5413 ; CHECK-LABEL: fcmp_one_vv_v4f32:
5415 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5416 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5417 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5418 ; CHECK-NEXT: vmand.mm v0, v11, v10
5419 ; CHECK-NEXT: vmv.v.v v10, v0
5420 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
5421 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
5422 ; CHECK-NEXT: vmor.mm v0, v0, v10
5424 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
5428 define <4 x i1> @fcmp_one_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5429 ; CHECK-LABEL: fcmp_one_vf_v4f32:
5431 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5432 ; CHECK-NEXT: vfmv.v.f v9, fa0
5433 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5434 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5435 ; CHECK-NEXT: vmand.mm v0, v10, v9
5436 ; CHECK-NEXT: vmv.v.v v9, v0
5437 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
5438 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5439 ; CHECK-NEXT: vmor.mm v0, v0, v9
5441 %head = insertelement <4 x float> poison, float %b, i32 0
5442 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5443 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
5447 define <4 x i1> @fcmp_one_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5448 ; CHECK-LABEL: fcmp_one_fv_v4f32:
5450 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5451 ; CHECK-NEXT: vfmv.v.f v9, fa0
5452 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5453 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5454 ; CHECK-NEXT: vmand.mm v0, v9, v10
5455 ; CHECK-NEXT: vmv.v.v v9, v0
5456 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
5457 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5458 ; CHECK-NEXT: vmor.mm v0, v0, v9
5460 %head = insertelement <4 x float> poison, float %b, i32 0
5461 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5462 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
5466 define <4 x i1> @fcmp_ord_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5467 ; CHECK-LABEL: fcmp_ord_vv_v4f32:
5469 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5470 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
5471 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
5472 ; CHECK-NEXT: vmand.mm v0, v8, v9
5474 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
5478 define <4 x i1> @fcmp_ord_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5479 ; CHECK-LABEL: fcmp_ord_vf_v4f32:
5481 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5482 ; CHECK-NEXT: vfmv.v.f v9, fa0
5483 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5484 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
5485 ; CHECK-NEXT: vmand.mm v0, v8, v9
5487 %head = insertelement <4 x float> poison, float %b, i32 0
5488 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5489 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
5493 define <4 x i1> @fcmp_ord_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5494 ; CHECK-LABEL: fcmp_ord_fv_v4f32:
5496 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5497 ; CHECK-NEXT: vfmv.v.f v9, fa0
5498 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5499 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
5500 ; CHECK-NEXT: vmand.mm v0, v9, v8
5502 %head = insertelement <4 x float> poison, float %b, i32 0
5503 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5504 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
5508 define <4 x i1> @fcmp_ueq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5509 ; CHECK-LABEL: fcmp_ueq_vv_v4f32:
5511 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5512 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5513 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5514 ; CHECK-NEXT: vmand.mm v0, v11, v10
5515 ; CHECK-NEXT: vmv.v.v v10, v0
5516 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
5517 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
5518 ; CHECK-NEXT: vmnor.mm v0, v0, v10
5520 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5524 define <4 x i1> @fcmp_ueq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5525 ; CHECK-LABEL: fcmp_ueq_vf_v4f32:
5527 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5528 ; CHECK-NEXT: vfmv.v.f v9, fa0
5529 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5530 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5531 ; CHECK-NEXT: vmand.mm v0, v10, v9
5532 ; CHECK-NEXT: vmv.v.v v9, v0
5533 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
5534 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5535 ; CHECK-NEXT: vmnor.mm v0, v0, v9
5537 %head = insertelement <4 x float> poison, float %b, i32 0
5538 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5539 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5543 define <4 x i1> @fcmp_ueq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5544 ; CHECK-LABEL: fcmp_ueq_fv_v4f32:
5546 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5547 ; CHECK-NEXT: vfmv.v.f v9, fa0
5548 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5549 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5550 ; CHECK-NEXT: vmand.mm v0, v9, v10
5551 ; CHECK-NEXT: vmv.v.v v9, v0
5552 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
5553 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5554 ; CHECK-NEXT: vmnor.mm v0, v0, v9
5556 %head = insertelement <4 x float> poison, float %b, i32 0
5557 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5558 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5562 define <4 x i1> @fcmp_ugt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5563 ; CHECK-LABEL: fcmp_ugt_vv_v4f32:
5565 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5566 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5567 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5568 ; CHECK-NEXT: vmand.mm v0, v11, v10
5569 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
5570 ; CHECK-NEXT: vmnot.m v0, v0
5572 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5576 define <4 x i1> @fcmp_ugt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5577 ; CHECK-LABEL: fcmp_ugt_vf_v4f32:
5579 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5580 ; CHECK-NEXT: vfmv.v.f v9, fa0
5581 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5582 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5583 ; CHECK-NEXT: vmand.mm v0, v10, v9
5584 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
5585 ; CHECK-NEXT: vmnot.m v0, v0
5587 %head = insertelement <4 x float> poison, float %b, i32 0
5588 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5589 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5593 define <4 x i1> @fcmp_ugt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5594 ; CHECK-LABEL: fcmp_ugt_fv_v4f32:
5596 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5597 ; CHECK-NEXT: vfmv.v.f v9, fa0
5598 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5599 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5600 ; CHECK-NEXT: vmand.mm v0, v9, v10
5601 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
5602 ; CHECK-NEXT: vmnot.m v0, v0
5604 %head = insertelement <4 x float> poison, float %b, i32 0
5605 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5606 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5610 define <4 x i1> @fcmp_uge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5611 ; CHECK-LABEL: fcmp_uge_vv_v4f32:
5613 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5614 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
5615 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
5616 ; CHECK-NEXT: vmand.mm v0, v11, v10
5617 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
5618 ; CHECK-NEXT: vmnot.m v0, v0
5620 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
5624 define <4 x i1> @fcmp_uge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5625 ; CHECK-LABEL: fcmp_uge_vf_v4f32:
5627 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5628 ; CHECK-NEXT: vfmv.v.f v9, fa0
5629 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5630 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5631 ; CHECK-NEXT: vmand.mm v0, v10, v9
5632 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5633 ; CHECK-NEXT: vmnot.m v0, v0
5635 %head = insertelement <4 x float> poison, float %b, i32 0
5636 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5637 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5641 define <4 x i1> @fcmp_uge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5642 ; CHECK-LABEL: fcmp_uge_fv_v4f32:
5644 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5645 ; CHECK-NEXT: vfmv.v.f v9, fa0
5646 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5647 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5648 ; CHECK-NEXT: vmand.mm v0, v9, v10
5649 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5650 ; CHECK-NEXT: vmnot.m v0, v0
5652 %head = insertelement <4 x float> poison, float %b, i32 0
5653 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5654 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5658 define <4 x i1> @fcmp_ult_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5659 ; CHECK-LABEL: fcmp_ult_vv_v4f32:
5661 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5662 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5663 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5664 ; CHECK-NEXT: vmand.mm v0, v11, v10
5665 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
5666 ; CHECK-NEXT: vmnot.m v0, v0
5668 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5672 define <4 x i1> @fcmp_ult_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5673 ; CHECK-LABEL: fcmp_ult_vf_v4f32:
5675 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5676 ; CHECK-NEXT: vfmv.v.f v9, fa0
5677 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5678 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5679 ; CHECK-NEXT: vmand.mm v0, v9, v10
5680 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
5681 ; CHECK-NEXT: vmnot.m v0, v0
5683 %head = insertelement <4 x float> poison, float %b, i32 0
5684 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5685 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5689 define <4 x i1> @fcmp_ult_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5690 ; CHECK-LABEL: fcmp_ult_fv_v4f32:
5692 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5693 ; CHECK-NEXT: vfmv.v.f v9, fa0
5694 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5695 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5696 ; CHECK-NEXT: vmand.mm v0, v10, v9
5697 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
5698 ; CHECK-NEXT: vmnot.m v0, v0
5700 %head = insertelement <4 x float> poison, float %b, i32 0
5701 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5702 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5706 define <4 x i1> @fcmp_ule_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5707 ; CHECK-LABEL: fcmp_ule_vv_v4f32:
5709 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5710 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5711 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
5712 ; CHECK-NEXT: vmand.mm v0, v11, v10
5713 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
5714 ; CHECK-NEXT: vmnot.m v0, v0
5716 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5720 define <4 x i1> @fcmp_ule_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5721 ; CHECK-LABEL: fcmp_ule_vf_v4f32:
5723 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5724 ; CHECK-NEXT: vfmv.v.f v9, fa0
5725 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5726 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5727 ; CHECK-NEXT: vmand.mm v0, v9, v10
5728 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
5729 ; CHECK-NEXT: vmnot.m v0, v0
5731 %head = insertelement <4 x float> poison, float %b, i32 0
5732 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5733 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5737 define <4 x i1> @fcmp_ule_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5738 ; CHECK-LABEL: fcmp_ule_fv_v4f32:
5740 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu
5741 ; CHECK-NEXT: vfmv.v.f v9, fa0
5742 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5743 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
5744 ; CHECK-NEXT: vmand.mm v0, v10, v9
5745 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
5746 ; CHECK-NEXT: vmnot.m v0, v0
5748 %head = insertelement <4 x float> poison, float %b, i32 0
5749 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5750 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5754 define <4 x i1> @fcmp_une_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5755 ; CHECK-LABEL: fcmp_une_vv_v4f32:
5757 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5758 ; CHECK-NEXT: vmfne.vv v0, v8, v9
5760 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5764 define <4 x i1> @fcmp_une_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5765 ; CHECK-LABEL: fcmp_une_vf_v4f32:
5767 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5768 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
5770 %head = insertelement <4 x float> poison, float %b, i32 0
5771 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5772 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5776 define <4 x i1> @fcmp_une_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5777 ; CHECK-LABEL: fcmp_une_fv_v4f32:
5779 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5780 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
5782 %head = insertelement <4 x float> poison, float %b, i32 0
5783 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5784 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5788 define <4 x i1> @fcmp_uno_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5789 ; CHECK-LABEL: fcmp_uno_vv_v4f32:
5791 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5792 ; CHECK-NEXT: vmfne.vv v9, v9, v9
5793 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5794 ; CHECK-NEXT: vmor.mm v0, v8, v9
5796 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5800 define <4 x i1> @fcmp_uno_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5801 ; CHECK-LABEL: fcmp_uno_vf_v4f32:
5803 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5804 ; CHECK-NEXT: vfmv.v.f v9, fa0
5805 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
5806 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5807 ; CHECK-NEXT: vmor.mm v0, v8, v9
5809 %head = insertelement <4 x float> poison, float %b, i32 0
5810 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5811 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5815 define <4 x i1> @fcmp_uno_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5816 ; CHECK-LABEL: fcmp_uno_fv_v4f32:
5818 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5819 ; CHECK-NEXT: vfmv.v.f v9, fa0
5820 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
5821 ; CHECK-NEXT: vmfne.vv v8, v8, v8
5822 ; CHECK-NEXT: vmor.mm v0, v9, v8
5824 %head = insertelement <4 x float> poison, float %b, i32 0
5825 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5826 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5830 declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float>, <8 x float>, metadata, metadata)
5831 define <8 x i1> @fcmp_oeq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5832 ; CHECK-LABEL: fcmp_oeq_vv_v8f32:
5834 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
5835 ; CHECK-NEXT: vmfeq.vv v0, v8, v10
5837 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5841 define <8 x i1> @fcmp_oeq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5842 ; CHECK-LABEL: fcmp_oeq_vf_v8f32:
5844 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
5845 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
5847 %head = insertelement <8 x float> poison, float %b, i32 0
5848 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5849 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5853 define <8 x i1> @fcmp_oeq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5854 ; CHECK-LABEL: fcmp_oeq_fv_v8f32:
5856 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
5857 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
5859 %head = insertelement <8 x float> poison, float %b, i32 0
5860 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5861 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5865 define <8 x i1> @fcmp_ogt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5866 ; CHECK-LABEL: fcmp_ogt_vv_v8f32:
5868 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5869 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
5870 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
5871 ; CHECK-NEXT: vmand.mm v12, v13, v12
5872 ; CHECK-NEXT: vmv1r.v v0, v12
5873 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
5874 ; CHECK-NEXT: vmv1r.v v0, v12
5876 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5880 define <8 x i1> @fcmp_ogt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5881 ; CHECK-LABEL: fcmp_ogt_vf_v8f32:
5883 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5884 ; CHECK-NEXT: vfmv.v.f v10, fa0
5885 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
5886 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5887 ; CHECK-NEXT: vmand.mm v10, v12, v10
5888 ; CHECK-NEXT: vmv1r.v v0, v10
5889 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
5890 ; CHECK-NEXT: vmv1r.v v0, v10
5892 %head = insertelement <8 x float> poison, float %b, i32 0
5893 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5894 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5898 define <8 x i1> @fcmp_ogt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5899 ; CHECK-LABEL: fcmp_ogt_fv_v8f32:
5901 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5902 ; CHECK-NEXT: vfmv.v.f v10, fa0
5903 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
5904 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5905 ; CHECK-NEXT: vmand.mm v10, v10, v12
5906 ; CHECK-NEXT: vmv1r.v v0, v10
5907 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
5908 ; CHECK-NEXT: vmv1r.v v0, v10
5910 %head = insertelement <8 x float> poison, float %b, i32 0
5911 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5912 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5916 define <8 x i1> @fcmp_oge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5917 ; CHECK-LABEL: fcmp_oge_vv_v8f32:
5919 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5920 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
5921 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
5922 ; CHECK-NEXT: vmand.mm v12, v13, v12
5923 ; CHECK-NEXT: vmv1r.v v0, v12
5924 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
5925 ; CHECK-NEXT: vmv1r.v v0, v12
5927 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5931 define <8 x i1> @fcmp_oge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5932 ; CHECK-LABEL: fcmp_oge_vf_v8f32:
5934 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5935 ; CHECK-NEXT: vfmv.v.f v10, fa0
5936 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
5937 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5938 ; CHECK-NEXT: vmand.mm v10, v12, v10
5939 ; CHECK-NEXT: vmv1r.v v0, v10
5940 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
5941 ; CHECK-NEXT: vmv1r.v v0, v10
5943 %head = insertelement <8 x float> poison, float %b, i32 0
5944 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5945 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5949 define <8 x i1> @fcmp_oge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5950 ; CHECK-LABEL: fcmp_oge_fv_v8f32:
5952 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5953 ; CHECK-NEXT: vfmv.v.f v10, fa0
5954 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
5955 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5956 ; CHECK-NEXT: vmand.mm v10, v10, v12
5957 ; CHECK-NEXT: vmv1r.v v0, v10
5958 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
5959 ; CHECK-NEXT: vmv1r.v v0, v10
5961 %head = insertelement <8 x float> poison, float %b, i32 0
5962 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5963 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
5967 define <8 x i1> @fcmp_olt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5968 ; CHECK-LABEL: fcmp_olt_vv_v8f32:
5970 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5971 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
5972 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
5973 ; CHECK-NEXT: vmand.mm v12, v13, v12
5974 ; CHECK-NEXT: vmv1r.v v0, v12
5975 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
5976 ; CHECK-NEXT: vmv1r.v v0, v12
5978 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
5982 define <8 x i1> @fcmp_olt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5983 ; CHECK-LABEL: fcmp_olt_vf_v8f32:
5985 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
5986 ; CHECK-NEXT: vfmv.v.f v10, fa0
5987 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
5988 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
5989 ; CHECK-NEXT: vmand.mm v10, v10, v12
5990 ; CHECK-NEXT: vmv1r.v v0, v10
5991 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
5992 ; CHECK-NEXT: vmv1r.v v0, v10
5994 %head = insertelement <8 x float> poison, float %b, i32 0
5995 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5996 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
6000 define <8 x i1> @fcmp_olt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6001 ; CHECK-LABEL: fcmp_olt_fv_v8f32:
6003 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6004 ; CHECK-NEXT: vfmv.v.f v10, fa0
6005 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6006 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6007 ; CHECK-NEXT: vmand.mm v10, v12, v10
6008 ; CHECK-NEXT: vmv1r.v v0, v10
6009 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
6010 ; CHECK-NEXT: vmv1r.v v0, v10
6012 %head = insertelement <8 x float> poison, float %b, i32 0
6013 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6014 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6018 define <8 x i1> @fcmp_ole_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6019 ; CHECK-LABEL: fcmp_ole_vv_v8f32:
6021 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6022 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6023 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
6024 ; CHECK-NEXT: vmand.mm v12, v13, v12
6025 ; CHECK-NEXT: vmv1r.v v0, v12
6026 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
6027 ; CHECK-NEXT: vmv1r.v v0, v12
6029 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6033 define <8 x i1> @fcmp_ole_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6034 ; CHECK-LABEL: fcmp_ole_vf_v8f32:
6036 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6037 ; CHECK-NEXT: vfmv.v.f v10, fa0
6038 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6039 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6040 ; CHECK-NEXT: vmand.mm v10, v10, v12
6041 ; CHECK-NEXT: vmv1r.v v0, v10
6042 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
6043 ; CHECK-NEXT: vmv1r.v v0, v10
6045 %head = insertelement <8 x float> poison, float %b, i32 0
6046 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6047 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6051 define <8 x i1> @fcmp_ole_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6052 ; CHECK-LABEL: fcmp_ole_fv_v8f32:
6054 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6055 ; CHECK-NEXT: vfmv.v.f v10, fa0
6056 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6057 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6058 ; CHECK-NEXT: vmand.mm v10, v12, v10
6059 ; CHECK-NEXT: vmv1r.v v0, v10
6060 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
6061 ; CHECK-NEXT: vmv1r.v v0, v10
6063 %head = insertelement <8 x float> poison, float %b, i32 0
6064 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6065 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6069 define <8 x i1> @fcmp_one_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6070 ; CHECK-LABEL: fcmp_one_vv_v8f32:
6072 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6073 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6074 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
6075 ; CHECK-NEXT: vmand.mm v12, v13, v12
6076 ; CHECK-NEXT: vmv1r.v v13, v12
6077 ; CHECK-NEXT: vmv1r.v v0, v12
6078 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
6079 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
6080 ; CHECK-NEXT: vmor.mm v0, v12, v13
6082 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6086 define <8 x i1> @fcmp_one_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6087 ; CHECK-LABEL: fcmp_one_vf_v8f32:
6089 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6090 ; CHECK-NEXT: vfmv.v.f v10, fa0
6091 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6092 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
6093 ; CHECK-NEXT: vmand.mm v10, v12, v13
6094 ; CHECK-NEXT: vmv1r.v v11, v10
6095 ; CHECK-NEXT: vmv1r.v v0, v10
6096 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
6097 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
6098 ; CHECK-NEXT: vmor.mm v0, v10, v11
6100 %head = insertelement <8 x float> poison, float %b, i32 0
6101 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6102 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6106 define <8 x i1> @fcmp_one_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6107 ; CHECK-LABEL: fcmp_one_fv_v8f32:
6109 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6110 ; CHECK-NEXT: vfmv.v.f v10, fa0
6111 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6112 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
6113 ; CHECK-NEXT: vmand.mm v10, v13, v12
6114 ; CHECK-NEXT: vmv1r.v v11, v10
6115 ; CHECK-NEXT: vmv1r.v v0, v10
6116 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
6117 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
6118 ; CHECK-NEXT: vmor.mm v0, v10, v11
6120 %head = insertelement <8 x float> poison, float %b, i32 0
6121 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6122 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6126 define <8 x i1> @fcmp_ord_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6127 ; CHECK-LABEL: fcmp_ord_vv_v8f32:
6129 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6130 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6131 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6132 ; CHECK-NEXT: vmand.mm v0, v10, v12
6134 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6138 define <8 x i1> @fcmp_ord_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6139 ; CHECK-LABEL: fcmp_ord_vf_v8f32:
6141 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6142 ; CHECK-NEXT: vfmv.v.f v10, fa0
6143 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6144 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6145 ; CHECK-NEXT: vmand.mm v0, v10, v12
6147 %head = insertelement <8 x float> poison, float %b, i32 0
6148 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6149 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6153 define <8 x i1> @fcmp_ord_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6154 ; CHECK-LABEL: fcmp_ord_fv_v8f32:
6156 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6157 ; CHECK-NEXT: vfmv.v.f v10, fa0
6158 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6159 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6160 ; CHECK-NEXT: vmand.mm v0, v12, v10
6162 %head = insertelement <8 x float> poison, float %b, i32 0
6163 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6164 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6168 define <8 x i1> @fcmp_ueq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6169 ; CHECK-LABEL: fcmp_ueq_vv_v8f32:
6171 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6172 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6173 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
6174 ; CHECK-NEXT: vmand.mm v12, v13, v12
6175 ; CHECK-NEXT: vmv1r.v v13, v12
6176 ; CHECK-NEXT: vmv1r.v v0, v12
6177 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
6178 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
6179 ; CHECK-NEXT: vmnor.mm v0, v12, v13
6181 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6185 define <8 x i1> @fcmp_ueq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6186 ; CHECK-LABEL: fcmp_ueq_vf_v8f32:
6188 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6189 ; CHECK-NEXT: vfmv.v.f v10, fa0
6190 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6191 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
6192 ; CHECK-NEXT: vmand.mm v10, v12, v13
6193 ; CHECK-NEXT: vmv1r.v v11, v10
6194 ; CHECK-NEXT: vmv1r.v v0, v10
6195 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
6196 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
6197 ; CHECK-NEXT: vmnor.mm v0, v10, v11
6199 %head = insertelement <8 x float> poison, float %b, i32 0
6200 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6201 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6205 define <8 x i1> @fcmp_ueq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6206 ; CHECK-LABEL: fcmp_ueq_fv_v8f32:
6208 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6209 ; CHECK-NEXT: vfmv.v.f v10, fa0
6210 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6211 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
6212 ; CHECK-NEXT: vmand.mm v10, v13, v12
6213 ; CHECK-NEXT: vmv1r.v v11, v10
6214 ; CHECK-NEXT: vmv1r.v v0, v10
6215 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
6216 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
6217 ; CHECK-NEXT: vmnor.mm v0, v10, v11
6219 %head = insertelement <8 x float> poison, float %b, i32 0
6220 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6221 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6225 define <8 x i1> @fcmp_ugt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6226 ; CHECK-LABEL: fcmp_ugt_vv_v8f32:
6228 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6229 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6230 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
6231 ; CHECK-NEXT: vmand.mm v12, v13, v12
6232 ; CHECK-NEXT: vmv1r.v v0, v12
6233 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
6234 ; CHECK-NEXT: vmnot.m v0, v12
6236 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6240 define <8 x i1> @fcmp_ugt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6241 ; CHECK-LABEL: fcmp_ugt_vf_v8f32:
6243 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6244 ; CHECK-NEXT: vfmv.v.f v10, fa0
6245 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6246 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6247 ; CHECK-NEXT: vmand.mm v10, v10, v12
6248 ; CHECK-NEXT: vmv1r.v v0, v10
6249 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
6250 ; CHECK-NEXT: vmnot.m v0, v10
6252 %head = insertelement <8 x float> poison, float %b, i32 0
6253 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6254 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6258 define <8 x i1> @fcmp_ugt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6259 ; CHECK-LABEL: fcmp_ugt_fv_v8f32:
6261 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6262 ; CHECK-NEXT: vfmv.v.f v10, fa0
6263 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6264 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6265 ; CHECK-NEXT: vmand.mm v10, v12, v10
6266 ; CHECK-NEXT: vmv1r.v v0, v10
6267 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
6268 ; CHECK-NEXT: vmnot.m v0, v10
6270 %head = insertelement <8 x float> poison, float %b, i32 0
6271 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6272 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6276 define <8 x i1> @fcmp_uge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6277 ; CHECK-LABEL: fcmp_uge_vv_v8f32:
6279 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6280 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
6281 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
6282 ; CHECK-NEXT: vmand.mm v12, v13, v12
6283 ; CHECK-NEXT: vmv1r.v v0, v12
6284 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
6285 ; CHECK-NEXT: vmnot.m v0, v12
6287 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
6291 define <8 x i1> @fcmp_uge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6292 ; CHECK-LABEL: fcmp_uge_vf_v8f32:
6294 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6295 ; CHECK-NEXT: vfmv.v.f v10, fa0
6296 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6297 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6298 ; CHECK-NEXT: vmand.mm v10, v10, v12
6299 ; CHECK-NEXT: vmv1r.v v0, v10
6300 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
6301 ; CHECK-NEXT: vmnot.m v0, v10
6303 %head = insertelement <8 x float> poison, float %b, i32 0
6304 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6305 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
6309 define <8 x i1> @fcmp_uge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6310 ; CHECK-LABEL: fcmp_uge_fv_v8f32:
6312 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6313 ; CHECK-NEXT: vfmv.v.f v10, fa0
6314 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6315 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6316 ; CHECK-NEXT: vmand.mm v10, v12, v10
6317 ; CHECK-NEXT: vmv1r.v v0, v10
6318 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
6319 ; CHECK-NEXT: vmnot.m v0, v10
6321 %head = insertelement <8 x float> poison, float %b, i32 0
6322 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6323 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
6327 define <8 x i1> @fcmp_ult_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6328 ; CHECK-LABEL: fcmp_ult_vv_v8f32:
6330 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6331 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6332 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
6333 ; CHECK-NEXT: vmand.mm v12, v13, v12
6334 ; CHECK-NEXT: vmv1r.v v0, v12
6335 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
6336 ; CHECK-NEXT: vmnot.m v0, v12
6338 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
6342 define <8 x i1> @fcmp_ult_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6343 ; CHECK-LABEL: fcmp_ult_vf_v8f32:
6345 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6346 ; CHECK-NEXT: vfmv.v.f v10, fa0
6347 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6348 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6349 ; CHECK-NEXT: vmand.mm v10, v12, v10
6350 ; CHECK-NEXT: vmv1r.v v0, v10
6351 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
6352 ; CHECK-NEXT: vmnot.m v0, v10
6354 %head = insertelement <8 x float> poison, float %b, i32 0
6355 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6356 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
6360 define <8 x i1> @fcmp_ult_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6361 ; CHECK-LABEL: fcmp_ult_fv_v8f32:
6363 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6364 ; CHECK-NEXT: vfmv.v.f v10, fa0
6365 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6366 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6367 ; CHECK-NEXT: vmand.mm v10, v10, v12
6368 ; CHECK-NEXT: vmv1r.v v0, v10
6369 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
6370 ; CHECK-NEXT: vmnot.m v0, v10
6372 %head = insertelement <8 x float> poison, float %b, i32 0
6373 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6374 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
6378 define <8 x i1> @fcmp_ule_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6379 ; CHECK-LABEL: fcmp_ule_vv_v8f32:
6381 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6382 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6383 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
6384 ; CHECK-NEXT: vmand.mm v12, v13, v12
6385 ; CHECK-NEXT: vmv1r.v v0, v12
6386 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
6387 ; CHECK-NEXT: vmnot.m v0, v12
6389 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
6393 define <8 x i1> @fcmp_ule_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6394 ; CHECK-LABEL: fcmp_ule_vf_v8f32:
6396 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6397 ; CHECK-NEXT: vfmv.v.f v10, fa0
6398 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6399 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6400 ; CHECK-NEXT: vmand.mm v10, v12, v10
6401 ; CHECK-NEXT: vmv1r.v v0, v10
6402 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
6403 ; CHECK-NEXT: vmnot.m v0, v10
6405 %head = insertelement <8 x float> poison, float %b, i32 0
6406 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6407 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
6411 define <8 x i1> @fcmp_ule_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6412 ; CHECK-LABEL: fcmp_ule_fv_v8f32:
6414 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
6415 ; CHECK-NEXT: vfmv.v.f v10, fa0
6416 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
6417 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
6418 ; CHECK-NEXT: vmand.mm v10, v10, v12
6419 ; CHECK-NEXT: vmv1r.v v0, v10
6420 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
6421 ; CHECK-NEXT: vmnot.m v0, v10
6423 %head = insertelement <8 x float> poison, float %b, i32 0
6424 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
6429 define <8 x i1> @fcmp_une_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6430 ; CHECK-LABEL: fcmp_une_vv_v8f32:
6432 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6433 ; CHECK-NEXT: vmfne.vv v0, v8, v10
6435 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
6439 define <8 x i1> @fcmp_une_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6440 ; CHECK-LABEL: fcmp_une_vf_v8f32:
6442 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6443 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
6445 %head = insertelement <8 x float> poison, float %b, i32 0
6446 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6447 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
6451 define <8 x i1> @fcmp_une_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6452 ; CHECK-LABEL: fcmp_une_fv_v8f32:
6454 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6455 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
6457 %head = insertelement <8 x float> poison, float %b, i32 0
6458 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6459 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
6463 define <8 x i1> @fcmp_uno_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6464 ; CHECK-LABEL: fcmp_uno_vv_v8f32:
6466 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6467 ; CHECK-NEXT: vmfne.vv v12, v10, v10
6468 ; CHECK-NEXT: vmfne.vv v10, v8, v8
6469 ; CHECK-NEXT: vmor.mm v0, v10, v12
6471 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
6475 define <8 x i1> @fcmp_uno_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6476 ; CHECK-LABEL: fcmp_uno_vf_v8f32:
6478 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6479 ; CHECK-NEXT: vfmv.v.f v10, fa0
6480 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
6481 ; CHECK-NEXT: vmfne.vv v10, v8, v8
6482 ; CHECK-NEXT: vmor.mm v0, v10, v12
6484 %head = insertelement <8 x float> poison, float %b, i32 0
6485 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6486 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
6490 define <8 x i1> @fcmp_uno_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6491 ; CHECK-LABEL: fcmp_uno_fv_v8f32:
6493 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
6494 ; CHECK-NEXT: vfmv.v.f v10, fa0
6495 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
6496 ; CHECK-NEXT: vmfne.vv v10, v8, v8
6497 ; CHECK-NEXT: vmor.mm v0, v12, v10
6499 %head = insertelement <8 x float> poison, float %b, i32 0
6500 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6501 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
6505 declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata)
6506 define <16 x i1> @fcmp_oeq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6507 ; CHECK-LABEL: fcmp_oeq_vv_v16f32:
6509 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6510 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
6512 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6516 define <16 x i1> @fcmp_oeq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6517 ; CHECK-LABEL: fcmp_oeq_vf_v16f32:
6519 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6520 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
6522 %head = insertelement <16 x float> poison, float %b, i32 0
6523 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6524 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6528 define <16 x i1> @fcmp_oeq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6529 ; CHECK-LABEL: fcmp_oeq_fv_v16f32:
6531 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6532 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
6534 %head = insertelement <16 x float> poison, float %b, i32 0
6535 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6536 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6540 define <16 x i1> @fcmp_ogt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6541 ; CHECK-LABEL: fcmp_ogt_vv_v16f32:
6543 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6544 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
6545 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
6546 ; CHECK-NEXT: vmand.mm v16, v17, v16
6547 ; CHECK-NEXT: vmv1r.v v0, v16
6548 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
6549 ; CHECK-NEXT: vmv1r.v v0, v16
6551 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6555 define <16 x i1> @fcmp_ogt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6556 ; CHECK-LABEL: fcmp_ogt_vf_v16f32:
6558 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6559 ; CHECK-NEXT: vfmv.v.f v12, fa0
6560 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6561 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6562 ; CHECK-NEXT: vmand.mm v12, v16, v12
6563 ; CHECK-NEXT: vmv1r.v v0, v12
6564 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
6565 ; CHECK-NEXT: vmv1r.v v0, v12
6567 %head = insertelement <16 x float> poison, float %b, i32 0
6568 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6569 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6573 define <16 x i1> @fcmp_ogt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6574 ; CHECK-LABEL: fcmp_ogt_fv_v16f32:
6576 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6577 ; CHECK-NEXT: vfmv.v.f v12, fa0
6578 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6579 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6580 ; CHECK-NEXT: vmand.mm v12, v12, v16
6581 ; CHECK-NEXT: vmv1r.v v0, v12
6582 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
6583 ; CHECK-NEXT: vmv1r.v v0, v12
6585 %head = insertelement <16 x float> poison, float %b, i32 0
6586 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6587 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6591 define <16 x i1> @fcmp_oge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6592 ; CHECK-LABEL: fcmp_oge_vv_v16f32:
6594 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6595 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
6596 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
6597 ; CHECK-NEXT: vmand.mm v16, v17, v16
6598 ; CHECK-NEXT: vmv1r.v v0, v16
6599 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
6600 ; CHECK-NEXT: vmv1r.v v0, v16
6602 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
6606 define <16 x i1> @fcmp_oge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6607 ; CHECK-LABEL: fcmp_oge_vf_v16f32:
6609 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6610 ; CHECK-NEXT: vfmv.v.f v12, fa0
6611 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6612 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6613 ; CHECK-NEXT: vmand.mm v12, v16, v12
6614 ; CHECK-NEXT: vmv1r.v v0, v12
6615 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
6616 ; CHECK-NEXT: vmv1r.v v0, v12
6618 %head = insertelement <16 x float> poison, float %b, i32 0
6619 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6620 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
6624 define <16 x i1> @fcmp_oge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6625 ; CHECK-LABEL: fcmp_oge_fv_v16f32:
6627 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6628 ; CHECK-NEXT: vfmv.v.f v12, fa0
6629 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6630 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6631 ; CHECK-NEXT: vmand.mm v12, v12, v16
6632 ; CHECK-NEXT: vmv1r.v v0, v12
6633 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
6634 ; CHECK-NEXT: vmv1r.v v0, v12
6636 %head = insertelement <16 x float> poison, float %b, i32 0
6637 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6638 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
6642 define <16 x i1> @fcmp_olt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6643 ; CHECK-LABEL: fcmp_olt_vv_v16f32:
6645 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6646 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6647 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6648 ; CHECK-NEXT: vmand.mm v16, v17, v16
6649 ; CHECK-NEXT: vmv1r.v v0, v16
6650 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
6651 ; CHECK-NEXT: vmv1r.v v0, v16
6653 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
6657 define <16 x i1> @fcmp_olt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6658 ; CHECK-LABEL: fcmp_olt_vf_v16f32:
6660 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6661 ; CHECK-NEXT: vfmv.v.f v12, fa0
6662 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6663 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6664 ; CHECK-NEXT: vmand.mm v12, v12, v16
6665 ; CHECK-NEXT: vmv1r.v v0, v12
6666 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
6667 ; CHECK-NEXT: vmv1r.v v0, v12
6669 %head = insertelement <16 x float> poison, float %b, i32 0
6670 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6671 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
6675 define <16 x i1> @fcmp_olt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6676 ; CHECK-LABEL: fcmp_olt_fv_v16f32:
6678 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6679 ; CHECK-NEXT: vfmv.v.f v12, fa0
6680 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6681 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6682 ; CHECK-NEXT: vmand.mm v12, v16, v12
6683 ; CHECK-NEXT: vmv1r.v v0, v12
6684 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
6685 ; CHECK-NEXT: vmv1r.v v0, v12
6687 %head = insertelement <16 x float> poison, float %b, i32 0
6688 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6689 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6693 define <16 x i1> @fcmp_ole_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6694 ; CHECK-LABEL: fcmp_ole_vv_v16f32:
6696 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6697 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6698 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6699 ; CHECK-NEXT: vmand.mm v16, v17, v16
6700 ; CHECK-NEXT: vmv1r.v v0, v16
6701 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
6702 ; CHECK-NEXT: vmv1r.v v0, v16
6704 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6708 define <16 x i1> @fcmp_ole_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6709 ; CHECK-LABEL: fcmp_ole_vf_v16f32:
6711 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6712 ; CHECK-NEXT: vfmv.v.f v12, fa0
6713 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6714 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6715 ; CHECK-NEXT: vmand.mm v12, v12, v16
6716 ; CHECK-NEXT: vmv1r.v v0, v12
6717 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
6718 ; CHECK-NEXT: vmv1r.v v0, v12
6720 %head = insertelement <16 x float> poison, float %b, i32 0
6721 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6722 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6726 define <16 x i1> @fcmp_ole_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6727 ; CHECK-LABEL: fcmp_ole_fv_v16f32:
6729 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6730 ; CHECK-NEXT: vfmv.v.f v12, fa0
6731 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6732 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6733 ; CHECK-NEXT: vmand.mm v12, v16, v12
6734 ; CHECK-NEXT: vmv1r.v v0, v12
6735 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
6736 ; CHECK-NEXT: vmv1r.v v0, v12
6738 %head = insertelement <16 x float> poison, float %b, i32 0
6739 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6740 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6744 define <16 x i1> @fcmp_one_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6745 ; CHECK-LABEL: fcmp_one_vv_v16f32:
6747 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6748 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6749 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6750 ; CHECK-NEXT: vmand.mm v16, v17, v16
6751 ; CHECK-NEXT: vmv1r.v v17, v16
6752 ; CHECK-NEXT: vmv1r.v v0, v16
6753 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
6754 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
6755 ; CHECK-NEXT: vmor.mm v0, v16, v17
6757 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6761 define <16 x i1> @fcmp_one_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6762 ; CHECK-LABEL: fcmp_one_vf_v16f32:
6764 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6765 ; CHECK-NEXT: vfmv.v.f v12, fa0
6766 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6767 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6768 ; CHECK-NEXT: vmand.mm v12, v12, v16
6769 ; CHECK-NEXT: vmv1r.v v13, v12
6770 ; CHECK-NEXT: vmv1r.v v0, v12
6771 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
6772 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
6773 ; CHECK-NEXT: vmor.mm v0, v12, v13
6775 %head = insertelement <16 x float> poison, float %b, i32 0
6776 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6777 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6781 define <16 x i1> @fcmp_one_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6782 ; CHECK-LABEL: fcmp_one_fv_v16f32:
6784 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6785 ; CHECK-NEXT: vfmv.v.f v12, fa0
6786 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6787 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6788 ; CHECK-NEXT: vmand.mm v12, v16, v12
6789 ; CHECK-NEXT: vmv1r.v v13, v12
6790 ; CHECK-NEXT: vmv1r.v v0, v12
6791 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
6792 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
6793 ; CHECK-NEXT: vmor.mm v0, v12, v13
6795 %head = insertelement <16 x float> poison, float %b, i32 0
6796 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6797 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6801 define <16 x i1> @fcmp_ord_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6802 ; CHECK-LABEL: fcmp_ord_vv_v16f32:
6804 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6805 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6806 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6807 ; CHECK-NEXT: vmand.mm v0, v12, v16
6809 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6813 define <16 x i1> @fcmp_ord_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6814 ; CHECK-LABEL: fcmp_ord_vf_v16f32:
6816 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6817 ; CHECK-NEXT: vfmv.v.f v12, fa0
6818 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6819 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6820 ; CHECK-NEXT: vmand.mm v0, v12, v16
6822 %head = insertelement <16 x float> poison, float %b, i32 0
6823 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6824 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6828 define <16 x i1> @fcmp_ord_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6829 ; CHECK-LABEL: fcmp_ord_fv_v16f32:
6831 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
6832 ; CHECK-NEXT: vfmv.v.f v12, fa0
6833 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6834 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6835 ; CHECK-NEXT: vmand.mm v0, v16, v12
6837 %head = insertelement <16 x float> poison, float %b, i32 0
6838 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6839 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6843 define <16 x i1> @fcmp_ueq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6844 ; CHECK-LABEL: fcmp_ueq_vv_v16f32:
6846 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6847 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6848 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6849 ; CHECK-NEXT: vmand.mm v16, v17, v16
6850 ; CHECK-NEXT: vmv1r.v v17, v16
6851 ; CHECK-NEXT: vmv1r.v v0, v16
6852 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
6853 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
6854 ; CHECK-NEXT: vmnor.mm v0, v16, v17
6856 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6860 define <16 x i1> @fcmp_ueq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6861 ; CHECK-LABEL: fcmp_ueq_vf_v16f32:
6863 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6864 ; CHECK-NEXT: vfmv.v.f v12, fa0
6865 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6866 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6867 ; CHECK-NEXT: vmand.mm v12, v12, v16
6868 ; CHECK-NEXT: vmv1r.v v13, v12
6869 ; CHECK-NEXT: vmv1r.v v0, v12
6870 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
6871 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
6872 ; CHECK-NEXT: vmnor.mm v0, v12, v13
6874 %head = insertelement <16 x float> poison, float %b, i32 0
6875 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6876 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6880 define <16 x i1> @fcmp_ueq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6881 ; CHECK-LABEL: fcmp_ueq_fv_v16f32:
6883 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6884 ; CHECK-NEXT: vfmv.v.f v12, fa0
6885 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6886 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6887 ; CHECK-NEXT: vmand.mm v12, v16, v12
6888 ; CHECK-NEXT: vmv1r.v v13, v12
6889 ; CHECK-NEXT: vmv1r.v v0, v12
6890 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
6891 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
6892 ; CHECK-NEXT: vmnor.mm v0, v12, v13
6894 %head = insertelement <16 x float> poison, float %b, i32 0
6895 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6896 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6900 define <16 x i1> @fcmp_ugt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6901 ; CHECK-LABEL: fcmp_ugt_vv_v16f32:
6903 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6904 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6905 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6906 ; CHECK-NEXT: vmand.mm v16, v17, v16
6907 ; CHECK-NEXT: vmv1r.v v0, v16
6908 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
6909 ; CHECK-NEXT: vmnot.m v0, v16
6911 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6915 define <16 x i1> @fcmp_ugt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6916 ; CHECK-LABEL: fcmp_ugt_vf_v16f32:
6918 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6919 ; CHECK-NEXT: vfmv.v.f v12, fa0
6920 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6921 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6922 ; CHECK-NEXT: vmand.mm v12, v12, v16
6923 ; CHECK-NEXT: vmv1r.v v0, v12
6924 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
6925 ; CHECK-NEXT: vmnot.m v0, v12
6927 %head = insertelement <16 x float> poison, float %b, i32 0
6928 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6929 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6933 define <16 x i1> @fcmp_ugt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6934 ; CHECK-LABEL: fcmp_ugt_fv_v16f32:
6936 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6937 ; CHECK-NEXT: vfmv.v.f v12, fa0
6938 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6939 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6940 ; CHECK-NEXT: vmand.mm v12, v16, v12
6941 ; CHECK-NEXT: vmv1r.v v0, v12
6942 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
6943 ; CHECK-NEXT: vmnot.m v0, v12
6945 %head = insertelement <16 x float> poison, float %b, i32 0
6946 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6947 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6951 define <16 x i1> @fcmp_uge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6952 ; CHECK-LABEL: fcmp_uge_vv_v16f32:
6954 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6955 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
6956 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
6957 ; CHECK-NEXT: vmand.mm v16, v17, v16
6958 ; CHECK-NEXT: vmv1r.v v0, v16
6959 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
6960 ; CHECK-NEXT: vmnot.m v0, v16
6962 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
6966 define <16 x i1> @fcmp_uge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6967 ; CHECK-LABEL: fcmp_uge_vf_v16f32:
6969 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6970 ; CHECK-NEXT: vfmv.v.f v12, fa0
6971 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6972 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6973 ; CHECK-NEXT: vmand.mm v12, v12, v16
6974 ; CHECK-NEXT: vmv1r.v v0, v12
6975 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
6976 ; CHECK-NEXT: vmnot.m v0, v12
6978 %head = insertelement <16 x float> poison, float %b, i32 0
6979 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6980 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
6984 define <16 x i1> @fcmp_uge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6985 ; CHECK-LABEL: fcmp_uge_fv_v16f32:
6987 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
6988 ; CHECK-NEXT: vfmv.v.f v12, fa0
6989 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
6990 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
6991 ; CHECK-NEXT: vmand.mm v12, v16, v12
6992 ; CHECK-NEXT: vmv1r.v v0, v12
6993 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
6994 ; CHECK-NEXT: vmnot.m v0, v12
6996 %head = insertelement <16 x float> poison, float %b, i32 0
6997 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6998 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
7002 define <16 x i1> @fcmp_ult_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7003 ; CHECK-LABEL: fcmp_ult_vv_v16f32:
7005 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7006 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
7007 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
7008 ; CHECK-NEXT: vmand.mm v16, v17, v16
7009 ; CHECK-NEXT: vmv1r.v v0, v16
7010 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
7011 ; CHECK-NEXT: vmnot.m v0, v16
7013 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7017 define <16 x i1> @fcmp_ult_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7018 ; CHECK-LABEL: fcmp_ult_vf_v16f32:
7020 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7021 ; CHECK-NEXT: vfmv.v.f v12, fa0
7022 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
7023 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
7024 ; CHECK-NEXT: vmand.mm v12, v16, v12
7025 ; CHECK-NEXT: vmv1r.v v0, v12
7026 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
7027 ; CHECK-NEXT: vmnot.m v0, v12
7029 %head = insertelement <16 x float> poison, float %b, i32 0
7030 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7031 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7035 define <16 x i1> @fcmp_ult_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7036 ; CHECK-LABEL: fcmp_ult_fv_v16f32:
7038 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7039 ; CHECK-NEXT: vfmv.v.f v12, fa0
7040 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
7041 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
7042 ; CHECK-NEXT: vmand.mm v12, v12, v16
7043 ; CHECK-NEXT: vmv1r.v v0, v12
7044 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
7045 ; CHECK-NEXT: vmnot.m v0, v12
7047 %head = insertelement <16 x float> poison, float %b, i32 0
7048 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7049 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7053 define <16 x i1> @fcmp_ule_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7054 ; CHECK-LABEL: fcmp_ule_vv_v16f32:
7056 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7057 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
7058 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
7059 ; CHECK-NEXT: vmand.mm v16, v17, v16
7060 ; CHECK-NEXT: vmv1r.v v0, v16
7061 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
7062 ; CHECK-NEXT: vmnot.m v0, v16
7064 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7068 define <16 x i1> @fcmp_ule_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7069 ; CHECK-LABEL: fcmp_ule_vf_v16f32:
7071 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7072 ; CHECK-NEXT: vfmv.v.f v12, fa0
7073 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
7074 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
7075 ; CHECK-NEXT: vmand.mm v12, v16, v12
7076 ; CHECK-NEXT: vmv1r.v v0, v12
7077 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
7078 ; CHECK-NEXT: vmnot.m v0, v12
7080 %head = insertelement <16 x float> poison, float %b, i32 0
7081 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7082 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7086 define <16 x i1> @fcmp_ule_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7087 ; CHECK-LABEL: fcmp_ule_fv_v16f32:
7089 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
7090 ; CHECK-NEXT: vfmv.v.f v12, fa0
7091 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
7092 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
7093 ; CHECK-NEXT: vmand.mm v12, v12, v16
7094 ; CHECK-NEXT: vmv1r.v v0, v12
7095 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
7096 ; CHECK-NEXT: vmnot.m v0, v12
7098 %head = insertelement <16 x float> poison, float %b, i32 0
7099 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7100 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7104 define <16 x i1> @fcmp_une_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7105 ; CHECK-LABEL: fcmp_une_vv_v16f32:
7107 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7108 ; CHECK-NEXT: vmfne.vv v0, v8, v12
7110 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7114 define <16 x i1> @fcmp_une_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7115 ; CHECK-LABEL: fcmp_une_vf_v16f32:
7117 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7118 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
7120 %head = insertelement <16 x float> poison, float %b, i32 0
7121 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7122 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7126 define <16 x i1> @fcmp_une_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7127 ; CHECK-LABEL: fcmp_une_fv_v16f32:
7129 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7130 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
7132 %head = insertelement <16 x float> poison, float %b, i32 0
7133 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7134 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7138 define <16 x i1> @fcmp_uno_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7139 ; CHECK-LABEL: fcmp_uno_vv_v16f32:
7141 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7142 ; CHECK-NEXT: vmfne.vv v16, v12, v12
7143 ; CHECK-NEXT: vmfne.vv v12, v8, v8
7144 ; CHECK-NEXT: vmor.mm v0, v12, v16
7146 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7150 define <16 x i1> @fcmp_uno_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7151 ; CHECK-LABEL: fcmp_uno_vf_v16f32:
7153 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7154 ; CHECK-NEXT: vfmv.v.f v12, fa0
7155 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
7156 ; CHECK-NEXT: vmfne.vv v12, v8, v8
7157 ; CHECK-NEXT: vmor.mm v0, v12, v16
7159 %head = insertelement <16 x float> poison, float %b, i32 0
7160 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7161 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7165 define <16 x i1> @fcmp_uno_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7166 ; CHECK-LABEL: fcmp_uno_fv_v16f32:
7168 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
7169 ; CHECK-NEXT: vfmv.v.f v12, fa0
7170 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
7171 ; CHECK-NEXT: vmfne.vv v12, v8, v8
7172 ; CHECK-NEXT: vmor.mm v0, v16, v12
7174 %head = insertelement <16 x float> poison, float %b, i32 0
7175 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7176 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7180 declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double>, <1 x double>, metadata, metadata)
7181 define <1 x i1> @fcmp_oeq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7182 ; CHECK-LABEL: fcmp_oeq_vv_v1f64:
7184 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7185 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
7187 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7191 define <1 x i1> @fcmp_oeq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7192 ; CHECK-LABEL: fcmp_oeq_vf_v1f64:
7194 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7195 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
7197 %head = insertelement <1 x double> poison, double %b, i32 0
7198 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7199 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7203 define <1 x i1> @fcmp_oeq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7204 ; CHECK-LABEL: fcmp_oeq_fv_v1f64:
7206 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7207 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
7209 %head = insertelement <1 x double> poison, double %b, i32 0
7210 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7211 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7215 define <1 x i1> @fcmp_ogt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7216 ; CHECK-LABEL: fcmp_ogt_vv_v1f64:
7218 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7219 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7220 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7221 ; CHECK-NEXT: vmand.mm v0, v11, v10
7222 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
7224 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7228 define <1 x i1> @fcmp_ogt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7229 ; CHECK-LABEL: fcmp_ogt_vf_v1f64:
7231 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7232 ; CHECK-NEXT: vfmv.s.f v9, fa0
7233 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7234 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7235 ; CHECK-NEXT: vmand.mm v0, v9, v10
7236 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7238 %head = insertelement <1 x double> poison, double %b, i32 0
7239 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7240 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7244 define <1 x i1> @fcmp_ogt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7245 ; CHECK-LABEL: fcmp_ogt_fv_v1f64:
7247 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7248 ; CHECK-NEXT: vfmv.s.f v9, fa0
7249 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7250 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7251 ; CHECK-NEXT: vmand.mm v0, v10, v9
7252 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7254 %head = insertelement <1 x double> poison, double %b, i32 0
7255 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7256 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7260 define <1 x i1> @fcmp_oge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7261 ; CHECK-LABEL: fcmp_oge_vv_v1f64:
7263 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7264 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7265 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7266 ; CHECK-NEXT: vmand.mm v0, v11, v10
7267 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
7269 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7273 define <1 x i1> @fcmp_oge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7274 ; CHECK-LABEL: fcmp_oge_vf_v1f64:
7276 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7277 ; CHECK-NEXT: vfmv.s.f v9, fa0
7278 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7279 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7280 ; CHECK-NEXT: vmand.mm v0, v9, v10
7281 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
7283 %head = insertelement <1 x double> poison, double %b, i32 0
7284 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7285 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7289 define <1 x i1> @fcmp_oge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7290 ; CHECK-LABEL: fcmp_oge_fv_v1f64:
7292 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7293 ; CHECK-NEXT: vfmv.s.f v9, fa0
7294 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7295 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7296 ; CHECK-NEXT: vmand.mm v0, v10, v9
7297 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
7299 %head = insertelement <1 x double> poison, double %b, i32 0
7300 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7301 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7305 define <1 x i1> @fcmp_olt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7306 ; CHECK-LABEL: fcmp_olt_vv_v1f64:
7308 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7309 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7310 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7311 ; CHECK-NEXT: vmand.mm v0, v11, v10
7312 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
7314 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
7318 define <1 x i1> @fcmp_olt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7319 ; CHECK-LABEL: fcmp_olt_vf_v1f64:
7321 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7322 ; CHECK-NEXT: vfmv.s.f v9, fa0
7323 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7324 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7325 ; CHECK-NEXT: vmand.mm v0, v10, v9
7326 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7328 %head = insertelement <1 x double> poison, double %b, i32 0
7329 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7330 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
7334 define <1 x i1> @fcmp_olt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7335 ; CHECK-LABEL: fcmp_olt_fv_v1f64:
7337 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7338 ; CHECK-NEXT: vfmv.s.f v9, fa0
7339 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7340 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7341 ; CHECK-NEXT: vmand.mm v0, v9, v10
7342 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7344 %head = insertelement <1 x double> poison, double %b, i32 0
7345 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7346 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
7350 define <1 x i1> @fcmp_ole_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7351 ; CHECK-LABEL: fcmp_ole_vv_v1f64:
7353 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7354 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7355 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7356 ; CHECK-NEXT: vmand.mm v0, v11, v10
7357 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
7359 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
7363 define <1 x i1> @fcmp_ole_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7364 ; CHECK-LABEL: fcmp_ole_vf_v1f64:
7366 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7367 ; CHECK-NEXT: vfmv.s.f v9, fa0
7368 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7369 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7370 ; CHECK-NEXT: vmand.mm v0, v10, v9
7371 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
7373 %head = insertelement <1 x double> poison, double %b, i32 0
7374 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7375 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
7379 define <1 x i1> @fcmp_ole_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7380 ; CHECK-LABEL: fcmp_ole_fv_v1f64:
7382 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7383 ; CHECK-NEXT: vfmv.s.f v9, fa0
7384 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7385 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7386 ; CHECK-NEXT: vmand.mm v0, v9, v10
7387 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
7389 %head = insertelement <1 x double> poison, double %b, i32 0
7390 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7391 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
7395 define <1 x i1> @fcmp_one_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7396 ; CHECK-LABEL: fcmp_one_vv_v1f64:
7398 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7399 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7400 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7401 ; CHECK-NEXT: vmand.mm v0, v11, v10
7402 ; CHECK-NEXT: vmv.v.v v10, v0
7403 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
7404 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
7405 ; CHECK-NEXT: vmor.mm v0, v0, v10
7407 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
7411 define <1 x i1> @fcmp_one_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7412 ; CHECK-LABEL: fcmp_one_vf_v1f64:
7414 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7415 ; CHECK-NEXT: vfmv.s.f v9, fa0
7416 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7417 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7418 ; CHECK-NEXT: vmand.mm v0, v10, v9
7419 ; CHECK-NEXT: vmv.v.v v9, v0
7420 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
7421 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7422 ; CHECK-NEXT: vmor.mm v0, v0, v9
7424 %head = insertelement <1 x double> poison, double %b, i32 0
7425 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7426 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
7430 define <1 x i1> @fcmp_one_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7431 ; CHECK-LABEL: fcmp_one_fv_v1f64:
7433 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7434 ; CHECK-NEXT: vfmv.s.f v9, fa0
7435 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7436 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7437 ; CHECK-NEXT: vmand.mm v0, v9, v10
7438 ; CHECK-NEXT: vmv.v.v v9, v0
7439 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
7440 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7441 ; CHECK-NEXT: vmor.mm v0, v0, v9
7443 %head = insertelement <1 x double> poison, double %b, i32 0
7444 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7445 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
7449 define <1 x i1> @fcmp_ord_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7450 ; CHECK-LABEL: fcmp_ord_vv_v1f64:
7452 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7453 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
7454 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
7455 ; CHECK-NEXT: vmand.mm v0, v8, v9
7457 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
7461 define <1 x i1> @fcmp_ord_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7462 ; CHECK-LABEL: fcmp_ord_vf_v1f64:
7464 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7465 ; CHECK-NEXT: vfmv.s.f v9, fa0
7466 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7467 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
7468 ; CHECK-NEXT: vmand.mm v0, v8, v9
7470 %head = insertelement <1 x double> poison, double %b, i32 0
7471 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7472 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
7476 define <1 x i1> @fcmp_ord_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7477 ; CHECK-LABEL: fcmp_ord_fv_v1f64:
7479 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7480 ; CHECK-NEXT: vfmv.s.f v9, fa0
7481 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7482 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
7483 ; CHECK-NEXT: vmand.mm v0, v9, v8
7485 %head = insertelement <1 x double> poison, double %b, i32 0
7486 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7487 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
7491 define <1 x i1> @fcmp_ueq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7492 ; CHECK-LABEL: fcmp_ueq_vv_v1f64:
7494 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7495 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7496 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7497 ; CHECK-NEXT: vmand.mm v0, v11, v10
7498 ; CHECK-NEXT: vmv.v.v v10, v0
7499 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
7500 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
7501 ; CHECK-NEXT: vmnor.mm v0, v0, v10
7503 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7507 define <1 x i1> @fcmp_ueq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7508 ; CHECK-LABEL: fcmp_ueq_vf_v1f64:
7510 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7511 ; CHECK-NEXT: vfmv.s.f v9, fa0
7512 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7513 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7514 ; CHECK-NEXT: vmand.mm v0, v10, v9
7515 ; CHECK-NEXT: vmv.v.v v9, v0
7516 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
7517 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7518 ; CHECK-NEXT: vmnor.mm v0, v0, v9
7520 %head = insertelement <1 x double> poison, double %b, i32 0
7521 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7522 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7526 define <1 x i1> @fcmp_ueq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7527 ; CHECK-LABEL: fcmp_ueq_fv_v1f64:
7529 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7530 ; CHECK-NEXT: vfmv.s.f v9, fa0
7531 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7532 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7533 ; CHECK-NEXT: vmand.mm v0, v9, v10
7534 ; CHECK-NEXT: vmv.v.v v9, v0
7535 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
7536 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7537 ; CHECK-NEXT: vmnor.mm v0, v0, v9
7539 %head = insertelement <1 x double> poison, double %b, i32 0
7540 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7541 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7545 define <1 x i1> @fcmp_ugt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7546 ; CHECK-LABEL: fcmp_ugt_vv_v1f64:
7548 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7549 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7550 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7551 ; CHECK-NEXT: vmand.mm v0, v11, v10
7552 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
7553 ; CHECK-NEXT: vmnot.m v0, v0
7555 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7559 define <1 x i1> @fcmp_ugt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7560 ; CHECK-LABEL: fcmp_ugt_vf_v1f64:
7562 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7563 ; CHECK-NEXT: vfmv.s.f v9, fa0
7564 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7565 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7566 ; CHECK-NEXT: vmand.mm v0, v10, v9
7567 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
7568 ; CHECK-NEXT: vmnot.m v0, v0
7570 %head = insertelement <1 x double> poison, double %b, i32 0
7571 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7572 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7576 define <1 x i1> @fcmp_ugt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7577 ; CHECK-LABEL: fcmp_ugt_fv_v1f64:
7579 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7580 ; CHECK-NEXT: vfmv.s.f v9, fa0
7581 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7582 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7583 ; CHECK-NEXT: vmand.mm v0, v9, v10
7584 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
7585 ; CHECK-NEXT: vmnot.m v0, v0
7587 %head = insertelement <1 x double> poison, double %b, i32 0
7588 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7589 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7593 define <1 x i1> @fcmp_uge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7594 ; CHECK-LABEL: fcmp_uge_vv_v1f64:
7596 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7597 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7598 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7599 ; CHECK-NEXT: vmand.mm v0, v11, v10
7600 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
7601 ; CHECK-NEXT: vmnot.m v0, v0
7603 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
7607 define <1 x i1> @fcmp_uge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7608 ; CHECK-LABEL: fcmp_uge_vf_v1f64:
7610 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7611 ; CHECK-NEXT: vfmv.s.f v9, fa0
7612 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7613 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7614 ; CHECK-NEXT: vmand.mm v0, v10, v9
7615 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7616 ; CHECK-NEXT: vmnot.m v0, v0
7618 %head = insertelement <1 x double> poison, double %b, i32 0
7619 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7620 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
7624 define <1 x i1> @fcmp_uge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7625 ; CHECK-LABEL: fcmp_uge_fv_v1f64:
7627 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7628 ; CHECK-NEXT: vfmv.s.f v9, fa0
7629 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7630 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7631 ; CHECK-NEXT: vmand.mm v0, v9, v10
7632 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7633 ; CHECK-NEXT: vmnot.m v0, v0
7635 %head = insertelement <1 x double> poison, double %b, i32 0
7636 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7637 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
7641 define <1 x i1> @fcmp_ult_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7642 ; CHECK-LABEL: fcmp_ult_vv_v1f64:
7644 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7645 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7646 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7647 ; CHECK-NEXT: vmand.mm v0, v11, v10
7648 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
7649 ; CHECK-NEXT: vmnot.m v0, v0
7651 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7655 define <1 x i1> @fcmp_ult_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7656 ; CHECK-LABEL: fcmp_ult_vf_v1f64:
7658 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7659 ; CHECK-NEXT: vfmv.s.f v9, fa0
7660 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7661 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7662 ; CHECK-NEXT: vmand.mm v0, v9, v10
7663 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
7664 ; CHECK-NEXT: vmnot.m v0, v0
7666 %head = insertelement <1 x double> poison, double %b, i32 0
7667 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7668 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7672 define <1 x i1> @fcmp_ult_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7673 ; CHECK-LABEL: fcmp_ult_fv_v1f64:
7675 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7676 ; CHECK-NEXT: vfmv.s.f v9, fa0
7677 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7678 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7679 ; CHECK-NEXT: vmand.mm v0, v10, v9
7680 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
7681 ; CHECK-NEXT: vmnot.m v0, v0
7683 %head = insertelement <1 x double> poison, double %b, i32 0
7684 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7685 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7689 define <1 x i1> @fcmp_ule_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7690 ; CHECK-LABEL: fcmp_ule_vv_v1f64:
7692 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7693 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7694 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7695 ; CHECK-NEXT: vmand.mm v0, v11, v10
7696 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
7697 ; CHECK-NEXT: vmnot.m v0, v0
7699 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7703 define <1 x i1> @fcmp_ule_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7704 ; CHECK-LABEL: fcmp_ule_vf_v1f64:
7706 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7707 ; CHECK-NEXT: vfmv.s.f v9, fa0
7708 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7709 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7710 ; CHECK-NEXT: vmand.mm v0, v9, v10
7711 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7712 ; CHECK-NEXT: vmnot.m v0, v0
7714 %head = insertelement <1 x double> poison, double %b, i32 0
7715 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7716 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7720 define <1 x i1> @fcmp_ule_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7721 ; CHECK-LABEL: fcmp_ule_fv_v1f64:
7723 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu
7724 ; CHECK-NEXT: vfmv.s.f v9, fa0
7725 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7726 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7727 ; CHECK-NEXT: vmand.mm v0, v10, v9
7728 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7729 ; CHECK-NEXT: vmnot.m v0, v0
7731 %head = insertelement <1 x double> poison, double %b, i32 0
7732 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7733 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7737 define <1 x i1> @fcmp_une_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7738 ; CHECK-LABEL: fcmp_une_vv_v1f64:
7740 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7741 ; CHECK-NEXT: vmfne.vv v0, v8, v9
7743 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7747 define <1 x i1> @fcmp_une_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7748 ; CHECK-LABEL: fcmp_une_vf_v1f64:
7750 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7751 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
7753 %head = insertelement <1 x double> poison, double %b, i32 0
7754 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7755 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7759 define <1 x i1> @fcmp_une_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7760 ; CHECK-LABEL: fcmp_une_fv_v1f64:
7762 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7763 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
7765 %head = insertelement <1 x double> poison, double %b, i32 0
7766 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7767 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7771 define <1 x i1> @fcmp_uno_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7772 ; CHECK-LABEL: fcmp_uno_vv_v1f64:
7774 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7775 ; CHECK-NEXT: vmfne.vv v9, v9, v9
7776 ; CHECK-NEXT: vmfne.vv v8, v8, v8
7777 ; CHECK-NEXT: vmor.mm v0, v8, v9
7779 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7783 define <1 x i1> @fcmp_uno_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7784 ; CHECK-LABEL: fcmp_uno_vf_v1f64:
7786 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7787 ; CHECK-NEXT: vfmv.s.f v9, fa0
7788 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
7789 ; CHECK-NEXT: vmfne.vv v8, v8, v8
7790 ; CHECK-NEXT: vmor.mm v0, v8, v9
7792 %head = insertelement <1 x double> poison, double %b, i32 0
7793 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7794 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7798 define <1 x i1> @fcmp_uno_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7799 ; CHECK-LABEL: fcmp_uno_fv_v1f64:
7801 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
7802 ; CHECK-NEXT: vfmv.s.f v9, fa0
7803 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
7804 ; CHECK-NEXT: vmfne.vv v8, v8, v8
7805 ; CHECK-NEXT: vmor.mm v0, v9, v8
7807 %head = insertelement <1 x double> poison, double %b, i32 0
7808 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7809 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7813 declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7814 define <2 x i1> @fcmp_oeq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7815 ; CHECK-LABEL: fcmp_oeq_vv_v2f64:
7817 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
7818 ; CHECK-NEXT: vmfeq.vv v0, v8, v9
7820 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7824 define <2 x i1> @fcmp_oeq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7825 ; CHECK-LABEL: fcmp_oeq_vf_v2f64:
7827 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
7828 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
7830 %head = insertelement <2 x double> poison, double %b, i32 0
7831 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7832 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7836 define <2 x i1> @fcmp_oeq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7837 ; CHECK-LABEL: fcmp_oeq_fv_v2f64:
7839 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
7840 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
7842 %head = insertelement <2 x double> poison, double %b, i32 0
7843 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7844 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7848 define <2 x i1> @fcmp_ogt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7849 ; CHECK-LABEL: fcmp_ogt_vv_v2f64:
7851 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7852 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7853 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7854 ; CHECK-NEXT: vmand.mm v0, v11, v10
7855 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
7857 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7861 define <2 x i1> @fcmp_ogt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7862 ; CHECK-LABEL: fcmp_ogt_vf_v2f64:
7864 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7865 ; CHECK-NEXT: vfmv.v.f v9, fa0
7866 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7867 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7868 ; CHECK-NEXT: vmand.mm v0, v9, v10
7869 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7871 %head = insertelement <2 x double> poison, double %b, i32 0
7872 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7873 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7877 define <2 x i1> @fcmp_ogt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7878 ; CHECK-LABEL: fcmp_ogt_fv_v2f64:
7880 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7881 ; CHECK-NEXT: vfmv.v.f v9, fa0
7882 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7883 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7884 ; CHECK-NEXT: vmand.mm v0, v10, v9
7885 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7887 %head = insertelement <2 x double> poison, double %b, i32 0
7888 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7889 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7893 define <2 x i1> @fcmp_oge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7894 ; CHECK-LABEL: fcmp_oge_vv_v2f64:
7896 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7897 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7898 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
7899 ; CHECK-NEXT: vmand.mm v0, v11, v10
7900 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
7902 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7906 define <2 x i1> @fcmp_oge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7907 ; CHECK-LABEL: fcmp_oge_vf_v2f64:
7909 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7910 ; CHECK-NEXT: vfmv.v.f v9, fa0
7911 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7912 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7913 ; CHECK-NEXT: vmand.mm v0, v9, v10
7914 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
7916 %head = insertelement <2 x double> poison, double %b, i32 0
7917 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7918 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7922 define <2 x i1> @fcmp_oge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7923 ; CHECK-LABEL: fcmp_oge_fv_v2f64:
7925 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7926 ; CHECK-NEXT: vfmv.v.f v9, fa0
7927 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7928 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7929 ; CHECK-NEXT: vmand.mm v0, v10, v9
7930 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
7932 %head = insertelement <2 x double> poison, double %b, i32 0
7933 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7934 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7938 define <2 x i1> @fcmp_olt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7939 ; CHECK-LABEL: fcmp_olt_vv_v2f64:
7941 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7942 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7943 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7944 ; CHECK-NEXT: vmand.mm v0, v11, v10
7945 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
7947 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
7951 define <2 x i1> @fcmp_olt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7952 ; CHECK-LABEL: fcmp_olt_vf_v2f64:
7954 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7955 ; CHECK-NEXT: vfmv.v.f v9, fa0
7956 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7957 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7958 ; CHECK-NEXT: vmand.mm v0, v10, v9
7959 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
7961 %head = insertelement <2 x double> poison, double %b, i32 0
7962 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7963 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
7967 define <2 x i1> @fcmp_olt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7968 ; CHECK-LABEL: fcmp_olt_fv_v2f64:
7970 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7971 ; CHECK-NEXT: vfmv.v.f v9, fa0
7972 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
7973 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
7974 ; CHECK-NEXT: vmand.mm v0, v9, v10
7975 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
7977 %head = insertelement <2 x double> poison, double %b, i32 0
7978 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7979 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
7983 define <2 x i1> @fcmp_ole_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7984 ; CHECK-LABEL: fcmp_ole_vv_v2f64:
7986 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
7987 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
7988 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
7989 ; CHECK-NEXT: vmand.mm v0, v11, v10
7990 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
7992 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
7996 define <2 x i1> @fcmp_ole_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7997 ; CHECK-LABEL: fcmp_ole_vf_v2f64:
7999 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8000 ; CHECK-NEXT: vfmv.v.f v9, fa0
8001 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8002 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8003 ; CHECK-NEXT: vmand.mm v0, v10, v9
8004 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
8006 %head = insertelement <2 x double> poison, double %b, i32 0
8007 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8008 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8012 define <2 x i1> @fcmp_ole_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8013 ; CHECK-LABEL: fcmp_ole_fv_v2f64:
8015 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8016 ; CHECK-NEXT: vfmv.v.f v9, fa0
8017 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8018 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8019 ; CHECK-NEXT: vmand.mm v0, v9, v10
8020 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
8022 %head = insertelement <2 x double> poison, double %b, i32 0
8023 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8024 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8028 define <2 x i1> @fcmp_one_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8029 ; CHECK-LABEL: fcmp_one_vv_v2f64:
8031 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8032 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
8033 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
8034 ; CHECK-NEXT: vmand.mm v0, v11, v10
8035 ; CHECK-NEXT: vmv.v.v v10, v0
8036 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
8037 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
8038 ; CHECK-NEXT: vmor.mm v0, v0, v10
8040 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8044 define <2 x i1> @fcmp_one_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8045 ; CHECK-LABEL: fcmp_one_vf_v2f64:
8047 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8048 ; CHECK-NEXT: vfmv.v.f v9, fa0
8049 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8050 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8051 ; CHECK-NEXT: vmand.mm v0, v10, v9
8052 ; CHECK-NEXT: vmv.v.v v9, v0
8053 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
8054 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
8055 ; CHECK-NEXT: vmor.mm v0, v0, v9
8057 %head = insertelement <2 x double> poison, double %b, i32 0
8058 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8059 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8063 define <2 x i1> @fcmp_one_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8064 ; CHECK-LABEL: fcmp_one_fv_v2f64:
8066 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8067 ; CHECK-NEXT: vfmv.v.f v9, fa0
8068 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8069 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8070 ; CHECK-NEXT: vmand.mm v0, v9, v10
8071 ; CHECK-NEXT: vmv.v.v v9, v0
8072 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
8073 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
8074 ; CHECK-NEXT: vmor.mm v0, v0, v9
8076 %head = insertelement <2 x double> poison, double %b, i32 0
8077 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8078 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8082 define <2 x i1> @fcmp_ord_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8083 ; CHECK-LABEL: fcmp_ord_vv_v2f64:
8085 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8086 ; CHECK-NEXT: vmfeq.vv v9, v9, v9
8087 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
8088 ; CHECK-NEXT: vmand.mm v0, v8, v9
8090 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8094 define <2 x i1> @fcmp_ord_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8095 ; CHECK-LABEL: fcmp_ord_vf_v2f64:
8097 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8098 ; CHECK-NEXT: vfmv.v.f v9, fa0
8099 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8100 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
8101 ; CHECK-NEXT: vmand.mm v0, v8, v9
8103 %head = insertelement <2 x double> poison, double %b, i32 0
8104 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8105 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8109 define <2 x i1> @fcmp_ord_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8110 ; CHECK-LABEL: fcmp_ord_fv_v2f64:
8112 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8113 ; CHECK-NEXT: vfmv.v.f v9, fa0
8114 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8115 ; CHECK-NEXT: vmfeq.vv v8, v8, v8
8116 ; CHECK-NEXT: vmand.mm v0, v9, v8
8118 %head = insertelement <2 x double> poison, double %b, i32 0
8119 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8120 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8124 define <2 x i1> @fcmp_ueq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8125 ; CHECK-LABEL: fcmp_ueq_vv_v2f64:
8127 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8128 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
8129 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
8130 ; CHECK-NEXT: vmand.mm v0, v11, v10
8131 ; CHECK-NEXT: vmv.v.v v10, v0
8132 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t
8133 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
8134 ; CHECK-NEXT: vmnor.mm v0, v0, v10
8136 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8140 define <2 x i1> @fcmp_ueq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8141 ; CHECK-LABEL: fcmp_ueq_vf_v2f64:
8143 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8144 ; CHECK-NEXT: vfmv.v.f v9, fa0
8145 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8146 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8147 ; CHECK-NEXT: vmand.mm v0, v10, v9
8148 ; CHECK-NEXT: vmv.v.v v9, v0
8149 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t
8150 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
8151 ; CHECK-NEXT: vmnor.mm v0, v0, v9
8153 %head = insertelement <2 x double> poison, double %b, i32 0
8154 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8155 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8159 define <2 x i1> @fcmp_ueq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8160 ; CHECK-LABEL: fcmp_ueq_fv_v2f64:
8162 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8163 ; CHECK-NEXT: vfmv.v.f v9, fa0
8164 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8165 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8166 ; CHECK-NEXT: vmand.mm v0, v9, v10
8167 ; CHECK-NEXT: vmv.v.v v9, v0
8168 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t
8169 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
8170 ; CHECK-NEXT: vmnor.mm v0, v0, v9
8172 %head = insertelement <2 x double> poison, double %b, i32 0
8173 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8174 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8178 define <2 x i1> @fcmp_ugt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8179 ; CHECK-LABEL: fcmp_ugt_vv_v2f64:
8181 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8182 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
8183 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
8184 ; CHECK-NEXT: vmand.mm v0, v11, v10
8185 ; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t
8186 ; CHECK-NEXT: vmnot.m v0, v0
8188 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8192 define <2 x i1> @fcmp_ugt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8193 ; CHECK-LABEL: fcmp_ugt_vf_v2f64:
8195 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8196 ; CHECK-NEXT: vfmv.v.f v9, fa0
8197 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8198 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8199 ; CHECK-NEXT: vmand.mm v0, v10, v9
8200 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
8201 ; CHECK-NEXT: vmnot.m v0, v0
8203 %head = insertelement <2 x double> poison, double %b, i32 0
8204 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8205 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8209 define <2 x i1> @fcmp_ugt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8210 ; CHECK-LABEL: fcmp_ugt_fv_v2f64:
8212 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8213 ; CHECK-NEXT: vfmv.v.f v9, fa0
8214 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8215 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8216 ; CHECK-NEXT: vmand.mm v0, v9, v10
8217 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
8218 ; CHECK-NEXT: vmnot.m v0, v0
8220 %head = insertelement <2 x double> poison, double %b, i32 0
8221 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8222 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8226 define <2 x i1> @fcmp_uge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8227 ; CHECK-LABEL: fcmp_uge_vv_v2f64:
8229 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8230 ; CHECK-NEXT: vmfeq.vv v10, v9, v9
8231 ; CHECK-NEXT: vmfeq.vv v11, v8, v8
8232 ; CHECK-NEXT: vmand.mm v0, v11, v10
8233 ; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t
8234 ; CHECK-NEXT: vmnot.m v0, v0
8236 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8240 define <2 x i1> @fcmp_uge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8241 ; CHECK-LABEL: fcmp_uge_vf_v2f64:
8243 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8244 ; CHECK-NEXT: vfmv.v.f v9, fa0
8245 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8246 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8247 ; CHECK-NEXT: vmand.mm v0, v10, v9
8248 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
8249 ; CHECK-NEXT: vmnot.m v0, v0
8251 %head = insertelement <2 x double> poison, double %b, i32 0
8252 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8253 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
8257 define <2 x i1> @fcmp_uge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8258 ; CHECK-LABEL: fcmp_uge_fv_v2f64:
8260 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8261 ; CHECK-NEXT: vfmv.v.f v9, fa0
8262 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8263 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8264 ; CHECK-NEXT: vmand.mm v0, v9, v10
8265 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
8266 ; CHECK-NEXT: vmnot.m v0, v0
8268 %head = insertelement <2 x double> poison, double %b, i32 0
8269 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8270 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
8274 define <2 x i1> @fcmp_ult_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8275 ; CHECK-LABEL: fcmp_ult_vv_v2f64:
8277 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8278 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8279 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
8280 ; CHECK-NEXT: vmand.mm v0, v11, v10
8281 ; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t
8282 ; CHECK-NEXT: vmnot.m v0, v0
8284 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
8288 define <2 x i1> @fcmp_ult_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8289 ; CHECK-LABEL: fcmp_ult_vf_v2f64:
8291 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8292 ; CHECK-NEXT: vfmv.v.f v9, fa0
8293 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8294 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8295 ; CHECK-NEXT: vmand.mm v0, v9, v10
8296 ; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t
8297 ; CHECK-NEXT: vmnot.m v0, v0
8299 %head = insertelement <2 x double> poison, double %b, i32 0
8300 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8301 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
8305 define <2 x i1> @fcmp_ult_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8306 ; CHECK-LABEL: fcmp_ult_fv_v2f64:
8308 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8309 ; CHECK-NEXT: vfmv.v.f v9, fa0
8310 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8311 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8312 ; CHECK-NEXT: vmand.mm v0, v10, v9
8313 ; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t
8314 ; CHECK-NEXT: vmnot.m v0, v0
8316 %head = insertelement <2 x double> poison, double %b, i32 0
8317 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8318 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
8322 define <2 x i1> @fcmp_ule_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8323 ; CHECK-LABEL: fcmp_ule_vv_v2f64:
8325 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8326 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8327 ; CHECK-NEXT: vmfeq.vv v11, v9, v9
8328 ; CHECK-NEXT: vmand.mm v0, v11, v10
8329 ; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t
8330 ; CHECK-NEXT: vmnot.m v0, v0
8332 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
8336 define <2 x i1> @fcmp_ule_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8337 ; CHECK-LABEL: fcmp_ule_vf_v2f64:
8339 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8340 ; CHECK-NEXT: vfmv.v.f v9, fa0
8341 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8342 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8343 ; CHECK-NEXT: vmand.mm v0, v9, v10
8344 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t
8345 ; CHECK-NEXT: vmnot.m v0, v0
8347 %head = insertelement <2 x double> poison, double %b, i32 0
8348 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8349 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
8353 define <2 x i1> @fcmp_ule_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8354 ; CHECK-LABEL: fcmp_ule_fv_v2f64:
8356 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu
8357 ; CHECK-NEXT: vfmv.v.f v9, fa0
8358 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8359 ; CHECK-NEXT: vmfeq.vf v9, v9, fa0
8360 ; CHECK-NEXT: vmand.mm v0, v10, v9
8361 ; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t
8362 ; CHECK-NEXT: vmnot.m v0, v0
8364 %head = insertelement <2 x double> poison, double %b, i32 0
8365 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8366 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
8370 define <2 x i1> @fcmp_une_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8371 ; CHECK-LABEL: fcmp_une_vv_v2f64:
8373 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8374 ; CHECK-NEXT: vmfne.vv v0, v8, v9
8376 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
8380 define <2 x i1> @fcmp_une_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8381 ; CHECK-LABEL: fcmp_une_vf_v2f64:
8383 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8384 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
8386 %head = insertelement <2 x double> poison, double %b, i32 0
8387 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8388 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
8392 define <2 x i1> @fcmp_une_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8393 ; CHECK-LABEL: fcmp_une_fv_v2f64:
8395 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8396 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
8398 %head = insertelement <2 x double> poison, double %b, i32 0
8399 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8400 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
8404 define <2 x i1> @fcmp_uno_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8405 ; CHECK-LABEL: fcmp_uno_vv_v2f64:
8407 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8408 ; CHECK-NEXT: vmfne.vv v9, v9, v9
8409 ; CHECK-NEXT: vmfne.vv v8, v8, v8
8410 ; CHECK-NEXT: vmor.mm v0, v8, v9
8412 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
8416 define <2 x i1> @fcmp_uno_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8417 ; CHECK-LABEL: fcmp_uno_vf_v2f64:
8419 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8420 ; CHECK-NEXT: vfmv.v.f v9, fa0
8421 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
8422 ; CHECK-NEXT: vmfne.vv v8, v8, v8
8423 ; CHECK-NEXT: vmor.mm v0, v8, v9
8425 %head = insertelement <2 x double> poison, double %b, i32 0
8426 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8427 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
8431 define <2 x i1> @fcmp_uno_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8432 ; CHECK-LABEL: fcmp_uno_fv_v2f64:
8434 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
8435 ; CHECK-NEXT: vfmv.v.f v9, fa0
8436 ; CHECK-NEXT: vmfne.vf v9, v9, fa0
8437 ; CHECK-NEXT: vmfne.vv v8, v8, v8
8438 ; CHECK-NEXT: vmor.mm v0, v9, v8
8440 %head = insertelement <2 x double> poison, double %b, i32 0
8441 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8442 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
8446 declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8447 define <4 x i1> @fcmp_oeq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8448 ; CHECK-LABEL: fcmp_oeq_vv_v4f64:
8450 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8451 ; CHECK-NEXT: vmfeq.vv v0, v8, v10
8453 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8457 define <4 x i1> @fcmp_oeq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8458 ; CHECK-LABEL: fcmp_oeq_vf_v4f64:
8460 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8461 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
8463 %head = insertelement <4 x double> poison, double %b, i32 0
8464 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8465 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8469 define <4 x i1> @fcmp_oeq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8470 ; CHECK-LABEL: fcmp_oeq_fv_v4f64:
8472 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8473 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
8475 %head = insertelement <4 x double> poison, double %b, i32 0
8476 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8477 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8481 define <4 x i1> @fcmp_ogt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8482 ; CHECK-LABEL: fcmp_ogt_vv_v4f64:
8484 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8485 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8486 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
8487 ; CHECK-NEXT: vmand.mm v12, v13, v12
8488 ; CHECK-NEXT: vmv1r.v v0, v12
8489 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
8490 ; CHECK-NEXT: vmv1r.v v0, v12
8492 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8496 define <4 x i1> @fcmp_ogt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8497 ; CHECK-LABEL: fcmp_ogt_vf_v4f64:
8499 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8500 ; CHECK-NEXT: vfmv.v.f v10, fa0
8501 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8502 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8503 ; CHECK-NEXT: vmand.mm v10, v12, v10
8504 ; CHECK-NEXT: vmv1r.v v0, v10
8505 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
8506 ; CHECK-NEXT: vmv1r.v v0, v10
8508 %head = insertelement <4 x double> poison, double %b, i32 0
8509 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8510 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8514 define <4 x i1> @fcmp_ogt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8515 ; CHECK-LABEL: fcmp_ogt_fv_v4f64:
8517 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8518 ; CHECK-NEXT: vfmv.v.f v10, fa0
8519 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8520 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8521 ; CHECK-NEXT: vmand.mm v10, v10, v12
8522 ; CHECK-NEXT: vmv1r.v v0, v10
8523 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
8524 ; CHECK-NEXT: vmv1r.v v0, v10
8526 %head = insertelement <4 x double> poison, double %b, i32 0
8527 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8528 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8532 define <4 x i1> @fcmp_oge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8533 ; CHECK-LABEL: fcmp_oge_vv_v4f64:
8535 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8536 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8537 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
8538 ; CHECK-NEXT: vmand.mm v12, v13, v12
8539 ; CHECK-NEXT: vmv1r.v v0, v12
8540 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
8541 ; CHECK-NEXT: vmv1r.v v0, v12
8543 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
8547 define <4 x i1> @fcmp_oge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8548 ; CHECK-LABEL: fcmp_oge_vf_v4f64:
8550 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8551 ; CHECK-NEXT: vfmv.v.f v10, fa0
8552 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8553 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8554 ; CHECK-NEXT: vmand.mm v10, v12, v10
8555 ; CHECK-NEXT: vmv1r.v v0, v10
8556 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
8557 ; CHECK-NEXT: vmv1r.v v0, v10
8559 %head = insertelement <4 x double> poison, double %b, i32 0
8560 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8561 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
8565 define <4 x i1> @fcmp_oge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8566 ; CHECK-LABEL: fcmp_oge_fv_v4f64:
8568 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8569 ; CHECK-NEXT: vfmv.v.f v10, fa0
8570 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8571 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8572 ; CHECK-NEXT: vmand.mm v10, v10, v12
8573 ; CHECK-NEXT: vmv1r.v v0, v10
8574 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
8575 ; CHECK-NEXT: vmv1r.v v0, v10
8577 %head = insertelement <4 x double> poison, double %b, i32 0
8578 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8579 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
8583 define <4 x i1> @fcmp_olt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8584 ; CHECK-LABEL: fcmp_olt_vv_v4f64:
8586 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8587 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8588 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8589 ; CHECK-NEXT: vmand.mm v12, v13, v12
8590 ; CHECK-NEXT: vmv1r.v v0, v12
8591 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
8592 ; CHECK-NEXT: vmv1r.v v0, v12
8594 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
8598 define <4 x i1> @fcmp_olt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8599 ; CHECK-LABEL: fcmp_olt_vf_v4f64:
8601 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8602 ; CHECK-NEXT: vfmv.v.f v10, fa0
8603 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8604 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8605 ; CHECK-NEXT: vmand.mm v10, v10, v12
8606 ; CHECK-NEXT: vmv1r.v v0, v10
8607 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
8608 ; CHECK-NEXT: vmv1r.v v0, v10
8610 %head = insertelement <4 x double> poison, double %b, i32 0
8611 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8612 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
8616 define <4 x i1> @fcmp_olt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8617 ; CHECK-LABEL: fcmp_olt_fv_v4f64:
8619 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8620 ; CHECK-NEXT: vfmv.v.f v10, fa0
8621 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8622 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8623 ; CHECK-NEXT: vmand.mm v10, v12, v10
8624 ; CHECK-NEXT: vmv1r.v v0, v10
8625 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
8626 ; CHECK-NEXT: vmv1r.v v0, v10
8628 %head = insertelement <4 x double> poison, double %b, i32 0
8629 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8630 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
8634 define <4 x i1> @fcmp_ole_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8635 ; CHECK-LABEL: fcmp_ole_vv_v4f64:
8637 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8638 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8639 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8640 ; CHECK-NEXT: vmand.mm v12, v13, v12
8641 ; CHECK-NEXT: vmv1r.v v0, v12
8642 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
8643 ; CHECK-NEXT: vmv1r.v v0, v12
8645 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
8649 define <4 x i1> @fcmp_ole_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8650 ; CHECK-LABEL: fcmp_ole_vf_v4f64:
8652 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8653 ; CHECK-NEXT: vfmv.v.f v10, fa0
8654 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8655 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8656 ; CHECK-NEXT: vmand.mm v10, v10, v12
8657 ; CHECK-NEXT: vmv1r.v v0, v10
8658 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
8659 ; CHECK-NEXT: vmv1r.v v0, v10
8661 %head = insertelement <4 x double> poison, double %b, i32 0
8662 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8663 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8667 define <4 x i1> @fcmp_ole_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8668 ; CHECK-LABEL: fcmp_ole_fv_v4f64:
8670 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8671 ; CHECK-NEXT: vfmv.v.f v10, fa0
8672 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8673 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8674 ; CHECK-NEXT: vmand.mm v10, v12, v10
8675 ; CHECK-NEXT: vmv1r.v v0, v10
8676 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
8677 ; CHECK-NEXT: vmv1r.v v0, v10
8679 %head = insertelement <4 x double> poison, double %b, i32 0
8680 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8681 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8685 define <4 x i1> @fcmp_one_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8686 ; CHECK-LABEL: fcmp_one_vv_v4f64:
8688 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8689 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8690 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8691 ; CHECK-NEXT: vmand.mm v12, v13, v12
8692 ; CHECK-NEXT: vmv1r.v v13, v12
8693 ; CHECK-NEXT: vmv1r.v v0, v12
8694 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
8695 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
8696 ; CHECK-NEXT: vmor.mm v0, v12, v13
8698 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8702 define <4 x i1> @fcmp_one_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8703 ; CHECK-LABEL: fcmp_one_vf_v4f64:
8705 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8706 ; CHECK-NEXT: vfmv.v.f v10, fa0
8707 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8708 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
8709 ; CHECK-NEXT: vmand.mm v10, v12, v13
8710 ; CHECK-NEXT: vmv1r.v v11, v10
8711 ; CHECK-NEXT: vmv1r.v v0, v10
8712 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
8713 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
8714 ; CHECK-NEXT: vmor.mm v0, v10, v11
8716 %head = insertelement <4 x double> poison, double %b, i32 0
8717 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8718 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8722 define <4 x i1> @fcmp_one_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8723 ; CHECK-LABEL: fcmp_one_fv_v4f64:
8725 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8726 ; CHECK-NEXT: vfmv.v.f v10, fa0
8727 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8728 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
8729 ; CHECK-NEXT: vmand.mm v10, v13, v12
8730 ; CHECK-NEXT: vmv1r.v v11, v10
8731 ; CHECK-NEXT: vmv1r.v v0, v10
8732 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
8733 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
8734 ; CHECK-NEXT: vmor.mm v0, v10, v11
8736 %head = insertelement <4 x double> poison, double %b, i32 0
8737 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8738 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8742 define <4 x i1> @fcmp_ord_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8743 ; CHECK-LABEL: fcmp_ord_vv_v4f64:
8745 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8746 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8747 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8748 ; CHECK-NEXT: vmand.mm v0, v10, v12
8750 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8754 define <4 x i1> @fcmp_ord_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8755 ; CHECK-LABEL: fcmp_ord_vf_v4f64:
8757 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8758 ; CHECK-NEXT: vfmv.v.f v10, fa0
8759 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8760 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8761 ; CHECK-NEXT: vmand.mm v0, v10, v12
8763 %head = insertelement <4 x double> poison, double %b, i32 0
8764 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8765 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8769 define <4 x i1> @fcmp_ord_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8770 ; CHECK-LABEL: fcmp_ord_fv_v4f64:
8772 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
8773 ; CHECK-NEXT: vfmv.v.f v10, fa0
8774 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8775 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8776 ; CHECK-NEXT: vmand.mm v0, v12, v10
8778 %head = insertelement <4 x double> poison, double %b, i32 0
8779 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8780 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8784 define <4 x i1> @fcmp_ueq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8785 ; CHECK-LABEL: fcmp_ueq_vv_v4f64:
8787 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8788 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8789 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8790 ; CHECK-NEXT: vmand.mm v12, v13, v12
8791 ; CHECK-NEXT: vmv1r.v v13, v12
8792 ; CHECK-NEXT: vmv1r.v v0, v12
8793 ; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t
8794 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
8795 ; CHECK-NEXT: vmnor.mm v0, v12, v13
8797 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8801 define <4 x i1> @fcmp_ueq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8802 ; CHECK-LABEL: fcmp_ueq_vf_v4f64:
8804 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8805 ; CHECK-NEXT: vfmv.v.f v10, fa0
8806 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8807 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
8808 ; CHECK-NEXT: vmand.mm v10, v12, v13
8809 ; CHECK-NEXT: vmv1r.v v11, v10
8810 ; CHECK-NEXT: vmv1r.v v0, v10
8811 ; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t
8812 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
8813 ; CHECK-NEXT: vmnor.mm v0, v10, v11
8815 %head = insertelement <4 x double> poison, double %b, i32 0
8816 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8817 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8821 define <4 x i1> @fcmp_ueq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8822 ; CHECK-LABEL: fcmp_ueq_fv_v4f64:
8824 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8825 ; CHECK-NEXT: vfmv.v.f v10, fa0
8826 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8827 ; CHECK-NEXT: vmfeq.vf v13, v10, fa0
8828 ; CHECK-NEXT: vmand.mm v10, v13, v12
8829 ; CHECK-NEXT: vmv1r.v v11, v10
8830 ; CHECK-NEXT: vmv1r.v v0, v10
8831 ; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t
8832 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
8833 ; CHECK-NEXT: vmnor.mm v0, v10, v11
8835 %head = insertelement <4 x double> poison, double %b, i32 0
8836 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8837 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8841 define <4 x i1> @fcmp_ugt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8842 ; CHECK-LABEL: fcmp_ugt_vv_v4f64:
8844 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8845 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8846 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8847 ; CHECK-NEXT: vmand.mm v12, v13, v12
8848 ; CHECK-NEXT: vmv1r.v v0, v12
8849 ; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t
8850 ; CHECK-NEXT: vmnot.m v0, v12
8852 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8856 define <4 x i1> @fcmp_ugt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8857 ; CHECK-LABEL: fcmp_ugt_vf_v4f64:
8859 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8860 ; CHECK-NEXT: vfmv.v.f v10, fa0
8861 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8862 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8863 ; CHECK-NEXT: vmand.mm v10, v10, v12
8864 ; CHECK-NEXT: vmv1r.v v0, v10
8865 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
8866 ; CHECK-NEXT: vmnot.m v0, v10
8868 %head = insertelement <4 x double> poison, double %b, i32 0
8869 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8870 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8874 define <4 x i1> @fcmp_ugt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8875 ; CHECK-LABEL: fcmp_ugt_fv_v4f64:
8877 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8878 ; CHECK-NEXT: vfmv.v.f v10, fa0
8879 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8880 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8881 ; CHECK-NEXT: vmand.mm v10, v12, v10
8882 ; CHECK-NEXT: vmv1r.v v0, v10
8883 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
8884 ; CHECK-NEXT: vmnot.m v0, v10
8886 %head = insertelement <4 x double> poison, double %b, i32 0
8887 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8888 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8892 define <4 x i1> @fcmp_uge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8893 ; CHECK-LABEL: fcmp_uge_vv_v4f64:
8895 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8896 ; CHECK-NEXT: vmfeq.vv v12, v10, v10
8897 ; CHECK-NEXT: vmfeq.vv v13, v8, v8
8898 ; CHECK-NEXT: vmand.mm v12, v13, v12
8899 ; CHECK-NEXT: vmv1r.v v0, v12
8900 ; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t
8901 ; CHECK-NEXT: vmnot.m v0, v12
8903 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8907 define <4 x i1> @fcmp_uge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8908 ; CHECK-LABEL: fcmp_uge_vf_v4f64:
8910 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8911 ; CHECK-NEXT: vfmv.v.f v10, fa0
8912 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8913 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8914 ; CHECK-NEXT: vmand.mm v10, v10, v12
8915 ; CHECK-NEXT: vmv1r.v v0, v10
8916 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
8917 ; CHECK-NEXT: vmnot.m v0, v10
8919 %head = insertelement <4 x double> poison, double %b, i32 0
8920 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8921 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
8925 define <4 x i1> @fcmp_uge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8926 ; CHECK-LABEL: fcmp_uge_fv_v4f64:
8928 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8929 ; CHECK-NEXT: vfmv.v.f v10, fa0
8930 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8931 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8932 ; CHECK-NEXT: vmand.mm v10, v12, v10
8933 ; CHECK-NEXT: vmv1r.v v0, v10
8934 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
8935 ; CHECK-NEXT: vmnot.m v0, v10
8937 %head = insertelement <4 x double> poison, double %b, i32 0
8938 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8939 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
8943 define <4 x i1> @fcmp_ult_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8944 ; CHECK-LABEL: fcmp_ult_vv_v4f64:
8946 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8947 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8948 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
8949 ; CHECK-NEXT: vmand.mm v12, v13, v12
8950 ; CHECK-NEXT: vmv1r.v v0, v12
8951 ; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t
8952 ; CHECK-NEXT: vmnot.m v0, v12
8954 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
8958 define <4 x i1> @fcmp_ult_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8959 ; CHECK-LABEL: fcmp_ult_vf_v4f64:
8961 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8962 ; CHECK-NEXT: vfmv.v.f v10, fa0
8963 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8964 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8965 ; CHECK-NEXT: vmand.mm v10, v12, v10
8966 ; CHECK-NEXT: vmv1r.v v0, v10
8967 ; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t
8968 ; CHECK-NEXT: vmnot.m v0, v10
8970 %head = insertelement <4 x double> poison, double %b, i32 0
8971 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8972 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
8976 define <4 x i1> @fcmp_ult_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8977 ; CHECK-LABEL: fcmp_ult_fv_v4f64:
8979 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8980 ; CHECK-NEXT: vfmv.v.f v10, fa0
8981 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
8982 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
8983 ; CHECK-NEXT: vmand.mm v10, v10, v12
8984 ; CHECK-NEXT: vmv1r.v v0, v10
8985 ; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t
8986 ; CHECK-NEXT: vmnot.m v0, v10
8988 %head = insertelement <4 x double> poison, double %b, i32 0
8989 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8990 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
8994 define <4 x i1> @fcmp_ule_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8995 ; CHECK-LABEL: fcmp_ule_vv_v4f64:
8997 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
8998 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
8999 ; CHECK-NEXT: vmfeq.vv v13, v10, v10
9000 ; CHECK-NEXT: vmand.mm v12, v13, v12
9001 ; CHECK-NEXT: vmv1r.v v0, v12
9002 ; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t
9003 ; CHECK-NEXT: vmnot.m v0, v12
9005 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9009 define <4 x i1> @fcmp_ule_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9010 ; CHECK-LABEL: fcmp_ule_vf_v4f64:
9012 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
9013 ; CHECK-NEXT: vfmv.v.f v10, fa0
9014 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
9015 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
9016 ; CHECK-NEXT: vmand.mm v10, v12, v10
9017 ; CHECK-NEXT: vmv1r.v v0, v10
9018 ; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t
9019 ; CHECK-NEXT: vmnot.m v0, v10
9021 %head = insertelement <4 x double> poison, double %b, i32 0
9022 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9023 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9027 define <4 x i1> @fcmp_ule_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9028 ; CHECK-LABEL: fcmp_ule_fv_v4f64:
9030 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu
9031 ; CHECK-NEXT: vfmv.v.f v10, fa0
9032 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0
9033 ; CHECK-NEXT: vmfeq.vv v10, v8, v8
9034 ; CHECK-NEXT: vmand.mm v10, v10, v12
9035 ; CHECK-NEXT: vmv1r.v v0, v10
9036 ; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t
9037 ; CHECK-NEXT: vmnot.m v0, v10
9039 %head = insertelement <4 x double> poison, double %b, i32 0
9040 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9041 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9045 define <4 x i1> @fcmp_une_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
9046 ; CHECK-LABEL: fcmp_une_vv_v4f64:
9048 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9049 ; CHECK-NEXT: vmfne.vv v0, v8, v10
9051 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9055 define <4 x i1> @fcmp_une_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9056 ; CHECK-LABEL: fcmp_une_vf_v4f64:
9058 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9059 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
9061 %head = insertelement <4 x double> poison, double %b, i32 0
9062 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9063 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9067 define <4 x i1> @fcmp_une_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9068 ; CHECK-LABEL: fcmp_une_fv_v4f64:
9070 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9071 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
9073 %head = insertelement <4 x double> poison, double %b, i32 0
9074 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9075 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9079 define <4 x i1> @fcmp_uno_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
9080 ; CHECK-LABEL: fcmp_uno_vv_v4f64:
9082 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9083 ; CHECK-NEXT: vmfne.vv v12, v10, v10
9084 ; CHECK-NEXT: vmfne.vv v10, v8, v8
9085 ; CHECK-NEXT: vmor.mm v0, v10, v12
9087 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9091 define <4 x i1> @fcmp_uno_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9092 ; CHECK-LABEL: fcmp_uno_vf_v4f64:
9094 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9095 ; CHECK-NEXT: vfmv.v.f v10, fa0
9096 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
9097 ; CHECK-NEXT: vmfne.vv v10, v8, v8
9098 ; CHECK-NEXT: vmor.mm v0, v10, v12
9100 %head = insertelement <4 x double> poison, double %b, i32 0
9101 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9102 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9106 define <4 x i1> @fcmp_uno_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9107 ; CHECK-LABEL: fcmp_uno_fv_v4f64:
9109 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
9110 ; CHECK-NEXT: vfmv.v.f v10, fa0
9111 ; CHECK-NEXT: vmfne.vf v12, v10, fa0
9112 ; CHECK-NEXT: vmfne.vv v10, v8, v8
9113 ; CHECK-NEXT: vmor.mm v0, v12, v10
9115 %head = insertelement <4 x double> poison, double %b, i32 0
9116 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9117 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
9121 declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata)
9122 define <8 x i1> @fcmp_oeq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9123 ; CHECK-LABEL: fcmp_oeq_vv_v8f64:
9125 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9126 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
9128 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9132 define <8 x i1> @fcmp_oeq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9133 ; CHECK-LABEL: fcmp_oeq_vf_v8f64:
9135 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9136 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
9138 %head = insertelement <8 x double> poison, double %b, i32 0
9139 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9140 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9144 define <8 x i1> @fcmp_oeq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9145 ; CHECK-LABEL: fcmp_oeq_fv_v8f64:
9147 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9148 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
9150 %head = insertelement <8 x double> poison, double %b, i32 0
9151 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9152 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9156 define <8 x i1> @fcmp_ogt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9157 ; CHECK-LABEL: fcmp_ogt_vv_v8f64:
9159 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9160 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
9161 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
9162 ; CHECK-NEXT: vmand.mm v16, v17, v16
9163 ; CHECK-NEXT: vmv1r.v v0, v16
9164 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
9165 ; CHECK-NEXT: vmv1r.v v0, v16
9167 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9171 define <8 x i1> @fcmp_ogt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9172 ; CHECK-LABEL: fcmp_ogt_vf_v8f64:
9174 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9175 ; CHECK-NEXT: vfmv.v.f v12, fa0
9176 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9177 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9178 ; CHECK-NEXT: vmand.mm v12, v16, v12
9179 ; CHECK-NEXT: vmv1r.v v0, v12
9180 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9181 ; CHECK-NEXT: vmv1r.v v0, v12
9183 %head = insertelement <8 x double> poison, double %b, i32 0
9184 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9185 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9189 define <8 x i1> @fcmp_ogt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9190 ; CHECK-LABEL: fcmp_ogt_fv_v8f64:
9192 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9193 ; CHECK-NEXT: vfmv.v.f v12, fa0
9194 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9195 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9196 ; CHECK-NEXT: vmand.mm v12, v12, v16
9197 ; CHECK-NEXT: vmv1r.v v0, v12
9198 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9199 ; CHECK-NEXT: vmv1r.v v0, v12
9201 %head = insertelement <8 x double> poison, double %b, i32 0
9202 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9203 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9207 define <8 x i1> @fcmp_oge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9208 ; CHECK-LABEL: fcmp_oge_vv_v8f64:
9210 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9211 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
9212 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
9213 ; CHECK-NEXT: vmand.mm v16, v17, v16
9214 ; CHECK-NEXT: vmv1r.v v0, v16
9215 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
9216 ; CHECK-NEXT: vmv1r.v v0, v16
9218 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
9222 define <8 x i1> @fcmp_oge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9223 ; CHECK-LABEL: fcmp_oge_vf_v8f64:
9225 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9226 ; CHECK-NEXT: vfmv.v.f v12, fa0
9227 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9228 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9229 ; CHECK-NEXT: vmand.mm v12, v16, v12
9230 ; CHECK-NEXT: vmv1r.v v0, v12
9231 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
9232 ; CHECK-NEXT: vmv1r.v v0, v12
9234 %head = insertelement <8 x double> poison, double %b, i32 0
9235 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9236 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
9240 define <8 x i1> @fcmp_oge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9241 ; CHECK-LABEL: fcmp_oge_fv_v8f64:
9243 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9244 ; CHECK-NEXT: vfmv.v.f v12, fa0
9245 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9246 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9247 ; CHECK-NEXT: vmand.mm v12, v12, v16
9248 ; CHECK-NEXT: vmv1r.v v0, v12
9249 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
9250 ; CHECK-NEXT: vmv1r.v v0, v12
9252 %head = insertelement <8 x double> poison, double %b, i32 0
9253 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9254 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
9258 define <8 x i1> @fcmp_olt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9259 ; CHECK-LABEL: fcmp_olt_vv_v8f64:
9261 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9262 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9263 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9264 ; CHECK-NEXT: vmand.mm v16, v17, v16
9265 ; CHECK-NEXT: vmv1r.v v0, v16
9266 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
9267 ; CHECK-NEXT: vmv1r.v v0, v16
9269 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
9273 define <8 x i1> @fcmp_olt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9274 ; CHECK-LABEL: fcmp_olt_vf_v8f64:
9276 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9277 ; CHECK-NEXT: vfmv.v.f v12, fa0
9278 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9279 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9280 ; CHECK-NEXT: vmand.mm v12, v12, v16
9281 ; CHECK-NEXT: vmv1r.v v0, v12
9282 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9283 ; CHECK-NEXT: vmv1r.v v0, v12
9285 %head = insertelement <8 x double> poison, double %b, i32 0
9286 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9287 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
9291 define <8 x i1> @fcmp_olt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9292 ; CHECK-LABEL: fcmp_olt_fv_v8f64:
9294 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9295 ; CHECK-NEXT: vfmv.v.f v12, fa0
9296 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9297 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9298 ; CHECK-NEXT: vmand.mm v12, v16, v12
9299 ; CHECK-NEXT: vmv1r.v v0, v12
9300 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9301 ; CHECK-NEXT: vmv1r.v v0, v12
9303 %head = insertelement <8 x double> poison, double %b, i32 0
9304 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9305 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
9309 define <8 x i1> @fcmp_ole_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9310 ; CHECK-LABEL: fcmp_ole_vv_v8f64:
9312 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9313 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9314 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9315 ; CHECK-NEXT: vmand.mm v16, v17, v16
9316 ; CHECK-NEXT: vmv1r.v v0, v16
9317 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
9318 ; CHECK-NEXT: vmv1r.v v0, v16
9320 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
9324 define <8 x i1> @fcmp_ole_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9325 ; CHECK-LABEL: fcmp_ole_vf_v8f64:
9327 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9328 ; CHECK-NEXT: vfmv.v.f v12, fa0
9329 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9330 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9331 ; CHECK-NEXT: vmand.mm v12, v12, v16
9332 ; CHECK-NEXT: vmv1r.v v0, v12
9333 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
9334 ; CHECK-NEXT: vmv1r.v v0, v12
9336 %head = insertelement <8 x double> poison, double %b, i32 0
9337 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9338 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
9342 define <8 x i1> @fcmp_ole_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9343 ; CHECK-LABEL: fcmp_ole_fv_v8f64:
9345 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9346 ; CHECK-NEXT: vfmv.v.f v12, fa0
9347 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9348 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9349 ; CHECK-NEXT: vmand.mm v12, v16, v12
9350 ; CHECK-NEXT: vmv1r.v v0, v12
9351 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
9352 ; CHECK-NEXT: vmv1r.v v0, v12
9354 %head = insertelement <8 x double> poison, double %b, i32 0
9355 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9356 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
9360 define <8 x i1> @fcmp_one_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9361 ; CHECK-LABEL: fcmp_one_vv_v8f64:
9363 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9364 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9365 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9366 ; CHECK-NEXT: vmand.mm v16, v17, v16
9367 ; CHECK-NEXT: vmv1r.v v17, v16
9368 ; CHECK-NEXT: vmv1r.v v0, v16
9369 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
9370 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
9371 ; CHECK-NEXT: vmor.mm v0, v16, v17
9373 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
9377 define <8 x i1> @fcmp_one_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9378 ; CHECK-LABEL: fcmp_one_vf_v8f64:
9380 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9381 ; CHECK-NEXT: vfmv.v.f v12, fa0
9382 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9383 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9384 ; CHECK-NEXT: vmand.mm v12, v12, v16
9385 ; CHECK-NEXT: vmv1r.v v13, v12
9386 ; CHECK-NEXT: vmv1r.v v0, v12
9387 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
9388 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9389 ; CHECK-NEXT: vmor.mm v0, v12, v13
9391 %head = insertelement <8 x double> poison, double %b, i32 0
9392 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9393 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
9397 define <8 x i1> @fcmp_one_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9398 ; CHECK-LABEL: fcmp_one_fv_v8f64:
9400 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9401 ; CHECK-NEXT: vfmv.v.f v12, fa0
9402 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9403 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9404 ; CHECK-NEXT: vmand.mm v12, v16, v12
9405 ; CHECK-NEXT: vmv1r.v v13, v12
9406 ; CHECK-NEXT: vmv1r.v v0, v12
9407 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
9408 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9409 ; CHECK-NEXT: vmor.mm v0, v12, v13
9411 %head = insertelement <8 x double> poison, double %b, i32 0
9412 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9413 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
9417 define <8 x i1> @fcmp_ord_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9418 ; CHECK-LABEL: fcmp_ord_vv_v8f64:
9420 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9421 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9422 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9423 ; CHECK-NEXT: vmand.mm v0, v12, v16
9425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
9429 define <8 x i1> @fcmp_ord_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9430 ; CHECK-LABEL: fcmp_ord_vf_v8f64:
9432 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9433 ; CHECK-NEXT: vfmv.v.f v12, fa0
9434 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9435 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9436 ; CHECK-NEXT: vmand.mm v0, v12, v16
9438 %head = insertelement <8 x double> poison, double %b, i32 0
9439 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9440 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
9444 define <8 x i1> @fcmp_ord_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9445 ; CHECK-LABEL: fcmp_ord_fv_v8f64:
9447 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9448 ; CHECK-NEXT: vfmv.v.f v12, fa0
9449 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9450 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9451 ; CHECK-NEXT: vmand.mm v0, v16, v12
9453 %head = insertelement <8 x double> poison, double %b, i32 0
9454 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9455 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
9459 define <8 x i1> @fcmp_ueq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9460 ; CHECK-LABEL: fcmp_ueq_vv_v8f64:
9462 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9463 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9464 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9465 ; CHECK-NEXT: vmand.mm v16, v17, v16
9466 ; CHECK-NEXT: vmv1r.v v17, v16
9467 ; CHECK-NEXT: vmv1r.v v0, v16
9468 ; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t
9469 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
9470 ; CHECK-NEXT: vmnor.mm v0, v16, v17
9472 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9476 define <8 x i1> @fcmp_ueq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9477 ; CHECK-LABEL: fcmp_ueq_vf_v8f64:
9479 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9480 ; CHECK-NEXT: vfmv.v.f v12, fa0
9481 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9482 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9483 ; CHECK-NEXT: vmand.mm v12, v12, v16
9484 ; CHECK-NEXT: vmv1r.v v13, v12
9485 ; CHECK-NEXT: vmv1r.v v0, v12
9486 ; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t
9487 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9488 ; CHECK-NEXT: vmnor.mm v0, v12, v13
9490 %head = insertelement <8 x double> poison, double %b, i32 0
9491 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9492 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9496 define <8 x i1> @fcmp_ueq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9497 ; CHECK-LABEL: fcmp_ueq_fv_v8f64:
9499 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9500 ; CHECK-NEXT: vfmv.v.f v12, fa0
9501 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9502 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9503 ; CHECK-NEXT: vmand.mm v12, v16, v12
9504 ; CHECK-NEXT: vmv1r.v v13, v12
9505 ; CHECK-NEXT: vmv1r.v v0, v12
9506 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t
9507 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9508 ; CHECK-NEXT: vmnor.mm v0, v12, v13
9510 %head = insertelement <8 x double> poison, double %b, i32 0
9511 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9512 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9516 define <8 x i1> @fcmp_ugt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9517 ; CHECK-LABEL: fcmp_ugt_vv_v8f64:
9519 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9520 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9521 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9522 ; CHECK-NEXT: vmand.mm v16, v17, v16
9523 ; CHECK-NEXT: vmv1r.v v0, v16
9524 ; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t
9525 ; CHECK-NEXT: vmnot.m v0, v16
9527 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9531 define <8 x i1> @fcmp_ugt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9532 ; CHECK-LABEL: fcmp_ugt_vf_v8f64:
9534 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9535 ; CHECK-NEXT: vfmv.v.f v12, fa0
9536 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9537 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9538 ; CHECK-NEXT: vmand.mm v12, v12, v16
9539 ; CHECK-NEXT: vmv1r.v v0, v12
9540 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
9541 ; CHECK-NEXT: vmnot.m v0, v12
9543 %head = insertelement <8 x double> poison, double %b, i32 0
9544 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9545 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9549 define <8 x i1> @fcmp_ugt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9550 ; CHECK-LABEL: fcmp_ugt_fv_v8f64:
9552 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9553 ; CHECK-NEXT: vfmv.v.f v12, fa0
9554 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9555 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9556 ; CHECK-NEXT: vmand.mm v12, v16, v12
9557 ; CHECK-NEXT: vmv1r.v v0, v12
9558 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
9559 ; CHECK-NEXT: vmnot.m v0, v12
9561 %head = insertelement <8 x double> poison, double %b, i32 0
9562 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9563 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9567 define <8 x i1> @fcmp_uge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9568 ; CHECK-LABEL: fcmp_uge_vv_v8f64:
9570 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9571 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
9572 ; CHECK-NEXT: vmfeq.vv v17, v8, v8
9573 ; CHECK-NEXT: vmand.mm v16, v17, v16
9574 ; CHECK-NEXT: vmv1r.v v0, v16
9575 ; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t
9576 ; CHECK-NEXT: vmnot.m v0, v16
9578 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
9582 define <8 x i1> @fcmp_uge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9583 ; CHECK-LABEL: fcmp_uge_vf_v8f64:
9585 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9586 ; CHECK-NEXT: vfmv.v.f v12, fa0
9587 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9588 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9589 ; CHECK-NEXT: vmand.mm v12, v12, v16
9590 ; CHECK-NEXT: vmv1r.v v0, v12
9591 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9592 ; CHECK-NEXT: vmnot.m v0, v12
9594 %head = insertelement <8 x double> poison, double %b, i32 0
9595 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9596 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
9600 define <8 x i1> @fcmp_uge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9601 ; CHECK-LABEL: fcmp_uge_fv_v8f64:
9603 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9604 ; CHECK-NEXT: vfmv.v.f v12, fa0
9605 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9606 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9607 ; CHECK-NEXT: vmand.mm v12, v16, v12
9608 ; CHECK-NEXT: vmv1r.v v0, v12
9609 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9610 ; CHECK-NEXT: vmnot.m v0, v12
9612 %head = insertelement <8 x double> poison, double %b, i32 0
9613 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9614 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
9618 define <8 x i1> @fcmp_ult_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9619 ; CHECK-LABEL: fcmp_ult_vv_v8f64:
9621 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9622 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
9623 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
9624 ; CHECK-NEXT: vmand.mm v16, v17, v16
9625 ; CHECK-NEXT: vmv1r.v v0, v16
9626 ; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t
9627 ; CHECK-NEXT: vmnot.m v0, v16
9629 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
9633 define <8 x i1> @fcmp_ult_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9634 ; CHECK-LABEL: fcmp_ult_vf_v8f64:
9636 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9637 ; CHECK-NEXT: vfmv.v.f v12, fa0
9638 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9639 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9640 ; CHECK-NEXT: vmand.mm v12, v16, v12
9641 ; CHECK-NEXT: vmv1r.v v0, v12
9642 ; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t
9643 ; CHECK-NEXT: vmnot.m v0, v12
9645 %head = insertelement <8 x double> poison, double %b, i32 0
9646 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9647 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
9651 define <8 x i1> @fcmp_ult_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9652 ; CHECK-LABEL: fcmp_ult_fv_v8f64:
9654 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9655 ; CHECK-NEXT: vfmv.v.f v12, fa0
9656 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9657 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9658 ; CHECK-NEXT: vmand.mm v12, v12, v16
9659 ; CHECK-NEXT: vmv1r.v v0, v12
9660 ; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t
9661 ; CHECK-NEXT: vmnot.m v0, v12
9663 %head = insertelement <8 x double> poison, double %b, i32 0
9664 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9665 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
9669 define <8 x i1> @fcmp_ule_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9670 ; CHECK-LABEL: fcmp_ule_vv_v8f64:
9672 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9673 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
9674 ; CHECK-NEXT: vmfeq.vv v17, v12, v12
9675 ; CHECK-NEXT: vmand.mm v16, v17, v16
9676 ; CHECK-NEXT: vmv1r.v v0, v16
9677 ; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t
9678 ; CHECK-NEXT: vmnot.m v0, v16
9680 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9684 define <8 x i1> @fcmp_ule_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9685 ; CHECK-LABEL: fcmp_ule_vf_v8f64:
9687 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9688 ; CHECK-NEXT: vfmv.v.f v12, fa0
9689 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9690 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9691 ; CHECK-NEXT: vmand.mm v12, v16, v12
9692 ; CHECK-NEXT: vmv1r.v v0, v12
9693 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t
9694 ; CHECK-NEXT: vmnot.m v0, v12
9696 %head = insertelement <8 x double> poison, double %b, i32 0
9697 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9698 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9702 define <8 x i1> @fcmp_ule_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9703 ; CHECK-LABEL: fcmp_ule_fv_v8f64:
9705 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu
9706 ; CHECK-NEXT: vfmv.v.f v12, fa0
9707 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
9708 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
9709 ; CHECK-NEXT: vmand.mm v12, v12, v16
9710 ; CHECK-NEXT: vmv1r.v v0, v12
9711 ; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t
9712 ; CHECK-NEXT: vmnot.m v0, v12
9714 %head = insertelement <8 x double> poison, double %b, i32 0
9715 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9716 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9720 define <8 x i1> @fcmp_une_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9721 ; CHECK-LABEL: fcmp_une_vv_v8f64:
9723 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9724 ; CHECK-NEXT: vmfne.vv v0, v8, v12
9726 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9730 define <8 x i1> @fcmp_une_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9731 ; CHECK-LABEL: fcmp_une_vf_v8f64:
9733 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9734 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
9736 %head = insertelement <8 x double> poison, double %b, i32 0
9737 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9738 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9742 define <8 x i1> @fcmp_une_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9743 ; CHECK-LABEL: fcmp_une_fv_v8f64:
9745 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9746 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
9748 %head = insertelement <8 x double> poison, double %b, i32 0
9749 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9750 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9754 define <8 x i1> @fcmp_uno_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9755 ; CHECK-LABEL: fcmp_uno_vv_v8f64:
9757 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9758 ; CHECK-NEXT: vmfne.vv v16, v12, v12
9759 ; CHECK-NEXT: vmfne.vv v12, v8, v8
9760 ; CHECK-NEXT: vmor.mm v0, v12, v16
9762 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9766 define <8 x i1> @fcmp_uno_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9767 ; CHECK-LABEL: fcmp_uno_vf_v8f64:
9769 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9770 ; CHECK-NEXT: vfmv.v.f v12, fa0
9771 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
9772 ; CHECK-NEXT: vmfne.vv v12, v8, v8
9773 ; CHECK-NEXT: vmor.mm v0, v12, v16
9775 %head = insertelement <8 x double> poison, double %b, i32 0
9776 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9777 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9781 define <8 x i1> @fcmp_uno_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9782 ; CHECK-LABEL: fcmp_uno_fv_v8f64:
9784 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9785 ; CHECK-NEXT: vfmv.v.f v12, fa0
9786 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
9787 ; CHECK-NEXT: vmfne.vv v12, v8, v8
9788 ; CHECK-NEXT: vmor.mm v0, v16, v12
9790 %head = insertelement <8 x double> poison, double %b, i32 0
9791 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9792 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp