[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfcmp-constrained-sdnode.ll
blobdfd509062ccf7b047b03e36f9c92db218ceb7d28
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:
10 ; CHECK:       # %bb.0:
11 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
12 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
13 ; CHECK-NEXT:    ret
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
15   ret <1 x i1> %1
18 define <1 x i1> @fcmp_oeq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
19 ; CHECK-LABEL: fcmp_oeq_vf_v1f16:
20 ; CHECK:       # %bb.0:
21 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
22 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
23 ; CHECK-NEXT:    ret
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
27   ret <1 x i1> %1
30 define <1 x i1> @fcmp_oeq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
31 ; CHECK-LABEL: fcmp_oeq_fv_v1f16:
32 ; CHECK:       # %bb.0:
33 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
34 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
35 ; CHECK-NEXT:    ret
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
39   ret <1 x i1> %1
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:
44 ; CHECK:       # %bb.0:
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
50 ; CHECK-NEXT:    ret
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
52   ret <1 x i1> %1
55 define <1 x i1> @fcmp_ogt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
56 ; CHECK-LABEL: fcmp_ogt_vf_v1f16:
57 ; CHECK:       # %bb.0:
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
64 ; CHECK-NEXT:    ret
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
68   ret <1 x i1> %1
71 define <1 x i1> @fcmp_ogt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
72 ; CHECK-LABEL: fcmp_ogt_fv_v1f16:
73 ; CHECK:       # %bb.0:
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
80 ; CHECK-NEXT:    ret
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
84   ret <1 x i1> %1
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:
89 ; CHECK:       # %bb.0:
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
95 ; CHECK-NEXT:    ret
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
97   ret <1 x i1> %1
100 define <1 x i1> @fcmp_oge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
101 ; CHECK-LABEL: fcmp_oge_vf_v1f16:
102 ; CHECK:       # %bb.0:
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
109 ; CHECK-NEXT:    ret
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
113   ret <1 x i1> %1
116 define <1 x i1> @fcmp_oge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
117 ; CHECK-LABEL: fcmp_oge_fv_v1f16:
118 ; CHECK:       # %bb.0:
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
125 ; CHECK-NEXT:    ret
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
129   ret <1 x i1> %1
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:
134 ; CHECK:       # %bb.0:
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
140 ; CHECK-NEXT:    ret
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
142   ret <1 x i1> %1
145 define <1 x i1> @fcmp_olt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
146 ; CHECK-LABEL: fcmp_olt_vf_v1f16:
147 ; CHECK:       # %bb.0:
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
154 ; CHECK-NEXT:    ret
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
158   ret <1 x i1> %1
161 define <1 x i1> @fcmp_olt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
162 ; CHECK-LABEL: fcmp_olt_fv_v1f16:
163 ; CHECK:       # %bb.0:
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
170 ; CHECK-NEXT:    ret
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
174   ret <1 x i1> %1
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:
179 ; CHECK:       # %bb.0:
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
185 ; CHECK-NEXT:    ret
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
187   ret <1 x i1> %1
190 define <1 x i1> @fcmp_ole_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
191 ; CHECK-LABEL: fcmp_ole_vf_v1f16:
192 ; CHECK:       # %bb.0:
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
199 ; CHECK-NEXT:    ret
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
203   ret <1 x i1> %1
206 define <1 x i1> @fcmp_ole_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
207 ; CHECK-LABEL: fcmp_ole_fv_v1f16:
208 ; CHECK:       # %bb.0:
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
215 ; CHECK-NEXT:    ret
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
219   ret <1 x i1> %1
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:
224 ; CHECK:       # %bb.0:
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
233 ; CHECK-NEXT:    ret
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
235   ret <1 x i1> %1
238 define <1 x i1> @fcmp_one_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
239 ; CHECK-LABEL: fcmp_one_vf_v1f16:
240 ; CHECK:       # %bb.0:
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
250 ; CHECK-NEXT:    ret
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
254   ret <1 x i1> %1
257 define <1 x i1> @fcmp_one_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
258 ; CHECK-LABEL: fcmp_one_fv_v1f16:
259 ; CHECK:       # %bb.0:
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
269 ; CHECK-NEXT:    ret
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
273   ret <1 x i1> %1
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:
278 ; CHECK:       # %bb.0:
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
283 ; CHECK-NEXT:    ret
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
285   ret <1 x i1> %1
288 define <1 x i1> @fcmp_ord_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
289 ; CHECK-LABEL: fcmp_ord_vf_v1f16:
290 ; CHECK:       # %bb.0:
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
296 ; CHECK-NEXT:    ret
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
300   ret <1 x i1> %1
303 define <1 x i1> @fcmp_ord_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
304 ; CHECK-LABEL: fcmp_ord_fv_v1f16:
305 ; CHECK:       # %bb.0:
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
311 ; CHECK-NEXT:    ret
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
315   ret <1 x i1> %1
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:
320 ; CHECK:       # %bb.0:
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
329 ; CHECK-NEXT:    ret
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
331   ret <1 x i1> %1
334 define <1 x i1> @fcmp_ueq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
335 ; CHECK-LABEL: fcmp_ueq_vf_v1f16:
336 ; CHECK:       # %bb.0:
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
346 ; CHECK-NEXT:    ret
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
350   ret <1 x i1> %1
353 define <1 x i1> @fcmp_ueq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
354 ; CHECK-LABEL: fcmp_ueq_fv_v1f16:
355 ; CHECK:       # %bb.0:
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
365 ; CHECK-NEXT:    ret
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
369   ret <1 x i1> %1
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:
374 ; CHECK:       # %bb.0:
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
381 ; CHECK-NEXT:    ret
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
383   ret <1 x i1> %1
386 define <1 x i1> @fcmp_ugt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
387 ; CHECK-LABEL: fcmp_ugt_vf_v1f16:
388 ; CHECK:       # %bb.0:
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
396 ; CHECK-NEXT:    ret
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
400   ret <1 x i1> %1
403 define <1 x i1> @fcmp_ugt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
404 ; CHECK-LABEL: fcmp_ugt_fv_v1f16:
405 ; CHECK:       # %bb.0:
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
413 ; CHECK-NEXT:    ret
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
417   ret <1 x i1> %1
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:
422 ; CHECK:       # %bb.0:
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
429 ; CHECK-NEXT:    ret
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
431   ret <1 x i1> %1
434 define <1 x i1> @fcmp_uge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
435 ; CHECK-LABEL: fcmp_uge_vf_v1f16:
436 ; CHECK:       # %bb.0:
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
444 ; CHECK-NEXT:    ret
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
448   ret <1 x i1> %1
451 define <1 x i1> @fcmp_uge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
452 ; CHECK-LABEL: fcmp_uge_fv_v1f16:
453 ; CHECK:       # %bb.0:
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
461 ; CHECK-NEXT:    ret
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
465   ret <1 x i1> %1
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:
470 ; CHECK:       # %bb.0:
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
477 ; CHECK-NEXT:    ret
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
479   ret <1 x i1> %1
482 define <1 x i1> @fcmp_ult_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
483 ; CHECK-LABEL: fcmp_ult_vf_v1f16:
484 ; CHECK:       # %bb.0:
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
492 ; CHECK-NEXT:    ret
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
496   ret <1 x i1> %1
499 define <1 x i1> @fcmp_ult_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
500 ; CHECK-LABEL: fcmp_ult_fv_v1f16:
501 ; CHECK:       # %bb.0:
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
509 ; CHECK-NEXT:    ret
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
513   ret <1 x i1> %1
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:
518 ; CHECK:       # %bb.0:
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
525 ; CHECK-NEXT:    ret
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
527   ret <1 x i1> %1
530 define <1 x i1> @fcmp_ule_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
531 ; CHECK-LABEL: fcmp_ule_vf_v1f16:
532 ; CHECK:       # %bb.0:
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
540 ; CHECK-NEXT:    ret
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
544   ret <1 x i1> %1
547 define <1 x i1> @fcmp_ule_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
548 ; CHECK-LABEL: fcmp_ule_fv_v1f16:
549 ; CHECK:       # %bb.0:
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
557 ; CHECK-NEXT:    ret
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
561   ret <1 x i1> %1
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:
566 ; CHECK:       # %bb.0:
567 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
568 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
569 ; CHECK-NEXT:    ret
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
571   ret <1 x i1> %1
574 define <1 x i1> @fcmp_une_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
575 ; CHECK-LABEL: fcmp_une_vf_v1f16:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
578 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
579 ; CHECK-NEXT:    ret
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
583   ret <1 x i1> %1
586 define <1 x i1> @fcmp_une_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
587 ; CHECK-LABEL: fcmp_une_fv_v1f16:
588 ; CHECK:       # %bb.0:
589 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
590 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
591 ; CHECK-NEXT:    ret
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
595   ret <1 x i1> %1
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:
600 ; CHECK:       # %bb.0:
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
605 ; CHECK-NEXT:    ret
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
607   ret <1 x i1> %1
610 define <1 x i1> @fcmp_uno_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
611 ; CHECK-LABEL: fcmp_uno_vf_v1f16:
612 ; CHECK:       # %bb.0:
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
618 ; CHECK-NEXT:    ret
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
622   ret <1 x i1> %1
625 define <1 x i1> @fcmp_uno_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
626 ; CHECK-LABEL: fcmp_uno_fv_v1f16:
627 ; CHECK:       # %bb.0:
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
633 ; CHECK-NEXT:    ret
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
637   ret <1 x i1> %1
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:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
645 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
646 ; CHECK-NEXT:    ret
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
648   ret <2 x i1> %1
651 define <2 x i1> @fcmp_oeq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
652 ; CHECK-LABEL: fcmp_oeq_vf_v2f16:
653 ; CHECK:       # %bb.0:
654 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
655 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
656 ; CHECK-NEXT:    ret
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
660   ret <2 x i1> %1
663 define <2 x i1> @fcmp_oeq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
664 ; CHECK-LABEL: fcmp_oeq_fv_v2f16:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
667 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
668 ; CHECK-NEXT:    ret
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
672   ret <2 x i1> %1
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:
677 ; CHECK:       # %bb.0:
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
683 ; CHECK-NEXT:    ret
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
685   ret <2 x i1> %1
688 define <2 x i1> @fcmp_ogt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
689 ; CHECK-LABEL: fcmp_ogt_vf_v2f16:
690 ; CHECK:       # %bb.0:
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
697 ; CHECK-NEXT:    ret
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
701   ret <2 x i1> %1
704 define <2 x i1> @fcmp_ogt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
705 ; CHECK-LABEL: fcmp_ogt_fv_v2f16:
706 ; CHECK:       # %bb.0:
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
713 ; CHECK-NEXT:    ret
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
717   ret <2 x i1> %1
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:
722 ; CHECK:       # %bb.0:
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
728 ; CHECK-NEXT:    ret
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
730   ret <2 x i1> %1
733 define <2 x i1> @fcmp_oge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
734 ; CHECK-LABEL: fcmp_oge_vf_v2f16:
735 ; CHECK:       # %bb.0:
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
742 ; CHECK-NEXT:    ret
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
746   ret <2 x i1> %1
749 define <2 x i1> @fcmp_oge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
750 ; CHECK-LABEL: fcmp_oge_fv_v2f16:
751 ; CHECK:       # %bb.0:
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
758 ; CHECK-NEXT:    ret
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
762   ret <2 x i1> %1
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:
767 ; CHECK:       # %bb.0:
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
773 ; CHECK-NEXT:    ret
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
775   ret <2 x i1> %1
778 define <2 x i1> @fcmp_olt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
779 ; CHECK-LABEL: fcmp_olt_vf_v2f16:
780 ; CHECK:       # %bb.0:
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
787 ; CHECK-NEXT:    ret
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
791   ret <2 x i1> %1
794 define <2 x i1> @fcmp_olt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
795 ; CHECK-LABEL: fcmp_olt_fv_v2f16:
796 ; CHECK:       # %bb.0:
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
803 ; CHECK-NEXT:    ret
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
807   ret <2 x i1> %1
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:
812 ; CHECK:       # %bb.0:
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
818 ; CHECK-NEXT:    ret
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
820   ret <2 x i1> %1
823 define <2 x i1> @fcmp_ole_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
824 ; CHECK-LABEL: fcmp_ole_vf_v2f16:
825 ; CHECK:       # %bb.0:
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
832 ; CHECK-NEXT:    ret
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
836   ret <2 x i1> %1
839 define <2 x i1> @fcmp_ole_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
840 ; CHECK-LABEL: fcmp_ole_fv_v2f16:
841 ; CHECK:       # %bb.0:
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
848 ; CHECK-NEXT:    ret
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
852   ret <2 x i1> %1
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:
857 ; CHECK:       # %bb.0:
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
866 ; CHECK-NEXT:    ret
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
868   ret <2 x i1> %1
871 define <2 x i1> @fcmp_one_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
872 ; CHECK-LABEL: fcmp_one_vf_v2f16:
873 ; CHECK:       # %bb.0:
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
883 ; CHECK-NEXT:    ret
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
887   ret <2 x i1> %1
890 define <2 x i1> @fcmp_one_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
891 ; CHECK-LABEL: fcmp_one_fv_v2f16:
892 ; CHECK:       # %bb.0:
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
902 ; CHECK-NEXT:    ret
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
906   ret <2 x i1> %1
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:
911 ; CHECK:       # %bb.0:
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
916 ; CHECK-NEXT:    ret
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
918   ret <2 x i1> %1
921 define <2 x i1> @fcmp_ord_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
922 ; CHECK-LABEL: fcmp_ord_vf_v2f16:
923 ; CHECK:       # %bb.0:
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
929 ; CHECK-NEXT:    ret
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
933   ret <2 x i1> %1
936 define <2 x i1> @fcmp_ord_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
937 ; CHECK-LABEL: fcmp_ord_fv_v2f16:
938 ; CHECK:       # %bb.0:
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
944 ; CHECK-NEXT:    ret
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
948   ret <2 x i1> %1
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:
953 ; CHECK:       # %bb.0:
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
962 ; CHECK-NEXT:    ret
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
964   ret <2 x i1> %1
967 define <2 x i1> @fcmp_ueq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
968 ; CHECK-LABEL: fcmp_ueq_vf_v2f16:
969 ; CHECK:       # %bb.0:
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
979 ; CHECK-NEXT:    ret
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
983   ret <2 x i1> %1
986 define <2 x i1> @fcmp_ueq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
987 ; CHECK-LABEL: fcmp_ueq_fv_v2f16:
988 ; CHECK:       # %bb.0:
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
998 ; CHECK-NEXT:    ret
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
1002   ret <2 x i1> %1
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:
1007 ; CHECK:       # %bb.0:
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
1014 ; CHECK-NEXT:    ret
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
1016   ret <2 x i1> %1
1019 define <2 x i1> @fcmp_ugt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1020 ; CHECK-LABEL: fcmp_ugt_vf_v2f16:
1021 ; CHECK:       # %bb.0:
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
1029 ; CHECK-NEXT:    ret
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
1033   ret <2 x i1> %1
1036 define <2 x i1> @fcmp_ugt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1037 ; CHECK-LABEL: fcmp_ugt_fv_v2f16:
1038 ; CHECK:       # %bb.0:
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
1046 ; CHECK-NEXT:    ret
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
1050   ret <2 x i1> %1
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:
1055 ; CHECK:       # %bb.0:
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
1062 ; CHECK-NEXT:    ret
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
1064   ret <2 x i1> %1
1067 define <2 x i1> @fcmp_uge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1068 ; CHECK-LABEL: fcmp_uge_vf_v2f16:
1069 ; CHECK:       # %bb.0:
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
1077 ; CHECK-NEXT:    ret
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
1081   ret <2 x i1> %1
1084 define <2 x i1> @fcmp_uge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1085 ; CHECK-LABEL: fcmp_uge_fv_v2f16:
1086 ; CHECK:       # %bb.0:
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
1094 ; CHECK-NEXT:    ret
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
1098   ret <2 x i1> %1
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:
1103 ; CHECK:       # %bb.0:
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
1110 ; CHECK-NEXT:    ret
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
1112   ret <2 x i1> %1
1115 define <2 x i1> @fcmp_ult_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1116 ; CHECK-LABEL: fcmp_ult_vf_v2f16:
1117 ; CHECK:       # %bb.0:
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
1125 ; CHECK-NEXT:    ret
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
1129   ret <2 x i1> %1
1132 define <2 x i1> @fcmp_ult_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1133 ; CHECK-LABEL: fcmp_ult_fv_v2f16:
1134 ; CHECK:       # %bb.0:
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
1142 ; CHECK-NEXT:    ret
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
1146   ret <2 x i1> %1
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:
1151 ; CHECK:       # %bb.0:
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
1158 ; CHECK-NEXT:    ret
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
1160   ret <2 x i1> %1
1163 define <2 x i1> @fcmp_ule_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1164 ; CHECK-LABEL: fcmp_ule_vf_v2f16:
1165 ; CHECK:       # %bb.0:
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
1173 ; CHECK-NEXT:    ret
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
1177   ret <2 x i1> %1
1180 define <2 x i1> @fcmp_ule_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1181 ; CHECK-LABEL: fcmp_ule_fv_v2f16:
1182 ; CHECK:       # %bb.0:
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
1190 ; CHECK-NEXT:    ret
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
1194   ret <2 x i1> %1
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:
1199 ; CHECK:       # %bb.0:
1200 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1201 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
1202 ; CHECK-NEXT:    ret
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
1204   ret <2 x i1> %1
1207 define <2 x i1> @fcmp_une_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1208 ; CHECK-LABEL: fcmp_une_vf_v2f16:
1209 ; CHECK:       # %bb.0:
1210 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1211 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1212 ; CHECK-NEXT:    ret
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
1216   ret <2 x i1> %1
1219 define <2 x i1> @fcmp_une_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1220 ; CHECK-LABEL: fcmp_une_fv_v2f16:
1221 ; CHECK:       # %bb.0:
1222 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1223 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1224 ; CHECK-NEXT:    ret
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
1228   ret <2 x i1> %1
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:
1233 ; CHECK:       # %bb.0:
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
1238 ; CHECK-NEXT:    ret
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
1240   ret <2 x i1> %1
1243 define <2 x i1> @fcmp_uno_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1244 ; CHECK-LABEL: fcmp_uno_vf_v2f16:
1245 ; CHECK:       # %bb.0:
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
1251 ; CHECK-NEXT:    ret
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
1255   ret <2 x i1> %1
1258 define <2 x i1> @fcmp_uno_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1259 ; CHECK-LABEL: fcmp_uno_fv_v2f16:
1260 ; CHECK:       # %bb.0:
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
1266 ; CHECK-NEXT:    ret
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
1270   ret <2 x i1> %1
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:
1276 ; CHECK:       # %bb.0:
1277 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1278 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
1279 ; CHECK-NEXT:    ret
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
1281   ret <4 x i1> %1
1284 define <4 x i1> @fcmp_oeq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1285 ; CHECK-LABEL: fcmp_oeq_vf_v4f16:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1288 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1289 ; CHECK-NEXT:    ret
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
1293   ret <4 x i1> %1
1296 define <4 x i1> @fcmp_oeq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1297 ; CHECK-LABEL: fcmp_oeq_fv_v4f16:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1300 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1301 ; CHECK-NEXT:    ret
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
1305   ret <4 x i1> %1
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:
1310 ; CHECK:       # %bb.0:
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
1316 ; CHECK-NEXT:    ret
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
1318   ret <4 x i1> %1
1321 define <4 x i1> @fcmp_ogt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1322 ; CHECK-LABEL: fcmp_ogt_vf_v4f16:
1323 ; CHECK:       # %bb.0:
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
1330 ; CHECK-NEXT:    ret
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
1334   ret <4 x i1> %1
1337 define <4 x i1> @fcmp_ogt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1338 ; CHECK-LABEL: fcmp_ogt_fv_v4f16:
1339 ; CHECK:       # %bb.0:
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
1346 ; CHECK-NEXT:    ret
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
1350   ret <4 x i1> %1
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:
1355 ; CHECK:       # %bb.0:
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
1361 ; CHECK-NEXT:    ret
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
1363   ret <4 x i1> %1
1366 define <4 x i1> @fcmp_oge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1367 ; CHECK-LABEL: fcmp_oge_vf_v4f16:
1368 ; CHECK:       # %bb.0:
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
1375 ; CHECK-NEXT:    ret
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
1379   ret <4 x i1> %1
1382 define <4 x i1> @fcmp_oge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1383 ; CHECK-LABEL: fcmp_oge_fv_v4f16:
1384 ; CHECK:       # %bb.0:
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
1391 ; CHECK-NEXT:    ret
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
1395   ret <4 x i1> %1
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:
1400 ; CHECK:       # %bb.0:
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
1406 ; CHECK-NEXT:    ret
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
1408   ret <4 x i1> %1
1411 define <4 x i1> @fcmp_olt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1412 ; CHECK-LABEL: fcmp_olt_vf_v4f16:
1413 ; CHECK:       # %bb.0:
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
1420 ; CHECK-NEXT:    ret
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
1424   ret <4 x i1> %1
1427 define <4 x i1> @fcmp_olt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1428 ; CHECK-LABEL: fcmp_olt_fv_v4f16:
1429 ; CHECK:       # %bb.0:
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
1436 ; CHECK-NEXT:    ret
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
1440   ret <4 x i1> %1
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:
1445 ; CHECK:       # %bb.0:
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
1451 ; CHECK-NEXT:    ret
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
1453   ret <4 x i1> %1
1456 define <4 x i1> @fcmp_ole_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1457 ; CHECK-LABEL: fcmp_ole_vf_v4f16:
1458 ; CHECK:       # %bb.0:
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
1465 ; CHECK-NEXT:    ret
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
1469   ret <4 x i1> %1
1472 define <4 x i1> @fcmp_ole_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1473 ; CHECK-LABEL: fcmp_ole_fv_v4f16:
1474 ; CHECK:       # %bb.0:
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
1481 ; CHECK-NEXT:    ret
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
1485   ret <4 x i1> %1
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:
1490 ; CHECK:       # %bb.0:
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
1499 ; CHECK-NEXT:    ret
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
1501   ret <4 x i1> %1
1504 define <4 x i1> @fcmp_one_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1505 ; CHECK-LABEL: fcmp_one_vf_v4f16:
1506 ; CHECK:       # %bb.0:
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
1516 ; CHECK-NEXT:    ret
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
1520   ret <4 x i1> %1
1523 define <4 x i1> @fcmp_one_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1524 ; CHECK-LABEL: fcmp_one_fv_v4f16:
1525 ; CHECK:       # %bb.0:
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
1535 ; CHECK-NEXT:    ret
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
1539   ret <4 x i1> %1
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:
1544 ; CHECK:       # %bb.0:
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
1549 ; CHECK-NEXT:    ret
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
1551   ret <4 x i1> %1
1554 define <4 x i1> @fcmp_ord_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1555 ; CHECK-LABEL: fcmp_ord_vf_v4f16:
1556 ; CHECK:       # %bb.0:
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
1562 ; CHECK-NEXT:    ret
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
1566   ret <4 x i1> %1
1569 define <4 x i1> @fcmp_ord_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1570 ; CHECK-LABEL: fcmp_ord_fv_v4f16:
1571 ; CHECK:       # %bb.0:
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
1577 ; CHECK-NEXT:    ret
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
1581   ret <4 x i1> %1
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:
1586 ; CHECK:       # %bb.0:
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
1595 ; CHECK-NEXT:    ret
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
1597   ret <4 x i1> %1
1600 define <4 x i1> @fcmp_ueq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1601 ; CHECK-LABEL: fcmp_ueq_vf_v4f16:
1602 ; CHECK:       # %bb.0:
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
1612 ; CHECK-NEXT:    ret
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
1616   ret <4 x i1> %1
1619 define <4 x i1> @fcmp_ueq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1620 ; CHECK-LABEL: fcmp_ueq_fv_v4f16:
1621 ; CHECK:       # %bb.0:
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
1631 ; CHECK-NEXT:    ret
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
1635   ret <4 x i1> %1
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:
1640 ; CHECK:       # %bb.0:
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
1647 ; CHECK-NEXT:    ret
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
1649   ret <4 x i1> %1
1652 define <4 x i1> @fcmp_ugt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1653 ; CHECK-LABEL: fcmp_ugt_vf_v4f16:
1654 ; CHECK:       # %bb.0:
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
1662 ; CHECK-NEXT:    ret
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
1666   ret <4 x i1> %1
1669 define <4 x i1> @fcmp_ugt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1670 ; CHECK-LABEL: fcmp_ugt_fv_v4f16:
1671 ; CHECK:       # %bb.0:
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
1679 ; CHECK-NEXT:    ret
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
1683   ret <4 x i1> %1
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:
1688 ; CHECK:       # %bb.0:
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
1695 ; CHECK-NEXT:    ret
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
1697   ret <4 x i1> %1
1700 define <4 x i1> @fcmp_uge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1701 ; CHECK-LABEL: fcmp_uge_vf_v4f16:
1702 ; CHECK:       # %bb.0:
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
1710 ; CHECK-NEXT:    ret
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
1714   ret <4 x i1> %1
1717 define <4 x i1> @fcmp_uge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1718 ; CHECK-LABEL: fcmp_uge_fv_v4f16:
1719 ; CHECK:       # %bb.0:
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
1727 ; CHECK-NEXT:    ret
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
1731   ret <4 x i1> %1
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:
1736 ; CHECK:       # %bb.0:
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
1743 ; CHECK-NEXT:    ret
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
1745   ret <4 x i1> %1
1748 define <4 x i1> @fcmp_ult_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1749 ; CHECK-LABEL: fcmp_ult_vf_v4f16:
1750 ; CHECK:       # %bb.0:
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
1758 ; CHECK-NEXT:    ret
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
1762   ret <4 x i1> %1
1765 define <4 x i1> @fcmp_ult_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1766 ; CHECK-LABEL: fcmp_ult_fv_v4f16:
1767 ; CHECK:       # %bb.0:
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
1775 ; CHECK-NEXT:    ret
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
1779   ret <4 x i1> %1
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:
1784 ; CHECK:       # %bb.0:
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
1791 ; CHECK-NEXT:    ret
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
1793   ret <4 x i1> %1
1796 define <4 x i1> @fcmp_ule_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1797 ; CHECK-LABEL: fcmp_ule_vf_v4f16:
1798 ; CHECK:       # %bb.0:
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
1806 ; CHECK-NEXT:    ret
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
1810   ret <4 x i1> %1
1813 define <4 x i1> @fcmp_ule_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1814 ; CHECK-LABEL: fcmp_ule_fv_v4f16:
1815 ; CHECK:       # %bb.0:
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
1823 ; CHECK-NEXT:    ret
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
1827   ret <4 x i1> %1
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:
1832 ; CHECK:       # %bb.0:
1833 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1834 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
1835 ; CHECK-NEXT:    ret
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
1837   ret <4 x i1> %1
1840 define <4 x i1> @fcmp_une_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1841 ; CHECK-LABEL: fcmp_une_vf_v4f16:
1842 ; CHECK:       # %bb.0:
1843 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1844 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1845 ; CHECK-NEXT:    ret
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
1849   ret <4 x i1> %1
1852 define <4 x i1> @fcmp_une_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1853 ; CHECK-LABEL: fcmp_une_fv_v4f16:
1854 ; CHECK:       # %bb.0:
1855 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1856 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1857 ; CHECK-NEXT:    ret
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
1861   ret <4 x i1> %1
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:
1866 ; CHECK:       # %bb.0:
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
1871 ; CHECK-NEXT:    ret
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
1873   ret <4 x i1> %1
1876 define <4 x i1> @fcmp_uno_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1877 ; CHECK-LABEL: fcmp_uno_vf_v4f16:
1878 ; CHECK:       # %bb.0:
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
1884 ; CHECK-NEXT:    ret
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
1888   ret <4 x i1> %1
1891 define <4 x i1> @fcmp_uno_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1892 ; CHECK-LABEL: fcmp_uno_fv_v4f16:
1893 ; CHECK:       # %bb.0:
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
1899 ; CHECK-NEXT:    ret
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
1903   ret <4 x i1> %1
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:
1909 ; CHECK:       # %bb.0:
1910 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1911 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
1912 ; CHECK-NEXT:    ret
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
1914   ret <8 x i1> %1
1917 define <8 x i1> @fcmp_oeq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1918 ; CHECK-LABEL: fcmp_oeq_vf_v8f16:
1919 ; CHECK:       # %bb.0:
1920 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1921 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1922 ; CHECK-NEXT:    ret
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
1926   ret <8 x i1> %1
1929 define <8 x i1> @fcmp_oeq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1930 ; CHECK-LABEL: fcmp_oeq_fv_v8f16:
1931 ; CHECK:       # %bb.0:
1932 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1933 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1934 ; CHECK-NEXT:    ret
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
1938   ret <8 x i1> %1
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:
1943 ; CHECK:       # %bb.0:
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
1949 ; CHECK-NEXT:    ret
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
1951   ret <8 x i1> %1
1954 define <8 x i1> @fcmp_ogt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1955 ; CHECK-LABEL: fcmp_ogt_vf_v8f16:
1956 ; CHECK:       # %bb.0:
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
1963 ; CHECK-NEXT:    ret
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
1967   ret <8 x i1> %1
1970 define <8 x i1> @fcmp_ogt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1971 ; CHECK-LABEL: fcmp_ogt_fv_v8f16:
1972 ; CHECK:       # %bb.0:
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
1979 ; CHECK-NEXT:    ret
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
1983   ret <8 x i1> %1
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:
1988 ; CHECK:       # %bb.0:
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
1994 ; CHECK-NEXT:    ret
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
1996   ret <8 x i1> %1
1999 define <8 x i1> @fcmp_oge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2000 ; CHECK-LABEL: fcmp_oge_vf_v8f16:
2001 ; CHECK:       # %bb.0:
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
2008 ; CHECK-NEXT:    ret
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
2012   ret <8 x i1> %1
2015 define <8 x i1> @fcmp_oge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2016 ; CHECK-LABEL: fcmp_oge_fv_v8f16:
2017 ; CHECK:       # %bb.0:
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
2024 ; CHECK-NEXT:    ret
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
2028   ret <8 x i1> %1
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:
2033 ; CHECK:       # %bb.0:
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
2039 ; CHECK-NEXT:    ret
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
2041   ret <8 x i1> %1
2044 define <8 x i1> @fcmp_olt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2045 ; CHECK-LABEL: fcmp_olt_vf_v8f16:
2046 ; CHECK:       # %bb.0:
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
2053 ; CHECK-NEXT:    ret
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
2057   ret <8 x i1> %1
2060 define <8 x i1> @fcmp_olt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2061 ; CHECK-LABEL: fcmp_olt_fv_v8f16:
2062 ; CHECK:       # %bb.0:
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
2069 ; CHECK-NEXT:    ret
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
2073   ret <8 x i1> %1
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:
2078 ; CHECK:       # %bb.0:
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
2084 ; CHECK-NEXT:    ret
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
2086   ret <8 x i1> %1
2089 define <8 x i1> @fcmp_ole_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2090 ; CHECK-LABEL: fcmp_ole_vf_v8f16:
2091 ; CHECK:       # %bb.0:
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
2098 ; CHECK-NEXT:    ret
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
2102   ret <8 x i1> %1
2105 define <8 x i1> @fcmp_ole_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2106 ; CHECK-LABEL: fcmp_ole_fv_v8f16:
2107 ; CHECK:       # %bb.0:
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
2114 ; CHECK-NEXT:    ret
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
2118   ret <8 x i1> %1
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:
2123 ; CHECK:       # %bb.0:
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
2132 ; CHECK-NEXT:    ret
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
2134   ret <8 x i1> %1
2137 define <8 x i1> @fcmp_one_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2138 ; CHECK-LABEL: fcmp_one_vf_v8f16:
2139 ; CHECK:       # %bb.0:
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
2149 ; CHECK-NEXT:    ret
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
2153   ret <8 x i1> %1
2156 define <8 x i1> @fcmp_one_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2157 ; CHECK-LABEL: fcmp_one_fv_v8f16:
2158 ; CHECK:       # %bb.0:
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
2168 ; CHECK-NEXT:    ret
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
2172   ret <8 x i1> %1
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:
2177 ; CHECK:       # %bb.0:
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
2182 ; CHECK-NEXT:    ret
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
2184   ret <8 x i1> %1
2187 define <8 x i1> @fcmp_ord_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2188 ; CHECK-LABEL: fcmp_ord_vf_v8f16:
2189 ; CHECK:       # %bb.0:
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
2195 ; CHECK-NEXT:    ret
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
2199   ret <8 x i1> %1
2202 define <8 x i1> @fcmp_ord_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2203 ; CHECK-LABEL: fcmp_ord_fv_v8f16:
2204 ; CHECK:       # %bb.0:
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
2210 ; CHECK-NEXT:    ret
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
2214   ret <8 x i1> %1
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:
2219 ; CHECK:       # %bb.0:
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
2228 ; CHECK-NEXT:    ret
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
2230   ret <8 x i1> %1
2233 define <8 x i1> @fcmp_ueq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2234 ; CHECK-LABEL: fcmp_ueq_vf_v8f16:
2235 ; CHECK:       # %bb.0:
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
2245 ; CHECK-NEXT:    ret
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
2249   ret <8 x i1> %1
2252 define <8 x i1> @fcmp_ueq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2253 ; CHECK-LABEL: fcmp_ueq_fv_v8f16:
2254 ; CHECK:       # %bb.0:
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
2264 ; CHECK-NEXT:    ret
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
2268   ret <8 x i1> %1
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:
2273 ; CHECK:       # %bb.0:
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
2280 ; CHECK-NEXT:    ret
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
2282   ret <8 x i1> %1
2285 define <8 x i1> @fcmp_ugt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2286 ; CHECK-LABEL: fcmp_ugt_vf_v8f16:
2287 ; CHECK:       # %bb.0:
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
2295 ; CHECK-NEXT:    ret
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
2299   ret <8 x i1> %1
2302 define <8 x i1> @fcmp_ugt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2303 ; CHECK-LABEL: fcmp_ugt_fv_v8f16:
2304 ; CHECK:       # %bb.0:
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
2312 ; CHECK-NEXT:    ret
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
2316   ret <8 x i1> %1
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:
2321 ; CHECK:       # %bb.0:
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
2328 ; CHECK-NEXT:    ret
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
2330   ret <8 x i1> %1
2333 define <8 x i1> @fcmp_uge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2334 ; CHECK-LABEL: fcmp_uge_vf_v8f16:
2335 ; CHECK:       # %bb.0:
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
2343 ; CHECK-NEXT:    ret
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
2347   ret <8 x i1> %1
2350 define <8 x i1> @fcmp_uge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2351 ; CHECK-LABEL: fcmp_uge_fv_v8f16:
2352 ; CHECK:       # %bb.0:
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
2360 ; CHECK-NEXT:    ret
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
2364   ret <8 x i1> %1
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:
2369 ; CHECK:       # %bb.0:
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
2376 ; CHECK-NEXT:    ret
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
2378   ret <8 x i1> %1
2381 define <8 x i1> @fcmp_ult_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2382 ; CHECK-LABEL: fcmp_ult_vf_v8f16:
2383 ; CHECK:       # %bb.0:
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
2391 ; CHECK-NEXT:    ret
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
2395   ret <8 x i1> %1
2398 define <8 x i1> @fcmp_ult_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2399 ; CHECK-LABEL: fcmp_ult_fv_v8f16:
2400 ; CHECK:       # %bb.0:
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
2408 ; CHECK-NEXT:    ret
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
2412   ret <8 x i1> %1
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:
2417 ; CHECK:       # %bb.0:
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
2424 ; CHECK-NEXT:    ret
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
2426   ret <8 x i1> %1
2429 define <8 x i1> @fcmp_ule_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2430 ; CHECK-LABEL: fcmp_ule_vf_v8f16:
2431 ; CHECK:       # %bb.0:
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
2439 ; CHECK-NEXT:    ret
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
2443   ret <8 x i1> %1
2446 define <8 x i1> @fcmp_ule_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2447 ; CHECK-LABEL: fcmp_ule_fv_v8f16:
2448 ; CHECK:       # %bb.0:
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
2456 ; CHECK-NEXT:    ret
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
2460   ret <8 x i1> %1
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:
2465 ; CHECK:       # %bb.0:
2466 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2467 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
2468 ; CHECK-NEXT:    ret
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
2470   ret <8 x i1> %1
2473 define <8 x i1> @fcmp_une_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2474 ; CHECK-LABEL: fcmp_une_vf_v8f16:
2475 ; CHECK:       # %bb.0:
2476 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2477 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2478 ; CHECK-NEXT:    ret
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
2482   ret <8 x i1> %1
2485 define <8 x i1> @fcmp_une_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2486 ; CHECK-LABEL: fcmp_une_fv_v8f16:
2487 ; CHECK:       # %bb.0:
2488 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2489 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2490 ; CHECK-NEXT:    ret
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
2494   ret <8 x i1> %1
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:
2499 ; CHECK:       # %bb.0:
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
2504 ; CHECK-NEXT:    ret
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
2506   ret <8 x i1> %1
2509 define <8 x i1> @fcmp_uno_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2510 ; CHECK-LABEL: fcmp_uno_vf_v8f16:
2511 ; CHECK:       # %bb.0:
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
2517 ; CHECK-NEXT:    ret
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
2521   ret <8 x i1> %1
2524 define <8 x i1> @fcmp_uno_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2525 ; CHECK-LABEL: fcmp_uno_fv_v8f16:
2526 ; CHECK:       # %bb.0:
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
2532 ; CHECK-NEXT:    ret
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
2536   ret <8 x i1> %1
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:
2542 ; CHECK:       # %bb.0:
2543 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2544 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
2545 ; CHECK-NEXT:    ret
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
2547   ret <16 x i1> %1
2550 define <16 x i1> @fcmp_oeq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2551 ; CHECK-LABEL: fcmp_oeq_vf_v16f16:
2552 ; CHECK:       # %bb.0:
2553 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2554 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2555 ; CHECK-NEXT:    ret
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
2559   ret <16 x i1> %1
2562 define <16 x i1> @fcmp_oeq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2563 ; CHECK-LABEL: fcmp_oeq_fv_v16f16:
2564 ; CHECK:       # %bb.0:
2565 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2566 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2567 ; CHECK-NEXT:    ret
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
2571   ret <16 x i1> %1
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:
2576 ; CHECK:       # %bb.0:
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
2584 ; CHECK-NEXT:    ret
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
2586   ret <16 x i1> %1
2589 define <16 x i1> @fcmp_ogt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2590 ; CHECK-LABEL: fcmp_ogt_vf_v16f16:
2591 ; CHECK:       # %bb.0:
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
2600 ; CHECK-NEXT:    ret
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
2604   ret <16 x i1> %1
2607 define <16 x i1> @fcmp_ogt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2608 ; CHECK-LABEL: fcmp_ogt_fv_v16f16:
2609 ; CHECK:       # %bb.0:
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
2618 ; CHECK-NEXT:    ret
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
2622   ret <16 x i1> %1
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:
2627 ; CHECK:       # %bb.0:
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
2635 ; CHECK-NEXT:    ret
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
2637   ret <16 x i1> %1
2640 define <16 x i1> @fcmp_oge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2641 ; CHECK-LABEL: fcmp_oge_vf_v16f16:
2642 ; CHECK:       # %bb.0:
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
2651 ; CHECK-NEXT:    ret
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
2655   ret <16 x i1> %1
2658 define <16 x i1> @fcmp_oge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2659 ; CHECK-LABEL: fcmp_oge_fv_v16f16:
2660 ; CHECK:       # %bb.0:
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
2669 ; CHECK-NEXT:    ret
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
2673   ret <16 x i1> %1
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:
2678 ; CHECK:       # %bb.0:
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
2686 ; CHECK-NEXT:    ret
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
2688   ret <16 x i1> %1
2691 define <16 x i1> @fcmp_olt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2692 ; CHECK-LABEL: fcmp_olt_vf_v16f16:
2693 ; CHECK:       # %bb.0:
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
2702 ; CHECK-NEXT:    ret
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
2706   ret <16 x i1> %1
2709 define <16 x i1> @fcmp_olt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2710 ; CHECK-LABEL: fcmp_olt_fv_v16f16:
2711 ; CHECK:       # %bb.0:
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
2720 ; CHECK-NEXT:    ret
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
2724   ret <16 x i1> %1
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:
2729 ; CHECK:       # %bb.0:
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
2737 ; CHECK-NEXT:    ret
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
2739   ret <16 x i1> %1
2742 define <16 x i1> @fcmp_ole_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2743 ; CHECK-LABEL: fcmp_ole_vf_v16f16:
2744 ; CHECK:       # %bb.0:
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
2753 ; CHECK-NEXT:    ret
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
2757   ret <16 x i1> %1
2760 define <16 x i1> @fcmp_ole_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2761 ; CHECK-LABEL: fcmp_ole_fv_v16f16:
2762 ; CHECK:       # %bb.0:
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
2771 ; CHECK-NEXT:    ret
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
2775   ret <16 x i1> %1
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:
2780 ; CHECK:       # %bb.0:
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
2790 ; CHECK-NEXT:    ret
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
2792   ret <16 x i1> %1
2795 define <16 x i1> @fcmp_one_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2796 ; CHECK-LABEL: fcmp_one_vf_v16f16:
2797 ; CHECK:       # %bb.0:
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
2808 ; CHECK-NEXT:    ret
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
2812   ret <16 x i1> %1
2815 define <16 x i1> @fcmp_one_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2816 ; CHECK-LABEL: fcmp_one_fv_v16f16:
2817 ; CHECK:       # %bb.0:
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
2828 ; CHECK-NEXT:    ret
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
2832   ret <16 x i1> %1
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:
2837 ; CHECK:       # %bb.0:
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
2842 ; CHECK-NEXT:    ret
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
2844   ret <16 x i1> %1
2847 define <16 x i1> @fcmp_ord_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2848 ; CHECK-LABEL: fcmp_ord_vf_v16f16:
2849 ; CHECK:       # %bb.0:
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
2855 ; CHECK-NEXT:    ret
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
2859   ret <16 x i1> %1
2862 define <16 x i1> @fcmp_ord_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2863 ; CHECK-LABEL: fcmp_ord_fv_v16f16:
2864 ; CHECK:       # %bb.0:
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
2870 ; CHECK-NEXT:    ret
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
2874   ret <16 x i1> %1
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:
2879 ; CHECK:       # %bb.0:
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
2889 ; CHECK-NEXT:    ret
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
2891   ret <16 x i1> %1
2894 define <16 x i1> @fcmp_ueq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2895 ; CHECK-LABEL: fcmp_ueq_vf_v16f16:
2896 ; CHECK:       # %bb.0:
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
2907 ; CHECK-NEXT:    ret
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
2911   ret <16 x i1> %1
2914 define <16 x i1> @fcmp_ueq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2915 ; CHECK-LABEL: fcmp_ueq_fv_v16f16:
2916 ; CHECK:       # %bb.0:
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
2927 ; CHECK-NEXT:    ret
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
2931   ret <16 x i1> %1
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:
2936 ; CHECK:       # %bb.0:
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
2944 ; CHECK-NEXT:    ret
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
2946   ret <16 x i1> %1
2949 define <16 x i1> @fcmp_ugt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2950 ; CHECK-LABEL: fcmp_ugt_vf_v16f16:
2951 ; CHECK:       # %bb.0:
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
2960 ; CHECK-NEXT:    ret
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
2964   ret <16 x i1> %1
2967 define <16 x i1> @fcmp_ugt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2968 ; CHECK-LABEL: fcmp_ugt_fv_v16f16:
2969 ; CHECK:       # %bb.0:
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
2978 ; CHECK-NEXT:    ret
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
2982   ret <16 x i1> %1
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:
2987 ; CHECK:       # %bb.0:
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
2995 ; CHECK-NEXT:    ret
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
2997   ret <16 x i1> %1
3000 define <16 x i1> @fcmp_uge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3001 ; CHECK-LABEL: fcmp_uge_vf_v16f16:
3002 ; CHECK:       # %bb.0:
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
3011 ; CHECK-NEXT:    ret
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
3015   ret <16 x i1> %1
3018 define <16 x i1> @fcmp_uge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3019 ; CHECK-LABEL: fcmp_uge_fv_v16f16:
3020 ; CHECK:       # %bb.0:
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
3029 ; CHECK-NEXT:    ret
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
3033   ret <16 x i1> %1
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:
3038 ; CHECK:       # %bb.0:
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
3046 ; CHECK-NEXT:    ret
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
3048   ret <16 x i1> %1
3051 define <16 x i1> @fcmp_ult_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3052 ; CHECK-LABEL: fcmp_ult_vf_v16f16:
3053 ; CHECK:       # %bb.0:
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
3062 ; CHECK-NEXT:    ret
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
3066   ret <16 x i1> %1
3069 define <16 x i1> @fcmp_ult_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3070 ; CHECK-LABEL: fcmp_ult_fv_v16f16:
3071 ; CHECK:       # %bb.0:
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
3080 ; CHECK-NEXT:    ret
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
3084   ret <16 x i1> %1
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:
3089 ; CHECK:       # %bb.0:
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
3097 ; CHECK-NEXT:    ret
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
3099   ret <16 x i1> %1
3102 define <16 x i1> @fcmp_ule_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3103 ; CHECK-LABEL: fcmp_ule_vf_v16f16:
3104 ; CHECK:       # %bb.0:
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
3113 ; CHECK-NEXT:    ret
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
3117   ret <16 x i1> %1
3120 define <16 x i1> @fcmp_ule_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3121 ; CHECK-LABEL: fcmp_ule_fv_v16f16:
3122 ; CHECK:       # %bb.0:
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
3131 ; CHECK-NEXT:    ret
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
3135   ret <16 x i1> %1
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:
3140 ; CHECK:       # %bb.0:
3141 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3142 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
3143 ; CHECK-NEXT:    ret
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
3145   ret <16 x i1> %1
3148 define <16 x i1> @fcmp_une_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3149 ; CHECK-LABEL: fcmp_une_vf_v16f16:
3150 ; CHECK:       # %bb.0:
3151 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3152 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3153 ; CHECK-NEXT:    ret
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
3157   ret <16 x i1> %1
3160 define <16 x i1> @fcmp_une_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3161 ; CHECK-LABEL: fcmp_une_fv_v16f16:
3162 ; CHECK:       # %bb.0:
3163 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3164 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3165 ; CHECK-NEXT:    ret
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
3169   ret <16 x i1> %1
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:
3174 ; CHECK:       # %bb.0:
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
3179 ; CHECK-NEXT:    ret
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
3181   ret <16 x i1> %1
3184 define <16 x i1> @fcmp_uno_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3185 ; CHECK-LABEL: fcmp_uno_vf_v16f16:
3186 ; CHECK:       # %bb.0:
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
3192 ; CHECK-NEXT:    ret
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
3196   ret <16 x i1> %1
3199 define <16 x i1> @fcmp_uno_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3200 ; CHECK-LABEL: fcmp_uno_fv_v16f16:
3201 ; CHECK:       # %bb.0:
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
3207 ; CHECK-NEXT:    ret
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
3211   ret <16 x i1> %1
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:
3217 ; CHECK:       # %bb.0:
3218 ; CHECK-NEXT:    li a0, 32
3219 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3220 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
3221 ; CHECK-NEXT:    ret
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
3223   ret <32 x i1> %1
3226 define <32 x i1> @fcmp_oeq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3227 ; CHECK-LABEL: fcmp_oeq_vf_v32f16:
3228 ; CHECK:       # %bb.0:
3229 ; CHECK-NEXT:    li a0, 32
3230 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3231 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3232 ; CHECK-NEXT:    ret
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
3236   ret <32 x i1> %1
3239 define <32 x i1> @fcmp_oeq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3240 ; CHECK-LABEL: fcmp_oeq_fv_v32f16:
3241 ; CHECK:       # %bb.0:
3242 ; CHECK-NEXT:    li a0, 32
3243 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3244 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3245 ; CHECK-NEXT:    ret
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
3249   ret <32 x i1> %1
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:
3254 ; CHECK:       # %bb.0:
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
3263 ; CHECK-NEXT:    ret
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
3265   ret <32 x i1> %1
3268 define <32 x i1> @fcmp_ogt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3269 ; CHECK-LABEL: fcmp_ogt_vf_v32f16:
3270 ; CHECK:       # %bb.0:
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
3280 ; CHECK-NEXT:    ret
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
3284   ret <32 x i1> %1
3287 define <32 x i1> @fcmp_ogt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3288 ; CHECK-LABEL: fcmp_ogt_fv_v32f16:
3289 ; CHECK:       # %bb.0:
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
3299 ; CHECK-NEXT:    ret
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
3303   ret <32 x i1> %1
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:
3308 ; CHECK:       # %bb.0:
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
3317 ; CHECK-NEXT:    ret
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
3319   ret <32 x i1> %1
3322 define <32 x i1> @fcmp_oge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3323 ; CHECK-LABEL: fcmp_oge_vf_v32f16:
3324 ; CHECK:       # %bb.0:
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
3334 ; CHECK-NEXT:    ret
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
3338   ret <32 x i1> %1
3341 define <32 x i1> @fcmp_oge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3342 ; CHECK-LABEL: fcmp_oge_fv_v32f16:
3343 ; CHECK:       # %bb.0:
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
3353 ; CHECK-NEXT:    ret
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
3357   ret <32 x i1> %1
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:
3362 ; CHECK:       # %bb.0:
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
3371 ; CHECK-NEXT:    ret
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
3373   ret <32 x i1> %1
3376 define <32 x i1> @fcmp_olt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3377 ; CHECK-LABEL: fcmp_olt_vf_v32f16:
3378 ; CHECK:       # %bb.0:
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
3388 ; CHECK-NEXT:    ret
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
3392   ret <32 x i1> %1
3395 define <32 x i1> @fcmp_olt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3396 ; CHECK-LABEL: fcmp_olt_fv_v32f16:
3397 ; CHECK:       # %bb.0:
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
3407 ; CHECK-NEXT:    ret
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
3411   ret <32 x i1> %1
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:
3416 ; CHECK:       # %bb.0:
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
3425 ; CHECK-NEXT:    ret
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
3427   ret <32 x i1> %1
3430 define <32 x i1> @fcmp_ole_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3431 ; CHECK-LABEL: fcmp_ole_vf_v32f16:
3432 ; CHECK:       # %bb.0:
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
3442 ; CHECK-NEXT:    ret
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
3446   ret <32 x i1> %1
3449 define <32 x i1> @fcmp_ole_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3450 ; CHECK-LABEL: fcmp_ole_fv_v32f16:
3451 ; CHECK:       # %bb.0:
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
3461 ; CHECK-NEXT:    ret
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
3465   ret <32 x i1> %1
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:
3470 ; CHECK:       # %bb.0:
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
3481 ; CHECK-NEXT:    ret
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
3483   ret <32 x i1> %1
3486 define <32 x i1> @fcmp_one_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3487 ; CHECK-LABEL: fcmp_one_vf_v32f16:
3488 ; CHECK:       # %bb.0:
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
3500 ; CHECK-NEXT:    ret
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
3504   ret <32 x i1> %1
3507 define <32 x i1> @fcmp_one_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3508 ; CHECK-LABEL: fcmp_one_fv_v32f16:
3509 ; CHECK:       # %bb.0:
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
3521 ; CHECK-NEXT:    ret
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
3525   ret <32 x i1> %1
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:
3530 ; CHECK:       # %bb.0:
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
3536 ; CHECK-NEXT:    ret
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
3538   ret <32 x i1> %1
3541 define <32 x i1> @fcmp_ord_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3542 ; CHECK-LABEL: fcmp_ord_vf_v32f16:
3543 ; CHECK:       # %bb.0:
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
3550 ; CHECK-NEXT:    ret
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
3554   ret <32 x i1> %1
3557 define <32 x i1> @fcmp_ord_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3558 ; CHECK-LABEL: fcmp_ord_fv_v32f16:
3559 ; CHECK:       # %bb.0:
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
3566 ; CHECK-NEXT:    ret
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
3570   ret <32 x i1> %1
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:
3575 ; CHECK:       # %bb.0:
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
3586 ; CHECK-NEXT:    ret
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
3588   ret <32 x i1> %1
3591 define <32 x i1> @fcmp_ueq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3592 ; CHECK-LABEL: fcmp_ueq_vf_v32f16:
3593 ; CHECK:       # %bb.0:
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
3605 ; CHECK-NEXT:    ret
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
3609   ret <32 x i1> %1
3612 define <32 x i1> @fcmp_ueq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3613 ; CHECK-LABEL: fcmp_ueq_fv_v32f16:
3614 ; CHECK:       # %bb.0:
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
3626 ; CHECK-NEXT:    ret
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
3630   ret <32 x i1> %1
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:
3635 ; CHECK:       # %bb.0:
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
3644 ; CHECK-NEXT:    ret
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
3646   ret <32 x i1> %1
3649 define <32 x i1> @fcmp_ugt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3650 ; CHECK-LABEL: fcmp_ugt_vf_v32f16:
3651 ; CHECK:       # %bb.0:
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
3661 ; CHECK-NEXT:    ret
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
3665   ret <32 x i1> %1
3668 define <32 x i1> @fcmp_ugt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3669 ; CHECK-LABEL: fcmp_ugt_fv_v32f16:
3670 ; CHECK:       # %bb.0:
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
3680 ; CHECK-NEXT:    ret
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
3684   ret <32 x i1> %1
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:
3689 ; CHECK:       # %bb.0:
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
3698 ; CHECK-NEXT:    ret
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
3700   ret <32 x i1> %1
3703 define <32 x i1> @fcmp_uge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3704 ; CHECK-LABEL: fcmp_uge_vf_v32f16:
3705 ; CHECK:       # %bb.0:
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
3715 ; CHECK-NEXT:    ret
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
3719   ret <32 x i1> %1
3722 define <32 x i1> @fcmp_uge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3723 ; CHECK-LABEL: fcmp_uge_fv_v32f16:
3724 ; CHECK:       # %bb.0:
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
3734 ; CHECK-NEXT:    ret
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
3738   ret <32 x i1> %1
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:
3743 ; CHECK:       # %bb.0:
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
3752 ; CHECK-NEXT:    ret
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
3754   ret <32 x i1> %1
3757 define <32 x i1> @fcmp_ult_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3758 ; CHECK-LABEL: fcmp_ult_vf_v32f16:
3759 ; CHECK:       # %bb.0:
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
3769 ; CHECK-NEXT:    ret
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
3773   ret <32 x i1> %1
3776 define <32 x i1> @fcmp_ult_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3777 ; CHECK-LABEL: fcmp_ult_fv_v32f16:
3778 ; CHECK:       # %bb.0:
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
3788 ; CHECK-NEXT:    ret
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
3792   ret <32 x i1> %1
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:
3797 ; CHECK:       # %bb.0:
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
3806 ; CHECK-NEXT:    ret
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
3808   ret <32 x i1> %1
3811 define <32 x i1> @fcmp_ule_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3812 ; CHECK-LABEL: fcmp_ule_vf_v32f16:
3813 ; CHECK:       # %bb.0:
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
3823 ; CHECK-NEXT:    ret
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
3827   ret <32 x i1> %1
3830 define <32 x i1> @fcmp_ule_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3831 ; CHECK-LABEL: fcmp_ule_fv_v32f16:
3832 ; CHECK:       # %bb.0:
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
3842 ; CHECK-NEXT:    ret
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
3846   ret <32 x i1> %1
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:
3851 ; CHECK:       # %bb.0:
3852 ; CHECK-NEXT:    li a0, 32
3853 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3854 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
3855 ; CHECK-NEXT:    ret
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
3857   ret <32 x i1> %1
3860 define <32 x i1> @fcmp_une_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3861 ; CHECK-LABEL: fcmp_une_vf_v32f16:
3862 ; CHECK:       # %bb.0:
3863 ; CHECK-NEXT:    li a0, 32
3864 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3865 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3866 ; CHECK-NEXT:    ret
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
3870   ret <32 x i1> %1
3873 define <32 x i1> @fcmp_une_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3874 ; CHECK-LABEL: fcmp_une_fv_v32f16:
3875 ; CHECK:       # %bb.0:
3876 ; CHECK-NEXT:    li a0, 32
3877 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3878 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3879 ; CHECK-NEXT:    ret
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
3883   ret <32 x i1> %1
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:
3888 ; CHECK:       # %bb.0:
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
3894 ; CHECK-NEXT:    ret
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
3896   ret <32 x i1> %1
3899 define <32 x i1> @fcmp_uno_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3900 ; CHECK-LABEL: fcmp_uno_vf_v32f16:
3901 ; CHECK:       # %bb.0:
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
3908 ; CHECK-NEXT:    ret
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
3912   ret <32 x i1> %1
3915 define <32 x i1> @fcmp_uno_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3916 ; CHECK-LABEL: fcmp_uno_fv_v32f16:
3917 ; CHECK:       # %bb.0:
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
3924 ; CHECK-NEXT:    ret
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
3928   ret <32 x i1> %1
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:
3934 ; CHECK:       # %bb.0:
3935 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3936 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
3937 ; CHECK-NEXT:    ret
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
3939   ret <1 x i1> %1
3942 define <1 x i1> @fcmp_oeq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3943 ; CHECK-LABEL: fcmp_oeq_vf_v1f32:
3944 ; CHECK:       # %bb.0:
3945 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3946 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3947 ; CHECK-NEXT:    ret
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
3951   ret <1 x i1> %1
3954 define <1 x i1> @fcmp_oeq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3955 ; CHECK-LABEL: fcmp_oeq_fv_v1f32:
3956 ; CHECK:       # %bb.0:
3957 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3958 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3959 ; CHECK-NEXT:    ret
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
3963   ret <1 x i1> %1
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:
3968 ; CHECK:       # %bb.0:
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
3974 ; CHECK-NEXT:    ret
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
3976   ret <1 x i1> %1
3979 define <1 x i1> @fcmp_ogt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3980 ; CHECK-LABEL: fcmp_ogt_vf_v1f32:
3981 ; CHECK:       # %bb.0:
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
3988 ; CHECK-NEXT:    ret
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
3992   ret <1 x i1> %1
3995 define <1 x i1> @fcmp_ogt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3996 ; CHECK-LABEL: fcmp_ogt_fv_v1f32:
3997 ; CHECK:       # %bb.0:
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
4004 ; CHECK-NEXT:    ret
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
4008   ret <1 x i1> %1
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:
4013 ; CHECK:       # %bb.0:
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
4019 ; CHECK-NEXT:    ret
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
4021   ret <1 x i1> %1
4024 define <1 x i1> @fcmp_oge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4025 ; CHECK-LABEL: fcmp_oge_vf_v1f32:
4026 ; CHECK:       # %bb.0:
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
4033 ; CHECK-NEXT:    ret
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
4037   ret <1 x i1> %1
4040 define <1 x i1> @fcmp_oge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4041 ; CHECK-LABEL: fcmp_oge_fv_v1f32:
4042 ; CHECK:       # %bb.0:
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
4049 ; CHECK-NEXT:    ret
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
4053   ret <1 x i1> %1
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:
4058 ; CHECK:       # %bb.0:
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
4064 ; CHECK-NEXT:    ret
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
4066   ret <1 x i1> %1
4069 define <1 x i1> @fcmp_olt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4070 ; CHECK-LABEL: fcmp_olt_vf_v1f32:
4071 ; CHECK:       # %bb.0:
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
4078 ; CHECK-NEXT:    ret
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
4082   ret <1 x i1> %1
4085 define <1 x i1> @fcmp_olt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4086 ; CHECK-LABEL: fcmp_olt_fv_v1f32:
4087 ; CHECK:       # %bb.0:
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
4094 ; CHECK-NEXT:    ret
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
4098   ret <1 x i1> %1
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:
4103 ; CHECK:       # %bb.0:
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
4109 ; CHECK-NEXT:    ret
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
4111   ret <1 x i1> %1
4114 define <1 x i1> @fcmp_ole_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4115 ; CHECK-LABEL: fcmp_ole_vf_v1f32:
4116 ; CHECK:       # %bb.0:
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
4123 ; CHECK-NEXT:    ret
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
4127   ret <1 x i1> %1
4130 define <1 x i1> @fcmp_ole_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4131 ; CHECK-LABEL: fcmp_ole_fv_v1f32:
4132 ; CHECK:       # %bb.0:
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
4139 ; CHECK-NEXT:    ret
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
4143   ret <1 x i1> %1
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:
4148 ; CHECK:       # %bb.0:
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
4157 ; CHECK-NEXT:    ret
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
4159   ret <1 x i1> %1
4162 define <1 x i1> @fcmp_one_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4163 ; CHECK-LABEL: fcmp_one_vf_v1f32:
4164 ; CHECK:       # %bb.0:
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
4174 ; CHECK-NEXT:    ret
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
4178   ret <1 x i1> %1
4181 define <1 x i1> @fcmp_one_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4182 ; CHECK-LABEL: fcmp_one_fv_v1f32:
4183 ; CHECK:       # %bb.0:
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
4193 ; CHECK-NEXT:    ret
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
4197   ret <1 x i1> %1
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:
4202 ; CHECK:       # %bb.0:
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
4207 ; CHECK-NEXT:    ret
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
4209   ret <1 x i1> %1
4212 define <1 x i1> @fcmp_ord_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4213 ; CHECK-LABEL: fcmp_ord_vf_v1f32:
4214 ; CHECK:       # %bb.0:
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
4220 ; CHECK-NEXT:    ret
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
4224   ret <1 x i1> %1
4227 define <1 x i1> @fcmp_ord_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4228 ; CHECK-LABEL: fcmp_ord_fv_v1f32:
4229 ; CHECK:       # %bb.0:
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
4235 ; CHECK-NEXT:    ret
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
4239   ret <1 x i1> %1
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:
4244 ; CHECK:       # %bb.0:
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
4253 ; CHECK-NEXT:    ret
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
4255   ret <1 x i1> %1
4258 define <1 x i1> @fcmp_ueq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4259 ; CHECK-LABEL: fcmp_ueq_vf_v1f32:
4260 ; CHECK:       # %bb.0:
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
4270 ; CHECK-NEXT:    ret
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
4274   ret <1 x i1> %1
4277 define <1 x i1> @fcmp_ueq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4278 ; CHECK-LABEL: fcmp_ueq_fv_v1f32:
4279 ; CHECK:       # %bb.0:
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
4289 ; CHECK-NEXT:    ret
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
4293   ret <1 x i1> %1
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:
4298 ; CHECK:       # %bb.0:
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
4305 ; CHECK-NEXT:    ret
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
4307   ret <1 x i1> %1
4310 define <1 x i1> @fcmp_ugt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4311 ; CHECK-LABEL: fcmp_ugt_vf_v1f32:
4312 ; CHECK:       # %bb.0:
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
4320 ; CHECK-NEXT:    ret
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
4324   ret <1 x i1> %1
4327 define <1 x i1> @fcmp_ugt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4328 ; CHECK-LABEL: fcmp_ugt_fv_v1f32:
4329 ; CHECK:       # %bb.0:
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
4337 ; CHECK-NEXT:    ret
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
4341   ret <1 x i1> %1
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:
4346 ; CHECK:       # %bb.0:
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
4353 ; CHECK-NEXT:    ret
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
4355   ret <1 x i1> %1
4358 define <1 x i1> @fcmp_uge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4359 ; CHECK-LABEL: fcmp_uge_vf_v1f32:
4360 ; CHECK:       # %bb.0:
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
4368 ; CHECK-NEXT:    ret
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
4372   ret <1 x i1> %1
4375 define <1 x i1> @fcmp_uge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4376 ; CHECK-LABEL: fcmp_uge_fv_v1f32:
4377 ; CHECK:       # %bb.0:
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
4385 ; CHECK-NEXT:    ret
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
4389   ret <1 x i1> %1
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:
4394 ; CHECK:       # %bb.0:
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
4401 ; CHECK-NEXT:    ret
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
4403   ret <1 x i1> %1
4406 define <1 x i1> @fcmp_ult_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4407 ; CHECK-LABEL: fcmp_ult_vf_v1f32:
4408 ; CHECK:       # %bb.0:
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
4416 ; CHECK-NEXT:    ret
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
4420   ret <1 x i1> %1
4423 define <1 x i1> @fcmp_ult_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4424 ; CHECK-LABEL: fcmp_ult_fv_v1f32:
4425 ; CHECK:       # %bb.0:
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
4433 ; CHECK-NEXT:    ret
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
4437   ret <1 x i1> %1
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:
4442 ; CHECK:       # %bb.0:
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
4449 ; CHECK-NEXT:    ret
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
4451   ret <1 x i1> %1
4454 define <1 x i1> @fcmp_ule_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4455 ; CHECK-LABEL: fcmp_ule_vf_v1f32:
4456 ; CHECK:       # %bb.0:
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
4464 ; CHECK-NEXT:    ret
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
4468   ret <1 x i1> %1
4471 define <1 x i1> @fcmp_ule_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4472 ; CHECK-LABEL: fcmp_ule_fv_v1f32:
4473 ; CHECK:       # %bb.0:
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
4481 ; CHECK-NEXT:    ret
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
4485   ret <1 x i1> %1
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:
4490 ; CHECK:       # %bb.0:
4491 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4492 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
4493 ; CHECK-NEXT:    ret
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
4495   ret <1 x i1> %1
4498 define <1 x i1> @fcmp_une_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4499 ; CHECK-LABEL: fcmp_une_vf_v1f32:
4500 ; CHECK:       # %bb.0:
4501 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4502 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4503 ; CHECK-NEXT:    ret
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
4507   ret <1 x i1> %1
4510 define <1 x i1> @fcmp_une_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4511 ; CHECK-LABEL: fcmp_une_fv_v1f32:
4512 ; CHECK:       # %bb.0:
4513 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4514 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4515 ; CHECK-NEXT:    ret
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
4519   ret <1 x i1> %1
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:
4524 ; CHECK:       # %bb.0:
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
4529 ; CHECK-NEXT:    ret
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
4531   ret <1 x i1> %1
4534 define <1 x i1> @fcmp_uno_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4535 ; CHECK-LABEL: fcmp_uno_vf_v1f32:
4536 ; CHECK:       # %bb.0:
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
4542 ; CHECK-NEXT:    ret
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
4546   ret <1 x i1> %1
4549 define <1 x i1> @fcmp_uno_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4550 ; CHECK-LABEL: fcmp_uno_fv_v1f32:
4551 ; CHECK:       # %bb.0:
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
4557 ; CHECK-NEXT:    ret
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
4561   ret <1 x i1> %1
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:
4567 ; CHECK:       # %bb.0:
4568 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4569 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
4570 ; CHECK-NEXT:    ret
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
4572   ret <2 x i1> %1
4575 define <2 x i1> @fcmp_oeq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4576 ; CHECK-LABEL: fcmp_oeq_vf_v2f32:
4577 ; CHECK:       # %bb.0:
4578 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4579 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4580 ; CHECK-NEXT:    ret
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
4584   ret <2 x i1> %1
4587 define <2 x i1> @fcmp_oeq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4588 ; CHECK-LABEL: fcmp_oeq_fv_v2f32:
4589 ; CHECK:       # %bb.0:
4590 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4591 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4592 ; CHECK-NEXT:    ret
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
4596   ret <2 x i1> %1
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:
4601 ; CHECK:       # %bb.0:
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
4607 ; CHECK-NEXT:    ret
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
4609   ret <2 x i1> %1
4612 define <2 x i1> @fcmp_ogt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4613 ; CHECK-LABEL: fcmp_ogt_vf_v2f32:
4614 ; CHECK:       # %bb.0:
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
4621 ; CHECK-NEXT:    ret
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
4625   ret <2 x i1> %1
4628 define <2 x i1> @fcmp_ogt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4629 ; CHECK-LABEL: fcmp_ogt_fv_v2f32:
4630 ; CHECK:       # %bb.0:
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
4637 ; CHECK-NEXT:    ret
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
4641   ret <2 x i1> %1
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:
4646 ; CHECK:       # %bb.0:
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
4652 ; CHECK-NEXT:    ret
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
4654   ret <2 x i1> %1
4657 define <2 x i1> @fcmp_oge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4658 ; CHECK-LABEL: fcmp_oge_vf_v2f32:
4659 ; CHECK:       # %bb.0:
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
4666 ; CHECK-NEXT:    ret
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
4670   ret <2 x i1> %1
4673 define <2 x i1> @fcmp_oge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4674 ; CHECK-LABEL: fcmp_oge_fv_v2f32:
4675 ; CHECK:       # %bb.0:
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
4682 ; CHECK-NEXT:    ret
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
4686   ret <2 x i1> %1
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:
4691 ; CHECK:       # %bb.0:
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
4697 ; CHECK-NEXT:    ret
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
4699   ret <2 x i1> %1
4702 define <2 x i1> @fcmp_olt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4703 ; CHECK-LABEL: fcmp_olt_vf_v2f32:
4704 ; CHECK:       # %bb.0:
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
4711 ; CHECK-NEXT:    ret
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
4715   ret <2 x i1> %1
4718 define <2 x i1> @fcmp_olt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4719 ; CHECK-LABEL: fcmp_olt_fv_v2f32:
4720 ; CHECK:       # %bb.0:
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
4727 ; CHECK-NEXT:    ret
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
4731   ret <2 x i1> %1
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:
4736 ; CHECK:       # %bb.0:
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
4742 ; CHECK-NEXT:    ret
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
4744   ret <2 x i1> %1
4747 define <2 x i1> @fcmp_ole_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4748 ; CHECK-LABEL: fcmp_ole_vf_v2f32:
4749 ; CHECK:       # %bb.0:
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
4756 ; CHECK-NEXT:    ret
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
4760   ret <2 x i1> %1
4763 define <2 x i1> @fcmp_ole_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4764 ; CHECK-LABEL: fcmp_ole_fv_v2f32:
4765 ; CHECK:       # %bb.0:
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
4772 ; CHECK-NEXT:    ret
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
4776   ret <2 x i1> %1
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:
4781 ; CHECK:       # %bb.0:
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
4790 ; CHECK-NEXT:    ret
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
4792   ret <2 x i1> %1
4795 define <2 x i1> @fcmp_one_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4796 ; CHECK-LABEL: fcmp_one_vf_v2f32:
4797 ; CHECK:       # %bb.0:
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
4807 ; CHECK-NEXT:    ret
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
4811   ret <2 x i1> %1
4814 define <2 x i1> @fcmp_one_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4815 ; CHECK-LABEL: fcmp_one_fv_v2f32:
4816 ; CHECK:       # %bb.0:
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
4826 ; CHECK-NEXT:    ret
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
4830   ret <2 x i1> %1
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:
4835 ; CHECK:       # %bb.0:
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
4840 ; CHECK-NEXT:    ret
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
4842   ret <2 x i1> %1
4845 define <2 x i1> @fcmp_ord_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4846 ; CHECK-LABEL: fcmp_ord_vf_v2f32:
4847 ; CHECK:       # %bb.0:
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
4853 ; CHECK-NEXT:    ret
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
4857   ret <2 x i1> %1
4860 define <2 x i1> @fcmp_ord_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4861 ; CHECK-LABEL: fcmp_ord_fv_v2f32:
4862 ; CHECK:       # %bb.0:
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
4868 ; CHECK-NEXT:    ret
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
4872   ret <2 x i1> %1
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:
4877 ; CHECK:       # %bb.0:
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
4886 ; CHECK-NEXT:    ret
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
4888   ret <2 x i1> %1
4891 define <2 x i1> @fcmp_ueq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4892 ; CHECK-LABEL: fcmp_ueq_vf_v2f32:
4893 ; CHECK:       # %bb.0:
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
4903 ; CHECK-NEXT:    ret
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
4907   ret <2 x i1> %1
4910 define <2 x i1> @fcmp_ueq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4911 ; CHECK-LABEL: fcmp_ueq_fv_v2f32:
4912 ; CHECK:       # %bb.0:
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
4922 ; CHECK-NEXT:    ret
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
4926   ret <2 x i1> %1
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:
4931 ; CHECK:       # %bb.0:
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
4938 ; CHECK-NEXT:    ret
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
4940   ret <2 x i1> %1
4943 define <2 x i1> @fcmp_ugt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4944 ; CHECK-LABEL: fcmp_ugt_vf_v2f32:
4945 ; CHECK:       # %bb.0:
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
4953 ; CHECK-NEXT:    ret
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
4957   ret <2 x i1> %1
4960 define <2 x i1> @fcmp_ugt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4961 ; CHECK-LABEL: fcmp_ugt_fv_v2f32:
4962 ; CHECK:       # %bb.0:
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
4970 ; CHECK-NEXT:    ret
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
4974   ret <2 x i1> %1
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:
4979 ; CHECK:       # %bb.0:
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
4986 ; CHECK-NEXT:    ret
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
4988   ret <2 x i1> %1
4991 define <2 x i1> @fcmp_uge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4992 ; CHECK-LABEL: fcmp_uge_vf_v2f32:
4993 ; CHECK:       # %bb.0:
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
5001 ; CHECK-NEXT:    ret
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
5005   ret <2 x i1> %1
5008 define <2 x i1> @fcmp_uge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5009 ; CHECK-LABEL: fcmp_uge_fv_v2f32:
5010 ; CHECK:       # %bb.0:
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
5018 ; CHECK-NEXT:    ret
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
5022   ret <2 x i1> %1
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:
5027 ; CHECK:       # %bb.0:
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
5034 ; CHECK-NEXT:    ret
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
5036   ret <2 x i1> %1
5039 define <2 x i1> @fcmp_ult_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5040 ; CHECK-LABEL: fcmp_ult_vf_v2f32:
5041 ; CHECK:       # %bb.0:
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
5049 ; CHECK-NEXT:    ret
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
5053   ret <2 x i1> %1
5056 define <2 x i1> @fcmp_ult_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5057 ; CHECK-LABEL: fcmp_ult_fv_v2f32:
5058 ; CHECK:       # %bb.0:
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
5066 ; CHECK-NEXT:    ret
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
5070   ret <2 x i1> %1
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:
5075 ; CHECK:       # %bb.0:
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
5082 ; CHECK-NEXT:    ret
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
5084   ret <2 x i1> %1
5087 define <2 x i1> @fcmp_ule_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5088 ; CHECK-LABEL: fcmp_ule_vf_v2f32:
5089 ; CHECK:       # %bb.0:
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
5097 ; CHECK-NEXT:    ret
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
5101   ret <2 x i1> %1
5104 define <2 x i1> @fcmp_ule_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5105 ; CHECK-LABEL: fcmp_ule_fv_v2f32:
5106 ; CHECK:       # %bb.0:
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
5114 ; CHECK-NEXT:    ret
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
5118   ret <2 x i1> %1
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:
5123 ; CHECK:       # %bb.0:
5124 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5125 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
5126 ; CHECK-NEXT:    ret
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
5128   ret <2 x i1> %1
5131 define <2 x i1> @fcmp_une_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5132 ; CHECK-LABEL: fcmp_une_vf_v2f32:
5133 ; CHECK:       # %bb.0:
5134 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5135 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5136 ; CHECK-NEXT:    ret
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
5140   ret <2 x i1> %1
5143 define <2 x i1> @fcmp_une_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5144 ; CHECK-LABEL: fcmp_une_fv_v2f32:
5145 ; CHECK:       # %bb.0:
5146 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5147 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5148 ; CHECK-NEXT:    ret
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
5152   ret <2 x i1> %1
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:
5157 ; CHECK:       # %bb.0:
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
5162 ; CHECK-NEXT:    ret
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
5164   ret <2 x i1> %1
5167 define <2 x i1> @fcmp_uno_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5168 ; CHECK-LABEL: fcmp_uno_vf_v2f32:
5169 ; CHECK:       # %bb.0:
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
5175 ; CHECK-NEXT:    ret
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
5179   ret <2 x i1> %1
5182 define <2 x i1> @fcmp_uno_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5183 ; CHECK-LABEL: fcmp_uno_fv_v2f32:
5184 ; CHECK:       # %bb.0:
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
5190 ; CHECK-NEXT:    ret
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
5194   ret <2 x i1> %1
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:
5200 ; CHECK:       # %bb.0:
5201 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5202 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
5203 ; CHECK-NEXT:    ret
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
5205   ret <4 x i1> %1
5208 define <4 x i1> @fcmp_oeq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5209 ; CHECK-LABEL: fcmp_oeq_vf_v4f32:
5210 ; CHECK:       # %bb.0:
5211 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5212 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5213 ; CHECK-NEXT:    ret
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
5217   ret <4 x i1> %1
5220 define <4 x i1> @fcmp_oeq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5221 ; CHECK-LABEL: fcmp_oeq_fv_v4f32:
5222 ; CHECK:       # %bb.0:
5223 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5224 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5225 ; CHECK-NEXT:    ret
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
5229   ret <4 x i1> %1
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:
5234 ; CHECK:       # %bb.0:
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
5240 ; CHECK-NEXT:    ret
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
5242   ret <4 x i1> %1
5245 define <4 x i1> @fcmp_ogt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5246 ; CHECK-LABEL: fcmp_ogt_vf_v4f32:
5247 ; CHECK:       # %bb.0:
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
5254 ; CHECK-NEXT:    ret
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
5258   ret <4 x i1> %1
5261 define <4 x i1> @fcmp_ogt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5262 ; CHECK-LABEL: fcmp_ogt_fv_v4f32:
5263 ; CHECK:       # %bb.0:
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
5270 ; CHECK-NEXT:    ret
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
5274   ret <4 x i1> %1
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:
5279 ; CHECK:       # %bb.0:
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
5285 ; CHECK-NEXT:    ret
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
5287   ret <4 x i1> %1
5290 define <4 x i1> @fcmp_oge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5291 ; CHECK-LABEL: fcmp_oge_vf_v4f32:
5292 ; CHECK:       # %bb.0:
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
5299 ; CHECK-NEXT:    ret
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
5303   ret <4 x i1> %1
5306 define <4 x i1> @fcmp_oge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5307 ; CHECK-LABEL: fcmp_oge_fv_v4f32:
5308 ; CHECK:       # %bb.0:
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
5315 ; CHECK-NEXT:    ret
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
5319   ret <4 x i1> %1
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:
5324 ; CHECK:       # %bb.0:
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
5330 ; CHECK-NEXT:    ret
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
5332   ret <4 x i1> %1
5335 define <4 x i1> @fcmp_olt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5336 ; CHECK-LABEL: fcmp_olt_vf_v4f32:
5337 ; CHECK:       # %bb.0:
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
5344 ; CHECK-NEXT:    ret
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
5348   ret <4 x i1> %1
5351 define <4 x i1> @fcmp_olt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5352 ; CHECK-LABEL: fcmp_olt_fv_v4f32:
5353 ; CHECK:       # %bb.0:
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
5360 ; CHECK-NEXT:    ret
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
5364   ret <4 x i1> %1
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:
5369 ; CHECK:       # %bb.0:
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
5375 ; CHECK-NEXT:    ret
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
5377   ret <4 x i1> %1
5380 define <4 x i1> @fcmp_ole_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5381 ; CHECK-LABEL: fcmp_ole_vf_v4f32:
5382 ; CHECK:       # %bb.0:
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
5389 ; CHECK-NEXT:    ret
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
5393   ret <4 x i1> %1
5396 define <4 x i1> @fcmp_ole_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5397 ; CHECK-LABEL: fcmp_ole_fv_v4f32:
5398 ; CHECK:       # %bb.0:
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
5405 ; CHECK-NEXT:    ret
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
5409   ret <4 x i1> %1
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:
5414 ; CHECK:       # %bb.0:
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
5423 ; CHECK-NEXT:    ret
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
5425   ret <4 x i1> %1
5428 define <4 x i1> @fcmp_one_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5429 ; CHECK-LABEL: fcmp_one_vf_v4f32:
5430 ; CHECK:       # %bb.0:
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
5440 ; CHECK-NEXT:    ret
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
5444   ret <4 x i1> %1
5447 define <4 x i1> @fcmp_one_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5448 ; CHECK-LABEL: fcmp_one_fv_v4f32:
5449 ; CHECK:       # %bb.0:
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
5459 ; CHECK-NEXT:    ret
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
5463   ret <4 x i1> %1
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:
5468 ; CHECK:       # %bb.0:
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
5473 ; CHECK-NEXT:    ret
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
5475   ret <4 x i1> %1
5478 define <4 x i1> @fcmp_ord_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5479 ; CHECK-LABEL: fcmp_ord_vf_v4f32:
5480 ; CHECK:       # %bb.0:
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
5486 ; CHECK-NEXT:    ret
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
5490   ret <4 x i1> %1
5493 define <4 x i1> @fcmp_ord_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5494 ; CHECK-LABEL: fcmp_ord_fv_v4f32:
5495 ; CHECK:       # %bb.0:
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
5501 ; CHECK-NEXT:    ret
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
5505   ret <4 x i1> %1
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:
5510 ; CHECK:       # %bb.0:
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
5519 ; CHECK-NEXT:    ret
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
5521   ret <4 x i1> %1
5524 define <4 x i1> @fcmp_ueq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5525 ; CHECK-LABEL: fcmp_ueq_vf_v4f32:
5526 ; CHECK:       # %bb.0:
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
5536 ; CHECK-NEXT:    ret
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
5540   ret <4 x i1> %1
5543 define <4 x i1> @fcmp_ueq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5544 ; CHECK-LABEL: fcmp_ueq_fv_v4f32:
5545 ; CHECK:       # %bb.0:
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
5555 ; CHECK-NEXT:    ret
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
5559   ret <4 x i1> %1
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:
5564 ; CHECK:       # %bb.0:
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
5571 ; CHECK-NEXT:    ret
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
5573   ret <4 x i1> %1
5576 define <4 x i1> @fcmp_ugt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5577 ; CHECK-LABEL: fcmp_ugt_vf_v4f32:
5578 ; CHECK:       # %bb.0:
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
5586 ; CHECK-NEXT:    ret
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
5590   ret <4 x i1> %1
5593 define <4 x i1> @fcmp_ugt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5594 ; CHECK-LABEL: fcmp_ugt_fv_v4f32:
5595 ; CHECK:       # %bb.0:
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
5603 ; CHECK-NEXT:    ret
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
5607   ret <4 x i1> %1
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:
5612 ; CHECK:       # %bb.0:
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
5619 ; CHECK-NEXT:    ret
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
5621   ret <4 x i1> %1
5624 define <4 x i1> @fcmp_uge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5625 ; CHECK-LABEL: fcmp_uge_vf_v4f32:
5626 ; CHECK:       # %bb.0:
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
5634 ; CHECK-NEXT:    ret
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
5638   ret <4 x i1> %1
5641 define <4 x i1> @fcmp_uge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5642 ; CHECK-LABEL: fcmp_uge_fv_v4f32:
5643 ; CHECK:       # %bb.0:
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
5651 ; CHECK-NEXT:    ret
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
5655   ret <4 x i1> %1
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:
5660 ; CHECK:       # %bb.0:
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
5667 ; CHECK-NEXT:    ret
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
5669   ret <4 x i1> %1
5672 define <4 x i1> @fcmp_ult_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5673 ; CHECK-LABEL: fcmp_ult_vf_v4f32:
5674 ; CHECK:       # %bb.0:
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
5682 ; CHECK-NEXT:    ret
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
5686   ret <4 x i1> %1
5689 define <4 x i1> @fcmp_ult_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5690 ; CHECK-LABEL: fcmp_ult_fv_v4f32:
5691 ; CHECK:       # %bb.0:
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
5699 ; CHECK-NEXT:    ret
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
5703   ret <4 x i1> %1
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:
5708 ; CHECK:       # %bb.0:
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
5715 ; CHECK-NEXT:    ret
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
5717   ret <4 x i1> %1
5720 define <4 x i1> @fcmp_ule_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5721 ; CHECK-LABEL: fcmp_ule_vf_v4f32:
5722 ; CHECK:       # %bb.0:
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
5730 ; CHECK-NEXT:    ret
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
5734   ret <4 x i1> %1
5737 define <4 x i1> @fcmp_ule_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5738 ; CHECK-LABEL: fcmp_ule_fv_v4f32:
5739 ; CHECK:       # %bb.0:
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
5747 ; CHECK-NEXT:    ret
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
5751   ret <4 x i1> %1
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:
5756 ; CHECK:       # %bb.0:
5757 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5758 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
5759 ; CHECK-NEXT:    ret
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
5761   ret <4 x i1> %1
5764 define <4 x i1> @fcmp_une_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5765 ; CHECK-LABEL: fcmp_une_vf_v4f32:
5766 ; CHECK:       # %bb.0:
5767 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5768 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5769 ; CHECK-NEXT:    ret
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
5773   ret <4 x i1> %1
5776 define <4 x i1> @fcmp_une_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5777 ; CHECK-LABEL: fcmp_une_fv_v4f32:
5778 ; CHECK:       # %bb.0:
5779 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5780 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5781 ; CHECK-NEXT:    ret
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
5785   ret <4 x i1> %1
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:
5790 ; CHECK:       # %bb.0:
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
5795 ; CHECK-NEXT:    ret
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
5797   ret <4 x i1> %1
5800 define <4 x i1> @fcmp_uno_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5801 ; CHECK-LABEL: fcmp_uno_vf_v4f32:
5802 ; CHECK:       # %bb.0:
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
5808 ; CHECK-NEXT:    ret
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
5812   ret <4 x i1> %1
5815 define <4 x i1> @fcmp_uno_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5816 ; CHECK-LABEL: fcmp_uno_fv_v4f32:
5817 ; CHECK:       # %bb.0:
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
5823 ; CHECK-NEXT:    ret
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
5827   ret <4 x i1> %1
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:
5833 ; CHECK:       # %bb.0:
5834 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5835 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
5836 ; CHECK-NEXT:    ret
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
5838   ret <8 x i1> %1
5841 define <8 x i1> @fcmp_oeq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5842 ; CHECK-LABEL: fcmp_oeq_vf_v8f32:
5843 ; CHECK:       # %bb.0:
5844 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5845 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5846 ; CHECK-NEXT:    ret
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
5850   ret <8 x i1> %1
5853 define <8 x i1> @fcmp_oeq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5854 ; CHECK-LABEL: fcmp_oeq_fv_v8f32:
5855 ; CHECK:       # %bb.0:
5856 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5857 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5858 ; CHECK-NEXT:    ret
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
5862   ret <8 x i1> %1
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:
5867 ; CHECK:       # %bb.0:
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
5875 ; CHECK-NEXT:    ret
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
5877   ret <8 x i1> %1
5880 define <8 x i1> @fcmp_ogt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5881 ; CHECK-LABEL: fcmp_ogt_vf_v8f32:
5882 ; CHECK:       # %bb.0:
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
5891 ; CHECK-NEXT:    ret
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
5895   ret <8 x i1> %1
5898 define <8 x i1> @fcmp_ogt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5899 ; CHECK-LABEL: fcmp_ogt_fv_v8f32:
5900 ; CHECK:       # %bb.0:
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
5909 ; CHECK-NEXT:    ret
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
5913   ret <8 x i1> %1
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:
5918 ; CHECK:       # %bb.0:
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
5926 ; CHECK-NEXT:    ret
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
5928   ret <8 x i1> %1
5931 define <8 x i1> @fcmp_oge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5932 ; CHECK-LABEL: fcmp_oge_vf_v8f32:
5933 ; CHECK:       # %bb.0:
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
5942 ; CHECK-NEXT:    ret
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
5946   ret <8 x i1> %1
5949 define <8 x i1> @fcmp_oge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5950 ; CHECK-LABEL: fcmp_oge_fv_v8f32:
5951 ; CHECK:       # %bb.0:
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
5960 ; CHECK-NEXT:    ret
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
5964   ret <8 x i1> %1
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:
5969 ; CHECK:       # %bb.0:
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
5977 ; CHECK-NEXT:    ret
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
5979   ret <8 x i1> %1
5982 define <8 x i1> @fcmp_olt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5983 ; CHECK-LABEL: fcmp_olt_vf_v8f32:
5984 ; CHECK:       # %bb.0:
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
5993 ; CHECK-NEXT:    ret
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
5997   ret <8 x i1> %1
6000 define <8 x i1> @fcmp_olt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6001 ; CHECK-LABEL: fcmp_olt_fv_v8f32:
6002 ; CHECK:       # %bb.0:
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
6011 ; CHECK-NEXT:    ret
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
6015   ret <8 x i1> %1
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:
6020 ; CHECK:       # %bb.0:
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
6028 ; CHECK-NEXT:    ret
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
6030   ret <8 x i1> %1
6033 define <8 x i1> @fcmp_ole_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6034 ; CHECK-LABEL: fcmp_ole_vf_v8f32:
6035 ; CHECK:       # %bb.0:
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
6044 ; CHECK-NEXT:    ret
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
6048   ret <8 x i1> %1
6051 define <8 x i1> @fcmp_ole_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6052 ; CHECK-LABEL: fcmp_ole_fv_v8f32:
6053 ; CHECK:       # %bb.0:
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
6062 ; CHECK-NEXT:    ret
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
6066   ret <8 x i1> %1
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:
6071 ; CHECK:       # %bb.0:
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
6081 ; CHECK-NEXT:    ret
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
6083   ret <8 x i1> %1
6086 define <8 x i1> @fcmp_one_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6087 ; CHECK-LABEL: fcmp_one_vf_v8f32:
6088 ; CHECK:       # %bb.0:
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
6099 ; CHECK-NEXT:    ret
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
6103   ret <8 x i1> %1
6106 define <8 x i1> @fcmp_one_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6107 ; CHECK-LABEL: fcmp_one_fv_v8f32:
6108 ; CHECK:       # %bb.0:
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
6119 ; CHECK-NEXT:    ret
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
6123   ret <8 x i1> %1
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:
6128 ; CHECK:       # %bb.0:
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
6133 ; CHECK-NEXT:    ret
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
6135   ret <8 x i1> %1
6138 define <8 x i1> @fcmp_ord_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6139 ; CHECK-LABEL: fcmp_ord_vf_v8f32:
6140 ; CHECK:       # %bb.0:
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
6146 ; CHECK-NEXT:    ret
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
6150   ret <8 x i1> %1
6153 define <8 x i1> @fcmp_ord_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6154 ; CHECK-LABEL: fcmp_ord_fv_v8f32:
6155 ; CHECK:       # %bb.0:
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
6161 ; CHECK-NEXT:    ret
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
6165   ret <8 x i1> %1
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:
6170 ; CHECK:       # %bb.0:
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
6180 ; CHECK-NEXT:    ret
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
6182   ret <8 x i1> %1
6185 define <8 x i1> @fcmp_ueq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6186 ; CHECK-LABEL: fcmp_ueq_vf_v8f32:
6187 ; CHECK:       # %bb.0:
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
6198 ; CHECK-NEXT:    ret
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
6202   ret <8 x i1> %1
6205 define <8 x i1> @fcmp_ueq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6206 ; CHECK-LABEL: fcmp_ueq_fv_v8f32:
6207 ; CHECK:       # %bb.0:
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
6218 ; CHECK-NEXT:    ret
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
6222   ret <8 x i1> %1
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:
6227 ; CHECK:       # %bb.0:
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
6235 ; CHECK-NEXT:    ret
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
6237   ret <8 x i1> %1
6240 define <8 x i1> @fcmp_ugt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6241 ; CHECK-LABEL: fcmp_ugt_vf_v8f32:
6242 ; CHECK:       # %bb.0:
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
6251 ; CHECK-NEXT:    ret
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
6255   ret <8 x i1> %1
6258 define <8 x i1> @fcmp_ugt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6259 ; CHECK-LABEL: fcmp_ugt_fv_v8f32:
6260 ; CHECK:       # %bb.0:
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
6269 ; CHECK-NEXT:    ret
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
6273   ret <8 x i1> %1
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:
6278 ; CHECK:       # %bb.0:
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
6286 ; CHECK-NEXT:    ret
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
6288   ret <8 x i1> %1
6291 define <8 x i1> @fcmp_uge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6292 ; CHECK-LABEL: fcmp_uge_vf_v8f32:
6293 ; CHECK:       # %bb.0:
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
6302 ; CHECK-NEXT:    ret
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
6306   ret <8 x i1> %1
6309 define <8 x i1> @fcmp_uge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6310 ; CHECK-LABEL: fcmp_uge_fv_v8f32:
6311 ; CHECK:       # %bb.0:
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
6320 ; CHECK-NEXT:    ret
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
6324   ret <8 x i1> %1
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:
6329 ; CHECK:       # %bb.0:
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
6337 ; CHECK-NEXT:    ret
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
6339   ret <8 x i1> %1
6342 define <8 x i1> @fcmp_ult_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6343 ; CHECK-LABEL: fcmp_ult_vf_v8f32:
6344 ; CHECK:       # %bb.0:
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
6353 ; CHECK-NEXT:    ret
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
6357   ret <8 x i1> %1
6360 define <8 x i1> @fcmp_ult_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6361 ; CHECK-LABEL: fcmp_ult_fv_v8f32:
6362 ; CHECK:       # %bb.0:
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
6371 ; CHECK-NEXT:    ret
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
6375   ret <8 x i1> %1
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:
6380 ; CHECK:       # %bb.0:
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
6388 ; CHECK-NEXT:    ret
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
6390   ret <8 x i1> %1
6393 define <8 x i1> @fcmp_ule_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6394 ; CHECK-LABEL: fcmp_ule_vf_v8f32:
6395 ; CHECK:       # %bb.0:
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
6404 ; CHECK-NEXT:    ret
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
6408   ret <8 x i1> %1
6411 define <8 x i1> @fcmp_ule_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6412 ; CHECK-LABEL: fcmp_ule_fv_v8f32:
6413 ; CHECK:       # %bb.0:
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
6422 ; CHECK-NEXT:    ret
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
6426   ret <8 x i1> %1
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:
6431 ; CHECK:       # %bb.0:
6432 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6433 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
6434 ; CHECK-NEXT:    ret
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
6436   ret <8 x i1> %1
6439 define <8 x i1> @fcmp_une_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6440 ; CHECK-LABEL: fcmp_une_vf_v8f32:
6441 ; CHECK:       # %bb.0:
6442 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6443 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6444 ; CHECK-NEXT:    ret
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
6448   ret <8 x i1> %1
6451 define <8 x i1> @fcmp_une_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6452 ; CHECK-LABEL: fcmp_une_fv_v8f32:
6453 ; CHECK:       # %bb.0:
6454 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6455 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6456 ; CHECK-NEXT:    ret
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
6460   ret <8 x i1> %1
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:
6465 ; CHECK:       # %bb.0:
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
6470 ; CHECK-NEXT:    ret
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
6472   ret <8 x i1> %1
6475 define <8 x i1> @fcmp_uno_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6476 ; CHECK-LABEL: fcmp_uno_vf_v8f32:
6477 ; CHECK:       # %bb.0:
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
6483 ; CHECK-NEXT:    ret
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
6487   ret <8 x i1> %1
6490 define <8 x i1> @fcmp_uno_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6491 ; CHECK-LABEL: fcmp_uno_fv_v8f32:
6492 ; CHECK:       # %bb.0:
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
6498 ; CHECK-NEXT:    ret
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
6502   ret <8 x i1> %1
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:
6508 ; CHECK:       # %bb.0:
6509 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6510 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
6511 ; CHECK-NEXT:    ret
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
6513   ret <16 x i1> %1
6516 define <16 x i1> @fcmp_oeq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6517 ; CHECK-LABEL: fcmp_oeq_vf_v16f32:
6518 ; CHECK:       # %bb.0:
6519 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6520 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6521 ; CHECK-NEXT:    ret
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
6525   ret <16 x i1> %1
6528 define <16 x i1> @fcmp_oeq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6529 ; CHECK-LABEL: fcmp_oeq_fv_v16f32:
6530 ; CHECK:       # %bb.0:
6531 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6532 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6533 ; CHECK-NEXT:    ret
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
6537   ret <16 x i1> %1
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:
6542 ; CHECK:       # %bb.0:
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
6550 ; CHECK-NEXT:    ret
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
6552   ret <16 x i1> %1
6555 define <16 x i1> @fcmp_ogt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6556 ; CHECK-LABEL: fcmp_ogt_vf_v16f32:
6557 ; CHECK:       # %bb.0:
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
6566 ; CHECK-NEXT:    ret
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
6570   ret <16 x i1> %1
6573 define <16 x i1> @fcmp_ogt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6574 ; CHECK-LABEL: fcmp_ogt_fv_v16f32:
6575 ; CHECK:       # %bb.0:
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
6584 ; CHECK-NEXT:    ret
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
6588   ret <16 x i1> %1
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:
6593 ; CHECK:       # %bb.0:
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
6601 ; CHECK-NEXT:    ret
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
6603   ret <16 x i1> %1
6606 define <16 x i1> @fcmp_oge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6607 ; CHECK-LABEL: fcmp_oge_vf_v16f32:
6608 ; CHECK:       # %bb.0:
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
6617 ; CHECK-NEXT:    ret
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
6621   ret <16 x i1> %1
6624 define <16 x i1> @fcmp_oge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6625 ; CHECK-LABEL: fcmp_oge_fv_v16f32:
6626 ; CHECK:       # %bb.0:
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
6635 ; CHECK-NEXT:    ret
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
6639   ret <16 x i1> %1
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:
6644 ; CHECK:       # %bb.0:
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
6652 ; CHECK-NEXT:    ret
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
6654   ret <16 x i1> %1
6657 define <16 x i1> @fcmp_olt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6658 ; CHECK-LABEL: fcmp_olt_vf_v16f32:
6659 ; CHECK:       # %bb.0:
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
6668 ; CHECK-NEXT:    ret
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
6672   ret <16 x i1> %1
6675 define <16 x i1> @fcmp_olt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6676 ; CHECK-LABEL: fcmp_olt_fv_v16f32:
6677 ; CHECK:       # %bb.0:
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
6686 ; CHECK-NEXT:    ret
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
6690   ret <16 x i1> %1
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:
6695 ; CHECK:       # %bb.0:
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
6703 ; CHECK-NEXT:    ret
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
6705   ret <16 x i1> %1
6708 define <16 x i1> @fcmp_ole_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6709 ; CHECK-LABEL: fcmp_ole_vf_v16f32:
6710 ; CHECK:       # %bb.0:
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
6719 ; CHECK-NEXT:    ret
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
6723   ret <16 x i1> %1
6726 define <16 x i1> @fcmp_ole_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6727 ; CHECK-LABEL: fcmp_ole_fv_v16f32:
6728 ; CHECK:       # %bb.0:
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
6737 ; CHECK-NEXT:    ret
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
6741   ret <16 x i1> %1
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:
6746 ; CHECK:       # %bb.0:
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
6756 ; CHECK-NEXT:    ret
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
6758   ret <16 x i1> %1
6761 define <16 x i1> @fcmp_one_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6762 ; CHECK-LABEL: fcmp_one_vf_v16f32:
6763 ; CHECK:       # %bb.0:
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
6774 ; CHECK-NEXT:    ret
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
6778   ret <16 x i1> %1
6781 define <16 x i1> @fcmp_one_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6782 ; CHECK-LABEL: fcmp_one_fv_v16f32:
6783 ; CHECK:       # %bb.0:
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
6794 ; CHECK-NEXT:    ret
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
6798   ret <16 x i1> %1
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:
6803 ; CHECK:       # %bb.0:
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
6808 ; CHECK-NEXT:    ret
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
6810   ret <16 x i1> %1
6813 define <16 x i1> @fcmp_ord_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6814 ; CHECK-LABEL: fcmp_ord_vf_v16f32:
6815 ; CHECK:       # %bb.0:
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
6821 ; CHECK-NEXT:    ret
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
6825   ret <16 x i1> %1
6828 define <16 x i1> @fcmp_ord_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6829 ; CHECK-LABEL: fcmp_ord_fv_v16f32:
6830 ; CHECK:       # %bb.0:
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
6836 ; CHECK-NEXT:    ret
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
6840   ret <16 x i1> %1
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:
6845 ; CHECK:       # %bb.0:
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
6855 ; CHECK-NEXT:    ret
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
6857   ret <16 x i1> %1
6860 define <16 x i1> @fcmp_ueq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6861 ; CHECK-LABEL: fcmp_ueq_vf_v16f32:
6862 ; CHECK:       # %bb.0:
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
6873 ; CHECK-NEXT:    ret
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
6877   ret <16 x i1> %1
6880 define <16 x i1> @fcmp_ueq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6881 ; CHECK-LABEL: fcmp_ueq_fv_v16f32:
6882 ; CHECK:       # %bb.0:
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
6893 ; CHECK-NEXT:    ret
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
6897   ret <16 x i1> %1
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:
6902 ; CHECK:       # %bb.0:
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
6910 ; CHECK-NEXT:    ret
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
6912   ret <16 x i1> %1
6915 define <16 x i1> @fcmp_ugt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6916 ; CHECK-LABEL: fcmp_ugt_vf_v16f32:
6917 ; CHECK:       # %bb.0:
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
6926 ; CHECK-NEXT:    ret
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
6930   ret <16 x i1> %1
6933 define <16 x i1> @fcmp_ugt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6934 ; CHECK-LABEL: fcmp_ugt_fv_v16f32:
6935 ; CHECK:       # %bb.0:
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
6944 ; CHECK-NEXT:    ret
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
6948   ret <16 x i1> %1
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:
6953 ; CHECK:       # %bb.0:
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
6961 ; CHECK-NEXT:    ret
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
6963   ret <16 x i1> %1
6966 define <16 x i1> @fcmp_uge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6967 ; CHECK-LABEL: fcmp_uge_vf_v16f32:
6968 ; CHECK:       # %bb.0:
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
6977 ; CHECK-NEXT:    ret
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
6981   ret <16 x i1> %1
6984 define <16 x i1> @fcmp_uge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6985 ; CHECK-LABEL: fcmp_uge_fv_v16f32:
6986 ; CHECK:       # %bb.0:
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
6995 ; CHECK-NEXT:    ret
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
6999   ret <16 x i1> %1
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:
7004 ; CHECK:       # %bb.0:
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
7012 ; CHECK-NEXT:    ret
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
7014   ret <16 x i1> %1
7017 define <16 x i1> @fcmp_ult_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7018 ; CHECK-LABEL: fcmp_ult_vf_v16f32:
7019 ; CHECK:       # %bb.0:
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
7028 ; CHECK-NEXT:    ret
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
7032   ret <16 x i1> %1
7035 define <16 x i1> @fcmp_ult_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7036 ; CHECK-LABEL: fcmp_ult_fv_v16f32:
7037 ; CHECK:       # %bb.0:
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
7046 ; CHECK-NEXT:    ret
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
7050   ret <16 x i1> %1
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:
7055 ; CHECK:       # %bb.0:
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
7063 ; CHECK-NEXT:    ret
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
7065   ret <16 x i1> %1
7068 define <16 x i1> @fcmp_ule_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7069 ; CHECK-LABEL: fcmp_ule_vf_v16f32:
7070 ; CHECK:       # %bb.0:
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
7079 ; CHECK-NEXT:    ret
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
7083   ret <16 x i1> %1
7086 define <16 x i1> @fcmp_ule_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7087 ; CHECK-LABEL: fcmp_ule_fv_v16f32:
7088 ; CHECK:       # %bb.0:
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
7097 ; CHECK-NEXT:    ret
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
7101   ret <16 x i1> %1
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:
7106 ; CHECK:       # %bb.0:
7107 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7108 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
7109 ; CHECK-NEXT:    ret
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
7111   ret <16 x i1> %1
7114 define <16 x i1> @fcmp_une_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7115 ; CHECK-LABEL: fcmp_une_vf_v16f32:
7116 ; CHECK:       # %bb.0:
7117 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7118 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7119 ; CHECK-NEXT:    ret
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
7123   ret <16 x i1> %1
7126 define <16 x i1> @fcmp_une_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7127 ; CHECK-LABEL: fcmp_une_fv_v16f32:
7128 ; CHECK:       # %bb.0:
7129 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7130 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7131 ; CHECK-NEXT:    ret
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
7135   ret <16 x i1> %1
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:
7140 ; CHECK:       # %bb.0:
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
7145 ; CHECK-NEXT:    ret
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
7147   ret <16 x i1> %1
7150 define <16 x i1> @fcmp_uno_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7151 ; CHECK-LABEL: fcmp_uno_vf_v16f32:
7152 ; CHECK:       # %bb.0:
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
7158 ; CHECK-NEXT:    ret
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
7162   ret <16 x i1> %1
7165 define <16 x i1> @fcmp_uno_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7166 ; CHECK-LABEL: fcmp_uno_fv_v16f32:
7167 ; CHECK:       # %bb.0:
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
7173 ; CHECK-NEXT:    ret
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
7177   ret <16 x i1> %1
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:
7183 ; CHECK:       # %bb.0:
7184 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7185 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
7186 ; CHECK-NEXT:    ret
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
7188   ret <1 x i1> %1
7191 define <1 x i1> @fcmp_oeq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7192 ; CHECK-LABEL: fcmp_oeq_vf_v1f64:
7193 ; CHECK:       # %bb.0:
7194 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7195 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7196 ; CHECK-NEXT:    ret
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
7200   ret <1 x i1> %1
7203 define <1 x i1> @fcmp_oeq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7204 ; CHECK-LABEL: fcmp_oeq_fv_v1f64:
7205 ; CHECK:       # %bb.0:
7206 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7207 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7208 ; CHECK-NEXT:    ret
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
7212   ret <1 x i1> %1
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:
7217 ; CHECK:       # %bb.0:
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
7223 ; CHECK-NEXT:    ret
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
7225   ret <1 x i1> %1
7228 define <1 x i1> @fcmp_ogt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7229 ; CHECK-LABEL: fcmp_ogt_vf_v1f64:
7230 ; CHECK:       # %bb.0:
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
7237 ; CHECK-NEXT:    ret
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
7241   ret <1 x i1> %1
7244 define <1 x i1> @fcmp_ogt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7245 ; CHECK-LABEL: fcmp_ogt_fv_v1f64:
7246 ; CHECK:       # %bb.0:
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
7253 ; CHECK-NEXT:    ret
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
7257   ret <1 x i1> %1
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:
7262 ; CHECK:       # %bb.0:
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
7268 ; CHECK-NEXT:    ret
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
7270   ret <1 x i1> %1
7273 define <1 x i1> @fcmp_oge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7274 ; CHECK-LABEL: fcmp_oge_vf_v1f64:
7275 ; CHECK:       # %bb.0:
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
7282 ; CHECK-NEXT:    ret
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
7286   ret <1 x i1> %1
7289 define <1 x i1> @fcmp_oge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7290 ; CHECK-LABEL: fcmp_oge_fv_v1f64:
7291 ; CHECK:       # %bb.0:
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
7298 ; CHECK-NEXT:    ret
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
7302   ret <1 x i1> %1
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:
7307 ; CHECK:       # %bb.0:
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
7313 ; CHECK-NEXT:    ret
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
7315   ret <1 x i1> %1
7318 define <1 x i1> @fcmp_olt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7319 ; CHECK-LABEL: fcmp_olt_vf_v1f64:
7320 ; CHECK:       # %bb.0:
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
7327 ; CHECK-NEXT:    ret
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
7331   ret <1 x i1> %1
7334 define <1 x i1> @fcmp_olt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7335 ; CHECK-LABEL: fcmp_olt_fv_v1f64:
7336 ; CHECK:       # %bb.0:
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
7343 ; CHECK-NEXT:    ret
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
7347   ret <1 x i1> %1
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:
7352 ; CHECK:       # %bb.0:
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
7358 ; CHECK-NEXT:    ret
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
7360   ret <1 x i1> %1
7363 define <1 x i1> @fcmp_ole_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7364 ; CHECK-LABEL: fcmp_ole_vf_v1f64:
7365 ; CHECK:       # %bb.0:
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
7372 ; CHECK-NEXT:    ret
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
7376   ret <1 x i1> %1
7379 define <1 x i1> @fcmp_ole_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7380 ; CHECK-LABEL: fcmp_ole_fv_v1f64:
7381 ; CHECK:       # %bb.0:
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
7388 ; CHECK-NEXT:    ret
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
7392   ret <1 x i1> %1
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:
7397 ; CHECK:       # %bb.0:
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
7406 ; CHECK-NEXT:    ret
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
7408   ret <1 x i1> %1
7411 define <1 x i1> @fcmp_one_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7412 ; CHECK-LABEL: fcmp_one_vf_v1f64:
7413 ; CHECK:       # %bb.0:
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
7423 ; CHECK-NEXT:    ret
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
7427   ret <1 x i1> %1
7430 define <1 x i1> @fcmp_one_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7431 ; CHECK-LABEL: fcmp_one_fv_v1f64:
7432 ; CHECK:       # %bb.0:
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
7442 ; CHECK-NEXT:    ret
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
7446   ret <1 x i1> %1
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:
7451 ; CHECK:       # %bb.0:
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
7456 ; CHECK-NEXT:    ret
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
7458   ret <1 x i1> %1
7461 define <1 x i1> @fcmp_ord_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7462 ; CHECK-LABEL: fcmp_ord_vf_v1f64:
7463 ; CHECK:       # %bb.0:
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
7469 ; CHECK-NEXT:    ret
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
7473   ret <1 x i1> %1
7476 define <1 x i1> @fcmp_ord_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7477 ; CHECK-LABEL: fcmp_ord_fv_v1f64:
7478 ; CHECK:       # %bb.0:
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
7484 ; CHECK-NEXT:    ret
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
7488   ret <1 x i1> %1
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:
7493 ; CHECK:       # %bb.0:
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
7502 ; CHECK-NEXT:    ret
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
7504   ret <1 x i1> %1
7507 define <1 x i1> @fcmp_ueq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7508 ; CHECK-LABEL: fcmp_ueq_vf_v1f64:
7509 ; CHECK:       # %bb.0:
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
7519 ; CHECK-NEXT:    ret
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
7523   ret <1 x i1> %1
7526 define <1 x i1> @fcmp_ueq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7527 ; CHECK-LABEL: fcmp_ueq_fv_v1f64:
7528 ; CHECK:       # %bb.0:
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
7538 ; CHECK-NEXT:    ret
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
7542   ret <1 x i1> %1
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:
7547 ; CHECK:       # %bb.0:
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
7554 ; CHECK-NEXT:    ret
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
7556   ret <1 x i1> %1
7559 define <1 x i1> @fcmp_ugt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7560 ; CHECK-LABEL: fcmp_ugt_vf_v1f64:
7561 ; CHECK:       # %bb.0:
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
7569 ; CHECK-NEXT:    ret
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
7573   ret <1 x i1> %1
7576 define <1 x i1> @fcmp_ugt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7577 ; CHECK-LABEL: fcmp_ugt_fv_v1f64:
7578 ; CHECK:       # %bb.0:
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
7586 ; CHECK-NEXT:    ret
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
7590   ret <1 x i1> %1
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:
7595 ; CHECK:       # %bb.0:
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
7602 ; CHECK-NEXT:    ret
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
7604   ret <1 x i1> %1
7607 define <1 x i1> @fcmp_uge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7608 ; CHECK-LABEL: fcmp_uge_vf_v1f64:
7609 ; CHECK:       # %bb.0:
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
7617 ; CHECK-NEXT:    ret
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
7621   ret <1 x i1> %1
7624 define <1 x i1> @fcmp_uge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7625 ; CHECK-LABEL: fcmp_uge_fv_v1f64:
7626 ; CHECK:       # %bb.0:
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
7634 ; CHECK-NEXT:    ret
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
7638   ret <1 x i1> %1
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:
7643 ; CHECK:       # %bb.0:
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
7650 ; CHECK-NEXT:    ret
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
7652   ret <1 x i1> %1
7655 define <1 x i1> @fcmp_ult_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7656 ; CHECK-LABEL: fcmp_ult_vf_v1f64:
7657 ; CHECK:       # %bb.0:
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
7665 ; CHECK-NEXT:    ret
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
7669   ret <1 x i1> %1
7672 define <1 x i1> @fcmp_ult_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7673 ; CHECK-LABEL: fcmp_ult_fv_v1f64:
7674 ; CHECK:       # %bb.0:
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
7682 ; CHECK-NEXT:    ret
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
7686   ret <1 x i1> %1
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:
7691 ; CHECK:       # %bb.0:
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
7698 ; CHECK-NEXT:    ret
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
7700   ret <1 x i1> %1
7703 define <1 x i1> @fcmp_ule_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7704 ; CHECK-LABEL: fcmp_ule_vf_v1f64:
7705 ; CHECK:       # %bb.0:
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
7713 ; CHECK-NEXT:    ret
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
7717   ret <1 x i1> %1
7720 define <1 x i1> @fcmp_ule_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7721 ; CHECK-LABEL: fcmp_ule_fv_v1f64:
7722 ; CHECK:       # %bb.0:
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
7730 ; CHECK-NEXT:    ret
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
7734   ret <1 x i1> %1
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:
7739 ; CHECK:       # %bb.0:
7740 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7741 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
7742 ; CHECK-NEXT:    ret
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
7744   ret <1 x i1> %1
7747 define <1 x i1> @fcmp_une_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7748 ; CHECK-LABEL: fcmp_une_vf_v1f64:
7749 ; CHECK:       # %bb.0:
7750 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7751 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7752 ; CHECK-NEXT:    ret
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
7756   ret <1 x i1> %1
7759 define <1 x i1> @fcmp_une_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7760 ; CHECK-LABEL: fcmp_une_fv_v1f64:
7761 ; CHECK:       # %bb.0:
7762 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7763 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7764 ; CHECK-NEXT:    ret
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
7768   ret <1 x i1> %1
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:
7773 ; CHECK:       # %bb.0:
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
7778 ; CHECK-NEXT:    ret
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
7780   ret <1 x i1> %1
7783 define <1 x i1> @fcmp_uno_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7784 ; CHECK-LABEL: fcmp_uno_vf_v1f64:
7785 ; CHECK:       # %bb.0:
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
7791 ; CHECK-NEXT:    ret
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
7795   ret <1 x i1> %1
7798 define <1 x i1> @fcmp_uno_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7799 ; CHECK-LABEL: fcmp_uno_fv_v1f64:
7800 ; CHECK:       # %bb.0:
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
7806 ; CHECK-NEXT:    ret
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
7810   ret <1 x i1> %1
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:
7816 ; CHECK:       # %bb.0:
7817 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7818 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
7819 ; CHECK-NEXT:    ret
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
7821   ret <2 x i1> %1
7824 define <2 x i1> @fcmp_oeq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7825 ; CHECK-LABEL: fcmp_oeq_vf_v2f64:
7826 ; CHECK:       # %bb.0:
7827 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7828 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7829 ; CHECK-NEXT:    ret
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
7833   ret <2 x i1> %1
7836 define <2 x i1> @fcmp_oeq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7837 ; CHECK-LABEL: fcmp_oeq_fv_v2f64:
7838 ; CHECK:       # %bb.0:
7839 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7840 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7841 ; CHECK-NEXT:    ret
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
7845   ret <2 x i1> %1
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:
7850 ; CHECK:       # %bb.0:
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
7856 ; CHECK-NEXT:    ret
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
7858   ret <2 x i1> %1
7861 define <2 x i1> @fcmp_ogt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7862 ; CHECK-LABEL: fcmp_ogt_vf_v2f64:
7863 ; CHECK:       # %bb.0:
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
7870 ; CHECK-NEXT:    ret
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
7874   ret <2 x i1> %1
7877 define <2 x i1> @fcmp_ogt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7878 ; CHECK-LABEL: fcmp_ogt_fv_v2f64:
7879 ; CHECK:       # %bb.0:
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
7886 ; CHECK-NEXT:    ret
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
7890   ret <2 x i1> %1
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:
7895 ; CHECK:       # %bb.0:
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
7901 ; CHECK-NEXT:    ret
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
7903   ret <2 x i1> %1
7906 define <2 x i1> @fcmp_oge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7907 ; CHECK-LABEL: fcmp_oge_vf_v2f64:
7908 ; CHECK:       # %bb.0:
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
7915 ; CHECK-NEXT:    ret
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
7919   ret <2 x i1> %1
7922 define <2 x i1> @fcmp_oge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7923 ; CHECK-LABEL: fcmp_oge_fv_v2f64:
7924 ; CHECK:       # %bb.0:
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
7931 ; CHECK-NEXT:    ret
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
7935   ret <2 x i1> %1
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:
7940 ; CHECK:       # %bb.0:
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
7946 ; CHECK-NEXT:    ret
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
7948   ret <2 x i1> %1
7951 define <2 x i1> @fcmp_olt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7952 ; CHECK-LABEL: fcmp_olt_vf_v2f64:
7953 ; CHECK:       # %bb.0:
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
7960 ; CHECK-NEXT:    ret
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
7964   ret <2 x i1> %1
7967 define <2 x i1> @fcmp_olt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7968 ; CHECK-LABEL: fcmp_olt_fv_v2f64:
7969 ; CHECK:       # %bb.0:
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
7976 ; CHECK-NEXT:    ret
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
7980   ret <2 x i1> %1
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:
7985 ; CHECK:       # %bb.0:
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
7991 ; CHECK-NEXT:    ret
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
7993   ret <2 x i1> %1
7996 define <2 x i1> @fcmp_ole_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7997 ; CHECK-LABEL: fcmp_ole_vf_v2f64:
7998 ; CHECK:       # %bb.0:
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
8005 ; CHECK-NEXT:    ret
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
8009   ret <2 x i1> %1
8012 define <2 x i1> @fcmp_ole_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8013 ; CHECK-LABEL: fcmp_ole_fv_v2f64:
8014 ; CHECK:       # %bb.0:
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
8021 ; CHECK-NEXT:    ret
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
8025   ret <2 x i1> %1
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:
8030 ; CHECK:       # %bb.0:
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
8039 ; CHECK-NEXT:    ret
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
8041   ret <2 x i1> %1
8044 define <2 x i1> @fcmp_one_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8045 ; CHECK-LABEL: fcmp_one_vf_v2f64:
8046 ; CHECK:       # %bb.0:
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
8056 ; CHECK-NEXT:    ret
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
8060   ret <2 x i1> %1
8063 define <2 x i1> @fcmp_one_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8064 ; CHECK-LABEL: fcmp_one_fv_v2f64:
8065 ; CHECK:       # %bb.0:
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
8075 ; CHECK-NEXT:    ret
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
8079   ret <2 x i1> %1
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:
8084 ; CHECK:       # %bb.0:
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
8089 ; CHECK-NEXT:    ret
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
8091   ret <2 x i1> %1
8094 define <2 x i1> @fcmp_ord_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8095 ; CHECK-LABEL: fcmp_ord_vf_v2f64:
8096 ; CHECK:       # %bb.0:
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
8102 ; CHECK-NEXT:    ret
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
8106   ret <2 x i1> %1
8109 define <2 x i1> @fcmp_ord_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8110 ; CHECK-LABEL: fcmp_ord_fv_v2f64:
8111 ; CHECK:       # %bb.0:
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
8117 ; CHECK-NEXT:    ret
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
8121   ret <2 x i1> %1
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:
8126 ; CHECK:       # %bb.0:
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
8135 ; CHECK-NEXT:    ret
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
8137   ret <2 x i1> %1
8140 define <2 x i1> @fcmp_ueq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8141 ; CHECK-LABEL: fcmp_ueq_vf_v2f64:
8142 ; CHECK:       # %bb.0:
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
8152 ; CHECK-NEXT:    ret
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
8156   ret <2 x i1> %1
8159 define <2 x i1> @fcmp_ueq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8160 ; CHECK-LABEL: fcmp_ueq_fv_v2f64:
8161 ; CHECK:       # %bb.0:
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
8171 ; CHECK-NEXT:    ret
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
8175   ret <2 x i1> %1
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:
8180 ; CHECK:       # %bb.0:
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
8187 ; CHECK-NEXT:    ret
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
8189   ret <2 x i1> %1
8192 define <2 x i1> @fcmp_ugt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8193 ; CHECK-LABEL: fcmp_ugt_vf_v2f64:
8194 ; CHECK:       # %bb.0:
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
8202 ; CHECK-NEXT:    ret
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
8206   ret <2 x i1> %1
8209 define <2 x i1> @fcmp_ugt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8210 ; CHECK-LABEL: fcmp_ugt_fv_v2f64:
8211 ; CHECK:       # %bb.0:
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
8219 ; CHECK-NEXT:    ret
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
8223   ret <2 x i1> %1
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:
8228 ; CHECK:       # %bb.0:
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
8235 ; CHECK-NEXT:    ret
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
8237   ret <2 x i1> %1
8240 define <2 x i1> @fcmp_uge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8241 ; CHECK-LABEL: fcmp_uge_vf_v2f64:
8242 ; CHECK:       # %bb.0:
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
8250 ; CHECK-NEXT:    ret
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
8254   ret <2 x i1> %1
8257 define <2 x i1> @fcmp_uge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8258 ; CHECK-LABEL: fcmp_uge_fv_v2f64:
8259 ; CHECK:       # %bb.0:
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
8267 ; CHECK-NEXT:    ret
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
8271   ret <2 x i1> %1
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:
8276 ; CHECK:       # %bb.0:
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
8283 ; CHECK-NEXT:    ret
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
8285   ret <2 x i1> %1
8288 define <2 x i1> @fcmp_ult_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8289 ; CHECK-LABEL: fcmp_ult_vf_v2f64:
8290 ; CHECK:       # %bb.0:
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
8298 ; CHECK-NEXT:    ret
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
8302   ret <2 x i1> %1
8305 define <2 x i1> @fcmp_ult_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8306 ; CHECK-LABEL: fcmp_ult_fv_v2f64:
8307 ; CHECK:       # %bb.0:
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
8315 ; CHECK-NEXT:    ret
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
8319   ret <2 x i1> %1
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:
8324 ; CHECK:       # %bb.0:
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
8331 ; CHECK-NEXT:    ret
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
8333   ret <2 x i1> %1
8336 define <2 x i1> @fcmp_ule_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8337 ; CHECK-LABEL: fcmp_ule_vf_v2f64:
8338 ; CHECK:       # %bb.0:
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
8346 ; CHECK-NEXT:    ret
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
8350   ret <2 x i1> %1
8353 define <2 x i1> @fcmp_ule_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8354 ; CHECK-LABEL: fcmp_ule_fv_v2f64:
8355 ; CHECK:       # %bb.0:
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
8363 ; CHECK-NEXT:    ret
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
8367   ret <2 x i1> %1
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:
8372 ; CHECK:       # %bb.0:
8373 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8374 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
8375 ; CHECK-NEXT:    ret
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
8377   ret <2 x i1> %1
8380 define <2 x i1> @fcmp_une_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8381 ; CHECK-LABEL: fcmp_une_vf_v2f64:
8382 ; CHECK:       # %bb.0:
8383 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8384 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8385 ; CHECK-NEXT:    ret
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
8389   ret <2 x i1> %1
8392 define <2 x i1> @fcmp_une_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8393 ; CHECK-LABEL: fcmp_une_fv_v2f64:
8394 ; CHECK:       # %bb.0:
8395 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8396 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8397 ; CHECK-NEXT:    ret
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
8401   ret <2 x i1> %1
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:
8406 ; CHECK:       # %bb.0:
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
8411 ; CHECK-NEXT:    ret
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
8413   ret <2 x i1> %1
8416 define <2 x i1> @fcmp_uno_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8417 ; CHECK-LABEL: fcmp_uno_vf_v2f64:
8418 ; CHECK:       # %bb.0:
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
8424 ; CHECK-NEXT:    ret
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
8428   ret <2 x i1> %1
8431 define <2 x i1> @fcmp_uno_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8432 ; CHECK-LABEL: fcmp_uno_fv_v2f64:
8433 ; CHECK:       # %bb.0:
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
8439 ; CHECK-NEXT:    ret
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
8443   ret <2 x i1> %1
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:
8449 ; CHECK:       # %bb.0:
8450 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8451 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
8452 ; CHECK-NEXT:    ret
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
8454   ret <4 x i1> %1
8457 define <4 x i1> @fcmp_oeq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8458 ; CHECK-LABEL: fcmp_oeq_vf_v4f64:
8459 ; CHECK:       # %bb.0:
8460 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8461 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8462 ; CHECK-NEXT:    ret
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
8466   ret <4 x i1> %1
8469 define <4 x i1> @fcmp_oeq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8470 ; CHECK-LABEL: fcmp_oeq_fv_v4f64:
8471 ; CHECK:       # %bb.0:
8472 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8473 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8474 ; CHECK-NEXT:    ret
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
8478   ret <4 x i1> %1
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:
8483 ; CHECK:       # %bb.0:
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
8491 ; CHECK-NEXT:    ret
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
8493   ret <4 x i1> %1
8496 define <4 x i1> @fcmp_ogt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8497 ; CHECK-LABEL: fcmp_ogt_vf_v4f64:
8498 ; CHECK:       # %bb.0:
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
8507 ; CHECK-NEXT:    ret
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
8511   ret <4 x i1> %1
8514 define <4 x i1> @fcmp_ogt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8515 ; CHECK-LABEL: fcmp_ogt_fv_v4f64:
8516 ; CHECK:       # %bb.0:
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
8525 ; CHECK-NEXT:    ret
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
8529   ret <4 x i1> %1
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:
8534 ; CHECK:       # %bb.0:
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
8542 ; CHECK-NEXT:    ret
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
8544   ret <4 x i1> %1
8547 define <4 x i1> @fcmp_oge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8548 ; CHECK-LABEL: fcmp_oge_vf_v4f64:
8549 ; CHECK:       # %bb.0:
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
8558 ; CHECK-NEXT:    ret
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
8562   ret <4 x i1> %1
8565 define <4 x i1> @fcmp_oge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8566 ; CHECK-LABEL: fcmp_oge_fv_v4f64:
8567 ; CHECK:       # %bb.0:
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
8576 ; CHECK-NEXT:    ret
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
8580   ret <4 x i1> %1
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:
8585 ; CHECK:       # %bb.0:
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
8593 ; CHECK-NEXT:    ret
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
8595   ret <4 x i1> %1
8598 define <4 x i1> @fcmp_olt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8599 ; CHECK-LABEL: fcmp_olt_vf_v4f64:
8600 ; CHECK:       # %bb.0:
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
8609 ; CHECK-NEXT:    ret
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
8613   ret <4 x i1> %1
8616 define <4 x i1> @fcmp_olt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8617 ; CHECK-LABEL: fcmp_olt_fv_v4f64:
8618 ; CHECK:       # %bb.0:
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
8627 ; CHECK-NEXT:    ret
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
8631   ret <4 x i1> %1
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:
8636 ; CHECK:       # %bb.0:
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
8644 ; CHECK-NEXT:    ret
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
8646   ret <4 x i1> %1
8649 define <4 x i1> @fcmp_ole_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8650 ; CHECK-LABEL: fcmp_ole_vf_v4f64:
8651 ; CHECK:       # %bb.0:
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
8660 ; CHECK-NEXT:    ret
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
8664   ret <4 x i1> %1
8667 define <4 x i1> @fcmp_ole_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8668 ; CHECK-LABEL: fcmp_ole_fv_v4f64:
8669 ; CHECK:       # %bb.0:
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
8678 ; CHECK-NEXT:    ret
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
8682   ret <4 x i1> %1
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:
8687 ; CHECK:       # %bb.0:
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
8697 ; CHECK-NEXT:    ret
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
8699   ret <4 x i1> %1
8702 define <4 x i1> @fcmp_one_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8703 ; CHECK-LABEL: fcmp_one_vf_v4f64:
8704 ; CHECK:       # %bb.0:
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
8715 ; CHECK-NEXT:    ret
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
8719   ret <4 x i1> %1
8722 define <4 x i1> @fcmp_one_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8723 ; CHECK-LABEL: fcmp_one_fv_v4f64:
8724 ; CHECK:       # %bb.0:
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
8735 ; CHECK-NEXT:    ret
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
8739   ret <4 x i1> %1
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:
8744 ; CHECK:       # %bb.0:
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
8749 ; CHECK-NEXT:    ret
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
8751   ret <4 x i1> %1
8754 define <4 x i1> @fcmp_ord_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8755 ; CHECK-LABEL: fcmp_ord_vf_v4f64:
8756 ; CHECK:       # %bb.0:
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
8762 ; CHECK-NEXT:    ret
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
8766   ret <4 x i1> %1
8769 define <4 x i1> @fcmp_ord_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8770 ; CHECK-LABEL: fcmp_ord_fv_v4f64:
8771 ; CHECK:       # %bb.0:
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
8777 ; CHECK-NEXT:    ret
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
8781   ret <4 x i1> %1
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:
8786 ; CHECK:       # %bb.0:
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
8796 ; CHECK-NEXT:    ret
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
8798   ret <4 x i1> %1
8801 define <4 x i1> @fcmp_ueq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8802 ; CHECK-LABEL: fcmp_ueq_vf_v4f64:
8803 ; CHECK:       # %bb.0:
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
8814 ; CHECK-NEXT:    ret
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
8818   ret <4 x i1> %1
8821 define <4 x i1> @fcmp_ueq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8822 ; CHECK-LABEL: fcmp_ueq_fv_v4f64:
8823 ; CHECK:       # %bb.0:
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
8834 ; CHECK-NEXT:    ret
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
8838   ret <4 x i1> %1
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:
8843 ; CHECK:       # %bb.0:
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
8851 ; CHECK-NEXT:    ret
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
8853   ret <4 x i1> %1
8856 define <4 x i1> @fcmp_ugt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8857 ; CHECK-LABEL: fcmp_ugt_vf_v4f64:
8858 ; CHECK:       # %bb.0:
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
8867 ; CHECK-NEXT:    ret
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
8871   ret <4 x i1> %1
8874 define <4 x i1> @fcmp_ugt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8875 ; CHECK-LABEL: fcmp_ugt_fv_v4f64:
8876 ; CHECK:       # %bb.0:
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
8885 ; CHECK-NEXT:    ret
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
8889   ret <4 x i1> %1
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:
8894 ; CHECK:       # %bb.0:
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
8902 ; CHECK-NEXT:    ret
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
8904   ret <4 x i1> %1
8907 define <4 x i1> @fcmp_uge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8908 ; CHECK-LABEL: fcmp_uge_vf_v4f64:
8909 ; CHECK:       # %bb.0:
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
8918 ; CHECK-NEXT:    ret
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
8922   ret <4 x i1> %1
8925 define <4 x i1> @fcmp_uge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8926 ; CHECK-LABEL: fcmp_uge_fv_v4f64:
8927 ; CHECK:       # %bb.0:
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
8936 ; CHECK-NEXT:    ret
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
8940   ret <4 x i1> %1
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:
8945 ; CHECK:       # %bb.0:
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
8953 ; CHECK-NEXT:    ret
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
8955   ret <4 x i1> %1
8958 define <4 x i1> @fcmp_ult_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8959 ; CHECK-LABEL: fcmp_ult_vf_v4f64:
8960 ; CHECK:       # %bb.0:
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
8969 ; CHECK-NEXT:    ret
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
8973   ret <4 x i1> %1
8976 define <4 x i1> @fcmp_ult_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8977 ; CHECK-LABEL: fcmp_ult_fv_v4f64:
8978 ; CHECK:       # %bb.0:
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
8987 ; CHECK-NEXT:    ret
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
8991   ret <4 x i1> %1
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:
8996 ; CHECK:       # %bb.0:
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
9004 ; CHECK-NEXT:    ret
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
9006   ret <4 x i1> %1
9009 define <4 x i1> @fcmp_ule_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9010 ; CHECK-LABEL: fcmp_ule_vf_v4f64:
9011 ; CHECK:       # %bb.0:
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
9020 ; CHECK-NEXT:    ret
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
9024   ret <4 x i1> %1
9027 define <4 x i1> @fcmp_ule_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9028 ; CHECK-LABEL: fcmp_ule_fv_v4f64:
9029 ; CHECK:       # %bb.0:
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
9038 ; CHECK-NEXT:    ret
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
9042   ret <4 x i1> %1
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:
9047 ; CHECK:       # %bb.0:
9048 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9049 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
9050 ; CHECK-NEXT:    ret
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
9052   ret <4 x i1> %1
9055 define <4 x i1> @fcmp_une_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9056 ; CHECK-LABEL: fcmp_une_vf_v4f64:
9057 ; CHECK:       # %bb.0:
9058 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9059 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9060 ; CHECK-NEXT:    ret
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
9064   ret <4 x i1> %1
9067 define <4 x i1> @fcmp_une_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9068 ; CHECK-LABEL: fcmp_une_fv_v4f64:
9069 ; CHECK:       # %bb.0:
9070 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9071 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9072 ; CHECK-NEXT:    ret
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
9076   ret <4 x i1> %1
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:
9081 ; CHECK:       # %bb.0:
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
9086 ; CHECK-NEXT:    ret
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
9088   ret <4 x i1> %1
9091 define <4 x i1> @fcmp_uno_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9092 ; CHECK-LABEL: fcmp_uno_vf_v4f64:
9093 ; CHECK:       # %bb.0:
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
9099 ; CHECK-NEXT:    ret
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
9103   ret <4 x i1> %1
9106 define <4 x i1> @fcmp_uno_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9107 ; CHECK-LABEL: fcmp_uno_fv_v4f64:
9108 ; CHECK:       # %bb.0:
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
9114 ; CHECK-NEXT:    ret
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
9118   ret <4 x i1> %1
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:
9124 ; CHECK:       # %bb.0:
9125 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9126 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
9127 ; CHECK-NEXT:    ret
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
9129   ret <8 x i1> %1
9132 define <8 x i1> @fcmp_oeq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9133 ; CHECK-LABEL: fcmp_oeq_vf_v8f64:
9134 ; CHECK:       # %bb.0:
9135 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9136 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9137 ; CHECK-NEXT:    ret
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
9141   ret <8 x i1> %1
9144 define <8 x i1> @fcmp_oeq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9145 ; CHECK-LABEL: fcmp_oeq_fv_v8f64:
9146 ; CHECK:       # %bb.0:
9147 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9148 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9149 ; CHECK-NEXT:    ret
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
9153   ret <8 x i1> %1
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:
9158 ; CHECK:       # %bb.0:
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
9166 ; CHECK-NEXT:    ret
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
9168   ret <8 x i1> %1
9171 define <8 x i1> @fcmp_ogt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9172 ; CHECK-LABEL: fcmp_ogt_vf_v8f64:
9173 ; CHECK:       # %bb.0:
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
9182 ; CHECK-NEXT:    ret
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
9186   ret <8 x i1> %1
9189 define <8 x i1> @fcmp_ogt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9190 ; CHECK-LABEL: fcmp_ogt_fv_v8f64:
9191 ; CHECK:       # %bb.0:
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
9200 ; CHECK-NEXT:    ret
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
9204   ret <8 x i1> %1
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:
9209 ; CHECK:       # %bb.0:
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
9217 ; CHECK-NEXT:    ret
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
9219   ret <8 x i1> %1
9222 define <8 x i1> @fcmp_oge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9223 ; CHECK-LABEL: fcmp_oge_vf_v8f64:
9224 ; CHECK:       # %bb.0:
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
9233 ; CHECK-NEXT:    ret
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
9237   ret <8 x i1> %1
9240 define <8 x i1> @fcmp_oge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9241 ; CHECK-LABEL: fcmp_oge_fv_v8f64:
9242 ; CHECK:       # %bb.0:
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
9251 ; CHECK-NEXT:    ret
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
9255   ret <8 x i1> %1
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:
9260 ; CHECK:       # %bb.0:
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
9268 ; CHECK-NEXT:    ret
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
9270   ret <8 x i1> %1
9273 define <8 x i1> @fcmp_olt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9274 ; CHECK-LABEL: fcmp_olt_vf_v8f64:
9275 ; CHECK:       # %bb.0:
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
9284 ; CHECK-NEXT:    ret
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
9288   ret <8 x i1> %1
9291 define <8 x i1> @fcmp_olt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9292 ; CHECK-LABEL: fcmp_olt_fv_v8f64:
9293 ; CHECK:       # %bb.0:
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
9302 ; CHECK-NEXT:    ret
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
9306   ret <8 x i1> %1
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:
9311 ; CHECK:       # %bb.0:
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
9319 ; CHECK-NEXT:    ret
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
9321   ret <8 x i1> %1
9324 define <8 x i1> @fcmp_ole_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9325 ; CHECK-LABEL: fcmp_ole_vf_v8f64:
9326 ; CHECK:       # %bb.0:
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
9335 ; CHECK-NEXT:    ret
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
9339   ret <8 x i1> %1
9342 define <8 x i1> @fcmp_ole_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9343 ; CHECK-LABEL: fcmp_ole_fv_v8f64:
9344 ; CHECK:       # %bb.0:
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
9353 ; CHECK-NEXT:    ret
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
9357   ret <8 x i1> %1
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:
9362 ; CHECK:       # %bb.0:
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
9372 ; CHECK-NEXT:    ret
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
9374   ret <8 x i1> %1
9377 define <8 x i1> @fcmp_one_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9378 ; CHECK-LABEL: fcmp_one_vf_v8f64:
9379 ; CHECK:       # %bb.0:
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
9390 ; CHECK-NEXT:    ret
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
9394   ret <8 x i1> %1
9397 define <8 x i1> @fcmp_one_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9398 ; CHECK-LABEL: fcmp_one_fv_v8f64:
9399 ; CHECK:       # %bb.0:
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
9410 ; CHECK-NEXT:    ret
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
9414   ret <8 x i1> %1
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:
9419 ; CHECK:       # %bb.0:
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
9424 ; CHECK-NEXT:    ret
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
9426   ret <8 x i1> %1
9429 define <8 x i1> @fcmp_ord_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9430 ; CHECK-LABEL: fcmp_ord_vf_v8f64:
9431 ; CHECK:       # %bb.0:
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
9437 ; CHECK-NEXT:    ret
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
9441   ret <8 x i1> %1
9444 define <8 x i1> @fcmp_ord_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9445 ; CHECK-LABEL: fcmp_ord_fv_v8f64:
9446 ; CHECK:       # %bb.0:
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
9452 ; CHECK-NEXT:    ret
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
9456   ret <8 x i1> %1
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:
9461 ; CHECK:       # %bb.0:
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
9471 ; CHECK-NEXT:    ret
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
9473   ret <8 x i1> %1
9476 define <8 x i1> @fcmp_ueq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9477 ; CHECK-LABEL: fcmp_ueq_vf_v8f64:
9478 ; CHECK:       # %bb.0:
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
9489 ; CHECK-NEXT:    ret
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
9493   ret <8 x i1> %1
9496 define <8 x i1> @fcmp_ueq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9497 ; CHECK-LABEL: fcmp_ueq_fv_v8f64:
9498 ; CHECK:       # %bb.0:
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
9509 ; CHECK-NEXT:    ret
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
9513   ret <8 x i1> %1
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:
9518 ; CHECK:       # %bb.0:
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
9526 ; CHECK-NEXT:    ret
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
9528   ret <8 x i1> %1
9531 define <8 x i1> @fcmp_ugt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9532 ; CHECK-LABEL: fcmp_ugt_vf_v8f64:
9533 ; CHECK:       # %bb.0:
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
9542 ; CHECK-NEXT:    ret
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
9546   ret <8 x i1> %1
9549 define <8 x i1> @fcmp_ugt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9550 ; CHECK-LABEL: fcmp_ugt_fv_v8f64:
9551 ; CHECK:       # %bb.0:
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
9560 ; CHECK-NEXT:    ret
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
9564   ret <8 x i1> %1
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:
9569 ; CHECK:       # %bb.0:
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
9577 ; CHECK-NEXT:    ret
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
9579   ret <8 x i1> %1
9582 define <8 x i1> @fcmp_uge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9583 ; CHECK-LABEL: fcmp_uge_vf_v8f64:
9584 ; CHECK:       # %bb.0:
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
9593 ; CHECK-NEXT:    ret
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
9597   ret <8 x i1> %1
9600 define <8 x i1> @fcmp_uge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9601 ; CHECK-LABEL: fcmp_uge_fv_v8f64:
9602 ; CHECK:       # %bb.0:
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
9611 ; CHECK-NEXT:    ret
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
9615   ret <8 x i1> %1
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:
9620 ; CHECK:       # %bb.0:
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
9628 ; CHECK-NEXT:    ret
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
9630   ret <8 x i1> %1
9633 define <8 x i1> @fcmp_ult_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9634 ; CHECK-LABEL: fcmp_ult_vf_v8f64:
9635 ; CHECK:       # %bb.0:
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
9644 ; CHECK-NEXT:    ret
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
9648   ret <8 x i1> %1
9651 define <8 x i1> @fcmp_ult_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9652 ; CHECK-LABEL: fcmp_ult_fv_v8f64:
9653 ; CHECK:       # %bb.0:
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
9662 ; CHECK-NEXT:    ret
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
9666   ret <8 x i1> %1
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:
9671 ; CHECK:       # %bb.0:
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
9679 ; CHECK-NEXT:    ret
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
9681   ret <8 x i1> %1
9684 define <8 x i1> @fcmp_ule_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9685 ; CHECK-LABEL: fcmp_ule_vf_v8f64:
9686 ; CHECK:       # %bb.0:
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
9695 ; CHECK-NEXT:    ret
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
9699   ret <8 x i1> %1
9702 define <8 x i1> @fcmp_ule_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9703 ; CHECK-LABEL: fcmp_ule_fv_v8f64:
9704 ; CHECK:       # %bb.0:
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
9713 ; CHECK-NEXT:    ret
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
9717   ret <8 x i1> %1
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:
9722 ; CHECK:       # %bb.0:
9723 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9724 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
9725 ; CHECK-NEXT:    ret
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
9727   ret <8 x i1> %1
9730 define <8 x i1> @fcmp_une_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9731 ; CHECK-LABEL: fcmp_une_vf_v8f64:
9732 ; CHECK:       # %bb.0:
9733 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9734 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9735 ; CHECK-NEXT:    ret
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
9739   ret <8 x i1> %1
9742 define <8 x i1> @fcmp_une_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9743 ; CHECK-LABEL: fcmp_une_fv_v8f64:
9744 ; CHECK:       # %bb.0:
9745 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9746 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9747 ; CHECK-NEXT:    ret
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
9751   ret <8 x i1> %1
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:
9756 ; CHECK:       # %bb.0:
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
9761 ; CHECK-NEXT:    ret
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
9763   ret <8 x i1> %1
9766 define <8 x i1> @fcmp_uno_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9767 ; CHECK-LABEL: fcmp_uno_vf_v8f64:
9768 ; CHECK:       # %bb.0:
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
9774 ; CHECK-NEXT:    ret
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
9778   ret <8 x i1> %1
9781 define <8 x i1> @fcmp_uno_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9782 ; CHECK-LABEL: fcmp_uno_fv_v8f64:
9783 ; CHECK:       # %bb.0:
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
9789 ; CHECK-NEXT:    ret
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
9793   ret <8 x i1> %1