Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfcmp-constrained-sdnode.ll
blob1cc9ea029d45748d7722391bd2dd12683d4de203
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
7 declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata)
8 define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
9 ; CHECK-LABEL: fcmp_oeq_vv_nxv1f16:
10 ; CHECK:       # %bb.0:
11 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
12 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
13 ; CHECK-NEXT:    ret
14   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
15   ret <vscale x 1 x i1> %1
18 define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
19 ; CHECK-LABEL: fcmp_oeq_vf_nxv1f16:
20 ; CHECK:       # %bb.0:
21 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
22 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
23 ; CHECK-NEXT:    ret
24   %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
25   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
26   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
27   ret <vscale x 1 x i1> %1
30 define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
31 ; CHECK-LABEL: fcmp_oeq_fv_nxv1f16:
32 ; CHECK:       # %bb.0:
33 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
34 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
35 ; CHECK-NEXT:    ret
36   %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
37   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
38   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
39   ret <vscale x 1 x i1> %1
42 define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
43 ; CHECK-LABEL: fcmp_ogt_vv_nxv1f16:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
52   ret <vscale x 1 x i1> %1
55 define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
56 ; CHECK-LABEL: fcmp_ogt_vf_nxv1f16:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
59 ; CHECK-NEXT:    vfmv.v.f v9, fa0
60 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
61 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
66   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
67   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
68   ret <vscale x 1 x i1> %1
71 define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
72 ; CHECK-LABEL: fcmp_ogt_fv_nxv1f16:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
75 ; CHECK-NEXT:    vfmv.v.f v9, fa0
76 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
77 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
82   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
83   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
84   ret <vscale x 1 x i1> %1
87 define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
88 ; CHECK-LABEL: fcmp_oge_vv_nxv1f16:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
97   ret <vscale x 1 x i1> %1
100 define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
101 ; CHECK-LABEL: fcmp_oge_vf_nxv1f16:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
104 ; CHECK-NEXT:    vfmv.v.f v9, fa0
105 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
106 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
111   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
112   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
113   ret <vscale x 1 x i1> %1
116 define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
117 ; CHECK-LABEL: fcmp_oge_fv_nxv1f16:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
120 ; CHECK-NEXT:    vfmv.v.f v9, fa0
121 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
122 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
127   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
128   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
129   ret <vscale x 1 x i1> %1
132 define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
133 ; CHECK-LABEL: fcmp_olt_vv_nxv1f16:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
142   ret <vscale x 1 x i1> %1
145 define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
146 ; CHECK-LABEL: fcmp_olt_vf_nxv1f16:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
149 ; CHECK-NEXT:    vfmv.v.f v9, fa0
150 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
151 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
156   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
157   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
158   ret <vscale x 1 x i1> %1
161 define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
162 ; CHECK-LABEL: fcmp_olt_fv_nxv1f16:
163 ; CHECK:       # %bb.0:
164 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
165 ; CHECK-NEXT:    vfmv.v.f v9, fa0
166 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
167 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
172   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
173   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
174   ret <vscale x 1 x i1> %1
177 define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
178 ; CHECK-LABEL: fcmp_ole_vv_nxv1f16:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
187   ret <vscale x 1 x i1> %1
190 define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
191 ; CHECK-LABEL: fcmp_ole_vf_nxv1f16:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
194 ; CHECK-NEXT:    vfmv.v.f v9, fa0
195 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
196 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
201   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
202   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
203   ret <vscale x 1 x i1> %1
206 define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
207 ; CHECK-LABEL: fcmp_ole_fv_nxv1f16:
208 ; CHECK:       # %bb.0:
209 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
210 ; CHECK-NEXT:    vfmv.v.f v9, fa0
211 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
212 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
217   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
218   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
219   ret <vscale x 1 x i1> %1
222 define <vscale x 1 x i1> @fcmp_one_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
223 ; CHECK-LABEL: fcmp_one_vv_nxv1f16:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
235   ret <vscale x 1 x i1> %1
238 define <vscale x 1 x i1> @fcmp_one_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
239 ; CHECK-LABEL: fcmp_one_vf_nxv1f16:
240 ; CHECK:       # %bb.0:
241 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
242 ; CHECK-NEXT:    vfmv.v.f v9, fa0
243 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
244 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
252   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
253   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
254   ret <vscale x 1 x i1> %1
257 define <vscale x 1 x i1> @fcmp_one_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
258 ; CHECK-LABEL: fcmp_one_fv_nxv1f16:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
261 ; CHECK-NEXT:    vfmv.v.f v9, fa0
262 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
263 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
271   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
272   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
273   ret <vscale x 1 x i1> %1
276 define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
277 ; CHECK-LABEL: fcmp_ord_vv_nxv1f16:
278 ; CHECK:       # %bb.0:
279 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
285   ret <vscale x 1 x i1> %1
288 define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
289 ; CHECK-LABEL: fcmp_ord_vf_nxv1f16:
290 ; CHECK:       # %bb.0:
291 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
292 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x half> poison, half %b, i32 0
298   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
299   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
300   ret <vscale x 1 x i1> %1
303 define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
304 ; CHECK-LABEL: fcmp_ord_fv_nxv1f16:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
307 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x half> poison, half %b, i32 0
313   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
314   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
315   ret <vscale x 1 x i1> %1
318 define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
319 ; CHECK-LABEL: fcmp_ueq_vv_nxv1f16:
320 ; CHECK:       # %bb.0:
321 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
331   ret <vscale x 1 x i1> %1
334 define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
335 ; CHECK-LABEL: fcmp_ueq_vf_nxv1f16:
336 ; CHECK:       # %bb.0:
337 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
338 ; CHECK-NEXT:    vfmv.v.f v9, fa0
339 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
340 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
348   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
349   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
350   ret <vscale x 1 x i1> %1
353 define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
354 ; CHECK-LABEL: fcmp_ueq_fv_nxv1f16:
355 ; CHECK:       # %bb.0:
356 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
357 ; CHECK-NEXT:    vfmv.v.f v9, fa0
358 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
359 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
367   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
368   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
369   ret <vscale x 1 x i1> %1
372 define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
373 ; CHECK-LABEL: fcmp_ugt_vv_nxv1f16:
374 ; CHECK:       # %bb.0:
375 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
383   ret <vscale x 1 x i1> %1
386 define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
387 ; CHECK-LABEL: fcmp_ugt_vf_nxv1f16:
388 ; CHECK:       # %bb.0:
389 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
390 ; CHECK-NEXT:    vfmv.v.f v9, fa0
391 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
392 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
398   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
399   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
400   ret <vscale x 1 x i1> %1
403 define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
404 ; CHECK-LABEL: fcmp_ugt_fv_nxv1f16:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
407 ; CHECK-NEXT:    vfmv.v.f v9, fa0
408 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
409 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
415   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
416   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
417   ret <vscale x 1 x i1> %1
420 define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
421 ; CHECK-LABEL: fcmp_uge_vv_nxv1f16:
422 ; CHECK:       # %bb.0:
423 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
431   ret <vscale x 1 x i1> %1
434 define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
435 ; CHECK-LABEL: fcmp_uge_vf_nxv1f16:
436 ; CHECK:       # %bb.0:
437 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
438 ; CHECK-NEXT:    vfmv.v.f v9, fa0
439 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
440 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
446   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
447   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
448   ret <vscale x 1 x i1> %1
451 define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
452 ; CHECK-LABEL: fcmp_uge_fv_nxv1f16:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
455 ; CHECK-NEXT:    vfmv.v.f v9, fa0
456 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
457 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
463   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
464   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
465   ret <vscale x 1 x i1> %1
468 define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
469 ; CHECK-LABEL: fcmp_ult_vv_nxv1f16:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
479   ret <vscale x 1 x i1> %1
482 define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
483 ; CHECK-LABEL: fcmp_ult_vf_nxv1f16:
484 ; CHECK:       # %bb.0:
485 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
486 ; CHECK-NEXT:    vfmv.v.f v9, fa0
487 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
488 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
494   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
495   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
496   ret <vscale x 1 x i1> %1
499 define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
500 ; CHECK-LABEL: fcmp_ult_fv_nxv1f16:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
503 ; CHECK-NEXT:    vfmv.v.f v9, fa0
504 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
505 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
511   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
512   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
513   ret <vscale x 1 x i1> %1
516 define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
517 ; CHECK-LABEL: fcmp_ule_vv_nxv1f16:
518 ; CHECK:       # %bb.0:
519 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
527   ret <vscale x 1 x i1> %1
530 define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
531 ; CHECK-LABEL: fcmp_ule_vf_nxv1f16:
532 ; CHECK:       # %bb.0:
533 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
534 ; CHECK-NEXT:    vfmv.v.f v9, fa0
535 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
536 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
542   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
543   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
544   ret <vscale x 1 x i1> %1
547 define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
548 ; CHECK-LABEL: fcmp_ule_fv_nxv1f16:
549 ; CHECK:       # %bb.0:
550 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
551 ; CHECK-NEXT:    vfmv.v.f v9, fa0
552 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
553 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x half> poison, half %b, i32 0
559   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
560   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
561   ret <vscale x 1 x i1> %1
564 define <vscale x 1 x i1> @fcmp_une_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
565 ; CHECK-LABEL: fcmp_une_vv_nxv1f16:
566 ; CHECK:       # %bb.0:
567 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
568 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
569 ; CHECK-NEXT:    ret
570   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
571   ret <vscale x 1 x i1> %1
574 define <vscale x 1 x i1> @fcmp_une_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
575 ; CHECK-LABEL: fcmp_une_vf_nxv1f16:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
578 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
579 ; CHECK-NEXT:    ret
580   %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
581   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
582   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
583   ret <vscale x 1 x i1> %1
586 define <vscale x 1 x i1> @fcmp_une_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
587 ; CHECK-LABEL: fcmp_une_fv_nxv1f16:
588 ; CHECK:       # %bb.0:
589 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
590 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
591 ; CHECK-NEXT:    ret
592   %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
593   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
594   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
595   ret <vscale x 1 x i1> %1
598 define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp {
599 ; CHECK-LABEL: fcmp_uno_vv_nxv1f16:
600 ; CHECK:       # %bb.0:
601 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
607   ret <vscale x 1 x i1> %1
610 define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
611 ; CHECK-LABEL: fcmp_uno_vf_nxv1f16:
612 ; CHECK:       # %bb.0:
613 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
614 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x half> poison, half %b, i32 0
620   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
621   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
622   ret <vscale x 1 x i1> %1
625 define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp {
626 ; CHECK-LABEL: fcmp_uno_fv_nxv1f16:
627 ; CHECK:       # %bb.0:
628 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
629 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x half> poison, half %b, i32 0
635   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
636   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
637   ret <vscale x 1 x i1> %1
640 declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata)
641 define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
642 ; CHECK-LABEL: fcmp_oeq_vv_nxv2f16:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
645 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
646 ; CHECK-NEXT:    ret
647   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
648   ret <vscale x 2 x i1> %1
651 define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
652 ; CHECK-LABEL: fcmp_oeq_vf_nxv2f16:
653 ; CHECK:       # %bb.0:
654 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
655 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
656 ; CHECK-NEXT:    ret
657   %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
658   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
659   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
660   ret <vscale x 2 x i1> %1
663 define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
664 ; CHECK-LABEL: fcmp_oeq_fv_nxv2f16:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
667 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
668 ; CHECK-NEXT:    ret
669   %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
670   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
671   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
672   ret <vscale x 2 x i1> %1
675 define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
676 ; CHECK-LABEL: fcmp_ogt_vv_nxv2f16:
677 ; CHECK:       # %bb.0:
678 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
685   ret <vscale x 2 x i1> %1
688 define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
689 ; CHECK-LABEL: fcmp_ogt_vf_nxv2f16:
690 ; CHECK:       # %bb.0:
691 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
692 ; CHECK-NEXT:    vfmv.v.f v9, fa0
693 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
694 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
699   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
700   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
701   ret <vscale x 2 x i1> %1
704 define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
705 ; CHECK-LABEL: fcmp_ogt_fv_nxv2f16:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
708 ; CHECK-NEXT:    vfmv.v.f v9, fa0
709 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
710 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
715   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
716   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
717   ret <vscale x 2 x i1> %1
720 define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
721 ; CHECK-LABEL: fcmp_oge_vv_nxv2f16:
722 ; CHECK:       # %bb.0:
723 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
730   ret <vscale x 2 x i1> %1
733 define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
734 ; CHECK-LABEL: fcmp_oge_vf_nxv2f16:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
737 ; CHECK-NEXT:    vfmv.v.f v9, fa0
738 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
739 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
744   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
745   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
746   ret <vscale x 2 x i1> %1
749 define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
750 ; CHECK-LABEL: fcmp_oge_fv_nxv2f16:
751 ; CHECK:       # %bb.0:
752 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
753 ; CHECK-NEXT:    vfmv.v.f v9, fa0
754 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
755 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
760   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
761   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
762   ret <vscale x 2 x i1> %1
765 define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
766 ; CHECK-LABEL: fcmp_olt_vv_nxv2f16:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
775   ret <vscale x 2 x i1> %1
778 define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
779 ; CHECK-LABEL: fcmp_olt_vf_nxv2f16:
780 ; CHECK:       # %bb.0:
781 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
782 ; CHECK-NEXT:    vfmv.v.f v9, fa0
783 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
784 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
789   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
790   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
791   ret <vscale x 2 x i1> %1
794 define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
795 ; CHECK-LABEL: fcmp_olt_fv_nxv2f16:
796 ; CHECK:       # %bb.0:
797 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
798 ; CHECK-NEXT:    vfmv.v.f v9, fa0
799 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
800 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
805   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
806   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
807   ret <vscale x 2 x i1> %1
810 define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
811 ; CHECK-LABEL: fcmp_ole_vv_nxv2f16:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
820   ret <vscale x 2 x i1> %1
823 define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
824 ; CHECK-LABEL: fcmp_ole_vf_nxv2f16:
825 ; CHECK:       # %bb.0:
826 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
827 ; CHECK-NEXT:    vfmv.v.f v9, fa0
828 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
829 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
834   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
835   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
836   ret <vscale x 2 x i1> %1
839 define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
840 ; CHECK-LABEL: fcmp_ole_fv_nxv2f16:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
843 ; CHECK-NEXT:    vfmv.v.f v9, fa0
844 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
845 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
850   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
851   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
852   ret <vscale x 2 x i1> %1
855 define <vscale x 2 x i1> @fcmp_one_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
856 ; CHECK-LABEL: fcmp_one_vv_nxv2f16:
857 ; CHECK:       # %bb.0:
858 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
868   ret <vscale x 2 x i1> %1
871 define <vscale x 2 x i1> @fcmp_one_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
872 ; CHECK-LABEL: fcmp_one_vf_nxv2f16:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
875 ; CHECK-NEXT:    vfmv.v.f v9, fa0
876 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
877 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
885   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
886   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
887   ret <vscale x 2 x i1> %1
890 define <vscale x 2 x i1> @fcmp_one_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
891 ; CHECK-LABEL: fcmp_one_fv_nxv2f16:
892 ; CHECK:       # %bb.0:
893 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
894 ; CHECK-NEXT:    vfmv.v.f v9, fa0
895 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
896 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
904   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
905   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
906   ret <vscale x 2 x i1> %1
909 define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
910 ; CHECK-LABEL: fcmp_ord_vv_nxv2f16:
911 ; CHECK:       # %bb.0:
912 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
918   ret <vscale x 2 x i1> %1
921 define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
922 ; CHECK-LABEL: fcmp_ord_vf_nxv2f16:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x half> poison, half %b, i32 0
931   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
932   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
933   ret <vscale x 2 x i1> %1
936 define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
937 ; CHECK-LABEL: fcmp_ord_fv_nxv2f16:
938 ; CHECK:       # %bb.0:
939 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x half> poison, half %b, i32 0
946   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
947   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
948   ret <vscale x 2 x i1> %1
951 define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
952 ; CHECK-LABEL: fcmp_ueq_vv_nxv2f16:
953 ; CHECK:       # %bb.0:
954 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
964   ret <vscale x 2 x i1> %1
967 define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
968 ; CHECK-LABEL: fcmp_ueq_vf_nxv2f16:
969 ; CHECK:       # %bb.0:
970 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
971 ; CHECK-NEXT:    vfmv.v.f v9, fa0
972 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
973 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
981   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
982   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
983   ret <vscale x 2 x i1> %1
986 define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
987 ; CHECK-LABEL: fcmp_ueq_fv_nxv2f16:
988 ; CHECK:       # %bb.0:
989 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
990 ; CHECK-NEXT:    vfmv.v.f v9, fa0
991 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
992 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1000   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1001   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1002   ret <vscale x 2 x i1> %1
1005 define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1006 ; CHECK-LABEL: fcmp_ugt_vv_nxv2f16:
1007 ; CHECK:       # %bb.0:
1008 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1016   ret <vscale x 2 x i1> %1
1019 define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1020 ; CHECK-LABEL: fcmp_ugt_vf_nxv2f16:
1021 ; CHECK:       # %bb.0:
1022 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1023 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1024 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1025 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1031   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1032   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1033   ret <vscale x 2 x i1> %1
1036 define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1037 ; CHECK-LABEL: fcmp_ugt_fv_nxv2f16:
1038 ; CHECK:       # %bb.0:
1039 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1040 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1041 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1042 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1048   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1049   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1050   ret <vscale x 2 x i1> %1
1053 define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1054 ; CHECK-LABEL: fcmp_uge_vv_nxv2f16:
1055 ; CHECK:       # %bb.0:
1056 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1064   ret <vscale x 2 x i1> %1
1067 define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1068 ; CHECK-LABEL: fcmp_uge_vf_nxv2f16:
1069 ; CHECK:       # %bb.0:
1070 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1071 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1072 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1073 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1079   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1080   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1081   ret <vscale x 2 x i1> %1
1084 define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1085 ; CHECK-LABEL: fcmp_uge_fv_nxv2f16:
1086 ; CHECK:       # %bb.0:
1087 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1088 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1089 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1090 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1096   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1097   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1098   ret <vscale x 2 x i1> %1
1101 define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1102 ; CHECK-LABEL: fcmp_ult_vv_nxv2f16:
1103 ; CHECK:       # %bb.0:
1104 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1112   ret <vscale x 2 x i1> %1
1115 define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1116 ; CHECK-LABEL: fcmp_ult_vf_nxv2f16:
1117 ; CHECK:       # %bb.0:
1118 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1119 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1120 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1121 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1127   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1128   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1129   ret <vscale x 2 x i1> %1
1132 define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1133 ; CHECK-LABEL: fcmp_ult_fv_nxv2f16:
1134 ; CHECK:       # %bb.0:
1135 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1136 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1137 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1138 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1144   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1145   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1146   ret <vscale x 2 x i1> %1
1149 define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1150 ; CHECK-LABEL: fcmp_ule_vv_nxv2f16:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1160   ret <vscale x 2 x i1> %1
1163 define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1164 ; CHECK-LABEL: fcmp_ule_vf_nxv2f16:
1165 ; CHECK:       # %bb.0:
1166 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1167 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1168 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1169 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1175   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1176   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1177   ret <vscale x 2 x i1> %1
1180 define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1181 ; CHECK-LABEL: fcmp_ule_fv_nxv2f16:
1182 ; CHECK:       # %bb.0:
1183 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
1184 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1185 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1186 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x half> poison, half %b, i32 0
1192   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1193   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1194   ret <vscale x 2 x i1> %1
1197 define <vscale x 2 x i1> @fcmp_une_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1198 ; CHECK-LABEL: fcmp_une_vv_nxv2f16:
1199 ; CHECK:       # %bb.0:
1200 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1201 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
1202 ; CHECK-NEXT:    ret
1203   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1204   ret <vscale x 2 x i1> %1
1207 define <vscale x 2 x i1> @fcmp_une_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1208 ; CHECK-LABEL: fcmp_une_vf_nxv2f16:
1209 ; CHECK:       # %bb.0:
1210 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1211 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1212 ; CHECK-NEXT:    ret
1213   %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1214   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1215   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1216   ret <vscale x 2 x i1> %1
1219 define <vscale x 2 x i1> @fcmp_une_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1220 ; CHECK-LABEL: fcmp_une_fv_nxv2f16:
1221 ; CHECK:       # %bb.0:
1222 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
1223 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1224 ; CHECK-NEXT:    ret
1225   %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1226   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1227   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1228   ret <vscale x 2 x i1> %1
1231 define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp {
1232 ; CHECK-LABEL: fcmp_uno_vv_nxv2f16:
1233 ; CHECK:       # %bb.0:
1234 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1240   ret <vscale x 2 x i1> %1
1243 define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1244 ; CHECK-LABEL: fcmp_uno_vf_nxv2f16:
1245 ; CHECK:       # %bb.0:
1246 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x half> poison, half %b, i32 0
1253   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1254   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1255   ret <vscale x 2 x i1> %1
1258 define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp {
1259 ; CHECK-LABEL: fcmp_uno_fv_nxv2f16:
1260 ; CHECK:       # %bb.0:
1261 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, 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 <vscale x 2 x half> poison, half %b, i32 0
1268   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1269   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1270   ret <vscale x 2 x i1> %1
1273 declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata)
1274 define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1275 ; CHECK-LABEL: fcmp_oeq_vv_nxv4f16:
1276 ; CHECK:       # %bb.0:
1277 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1278 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
1279 ; CHECK-NEXT:    ret
1280   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1281   ret <vscale x 4 x i1> %1
1284 define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1285 ; CHECK-LABEL: fcmp_oeq_vf_nxv4f16:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1288 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1289 ; CHECK-NEXT:    ret
1290   %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1291   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1292   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1293   ret <vscale x 4 x i1> %1
1296 define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1297 ; CHECK-LABEL: fcmp_oeq_fv_nxv4f16:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1300 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1301 ; CHECK-NEXT:    ret
1302   %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1303   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1304   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1305   ret <vscale x 4 x i1> %1
1308 define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1309 ; CHECK-LABEL: fcmp_ogt_vv_nxv4f16:
1310 ; CHECK:       # %bb.0:
1311 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1318   ret <vscale x 4 x i1> %1
1321 define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1322 ; CHECK-LABEL: fcmp_ogt_vf_nxv4f16:
1323 ; CHECK:       # %bb.0:
1324 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1325 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1326 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1327 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1332   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1333   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1334   ret <vscale x 4 x i1> %1
1337 define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1338 ; CHECK-LABEL: fcmp_ogt_fv_nxv4f16:
1339 ; CHECK:       # %bb.0:
1340 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1341 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1342 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1343 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1348   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1349   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1350   ret <vscale x 4 x i1> %1
1353 define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1354 ; CHECK-LABEL: fcmp_oge_vv_nxv4f16:
1355 ; CHECK:       # %bb.0:
1356 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
1363   ret <vscale x 4 x i1> %1
1366 define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1367 ; CHECK-LABEL: fcmp_oge_vf_nxv4f16:
1368 ; CHECK:       # %bb.0:
1369 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1370 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1371 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1372 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1377   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1378   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
1379   ret <vscale x 4 x i1> %1
1382 define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1383 ; CHECK-LABEL: fcmp_oge_fv_nxv4f16:
1384 ; CHECK:       # %bb.0:
1385 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1386 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1387 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1388 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1393   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1394   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
1395   ret <vscale x 4 x i1> %1
1398 define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1399 ; CHECK-LABEL: fcmp_olt_vv_nxv4f16:
1400 ; CHECK:       # %bb.0:
1401 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
1408   ret <vscale x 4 x i1> %1
1411 define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1412 ; CHECK-LABEL: fcmp_olt_vf_nxv4f16:
1413 ; CHECK:       # %bb.0:
1414 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1415 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1416 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1417 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1422   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1423   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
1424   ret <vscale x 4 x i1> %1
1427 define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1428 ; CHECK-LABEL: fcmp_olt_fv_nxv4f16:
1429 ; CHECK:       # %bb.0:
1430 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1431 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1432 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1433 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1438   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1439   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
1440   ret <vscale x 4 x i1> %1
1443 define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1444 ; CHECK-LABEL: fcmp_ole_vv_nxv4f16:
1445 ; CHECK:       # %bb.0:
1446 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
1453   ret <vscale x 4 x i1> %1
1456 define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1457 ; CHECK-LABEL: fcmp_ole_vf_nxv4f16:
1458 ; CHECK:       # %bb.0:
1459 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1460 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1461 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1462 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1467   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1468   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
1469   ret <vscale x 4 x i1> %1
1472 define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1473 ; CHECK-LABEL: fcmp_ole_fv_nxv4f16:
1474 ; CHECK:       # %bb.0:
1475 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1476 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1477 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1478 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1483   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1484   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
1485   ret <vscale x 4 x i1> %1
1488 define <vscale x 4 x i1> @fcmp_one_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1489 ; CHECK-LABEL: fcmp_one_vv_nxv4f16:
1490 ; CHECK:       # %bb.0:
1491 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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:    vmv.v.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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
1501   ret <vscale x 4 x i1> %1
1504 define <vscale x 4 x i1> @fcmp_one_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1505 ; CHECK-LABEL: fcmp_one_vf_nxv4f16:
1506 ; CHECK:       # %bb.0:
1507 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1508 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1509 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1510 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1511 ; CHECK-NEXT:    vmand.mm v0, v10, v9
1512 ; CHECK-NEXT:    vmv.v.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 <vscale x 4 x half> poison, half %b, i32 0
1518   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1519   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
1520   ret <vscale x 4 x i1> %1
1523 define <vscale x 4 x i1> @fcmp_one_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1524 ; CHECK-LABEL: fcmp_one_fv_nxv4f16:
1525 ; CHECK:       # %bb.0:
1526 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1527 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1528 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1529 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1530 ; CHECK-NEXT:    vmand.mm v0, v9, v10
1531 ; CHECK-NEXT:    vmv.v.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 <vscale x 4 x half> poison, half %b, i32 0
1537   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1538   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
1539   ret <vscale x 4 x i1> %1
1542 define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1543 ; CHECK-LABEL: fcmp_ord_vv_nxv4f16:
1544 ; CHECK:       # %bb.0:
1545 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
1551   ret <vscale x 4 x i1> %1
1554 define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1555 ; CHECK-LABEL: fcmp_ord_vf_nxv4f16:
1556 ; CHECK:       # %bb.0:
1557 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x half> poison, half %b, i32 0
1564   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1565   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
1566   ret <vscale x 4 x i1> %1
1569 define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1570 ; CHECK-LABEL: fcmp_ord_fv_nxv4f16:
1571 ; CHECK:       # %bb.0:
1572 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x half> poison, half %b, i32 0
1579   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1580   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
1581   ret <vscale x 4 x i1> %1
1584 define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1585 ; CHECK-LABEL: fcmp_ueq_vv_nxv4f16:
1586 ; CHECK:       # %bb.0:
1587 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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:    vmv.v.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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1597   ret <vscale x 4 x i1> %1
1600 define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1601 ; CHECK-LABEL: fcmp_ueq_vf_nxv4f16:
1602 ; CHECK:       # %bb.0:
1603 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1604 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1605 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1606 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1607 ; CHECK-NEXT:    vmand.mm v0, v10, v9
1608 ; CHECK-NEXT:    vmv.v.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 <vscale x 4 x half> poison, half %b, i32 0
1614   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1615   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1616   ret <vscale x 4 x i1> %1
1619 define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1620 ; CHECK-LABEL: fcmp_ueq_fv_nxv4f16:
1621 ; CHECK:       # %bb.0:
1622 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1623 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1624 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1625 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1626 ; CHECK-NEXT:    vmand.mm v0, v9, v10
1627 ; CHECK-NEXT:    vmv.v.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 <vscale x 4 x half> poison, half %b, i32 0
1633   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1634   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1635   ret <vscale x 4 x i1> %1
1638 define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1639 ; CHECK-LABEL: fcmp_ugt_vv_nxv4f16:
1640 ; CHECK:       # %bb.0:
1641 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1649   ret <vscale x 4 x i1> %1
1652 define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1653 ; CHECK-LABEL: fcmp_ugt_vf_nxv4f16:
1654 ; CHECK:       # %bb.0:
1655 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1656 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1657 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1658 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1664   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1665   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1666   ret <vscale x 4 x i1> %1
1669 define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1670 ; CHECK-LABEL: fcmp_ugt_fv_nxv4f16:
1671 ; CHECK:       # %bb.0:
1672 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1673 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1674 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1675 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1681   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1682   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1683   ret <vscale x 4 x i1> %1
1686 define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1687 ; CHECK-LABEL: fcmp_uge_vv_nxv4f16:
1688 ; CHECK:       # %bb.0:
1689 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1697   ret <vscale x 4 x i1> %1
1700 define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1701 ; CHECK-LABEL: fcmp_uge_vf_nxv4f16:
1702 ; CHECK:       # %bb.0:
1703 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1704 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1705 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1706 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1712   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1713   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1714   ret <vscale x 4 x i1> %1
1717 define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1718 ; CHECK-LABEL: fcmp_uge_fv_nxv4f16:
1719 ; CHECK:       # %bb.0:
1720 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1721 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1722 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1723 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1729   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1730   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1731   ret <vscale x 4 x i1> %1
1734 define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1735 ; CHECK-LABEL: fcmp_ult_vv_nxv4f16:
1736 ; CHECK:       # %bb.0:
1737 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1745   ret <vscale x 4 x i1> %1
1748 define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1749 ; CHECK-LABEL: fcmp_ult_vf_nxv4f16:
1750 ; CHECK:       # %bb.0:
1751 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1752 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1753 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1754 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1760   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1761   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1762   ret <vscale x 4 x i1> %1
1765 define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1766 ; CHECK-LABEL: fcmp_ult_fv_nxv4f16:
1767 ; CHECK:       # %bb.0:
1768 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1769 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1770 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1771 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1777   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1778   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1779   ret <vscale x 4 x i1> %1
1782 define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1783 ; CHECK-LABEL: fcmp_ule_vv_nxv4f16:
1784 ; CHECK:       # %bb.0:
1785 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1793   ret <vscale x 4 x i1> %1
1796 define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1797 ; CHECK-LABEL: fcmp_ule_vf_nxv4f16:
1798 ; CHECK:       # %bb.0:
1799 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1800 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1801 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1802 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1808   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1809   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1810   ret <vscale x 4 x i1> %1
1813 define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1814 ; CHECK-LABEL: fcmp_ule_fv_nxv4f16:
1815 ; CHECK:       # %bb.0:
1816 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
1817 ; CHECK-NEXT:    vfmv.v.f v9, fa0
1818 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1819 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 4 x half> poison, half %b, i32 0
1825   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1826   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1827   ret <vscale x 4 x i1> %1
1830 define <vscale x 4 x i1> @fcmp_une_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1831 ; CHECK-LABEL: fcmp_une_vv_nxv4f16:
1832 ; CHECK:       # %bb.0:
1833 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1834 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
1835 ; CHECK-NEXT:    ret
1836   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1837   ret <vscale x 4 x i1> %1
1840 define <vscale x 4 x i1> @fcmp_une_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1841 ; CHECK-LABEL: fcmp_une_vf_nxv4f16:
1842 ; CHECK:       # %bb.0:
1843 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1844 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1845 ; CHECK-NEXT:    ret
1846   %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1847   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1848   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1849   ret <vscale x 4 x i1> %1
1852 define <vscale x 4 x i1> @fcmp_une_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1853 ; CHECK-LABEL: fcmp_une_fv_nxv4f16:
1854 ; CHECK:       # %bb.0:
1855 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
1856 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1857 ; CHECK-NEXT:    ret
1858   %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1859   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1860   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1861   ret <vscale x 4 x i1> %1
1864 define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp {
1865 ; CHECK-LABEL: fcmp_uno_vv_nxv4f16:
1866 ; CHECK:       # %bb.0:
1867 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1873   ret <vscale x 4 x i1> %1
1876 define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1877 ; CHECK-LABEL: fcmp_uno_vf_nxv4f16:
1878 ; CHECK:       # %bb.0:
1879 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x half> poison, half %b, i32 0
1886   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1887   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1888   ret <vscale x 4 x i1> %1
1891 define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp {
1892 ; CHECK-LABEL: fcmp_uno_fv_nxv4f16:
1893 ; CHECK:       # %bb.0:
1894 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, 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 <vscale x 4 x half> poison, half %b, i32 0
1901   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1902   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1903   ret <vscale x 4 x i1> %1
1906 declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata)
1907 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
1908 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f16:
1909 ; CHECK:       # %bb.0:
1910 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1911 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
1912 ; CHECK-NEXT:    ret
1913   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1914   ret <vscale x 8 x i1> %1
1917 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
1918 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f16:
1919 ; CHECK:       # %bb.0:
1920 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1921 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1922 ; CHECK-NEXT:    ret
1923   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1924   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1925   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1926   ret <vscale x 8 x i1> %1
1929 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
1930 ; CHECK-LABEL: fcmp_oeq_fv_nxv8f16:
1931 ; CHECK:       # %bb.0:
1932 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1933 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1934 ; CHECK-NEXT:    ret
1935   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1936   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1937   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1938   ret <vscale x 8 x i1> %1
1941 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
1942 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f16:
1943 ; CHECK:       # %bb.0:
1944 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1945 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
1946 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
1947 ; CHECK-NEXT:    vmand.mm v12, v13, v12
1948 ; CHECK-NEXT:    vmv1r.v v0, v12
1949 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
1950 ; CHECK-NEXT:    vmv1r.v v0, v12
1951 ; CHECK-NEXT:    ret
1952   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1953   ret <vscale x 8 x i1> %1
1956 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
1957 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f16:
1958 ; CHECK:       # %bb.0:
1959 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1960 ; CHECK-NEXT:    vfmv.v.f v10, fa0
1961 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
1962 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1963 ; CHECK-NEXT:    vmand.mm v10, v12, v10
1964 ; CHECK-NEXT:    vmv1r.v v0, v10
1965 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
1966 ; CHECK-NEXT:    vmv1r.v v0, v10
1967 ; CHECK-NEXT:    ret
1968   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1969   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1970   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1971   ret <vscale x 8 x i1> %1
1974 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
1975 ; CHECK-LABEL: fcmp_ogt_fv_nxv8f16:
1976 ; CHECK:       # %bb.0:
1977 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1978 ; CHECK-NEXT:    vfmv.v.f v10, fa0
1979 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
1980 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1981 ; CHECK-NEXT:    vmand.mm v10, v10, v12
1982 ; CHECK-NEXT:    vmv1r.v v0, v10
1983 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
1984 ; CHECK-NEXT:    vmv1r.v v0, v10
1985 ; CHECK-NEXT:    ret
1986   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1987   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1988   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1989   ret <vscale x 8 x i1> %1
1992 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
1993 ; CHECK-LABEL: fcmp_oge_vv_nxv8f16:
1994 ; CHECK:       # %bb.0:
1995 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
1996 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
1997 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
1998 ; CHECK-NEXT:    vmand.mm v12, v13, v12
1999 ; CHECK-NEXT:    vmv1r.v v0, v12
2000 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
2001 ; CHECK-NEXT:    vmv1r.v v0, v12
2002 ; CHECK-NEXT:    ret
2003   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
2004   ret <vscale x 8 x i1> %1
2007 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2008 ; CHECK-LABEL: fcmp_oge_vf_nxv8f16:
2009 ; CHECK:       # %bb.0:
2010 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2011 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2012 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2013 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2014 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2015 ; CHECK-NEXT:    vmv1r.v v0, v10
2016 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2017 ; CHECK-NEXT:    vmv1r.v v0, v10
2018 ; CHECK-NEXT:    ret
2019   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2020   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2021   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2022   ret <vscale x 8 x i1> %1
2025 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2026 ; CHECK-LABEL: fcmp_oge_fv_nxv8f16:
2027 ; CHECK:       # %bb.0:
2028 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2029 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2030 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2031 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2032 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2033 ; CHECK-NEXT:    vmv1r.v v0, v10
2034 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2035 ; CHECK-NEXT:    vmv1r.v v0, v10
2036 ; CHECK-NEXT:    ret
2037   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2038   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2039   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2040   ret <vscale x 8 x i1> %1
2043 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2044 ; CHECK-LABEL: fcmp_olt_vv_nxv8f16:
2045 ; CHECK:       # %bb.0:
2046 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2047 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2048 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2049 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2050 ; CHECK-NEXT:    vmv1r.v v0, v12
2051 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
2052 ; CHECK-NEXT:    vmv1r.v v0, v12
2053 ; CHECK-NEXT:    ret
2054   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2055   ret <vscale x 8 x i1> %1
2058 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2059 ; CHECK-LABEL: fcmp_olt_vf_nxv8f16:
2060 ; CHECK:       # %bb.0:
2061 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2062 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2063 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2064 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2065 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2066 ; CHECK-NEXT:    vmv1r.v v0, v10
2067 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2068 ; CHECK-NEXT:    vmv1r.v v0, v10
2069 ; CHECK-NEXT:    ret
2070   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2071   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2072   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2073   ret <vscale x 8 x i1> %1
2076 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2077 ; CHECK-LABEL: fcmp_olt_fv_nxv8f16:
2078 ; CHECK:       # %bb.0:
2079 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2080 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2081 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2082 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2083 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2084 ; CHECK-NEXT:    vmv1r.v v0, v10
2085 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2086 ; CHECK-NEXT:    vmv1r.v v0, v10
2087 ; CHECK-NEXT:    ret
2088   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2089   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2090   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2091   ret <vscale x 8 x i1> %1
2094 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2095 ; CHECK-LABEL: fcmp_ole_vv_nxv8f16:
2096 ; CHECK:       # %bb.0:
2097 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2098 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2099 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2100 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2101 ; CHECK-NEXT:    vmv1r.v v0, v12
2102 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
2103 ; CHECK-NEXT:    vmv1r.v v0, v12
2104 ; CHECK-NEXT:    ret
2105   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2106   ret <vscale x 8 x i1> %1
2109 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2110 ; CHECK-LABEL: fcmp_ole_vf_nxv8f16:
2111 ; CHECK:       # %bb.0:
2112 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2113 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2114 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2115 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2116 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2117 ; CHECK-NEXT:    vmv1r.v v0, v10
2118 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2119 ; CHECK-NEXT:    vmv1r.v v0, v10
2120 ; CHECK-NEXT:    ret
2121   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2122   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2123   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2124   ret <vscale x 8 x i1> %1
2127 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2128 ; CHECK-LABEL: fcmp_ole_fv_nxv8f16:
2129 ; CHECK:       # %bb.0:
2130 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2131 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2132 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2133 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2134 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2135 ; CHECK-NEXT:    vmv1r.v v0, v10
2136 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2137 ; CHECK-NEXT:    vmv1r.v v0, v10
2138 ; CHECK-NEXT:    ret
2139   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2140   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2141   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2142   ret <vscale x 8 x i1> %1
2145 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2146 ; CHECK-LABEL: fcmp_one_vv_nxv8f16:
2147 ; CHECK:       # %bb.0:
2148 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2149 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2150 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2151 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2152 ; CHECK-NEXT:    vmv1r.v v13, v12
2153 ; CHECK-NEXT:    vmv1r.v v0, v12
2154 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
2155 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2156 ; CHECK-NEXT:    vmor.mm v0, v12, v13
2157 ; CHECK-NEXT:    ret
2158   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2159   ret <vscale x 8 x i1> %1
2162 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2163 ; CHECK-LABEL: fcmp_one_vf_nxv8f16:
2164 ; CHECK:       # %bb.0:
2165 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2166 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2167 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2168 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2169 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2170 ; CHECK-NEXT:    vmv1r.v v11, v10
2171 ; CHECK-NEXT:    vmv1r.v v0, v10
2172 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
2173 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2174 ; CHECK-NEXT:    vmor.mm v0, v10, v11
2175 ; CHECK-NEXT:    ret
2176   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2177   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2178   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2179   ret <vscale x 8 x i1> %1
2182 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2183 ; CHECK-LABEL: fcmp_one_fv_nxv8f16:
2184 ; CHECK:       # %bb.0:
2185 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2186 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2187 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2188 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2189 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2190 ; CHECK-NEXT:    vmv1r.v v11, v10
2191 ; CHECK-NEXT:    vmv1r.v v0, v10
2192 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
2193 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2194 ; CHECK-NEXT:    vmor.mm v0, v10, v11
2195 ; CHECK-NEXT:    ret
2196   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2197   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2198   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2199   ret <vscale x 8 x i1> %1
2202 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2203 ; CHECK-LABEL: fcmp_ord_vv_nxv8f16:
2204 ; CHECK:       # %bb.0:
2205 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2206 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2207 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2208 ; CHECK-NEXT:    vmand.mm v0, v10, v12
2209 ; CHECK-NEXT:    ret
2210   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2211   ret <vscale x 8 x i1> %1
2214 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2215 ; CHECK-LABEL: fcmp_ord_vf_nxv8f16:
2216 ; CHECK:       # %bb.0:
2217 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2218 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2219 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2220 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2221 ; CHECK-NEXT:    vmand.mm v0, v10, v12
2222 ; CHECK-NEXT:    ret
2223   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2224   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2225   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2226   ret <vscale x 8 x i1> %1
2229 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2230 ; CHECK-LABEL: fcmp_ord_fv_nxv8f16:
2231 ; CHECK:       # %bb.0:
2232 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2233 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2234 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2235 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2236 ; CHECK-NEXT:    vmand.mm v0, v12, v10
2237 ; CHECK-NEXT:    ret
2238   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2239   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2240   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2241   ret <vscale x 8 x i1> %1
2244 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2245 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f16:
2246 ; CHECK:       # %bb.0:
2247 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2248 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2249 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2250 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2251 ; CHECK-NEXT:    vmv1r.v v13, v12
2252 ; CHECK-NEXT:    vmv1r.v v0, v12
2253 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
2254 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2255 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
2256 ; CHECK-NEXT:    ret
2257   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2258   ret <vscale x 8 x i1> %1
2261 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2262 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f16:
2263 ; CHECK:       # %bb.0:
2264 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2265 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2266 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2267 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2268 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2269 ; CHECK-NEXT:    vmv1r.v v11, v10
2270 ; CHECK-NEXT:    vmv1r.v v0, v10
2271 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
2272 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2273 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
2274 ; CHECK-NEXT:    ret
2275   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2276   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2277   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2278   ret <vscale x 8 x i1> %1
2281 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2282 ; CHECK-LABEL: fcmp_ueq_fv_nxv8f16:
2283 ; CHECK:       # %bb.0:
2284 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2285 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2286 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2287 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2288 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2289 ; CHECK-NEXT:    vmv1r.v v11, v10
2290 ; CHECK-NEXT:    vmv1r.v v0, v10
2291 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
2292 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2293 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
2294 ; CHECK-NEXT:    ret
2295   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2296   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2297   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2298   ret <vscale x 8 x i1> %1
2301 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2302 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f16:
2303 ; CHECK:       # %bb.0:
2304 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2305 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2306 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2307 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2308 ; CHECK-NEXT:    vmv1r.v v0, v12
2309 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
2310 ; CHECK-NEXT:    vmnot.m v0, v12
2311 ; CHECK-NEXT:    ret
2312   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2313   ret <vscale x 8 x i1> %1
2316 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2317 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f16:
2318 ; CHECK:       # %bb.0:
2319 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2320 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2321 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2322 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2323 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2324 ; CHECK-NEXT:    vmv1r.v v0, v10
2325 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2326 ; CHECK-NEXT:    vmnot.m v0, v10
2327 ; CHECK-NEXT:    ret
2328   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2329   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2330   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2331   ret <vscale x 8 x i1> %1
2334 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2335 ; CHECK-LABEL: fcmp_ugt_fv_nxv8f16:
2336 ; CHECK:       # %bb.0:
2337 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2338 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2339 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2340 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2341 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2342 ; CHECK-NEXT:    vmv1r.v v0, v10
2343 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2344 ; CHECK-NEXT:    vmnot.m v0, v10
2345 ; CHECK-NEXT:    ret
2346   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2347   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2348   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2349   ret <vscale x 8 x i1> %1
2352 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2353 ; CHECK-LABEL: fcmp_uge_vv_nxv8f16:
2354 ; CHECK:       # %bb.0:
2355 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2356 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2357 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2358 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2359 ; CHECK-NEXT:    vmv1r.v v0, v12
2360 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
2361 ; CHECK-NEXT:    vmnot.m v0, v12
2362 ; CHECK-NEXT:    ret
2363   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
2364   ret <vscale x 8 x i1> %1
2367 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2368 ; CHECK-LABEL: fcmp_uge_vf_nxv8f16:
2369 ; CHECK:       # %bb.0:
2370 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2371 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2372 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2373 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2374 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2375 ; CHECK-NEXT:    vmv1r.v v0, v10
2376 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2377 ; CHECK-NEXT:    vmnot.m v0, v10
2378 ; CHECK-NEXT:    ret
2379   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2380   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2381   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
2382   ret <vscale x 8 x i1> %1
2385 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2386 ; CHECK-LABEL: fcmp_uge_fv_nxv8f16:
2387 ; CHECK:       # %bb.0:
2388 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2389 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2390 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2391 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2392 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2393 ; CHECK-NEXT:    vmv1r.v v0, v10
2394 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2395 ; CHECK-NEXT:    vmnot.m v0, v10
2396 ; CHECK-NEXT:    ret
2397   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2398   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2399   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
2400   ret <vscale x 8 x i1> %1
2403 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2404 ; CHECK-LABEL: fcmp_ult_vv_nxv8f16:
2405 ; CHECK:       # %bb.0:
2406 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2407 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2408 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
2409 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2410 ; CHECK-NEXT:    vmv1r.v v0, v12
2411 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
2412 ; CHECK-NEXT:    vmnot.m v0, v12
2413 ; CHECK-NEXT:    ret
2414   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
2415   ret <vscale x 8 x i1> %1
2418 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2419 ; CHECK-LABEL: fcmp_ult_vf_nxv8f16:
2420 ; CHECK:       # %bb.0:
2421 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2422 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2423 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2424 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2425 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2426 ; CHECK-NEXT:    vmv1r.v v0, v10
2427 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2428 ; CHECK-NEXT:    vmnot.m v0, v10
2429 ; CHECK-NEXT:    ret
2430   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2431   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2432   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
2433   ret <vscale x 8 x i1> %1
2436 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2437 ; CHECK-LABEL: fcmp_ult_fv_nxv8f16:
2438 ; CHECK:       # %bb.0:
2439 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2440 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2441 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2442 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2443 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2444 ; CHECK-NEXT:    vmv1r.v v0, v10
2445 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2446 ; CHECK-NEXT:    vmnot.m v0, v10
2447 ; CHECK-NEXT:    ret
2448   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2449   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2450   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
2451   ret <vscale x 8 x i1> %1
2454 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2455 ; CHECK-LABEL: fcmp_ule_vv_nxv8f16:
2456 ; CHECK:       # %bb.0:
2457 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2458 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2459 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
2460 ; CHECK-NEXT:    vmand.mm v12, v13, v12
2461 ; CHECK-NEXT:    vmv1r.v v0, v12
2462 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2463 ; CHECK-NEXT:    vmnot.m v0, v12
2464 ; CHECK-NEXT:    ret
2465   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
2466   ret <vscale x 8 x i1> %1
2469 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2470 ; CHECK-LABEL: fcmp_ule_vf_nxv8f16:
2471 ; CHECK:       # %bb.0:
2472 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2473 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2474 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2475 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2476 ; CHECK-NEXT:    vmand.mm v10, v12, v10
2477 ; CHECK-NEXT:    vmv1r.v v0, v10
2478 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2479 ; CHECK-NEXT:    vmnot.m v0, v10
2480 ; CHECK-NEXT:    ret
2481   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2482   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2483   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
2484   ret <vscale x 8 x i1> %1
2487 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2488 ; CHECK-LABEL: fcmp_ule_fv_nxv8f16:
2489 ; CHECK:       # %bb.0:
2490 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
2491 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2492 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2493 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2494 ; CHECK-NEXT:    vmand.mm v10, v10, v12
2495 ; CHECK-NEXT:    vmv1r.v v0, v10
2496 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2497 ; CHECK-NEXT:    vmnot.m v0, v10
2498 ; CHECK-NEXT:    ret
2499   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2500   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2501   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
2502   ret <vscale x 8 x i1> %1
2505 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2506 ; CHECK-LABEL: fcmp_une_vv_nxv8f16:
2507 ; CHECK:       # %bb.0:
2508 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2509 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
2510 ; CHECK-NEXT:    ret
2511   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
2512   ret <vscale x 8 x i1> %1
2515 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2516 ; CHECK-LABEL: fcmp_une_vf_nxv8f16:
2517 ; CHECK:       # %bb.0:
2518 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2519 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2520 ; CHECK-NEXT:    ret
2521   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2522   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2523   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
2524   ret <vscale x 8 x i1> %1
2527 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2528 ; CHECK-LABEL: fcmp_une_fv_nxv8f16:
2529 ; CHECK:       # %bb.0:
2530 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2531 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2532 ; CHECK-NEXT:    ret
2533   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2534   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2535   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
2536   ret <vscale x 8 x i1> %1
2539 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp {
2540 ; CHECK-LABEL: fcmp_uno_vv_nxv8f16:
2541 ; CHECK:       # %bb.0:
2542 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2543 ; CHECK-NEXT:    vmfne.vv v12, v10, v10
2544 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
2545 ; CHECK-NEXT:    vmor.mm v0, v10, v12
2546 ; CHECK-NEXT:    ret
2547   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
2548   ret <vscale x 8 x i1> %1
2551 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2552 ; CHECK-LABEL: fcmp_uno_vf_nxv8f16:
2553 ; CHECK:       # %bb.0:
2554 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2555 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2556 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
2557 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
2558 ; CHECK-NEXT:    vmor.mm v0, v10, v12
2559 ; CHECK-NEXT:    ret
2560   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2561   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2562   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
2563   ret <vscale x 8 x i1> %1
2566 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp {
2567 ; CHECK-LABEL: fcmp_uno_fv_nxv8f16:
2568 ; CHECK:       # %bb.0:
2569 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2570 ; CHECK-NEXT:    vfmv.v.f v10, fa0
2571 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
2572 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
2573 ; CHECK-NEXT:    vmor.mm v0, v12, v10
2574 ; CHECK-NEXT:    ret
2575   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2576   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2577   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
2578   ret <vscale x 8 x i1> %1
2581 declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata)
2582 define <vscale x 16 x i1> @fcmp_oeq_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2583 ; CHECK-LABEL: fcmp_oeq_vv_nxv16f16:
2584 ; CHECK:       # %bb.0:
2585 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2586 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
2587 ; CHECK-NEXT:    ret
2588   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2589   ret <vscale x 16 x i1> %1
2592 define <vscale x 16 x i1> @fcmp_oeq_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2593 ; CHECK-LABEL: fcmp_oeq_vf_nxv16f16:
2594 ; CHECK:       # %bb.0:
2595 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2596 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2597 ; CHECK-NEXT:    ret
2598   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2599   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2600   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2601   ret <vscale x 16 x i1> %1
2604 define <vscale x 16 x i1> @fcmp_oeq_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2605 ; CHECK-LABEL: fcmp_oeq_fv_nxv16f16:
2606 ; CHECK:       # %bb.0:
2607 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2608 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2609 ; CHECK-NEXT:    ret
2610   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2611   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2612   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2613   ret <vscale x 16 x i1> %1
2616 define <vscale x 16 x i1> @fcmp_ogt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2617 ; CHECK-LABEL: fcmp_ogt_vv_nxv16f16:
2618 ; CHECK:       # %bb.0:
2619 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2620 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
2621 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
2622 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2623 ; CHECK-NEXT:    vmv1r.v v0, v16
2624 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
2625 ; CHECK-NEXT:    vmv1r.v v0, v16
2626 ; CHECK-NEXT:    ret
2627   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2628   ret <vscale x 16 x i1> %1
2631 define <vscale x 16 x i1> @fcmp_ogt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2632 ; CHECK-LABEL: fcmp_ogt_vf_nxv16f16:
2633 ; CHECK:       # %bb.0:
2634 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2635 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2636 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2637 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2638 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2639 ; CHECK-NEXT:    vmv1r.v v0, v12
2640 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
2641 ; CHECK-NEXT:    vmv1r.v v0, v12
2642 ; CHECK-NEXT:    ret
2643   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2644   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2645   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2646   ret <vscale x 16 x i1> %1
2649 define <vscale x 16 x i1> @fcmp_ogt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2650 ; CHECK-LABEL: fcmp_ogt_fv_nxv16f16:
2651 ; CHECK:       # %bb.0:
2652 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2653 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2654 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2655 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2656 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2657 ; CHECK-NEXT:    vmv1r.v v0, v12
2658 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
2659 ; CHECK-NEXT:    vmv1r.v v0, v12
2660 ; CHECK-NEXT:    ret
2661   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2662   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2663   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2664   ret <vscale x 16 x i1> %1
2667 define <vscale x 16 x i1> @fcmp_oge_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2668 ; CHECK-LABEL: fcmp_oge_vv_nxv16f16:
2669 ; CHECK:       # %bb.0:
2670 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2671 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
2672 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
2673 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2674 ; CHECK-NEXT:    vmv1r.v v0, v16
2675 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
2676 ; CHECK-NEXT:    vmv1r.v v0, v16
2677 ; CHECK-NEXT:    ret
2678   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
2679   ret <vscale x 16 x i1> %1
2682 define <vscale x 16 x i1> @fcmp_oge_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2683 ; CHECK-LABEL: fcmp_oge_vf_nxv16f16:
2684 ; CHECK:       # %bb.0:
2685 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2686 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2687 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2688 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2689 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2690 ; CHECK-NEXT:    vmv1r.v v0, v12
2691 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
2692 ; CHECK-NEXT:    vmv1r.v v0, v12
2693 ; CHECK-NEXT:    ret
2694   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2695   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2696   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2697   ret <vscale x 16 x i1> %1
2700 define <vscale x 16 x i1> @fcmp_oge_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2701 ; CHECK-LABEL: fcmp_oge_fv_nxv16f16:
2702 ; CHECK:       # %bb.0:
2703 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2704 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2705 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2706 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2707 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2708 ; CHECK-NEXT:    vmv1r.v v0, v12
2709 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
2710 ; CHECK-NEXT:    vmv1r.v v0, v12
2711 ; CHECK-NEXT:    ret
2712   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2713   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2714   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2715   ret <vscale x 16 x i1> %1
2718 define <vscale x 16 x i1> @fcmp_olt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2719 ; CHECK-LABEL: fcmp_olt_vv_nxv16f16:
2720 ; CHECK:       # %bb.0:
2721 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2722 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2723 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
2724 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2725 ; CHECK-NEXT:    vmv1r.v v0, v16
2726 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
2727 ; CHECK-NEXT:    vmv1r.v v0, v16
2728 ; CHECK-NEXT:    ret
2729   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2730   ret <vscale x 16 x i1> %1
2733 define <vscale x 16 x i1> @fcmp_olt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2734 ; CHECK-LABEL: fcmp_olt_vf_nxv16f16:
2735 ; CHECK:       # %bb.0:
2736 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2737 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2738 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2739 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2740 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2741 ; CHECK-NEXT:    vmv1r.v v0, v12
2742 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
2743 ; CHECK-NEXT:    vmv1r.v v0, v12
2744 ; CHECK-NEXT:    ret
2745   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2746   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2747   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2748   ret <vscale x 16 x i1> %1
2751 define <vscale x 16 x i1> @fcmp_olt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2752 ; CHECK-LABEL: fcmp_olt_fv_nxv16f16:
2753 ; CHECK:       # %bb.0:
2754 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2755 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2756 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2757 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2758 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2759 ; CHECK-NEXT:    vmv1r.v v0, v12
2760 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
2761 ; CHECK-NEXT:    vmv1r.v v0, v12
2762 ; CHECK-NEXT:    ret
2763   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2764   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2765   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2766   ret <vscale x 16 x i1> %1
2769 define <vscale x 16 x i1> @fcmp_ole_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2770 ; CHECK-LABEL: fcmp_ole_vv_nxv16f16:
2771 ; CHECK:       # %bb.0:
2772 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2773 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2774 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
2775 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2776 ; CHECK-NEXT:    vmv1r.v v0, v16
2777 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
2778 ; CHECK-NEXT:    vmv1r.v v0, v16
2779 ; CHECK-NEXT:    ret
2780   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2781   ret <vscale x 16 x i1> %1
2784 define <vscale x 16 x i1> @fcmp_ole_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2785 ; CHECK-LABEL: fcmp_ole_vf_nxv16f16:
2786 ; CHECK:       # %bb.0:
2787 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2788 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2789 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2790 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2791 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2792 ; CHECK-NEXT:    vmv1r.v v0, v12
2793 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
2794 ; CHECK-NEXT:    vmv1r.v v0, v12
2795 ; CHECK-NEXT:    ret
2796   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2797   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2798   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2799   ret <vscale x 16 x i1> %1
2802 define <vscale x 16 x i1> @fcmp_ole_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2803 ; CHECK-LABEL: fcmp_ole_fv_nxv16f16:
2804 ; CHECK:       # %bb.0:
2805 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2806 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2807 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2808 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2809 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2810 ; CHECK-NEXT:    vmv1r.v v0, v12
2811 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
2812 ; CHECK-NEXT:    vmv1r.v v0, v12
2813 ; CHECK-NEXT:    ret
2814   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2815   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2816   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2817   ret <vscale x 16 x i1> %1
2820 define <vscale x 16 x i1> @fcmp_one_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2821 ; CHECK-LABEL: fcmp_one_vv_nxv16f16:
2822 ; CHECK:       # %bb.0:
2823 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2824 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2825 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
2826 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2827 ; CHECK-NEXT:    vmv1r.v v17, v16
2828 ; CHECK-NEXT:    vmv1r.v v0, v16
2829 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
2830 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
2831 ; CHECK-NEXT:    vmor.mm v0, v16, v17
2832 ; CHECK-NEXT:    ret
2833   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2834   ret <vscale x 16 x i1> %1
2837 define <vscale x 16 x i1> @fcmp_one_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2838 ; CHECK-LABEL: fcmp_one_vf_nxv16f16:
2839 ; CHECK:       # %bb.0:
2840 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2841 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2842 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2843 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2844 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2845 ; CHECK-NEXT:    vmv1r.v v13, v12
2846 ; CHECK-NEXT:    vmv1r.v v0, v12
2847 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
2848 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
2849 ; CHECK-NEXT:    vmor.mm v0, v12, v13
2850 ; CHECK-NEXT:    ret
2851   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2852   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2853   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2854   ret <vscale x 16 x i1> %1
2857 define <vscale x 16 x i1> @fcmp_one_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2858 ; CHECK-LABEL: fcmp_one_fv_nxv16f16:
2859 ; CHECK:       # %bb.0:
2860 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2861 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2862 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2863 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2864 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2865 ; CHECK-NEXT:    vmv1r.v v13, v12
2866 ; CHECK-NEXT:    vmv1r.v v0, v12
2867 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
2868 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
2869 ; CHECK-NEXT:    vmor.mm v0, v12, v13
2870 ; CHECK-NEXT:    ret
2871   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2872   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2873   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2874   ret <vscale x 16 x i1> %1
2877 define <vscale x 16 x i1> @fcmp_ord_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2878 ; CHECK-LABEL: fcmp_ord_vv_nxv16f16:
2879 ; CHECK:       # %bb.0:
2880 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2881 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2882 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2883 ; CHECK-NEXT:    vmand.mm v0, v12, v16
2884 ; CHECK-NEXT:    ret
2885   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2886   ret <vscale x 16 x i1> %1
2889 define <vscale x 16 x i1> @fcmp_ord_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2890 ; CHECK-LABEL: fcmp_ord_vf_nxv16f16:
2891 ; CHECK:       # %bb.0:
2892 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2893 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2894 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2895 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2896 ; CHECK-NEXT:    vmand.mm v0, v12, v16
2897 ; CHECK-NEXT:    ret
2898   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2899   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2900   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2901   ret <vscale x 16 x i1> %1
2904 define <vscale x 16 x i1> @fcmp_ord_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2905 ; CHECK-LABEL: fcmp_ord_fv_nxv16f16:
2906 ; CHECK:       # %bb.0:
2907 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
2908 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2909 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2910 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2911 ; CHECK-NEXT:    vmand.mm v0, v16, v12
2912 ; CHECK-NEXT:    ret
2913   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2914   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2915   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2916   ret <vscale x 16 x i1> %1
2919 define <vscale x 16 x i1> @fcmp_ueq_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2920 ; CHECK-LABEL: fcmp_ueq_vv_nxv16f16:
2921 ; CHECK:       # %bb.0:
2922 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2923 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2924 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
2925 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2926 ; CHECK-NEXT:    vmv1r.v v17, v16
2927 ; CHECK-NEXT:    vmv1r.v v0, v16
2928 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
2929 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
2930 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
2931 ; CHECK-NEXT:    ret
2932   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2933   ret <vscale x 16 x i1> %1
2936 define <vscale x 16 x i1> @fcmp_ueq_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2937 ; CHECK-LABEL: fcmp_ueq_vf_nxv16f16:
2938 ; CHECK:       # %bb.0:
2939 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2940 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2941 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2942 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2943 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2944 ; CHECK-NEXT:    vmv1r.v v13, v12
2945 ; CHECK-NEXT:    vmv1r.v v0, v12
2946 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
2947 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
2948 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
2949 ; CHECK-NEXT:    ret
2950   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2951   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2952   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2953   ret <vscale x 16 x i1> %1
2956 define <vscale x 16 x i1> @fcmp_ueq_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2957 ; CHECK-LABEL: fcmp_ueq_fv_nxv16f16:
2958 ; CHECK:       # %bb.0:
2959 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2960 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2961 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2962 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2963 ; CHECK-NEXT:    vmand.mm v12, v16, v12
2964 ; CHECK-NEXT:    vmv1r.v v13, v12
2965 ; CHECK-NEXT:    vmv1r.v v0, v12
2966 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
2967 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
2968 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
2969 ; CHECK-NEXT:    ret
2970   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2971   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2972   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2973   ret <vscale x 16 x i1> %1
2976 define <vscale x 16 x i1> @fcmp_ugt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
2977 ; CHECK-LABEL: fcmp_ugt_vv_nxv16f16:
2978 ; CHECK:       # %bb.0:
2979 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2980 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
2981 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
2982 ; CHECK-NEXT:    vmand.mm v16, v17, v16
2983 ; CHECK-NEXT:    vmv1r.v v0, v16
2984 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
2985 ; CHECK-NEXT:    vmnot.m v0, v16
2986 ; CHECK-NEXT:    ret
2987   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2988   ret <vscale x 16 x i1> %1
2991 define <vscale x 16 x i1> @fcmp_ugt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
2992 ; CHECK-LABEL: fcmp_ugt_vf_nxv16f16:
2993 ; CHECK:       # %bb.0:
2994 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
2995 ; CHECK-NEXT:    vfmv.v.f v12, fa0
2996 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
2997 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2998 ; CHECK-NEXT:    vmand.mm v12, v12, v16
2999 ; CHECK-NEXT:    vmv1r.v v0, v12
3000 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3001 ; CHECK-NEXT:    vmnot.m v0, v12
3002 ; CHECK-NEXT:    ret
3003   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3004   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3005   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3006   ret <vscale x 16 x i1> %1
3009 define <vscale x 16 x i1> @fcmp_ugt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3010 ; CHECK-LABEL: fcmp_ugt_fv_nxv16f16:
3011 ; CHECK:       # %bb.0:
3012 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3013 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3014 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3015 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3016 ; CHECK-NEXT:    vmand.mm v12, v16, v12
3017 ; CHECK-NEXT:    vmv1r.v v0, v12
3018 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3019 ; CHECK-NEXT:    vmnot.m v0, v12
3020 ; CHECK-NEXT:    ret
3021   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3022   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3023   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3024   ret <vscale x 16 x i1> %1
3027 define <vscale x 16 x i1> @fcmp_uge_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
3028 ; CHECK-LABEL: fcmp_uge_vv_nxv16f16:
3029 ; CHECK:       # %bb.0:
3030 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3031 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3032 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3033 ; CHECK-NEXT:    vmand.mm v16, v17, v16
3034 ; CHECK-NEXT:    vmv1r.v v0, v16
3035 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
3036 ; CHECK-NEXT:    vmnot.m v0, v16
3037 ; CHECK-NEXT:    ret
3038   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
3039   ret <vscale x 16 x i1> %1
3042 define <vscale x 16 x i1> @fcmp_uge_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3043 ; CHECK-LABEL: fcmp_uge_vf_nxv16f16:
3044 ; CHECK:       # %bb.0:
3045 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3046 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3047 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3048 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3049 ; CHECK-NEXT:    vmand.mm v12, v12, v16
3050 ; CHECK-NEXT:    vmv1r.v v0, v12
3051 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3052 ; CHECK-NEXT:    vmnot.m v0, v12
3053 ; CHECK-NEXT:    ret
3054   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3055   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3056   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3057   ret <vscale x 16 x i1> %1
3060 define <vscale x 16 x i1> @fcmp_uge_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3061 ; CHECK-LABEL: fcmp_uge_fv_nxv16f16:
3062 ; CHECK:       # %bb.0:
3063 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3064 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3065 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3066 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3067 ; CHECK-NEXT:    vmand.mm v12, v16, v12
3068 ; CHECK-NEXT:    vmv1r.v v0, v12
3069 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3070 ; CHECK-NEXT:    vmnot.m v0, v12
3071 ; CHECK-NEXT:    ret
3072   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3073   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3074   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3075   ret <vscale x 16 x i1> %1
3078 define <vscale x 16 x i1> @fcmp_ult_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
3079 ; CHECK-LABEL: fcmp_ult_vv_nxv16f16:
3080 ; CHECK:       # %bb.0:
3081 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3082 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3083 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3084 ; CHECK-NEXT:    vmand.mm v16, v17, v16
3085 ; CHECK-NEXT:    vmv1r.v v0, v16
3086 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
3087 ; CHECK-NEXT:    vmnot.m v0, v16
3088 ; CHECK-NEXT:    ret
3089   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3090   ret <vscale x 16 x i1> %1
3093 define <vscale x 16 x i1> @fcmp_ult_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3094 ; CHECK-LABEL: fcmp_ult_vf_nxv16f16:
3095 ; CHECK:       # %bb.0:
3096 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3097 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3098 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3099 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3100 ; CHECK-NEXT:    vmand.mm v12, v16, v12
3101 ; CHECK-NEXT:    vmv1r.v v0, v12
3102 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3103 ; CHECK-NEXT:    vmnot.m v0, v12
3104 ; CHECK-NEXT:    ret
3105   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3106   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3107   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3108   ret <vscale x 16 x i1> %1
3111 define <vscale x 16 x i1> @fcmp_ult_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3112 ; CHECK-LABEL: fcmp_ult_fv_nxv16f16:
3113 ; CHECK:       # %bb.0:
3114 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3115 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3116 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3117 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3118 ; CHECK-NEXT:    vmand.mm v12, v12, v16
3119 ; CHECK-NEXT:    vmv1r.v v0, v12
3120 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3121 ; CHECK-NEXT:    vmnot.m v0, v12
3122 ; CHECK-NEXT:    ret
3123   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3124   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3125   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3126   ret <vscale x 16 x i1> %1
3129 define <vscale x 16 x i1> @fcmp_ule_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
3130 ; CHECK-LABEL: fcmp_ule_vv_nxv16f16:
3131 ; CHECK:       # %bb.0:
3132 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3133 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3134 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3135 ; CHECK-NEXT:    vmand.mm v16, v17, v16
3136 ; CHECK-NEXT:    vmv1r.v v0, v16
3137 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
3138 ; CHECK-NEXT:    vmnot.m v0, v16
3139 ; CHECK-NEXT:    ret
3140   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3141   ret <vscale x 16 x i1> %1
3144 define <vscale x 16 x i1> @fcmp_ule_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3145 ; CHECK-LABEL: fcmp_ule_vf_nxv16f16:
3146 ; CHECK:       # %bb.0:
3147 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3148 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3149 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3150 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3151 ; CHECK-NEXT:    vmand.mm v12, v16, v12
3152 ; CHECK-NEXT:    vmv1r.v v0, v12
3153 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3154 ; CHECK-NEXT:    vmnot.m v0, v12
3155 ; CHECK-NEXT:    ret
3156   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3157   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3158   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3159   ret <vscale x 16 x i1> %1
3162 define <vscale x 16 x i1> @fcmp_ule_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3163 ; CHECK-LABEL: fcmp_ule_fv_nxv16f16:
3164 ; CHECK:       # %bb.0:
3165 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
3166 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3167 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3168 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3169 ; CHECK-NEXT:    vmand.mm v12, v12, v16
3170 ; CHECK-NEXT:    vmv1r.v v0, v12
3171 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3172 ; CHECK-NEXT:    vmnot.m v0, v12
3173 ; CHECK-NEXT:    ret
3174   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3175   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3176   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3177   ret <vscale x 16 x i1> %1
3180 define <vscale x 16 x i1> @fcmp_une_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
3181 ; CHECK-LABEL: fcmp_une_vv_nxv16f16:
3182 ; CHECK:       # %bb.0:
3183 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3184 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
3185 ; CHECK-NEXT:    ret
3186   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3187   ret <vscale x 16 x i1> %1
3190 define <vscale x 16 x i1> @fcmp_une_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3191 ; CHECK-LABEL: fcmp_une_vf_nxv16f16:
3192 ; CHECK:       # %bb.0:
3193 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3194 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3195 ; CHECK-NEXT:    ret
3196   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3197   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3198   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3199   ret <vscale x 16 x i1> %1
3202 define <vscale x 16 x i1> @fcmp_une_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3203 ; CHECK-LABEL: fcmp_une_fv_nxv16f16:
3204 ; CHECK:       # %bb.0:
3205 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3206 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3207 ; CHECK-NEXT:    ret
3208   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3209   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3210   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3211   ret <vscale x 16 x i1> %1
3214 define <vscale x 16 x i1> @fcmp_uno_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp {
3215 ; CHECK-LABEL: fcmp_uno_vv_nxv16f16:
3216 ; CHECK:       # %bb.0:
3217 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3218 ; CHECK-NEXT:    vmfne.vv v16, v12, v12
3219 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
3220 ; CHECK-NEXT:    vmor.mm v0, v12, v16
3221 ; CHECK-NEXT:    ret
3222   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3223   ret <vscale x 16 x i1> %1
3226 define <vscale x 16 x i1> @fcmp_uno_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3227 ; CHECK-LABEL: fcmp_uno_vf_nxv16f16:
3228 ; CHECK:       # %bb.0:
3229 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3230 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3231 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3232 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
3233 ; CHECK-NEXT:    vmor.mm v0, v12, v16
3234 ; CHECK-NEXT:    ret
3235   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3236   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3237   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3238   ret <vscale x 16 x i1> %1
3241 define <vscale x 16 x i1> @fcmp_uno_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp {
3242 ; CHECK-LABEL: fcmp_uno_fv_nxv16f16:
3243 ; CHECK:       # %bb.0:
3244 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
3245 ; CHECK-NEXT:    vfmv.v.f v12, fa0
3246 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3247 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
3248 ; CHECK-NEXT:    vmor.mm v0, v16, v12
3249 ; CHECK-NEXT:    ret
3250   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3251   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3252   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3253   ret <vscale x 16 x i1> %1
3256 declare <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata)
3257 define <vscale x 32 x i1> @fcmp_oeq_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3258 ; CHECK-LABEL: fcmp_oeq_vv_nxv32f16:
3259 ; CHECK:       # %bb.0:
3260 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3261 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
3262 ; CHECK-NEXT:    ret
3263   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3264   ret <vscale x 32 x i1> %1
3267 define <vscale x 32 x i1> @fcmp_oeq_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3268 ; CHECK-LABEL: fcmp_oeq_vf_nxv32f16:
3269 ; CHECK:       # %bb.0:
3270 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3271 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3272 ; CHECK-NEXT:    ret
3273   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3274   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3275   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3276   ret <vscale x 32 x i1> %1
3279 define <vscale x 32 x i1> @fcmp_oeq_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3280 ; CHECK-LABEL: fcmp_oeq_fv_nxv32f16:
3281 ; CHECK:       # %bb.0:
3282 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3283 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3284 ; CHECK-NEXT:    ret
3285   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3286   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3287   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3288   ret <vscale x 32 x i1> %1
3291 define <vscale x 32 x i1> @fcmp_ogt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3292 ; CHECK-LABEL: fcmp_ogt_vv_nxv32f16:
3293 ; CHECK:       # %bb.0:
3294 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3295 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
3296 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
3297 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3298 ; CHECK-NEXT:    vmv1r.v v0, v24
3299 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
3300 ; CHECK-NEXT:    vmv1r.v v0, v24
3301 ; CHECK-NEXT:    ret
3302   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3303   ret <vscale x 32 x i1> %1
3306 define <vscale x 32 x i1> @fcmp_ogt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3307 ; CHECK-LABEL: fcmp_ogt_vf_nxv32f16:
3308 ; CHECK:       # %bb.0:
3309 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3310 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3311 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3312 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3313 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3314 ; CHECK-NEXT:    vmv1r.v v0, v16
3315 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3316 ; CHECK-NEXT:    vmv1r.v v0, v16
3317 ; CHECK-NEXT:    ret
3318   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3319   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3320   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3321   ret <vscale x 32 x i1> %1
3324 define <vscale x 32 x i1> @fcmp_ogt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3325 ; CHECK-LABEL: fcmp_ogt_fv_nxv32f16:
3326 ; CHECK:       # %bb.0:
3327 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3328 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3329 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3330 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3331 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3332 ; CHECK-NEXT:    vmv1r.v v0, v16
3333 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3334 ; CHECK-NEXT:    vmv1r.v v0, v16
3335 ; CHECK-NEXT:    ret
3336   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3337   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3338   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3339   ret <vscale x 32 x i1> %1
3342 define <vscale x 32 x i1> @fcmp_oge_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3343 ; CHECK-LABEL: fcmp_oge_vv_nxv32f16:
3344 ; CHECK:       # %bb.0:
3345 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3346 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
3347 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
3348 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3349 ; CHECK-NEXT:    vmv1r.v v0, v24
3350 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
3351 ; CHECK-NEXT:    vmv1r.v v0, v24
3352 ; CHECK-NEXT:    ret
3353   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
3354   ret <vscale x 32 x i1> %1
3357 define <vscale x 32 x i1> @fcmp_oge_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3358 ; CHECK-LABEL: fcmp_oge_vf_nxv32f16:
3359 ; CHECK:       # %bb.0:
3360 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3361 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3362 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3363 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3364 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3365 ; CHECK-NEXT:    vmv1r.v v0, v16
3366 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
3367 ; CHECK-NEXT:    vmv1r.v v0, v16
3368 ; CHECK-NEXT:    ret
3369   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3370   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3371   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
3372   ret <vscale x 32 x i1> %1
3375 define <vscale x 32 x i1> @fcmp_oge_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3376 ; CHECK-LABEL: fcmp_oge_fv_nxv32f16:
3377 ; CHECK:       # %bb.0:
3378 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3379 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3380 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3381 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3382 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3383 ; CHECK-NEXT:    vmv1r.v v0, v16
3384 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
3385 ; CHECK-NEXT:    vmv1r.v v0, v16
3386 ; CHECK-NEXT:    ret
3387   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3388   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3389   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
3390   ret <vscale x 32 x i1> %1
3393 define <vscale x 32 x i1> @fcmp_olt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3394 ; CHECK-LABEL: fcmp_olt_vv_nxv32f16:
3395 ; CHECK:       # %bb.0:
3396 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3397 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3398 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3399 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3400 ; CHECK-NEXT:    vmv1r.v v0, v24
3401 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
3402 ; CHECK-NEXT:    vmv1r.v v0, v24
3403 ; CHECK-NEXT:    ret
3404   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
3405   ret <vscale x 32 x i1> %1
3408 define <vscale x 32 x i1> @fcmp_olt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3409 ; CHECK-LABEL: fcmp_olt_vf_nxv32f16:
3410 ; CHECK:       # %bb.0:
3411 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3412 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3413 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3414 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3415 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3416 ; CHECK-NEXT:    vmv1r.v v0, v16
3417 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3418 ; CHECK-NEXT:    vmv1r.v v0, v16
3419 ; CHECK-NEXT:    ret
3420   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3421   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3422   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
3423   ret <vscale x 32 x i1> %1
3426 define <vscale x 32 x i1> @fcmp_olt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3427 ; CHECK-LABEL: fcmp_olt_fv_nxv32f16:
3428 ; CHECK:       # %bb.0:
3429 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3430 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3431 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3432 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3433 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3434 ; CHECK-NEXT:    vmv1r.v v0, v16
3435 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3436 ; CHECK-NEXT:    vmv1r.v v0, v16
3437 ; CHECK-NEXT:    ret
3438   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3439   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3440   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
3441   ret <vscale x 32 x i1> %1
3444 define <vscale x 32 x i1> @fcmp_ole_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3445 ; CHECK-LABEL: fcmp_ole_vv_nxv32f16:
3446 ; CHECK:       # %bb.0:
3447 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3448 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3449 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3450 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3451 ; CHECK-NEXT:    vmv1r.v v0, v24
3452 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
3453 ; CHECK-NEXT:    vmv1r.v v0, v24
3454 ; CHECK-NEXT:    ret
3455   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
3456   ret <vscale x 32 x i1> %1
3459 define <vscale x 32 x i1> @fcmp_ole_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3460 ; CHECK-LABEL: fcmp_ole_vf_nxv32f16:
3461 ; CHECK:       # %bb.0:
3462 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3463 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3464 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3465 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3466 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3467 ; CHECK-NEXT:    vmv1r.v v0, v16
3468 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
3469 ; CHECK-NEXT:    vmv1r.v v0, v16
3470 ; CHECK-NEXT:    ret
3471   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3472   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3473   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
3474   ret <vscale x 32 x i1> %1
3477 define <vscale x 32 x i1> @fcmp_ole_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3478 ; CHECK-LABEL: fcmp_ole_fv_nxv32f16:
3479 ; CHECK:       # %bb.0:
3480 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3481 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3482 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3483 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3484 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3485 ; CHECK-NEXT:    vmv1r.v v0, v16
3486 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
3487 ; CHECK-NEXT:    vmv1r.v v0, v16
3488 ; CHECK-NEXT:    ret
3489   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3490   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3491   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
3492   ret <vscale x 32 x i1> %1
3495 define <vscale x 32 x i1> @fcmp_one_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3496 ; CHECK-LABEL: fcmp_one_vv_nxv32f16:
3497 ; CHECK:       # %bb.0:
3498 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3499 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3500 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3501 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3502 ; CHECK-NEXT:    vmv1r.v v25, v24
3503 ; CHECK-NEXT:    vmv1r.v v0, v24
3504 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
3505 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
3506 ; CHECK-NEXT:    vmor.mm v0, v24, v25
3507 ; CHECK-NEXT:    ret
3508   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
3509   ret <vscale x 32 x i1> %1
3512 define <vscale x 32 x i1> @fcmp_one_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3513 ; CHECK-LABEL: fcmp_one_vf_nxv32f16:
3514 ; CHECK:       # %bb.0:
3515 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3516 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3517 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3518 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3519 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3520 ; CHECK-NEXT:    vmv1r.v v17, v16
3521 ; CHECK-NEXT:    vmv1r.v v0, v16
3522 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
3523 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3524 ; CHECK-NEXT:    vmor.mm v0, v16, v17
3525 ; CHECK-NEXT:    ret
3526   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3527   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3528   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
3529   ret <vscale x 32 x i1> %1
3532 define <vscale x 32 x i1> @fcmp_one_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3533 ; CHECK-LABEL: fcmp_one_fv_nxv32f16:
3534 ; CHECK:       # %bb.0:
3535 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3536 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3537 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3538 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3539 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3540 ; CHECK-NEXT:    vmv1r.v v17, v16
3541 ; CHECK-NEXT:    vmv1r.v v0, v16
3542 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
3543 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3544 ; CHECK-NEXT:    vmor.mm v0, v16, v17
3545 ; CHECK-NEXT:    ret
3546   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3547   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3548   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
3549   ret <vscale x 32 x i1> %1
3552 define <vscale x 32 x i1> @fcmp_ord_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3553 ; CHECK-LABEL: fcmp_ord_vv_nxv32f16:
3554 ; CHECK:       # %bb.0:
3555 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3556 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3557 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3558 ; CHECK-NEXT:    vmand.mm v0, v16, v24
3559 ; CHECK-NEXT:    ret
3560   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
3561   ret <vscale x 32 x i1> %1
3564 define <vscale x 32 x i1> @fcmp_ord_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3565 ; CHECK-LABEL: fcmp_ord_vf_nxv32f16:
3566 ; CHECK:       # %bb.0:
3567 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3568 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3569 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3570 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3571 ; CHECK-NEXT:    vmand.mm v0, v16, v24
3572 ; CHECK-NEXT:    ret
3573   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3574   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3575   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
3576   ret <vscale x 32 x i1> %1
3579 define <vscale x 32 x i1> @fcmp_ord_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3580 ; CHECK-LABEL: fcmp_ord_fv_nxv32f16:
3581 ; CHECK:       # %bb.0:
3582 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3583 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3584 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3585 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3586 ; CHECK-NEXT:    vmand.mm v0, v24, v16
3587 ; CHECK-NEXT:    ret
3588   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3589   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3590   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
3591   ret <vscale x 32 x i1> %1
3594 define <vscale x 32 x i1> @fcmp_ueq_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3595 ; CHECK-LABEL: fcmp_ueq_vv_nxv32f16:
3596 ; CHECK:       # %bb.0:
3597 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3598 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3599 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3600 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3601 ; CHECK-NEXT:    vmv1r.v v25, v24
3602 ; CHECK-NEXT:    vmv1r.v v0, v24
3603 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
3604 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
3605 ; CHECK-NEXT:    vmnor.mm v0, v24, v25
3606 ; CHECK-NEXT:    ret
3607   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3608   ret <vscale x 32 x i1> %1
3611 define <vscale x 32 x i1> @fcmp_ueq_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3612 ; CHECK-LABEL: fcmp_ueq_vf_nxv32f16:
3613 ; CHECK:       # %bb.0:
3614 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3615 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3616 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3617 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3618 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3619 ; CHECK-NEXT:    vmv1r.v v17, v16
3620 ; CHECK-NEXT:    vmv1r.v v0, v16
3621 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
3622 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3623 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
3624 ; CHECK-NEXT:    ret
3625   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3626   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3627   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3628   ret <vscale x 32 x i1> %1
3631 define <vscale x 32 x i1> @fcmp_ueq_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3632 ; CHECK-LABEL: fcmp_ueq_fv_nxv32f16:
3633 ; CHECK:       # %bb.0:
3634 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3635 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3636 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3637 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3638 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3639 ; CHECK-NEXT:    vmv1r.v v17, v16
3640 ; CHECK-NEXT:    vmv1r.v v0, v16
3641 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
3642 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3643 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
3644 ; CHECK-NEXT:    ret
3645   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3646   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3647   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3648   ret <vscale x 32 x i1> %1
3651 define <vscale x 32 x i1> @fcmp_ugt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3652 ; CHECK-LABEL: fcmp_ugt_vv_nxv32f16:
3653 ; CHECK:       # %bb.0:
3654 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3655 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3656 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3657 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3658 ; CHECK-NEXT:    vmv1r.v v0, v24
3659 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
3660 ; CHECK-NEXT:    vmnot.m v0, v24
3661 ; CHECK-NEXT:    ret
3662   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3663   ret <vscale x 32 x i1> %1
3666 define <vscale x 32 x i1> @fcmp_ugt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3667 ; CHECK-LABEL: fcmp_ugt_vf_nxv32f16:
3668 ; CHECK:       # %bb.0:
3669 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3670 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3671 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3672 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3673 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3674 ; CHECK-NEXT:    vmv1r.v v0, v16
3675 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
3676 ; CHECK-NEXT:    vmnot.m v0, v16
3677 ; CHECK-NEXT:    ret
3678   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3679   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3680   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3681   ret <vscale x 32 x i1> %1
3684 define <vscale x 32 x i1> @fcmp_ugt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3685 ; CHECK-LABEL: fcmp_ugt_fv_nxv32f16:
3686 ; CHECK:       # %bb.0:
3687 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3688 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3689 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3690 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3691 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3692 ; CHECK-NEXT:    vmv1r.v v0, v16
3693 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
3694 ; CHECK-NEXT:    vmnot.m v0, v16
3695 ; CHECK-NEXT:    ret
3696   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3697   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3698   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3699   ret <vscale x 32 x i1> %1
3702 define <vscale x 32 x i1> @fcmp_uge_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3703 ; CHECK-LABEL: fcmp_uge_vv_nxv32f16:
3704 ; CHECK:       # %bb.0:
3705 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3706 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3707 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
3708 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3709 ; CHECK-NEXT:    vmv1r.v v0, v24
3710 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
3711 ; CHECK-NEXT:    vmnot.m v0, v24
3712 ; CHECK-NEXT:    ret
3713   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
3714   ret <vscale x 32 x i1> %1
3717 define <vscale x 32 x i1> @fcmp_uge_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3718 ; CHECK-LABEL: fcmp_uge_vf_nxv32f16:
3719 ; CHECK:       # %bb.0:
3720 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3721 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3722 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3723 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3724 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3725 ; CHECK-NEXT:    vmv1r.v v0, v16
3726 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3727 ; CHECK-NEXT:    vmnot.m v0, v16
3728 ; CHECK-NEXT:    ret
3729   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3730   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3731   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3732   ret <vscale x 32 x i1> %1
3735 define <vscale x 32 x i1> @fcmp_uge_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3736 ; CHECK-LABEL: fcmp_uge_fv_nxv32f16:
3737 ; CHECK:       # %bb.0:
3738 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3739 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3740 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3741 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3742 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3743 ; CHECK-NEXT:    vmv1r.v v0, v16
3744 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3745 ; CHECK-NEXT:    vmnot.m v0, v16
3746 ; CHECK-NEXT:    ret
3747   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3748   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3749   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3750   ret <vscale x 32 x i1> %1
3753 define <vscale x 32 x i1> @fcmp_ult_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3754 ; CHECK-LABEL: fcmp_ult_vv_nxv32f16:
3755 ; CHECK:       # %bb.0:
3756 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3757 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
3758 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
3759 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3760 ; CHECK-NEXT:    vmv1r.v v0, v24
3761 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
3762 ; CHECK-NEXT:    vmnot.m v0, v24
3763 ; CHECK-NEXT:    ret
3764   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3765   ret <vscale x 32 x i1> %1
3768 define <vscale x 32 x i1> @fcmp_ult_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3769 ; CHECK-LABEL: fcmp_ult_vf_nxv32f16:
3770 ; CHECK:       # %bb.0:
3771 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3772 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3773 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3774 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3775 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3776 ; CHECK-NEXT:    vmv1r.v v0, v16
3777 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
3778 ; CHECK-NEXT:    vmnot.m v0, v16
3779 ; CHECK-NEXT:    ret
3780   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3781   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3782   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3783   ret <vscale x 32 x i1> %1
3786 define <vscale x 32 x i1> @fcmp_ult_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3787 ; CHECK-LABEL: fcmp_ult_fv_nxv32f16:
3788 ; CHECK:       # %bb.0:
3789 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3790 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3791 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3792 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3793 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3794 ; CHECK-NEXT:    vmv1r.v v0, v16
3795 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
3796 ; CHECK-NEXT:    vmnot.m v0, v16
3797 ; CHECK-NEXT:    ret
3798   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3799   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3800   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3801   ret <vscale x 32 x i1> %1
3804 define <vscale x 32 x i1> @fcmp_ule_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3805 ; CHECK-LABEL: fcmp_ule_vv_nxv32f16:
3806 ; CHECK:       # %bb.0:
3807 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3808 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
3809 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
3810 ; CHECK-NEXT:    vmand.mm v24, v25, v24
3811 ; CHECK-NEXT:    vmv1r.v v0, v24
3812 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
3813 ; CHECK-NEXT:    vmnot.m v0, v24
3814 ; CHECK-NEXT:    ret
3815   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3816   ret <vscale x 32 x i1> %1
3819 define <vscale x 32 x i1> @fcmp_ule_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3820 ; CHECK-LABEL: fcmp_ule_vf_nxv32f16:
3821 ; CHECK:       # %bb.0:
3822 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3823 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3824 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3825 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3826 ; CHECK-NEXT:    vmand.mm v16, v24, v16
3827 ; CHECK-NEXT:    vmv1r.v v0, v16
3828 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
3829 ; CHECK-NEXT:    vmnot.m v0, v16
3830 ; CHECK-NEXT:    ret
3831   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3832   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3833   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3834   ret <vscale x 32 x i1> %1
3837 define <vscale x 32 x i1> @fcmp_ule_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3838 ; CHECK-LABEL: fcmp_ule_fv_nxv32f16:
3839 ; CHECK:       # %bb.0:
3840 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
3841 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3842 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3843 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3844 ; CHECK-NEXT:    vmand.mm v16, v16, v24
3845 ; CHECK-NEXT:    vmv1r.v v0, v16
3846 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
3847 ; CHECK-NEXT:    vmnot.m v0, v16
3848 ; CHECK-NEXT:    ret
3849   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3850   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3851   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3852   ret <vscale x 32 x i1> %1
3855 define <vscale x 32 x i1> @fcmp_une_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3856 ; CHECK-LABEL: fcmp_une_vv_nxv32f16:
3857 ; CHECK:       # %bb.0:
3858 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3859 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
3860 ; CHECK-NEXT:    ret
3861   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3862   ret <vscale x 32 x i1> %1
3865 define <vscale x 32 x i1> @fcmp_une_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3866 ; CHECK-LABEL: fcmp_une_vf_nxv32f16:
3867 ; CHECK:       # %bb.0:
3868 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3869 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3870 ; CHECK-NEXT:    ret
3871   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3872   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3873   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3874   ret <vscale x 32 x i1> %1
3877 define <vscale x 32 x i1> @fcmp_une_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3878 ; CHECK-LABEL: fcmp_une_fv_nxv32f16:
3879 ; CHECK:       # %bb.0:
3880 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3881 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3882 ; CHECK-NEXT:    ret
3883   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3884   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3885   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3886   ret <vscale x 32 x i1> %1
3889 define <vscale x 32 x i1> @fcmp_uno_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp {
3890 ; CHECK-LABEL: fcmp_uno_vv_nxv32f16:
3891 ; CHECK:       # %bb.0:
3892 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3893 ; CHECK-NEXT:    vmfne.vv v24, v16, v16
3894 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
3895 ; CHECK-NEXT:    vmor.mm v0, v16, v24
3896 ; CHECK-NEXT:    ret
3897   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3898   ret <vscale x 32 x i1> %1
3901 define <vscale x 32 x i1> @fcmp_uno_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3902 ; CHECK-LABEL: fcmp_uno_vf_nxv32f16:
3903 ; CHECK:       # %bb.0:
3904 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3905 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3906 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
3907 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
3908 ; CHECK-NEXT:    vmor.mm v0, v16, v24
3909 ; CHECK-NEXT:    ret
3910   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3911   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3912   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3913   ret <vscale x 32 x i1> %1
3916 define <vscale x 32 x i1> @fcmp_uno_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp {
3917 ; CHECK-LABEL: fcmp_uno_fv_nxv32f16:
3918 ; CHECK:       # %bb.0:
3919 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
3920 ; CHECK-NEXT:    vfmv.v.f v16, fa0
3921 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
3922 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
3923 ; CHECK-NEXT:    vmor.mm v0, v24, v16
3924 ; CHECK-NEXT:    ret
3925   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3926   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3927   %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3928   ret <vscale x 32 x i1> %1
3931 declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata)
3932 define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
3933 ; CHECK-LABEL: fcmp_oeq_vv_nxv1f32:
3934 ; CHECK:       # %bb.0:
3935 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
3936 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
3937 ; CHECK-NEXT:    ret
3938   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3939   ret <vscale x 1 x i1> %1
3942 define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
3943 ; CHECK-LABEL: fcmp_oeq_vf_nxv1f32:
3944 ; CHECK:       # %bb.0:
3945 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
3946 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3947 ; CHECK-NEXT:    ret
3948   %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3949   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3950   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3951   ret <vscale x 1 x i1> %1
3954 define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
3955 ; CHECK-LABEL: fcmp_oeq_fv_nxv1f32:
3956 ; CHECK:       # %bb.0:
3957 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
3958 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3959 ; CHECK-NEXT:    ret
3960   %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3961   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3962   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3963   ret <vscale x 1 x i1> %1
3966 define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
3967 ; CHECK-LABEL: fcmp_ogt_vv_nxv1f32:
3968 ; CHECK:       # %bb.0:
3969 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3976   ret <vscale x 1 x i1> %1
3979 define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
3980 ; CHECK-LABEL: fcmp_ogt_vf_nxv1f32:
3981 ; CHECK:       # %bb.0:
3982 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
3983 ; CHECK-NEXT:    vfmv.v.f v9, fa0
3984 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
3985 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
3990   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3991   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3992   ret <vscale x 1 x i1> %1
3995 define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
3996 ; CHECK-LABEL: fcmp_ogt_fv_nxv1f32:
3997 ; CHECK:       # %bb.0:
3998 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
3999 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4000 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4001 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4006   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4007   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4008   ret <vscale x 1 x i1> %1
4011 define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4012 ; CHECK-LABEL: fcmp_oge_vv_nxv1f32:
4013 ; CHECK:       # %bb.0:
4014 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4021   ret <vscale x 1 x i1> %1
4024 define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4025 ; CHECK-LABEL: fcmp_oge_vf_nxv1f32:
4026 ; CHECK:       # %bb.0:
4027 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4028 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4029 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4030 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4035   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4036   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4037   ret <vscale x 1 x i1> %1
4040 define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4041 ; CHECK-LABEL: fcmp_oge_fv_nxv1f32:
4042 ; CHECK:       # %bb.0:
4043 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4044 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4045 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4046 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4051   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4052   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4053   ret <vscale x 1 x i1> %1
4056 define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4057 ; CHECK-LABEL: fcmp_olt_vv_nxv1f32:
4058 ; CHECK:       # %bb.0:
4059 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4066   ret <vscale x 1 x i1> %1
4069 define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4070 ; CHECK-LABEL: fcmp_olt_vf_nxv1f32:
4071 ; CHECK:       # %bb.0:
4072 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4073 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4074 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4075 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4080   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4081   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4082   ret <vscale x 1 x i1> %1
4085 define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4086 ; CHECK-LABEL: fcmp_olt_fv_nxv1f32:
4087 ; CHECK:       # %bb.0:
4088 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4089 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4090 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4091 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4096   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4097   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4098   ret <vscale x 1 x i1> %1
4101 define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4102 ; CHECK-LABEL: fcmp_ole_vv_nxv1f32:
4103 ; CHECK:       # %bb.0:
4104 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4111   ret <vscale x 1 x i1> %1
4114 define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4115 ; CHECK-LABEL: fcmp_ole_vf_nxv1f32:
4116 ; CHECK:       # %bb.0:
4117 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4118 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4119 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4120 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4125   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4126   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4127   ret <vscale x 1 x i1> %1
4130 define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4131 ; CHECK-LABEL: fcmp_ole_fv_nxv1f32:
4132 ; CHECK:       # %bb.0:
4133 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4134 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4135 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4136 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4141   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4142   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4143   ret <vscale x 1 x i1> %1
4146 define <vscale x 1 x i1> @fcmp_one_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4147 ; CHECK-LABEL: fcmp_one_vv_nxv1f32:
4148 ; CHECK:       # %bb.0:
4149 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4159   ret <vscale x 1 x i1> %1
4162 define <vscale x 1 x i1> @fcmp_one_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4163 ; CHECK-LABEL: fcmp_one_vf_nxv1f32:
4164 ; CHECK:       # %bb.0:
4165 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4166 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4167 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4168 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4176   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4177   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4178   ret <vscale x 1 x i1> %1
4181 define <vscale x 1 x i1> @fcmp_one_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4182 ; CHECK-LABEL: fcmp_one_fv_nxv1f32:
4183 ; CHECK:       # %bb.0:
4184 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4185 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4186 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4187 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4195   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4196   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4197   ret <vscale x 1 x i1> %1
4200 define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4201 ; CHECK-LABEL: fcmp_ord_vv_nxv1f32:
4202 ; CHECK:       # %bb.0:
4203 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4209   ret <vscale x 1 x i1> %1
4212 define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4213 ; CHECK-LABEL: fcmp_ord_vf_nxv1f32:
4214 ; CHECK:       # %bb.0:
4215 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4216 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x float> poison, float %b, i32 0
4222   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4223   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4224   ret <vscale x 1 x i1> %1
4227 define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4228 ; CHECK-LABEL: fcmp_ord_fv_nxv1f32:
4229 ; CHECK:       # %bb.0:
4230 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4231 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x float> poison, float %b, i32 0
4237   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4238   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4239   ret <vscale x 1 x i1> %1
4242 define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4243 ; CHECK-LABEL: fcmp_ueq_vv_nxv1f32:
4244 ; CHECK:       # %bb.0:
4245 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4255   ret <vscale x 1 x i1> %1
4258 define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4259 ; CHECK-LABEL: fcmp_ueq_vf_nxv1f32:
4260 ; CHECK:       # %bb.0:
4261 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4262 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4263 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4264 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4272   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4273   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4274   ret <vscale x 1 x i1> %1
4277 define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4278 ; CHECK-LABEL: fcmp_ueq_fv_nxv1f32:
4279 ; CHECK:       # %bb.0:
4280 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4281 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4282 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4283 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4291   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4292   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4293   ret <vscale x 1 x i1> %1
4296 define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4297 ; CHECK-LABEL: fcmp_ugt_vv_nxv1f32:
4298 ; CHECK:       # %bb.0:
4299 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4307   ret <vscale x 1 x i1> %1
4310 define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4311 ; CHECK-LABEL: fcmp_ugt_vf_nxv1f32:
4312 ; CHECK:       # %bb.0:
4313 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4314 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4315 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4316 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4322   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4323   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4324   ret <vscale x 1 x i1> %1
4327 define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4328 ; CHECK-LABEL: fcmp_ugt_fv_nxv1f32:
4329 ; CHECK:       # %bb.0:
4330 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4331 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4332 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4333 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4339   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4340   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4341   ret <vscale x 1 x i1> %1
4344 define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4345 ; CHECK-LABEL: fcmp_uge_vv_nxv1f32:
4346 ; CHECK:       # %bb.0:
4347 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4355   ret <vscale x 1 x i1> %1
4358 define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4359 ; CHECK-LABEL: fcmp_uge_vf_nxv1f32:
4360 ; CHECK:       # %bb.0:
4361 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4362 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4363 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4364 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4370   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4371   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
4372   ret <vscale x 1 x i1> %1
4375 define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4376 ; CHECK-LABEL: fcmp_uge_fv_nxv1f32:
4377 ; CHECK:       # %bb.0:
4378 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4379 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4380 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4381 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4387   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4388   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
4389   ret <vscale x 1 x i1> %1
4392 define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4393 ; CHECK-LABEL: fcmp_ult_vv_nxv1f32:
4394 ; CHECK:       # %bb.0:
4395 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
4403   ret <vscale x 1 x i1> %1
4406 define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4407 ; CHECK-LABEL: fcmp_ult_vf_nxv1f32:
4408 ; CHECK:       # %bb.0:
4409 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4410 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4411 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4412 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4418   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4419   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
4420   ret <vscale x 1 x i1> %1
4423 define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4424 ; CHECK-LABEL: fcmp_ult_fv_nxv1f32:
4425 ; CHECK:       # %bb.0:
4426 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4427 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4428 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4429 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4435   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4436   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
4437   ret <vscale x 1 x i1> %1
4440 define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4441 ; CHECK-LABEL: fcmp_ule_vv_nxv1f32:
4442 ; CHECK:       # %bb.0:
4443 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
4451   ret <vscale x 1 x i1> %1
4454 define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4455 ; CHECK-LABEL: fcmp_ule_vf_nxv1f32:
4456 ; CHECK:       # %bb.0:
4457 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4458 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4459 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4460 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4466   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4467   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
4468   ret <vscale x 1 x i1> %1
4471 define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4472 ; CHECK-LABEL: fcmp_ule_fv_nxv1f32:
4473 ; CHECK:       # %bb.0:
4474 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
4475 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4476 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4477 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 1 x float> poison, float %b, i32 0
4483   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4484   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
4485   ret <vscale x 1 x i1> %1
4488 define <vscale x 1 x i1> @fcmp_une_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4489 ; CHECK-LABEL: fcmp_une_vv_nxv1f32:
4490 ; CHECK:       # %bb.0:
4491 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4492 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
4493 ; CHECK-NEXT:    ret
4494   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
4495   ret <vscale x 1 x i1> %1
4498 define <vscale x 1 x i1> @fcmp_une_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4499 ; CHECK-LABEL: fcmp_une_vf_nxv1f32:
4500 ; CHECK:       # %bb.0:
4501 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4502 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4503 ; CHECK-NEXT:    ret
4504   %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4505   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4506   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
4507   ret <vscale x 1 x i1> %1
4510 define <vscale x 1 x i1> @fcmp_une_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4511 ; CHECK-LABEL: fcmp_une_fv_nxv1f32:
4512 ; CHECK:       # %bb.0:
4513 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4514 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4515 ; CHECK-NEXT:    ret
4516   %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4517   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4518   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
4519   ret <vscale x 1 x i1> %1
4522 define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp {
4523 ; CHECK-LABEL: fcmp_uno_vv_nxv1f32:
4524 ; CHECK:       # %bb.0:
4525 ; CHECK-NEXT:    vsetvli a0, zero, 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 <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
4531   ret <vscale x 1 x i1> %1
4534 define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4535 ; CHECK-LABEL: fcmp_uno_vf_nxv1f32:
4536 ; CHECK:       # %bb.0:
4537 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4538 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x float> poison, float %b, i32 0
4544   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4545   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
4546   ret <vscale x 1 x i1> %1
4549 define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp {
4550 ; CHECK-LABEL: fcmp_uno_fv_nxv1f32:
4551 ; CHECK:       # %bb.0:
4552 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
4553 ; CHECK-NEXT:    vfmv.v.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 <vscale x 1 x float> poison, float %b, i32 0
4559   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4560   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
4561   ret <vscale x 1 x i1> %1
4564 declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata)
4565 define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4566 ; CHECK-LABEL: fcmp_oeq_vv_nxv2f32:
4567 ; CHECK:       # %bb.0:
4568 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
4569 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
4570 ; CHECK-NEXT:    ret
4571   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4572   ret <vscale x 2 x i1> %1
4575 define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4576 ; CHECK-LABEL: fcmp_oeq_vf_nxv2f32:
4577 ; CHECK:       # %bb.0:
4578 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
4579 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4580 ; CHECK-NEXT:    ret
4581   %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4582   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4583   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4584   ret <vscale x 2 x i1> %1
4587 define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4588 ; CHECK-LABEL: fcmp_oeq_fv_nxv2f32:
4589 ; CHECK:       # %bb.0:
4590 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
4591 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4592 ; CHECK-NEXT:    ret
4593   %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4594   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4595   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4596   ret <vscale x 2 x i1> %1
4599 define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4600 ; CHECK-LABEL: fcmp_ogt_vv_nxv2f32:
4601 ; CHECK:       # %bb.0:
4602 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4609   ret <vscale x 2 x i1> %1
4612 define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4613 ; CHECK-LABEL: fcmp_ogt_vf_nxv2f32:
4614 ; CHECK:       # %bb.0:
4615 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4616 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4617 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4618 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4623   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4624   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4625   ret <vscale x 2 x i1> %1
4628 define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4629 ; CHECK-LABEL: fcmp_ogt_fv_nxv2f32:
4630 ; CHECK:       # %bb.0:
4631 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4632 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4633 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4634 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4639   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4640   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4641   ret <vscale x 2 x i1> %1
4644 define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4645 ; CHECK-LABEL: fcmp_oge_vv_nxv2f32:
4646 ; CHECK:       # %bb.0:
4647 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4654   ret <vscale x 2 x i1> %1
4657 define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4658 ; CHECK-LABEL: fcmp_oge_vf_nxv2f32:
4659 ; CHECK:       # %bb.0:
4660 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4661 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4662 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4663 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4668   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4669   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4670   ret <vscale x 2 x i1> %1
4673 define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4674 ; CHECK-LABEL: fcmp_oge_fv_nxv2f32:
4675 ; CHECK:       # %bb.0:
4676 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4677 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4678 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4679 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4684   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4685   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4686   ret <vscale x 2 x i1> %1
4689 define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4690 ; CHECK-LABEL: fcmp_olt_vv_nxv2f32:
4691 ; CHECK:       # %bb.0:
4692 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4699   ret <vscale x 2 x i1> %1
4702 define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4703 ; CHECK-LABEL: fcmp_olt_vf_nxv2f32:
4704 ; CHECK:       # %bb.0:
4705 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4706 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4707 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4708 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4713   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4714   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4715   ret <vscale x 2 x i1> %1
4718 define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4719 ; CHECK-LABEL: fcmp_olt_fv_nxv2f32:
4720 ; CHECK:       # %bb.0:
4721 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4722 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4723 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4724 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4729   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4730   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4731   ret <vscale x 2 x i1> %1
4734 define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4735 ; CHECK-LABEL: fcmp_ole_vv_nxv2f32:
4736 ; CHECK:       # %bb.0:
4737 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4744   ret <vscale x 2 x i1> %1
4747 define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4748 ; CHECK-LABEL: fcmp_ole_vf_nxv2f32:
4749 ; CHECK:       # %bb.0:
4750 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4751 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4752 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4753 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4758   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4759   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4760   ret <vscale x 2 x i1> %1
4763 define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4764 ; CHECK-LABEL: fcmp_ole_fv_nxv2f32:
4765 ; CHECK:       # %bb.0:
4766 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4767 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4768 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4769 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4774   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4775   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4776   ret <vscale x 2 x i1> %1
4779 define <vscale x 2 x i1> @fcmp_one_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4780 ; CHECK-LABEL: fcmp_one_vv_nxv2f32:
4781 ; CHECK:       # %bb.0:
4782 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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:    vmv.v.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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4792   ret <vscale x 2 x i1> %1
4795 define <vscale x 2 x i1> @fcmp_one_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4796 ; CHECK-LABEL: fcmp_one_vf_nxv2f32:
4797 ; CHECK:       # %bb.0:
4798 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4799 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4800 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4801 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4802 ; CHECK-NEXT:    vmand.mm v0, v10, v9
4803 ; CHECK-NEXT:    vmv.v.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 <vscale x 2 x float> poison, float %b, i32 0
4809   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4810   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4811   ret <vscale x 2 x i1> %1
4814 define <vscale x 2 x i1> @fcmp_one_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4815 ; CHECK-LABEL: fcmp_one_fv_nxv2f32:
4816 ; CHECK:       # %bb.0:
4817 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4818 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4819 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4820 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4821 ; CHECK-NEXT:    vmand.mm v0, v9, v10
4822 ; CHECK-NEXT:    vmv.v.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 <vscale x 2 x float> poison, float %b, i32 0
4828   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4829   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4830   ret <vscale x 2 x i1> %1
4833 define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4834 ; CHECK-LABEL: fcmp_ord_vv_nxv2f32:
4835 ; CHECK:       # %bb.0:
4836 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4842   ret <vscale x 2 x i1> %1
4845 define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4846 ; CHECK-LABEL: fcmp_ord_vf_nxv2f32:
4847 ; CHECK:       # %bb.0:
4848 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x float> poison, float %b, i32 0
4855   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4856   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4857   ret <vscale x 2 x i1> %1
4860 define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4861 ; CHECK-LABEL: fcmp_ord_fv_nxv2f32:
4862 ; CHECK:       # %bb.0:
4863 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x float> poison, float %b, i32 0
4870   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4871   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4872   ret <vscale x 2 x i1> %1
4875 define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4876 ; CHECK-LABEL: fcmp_ueq_vv_nxv2f32:
4877 ; CHECK:       # %bb.0:
4878 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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:    vmv.v.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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4888   ret <vscale x 2 x i1> %1
4891 define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4892 ; CHECK-LABEL: fcmp_ueq_vf_nxv2f32:
4893 ; CHECK:       # %bb.0:
4894 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4895 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4896 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4897 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4898 ; CHECK-NEXT:    vmand.mm v0, v10, v9
4899 ; CHECK-NEXT:    vmv.v.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 <vscale x 2 x float> poison, float %b, i32 0
4905   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4906   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4907   ret <vscale x 2 x i1> %1
4910 define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4911 ; CHECK-LABEL: fcmp_ueq_fv_nxv2f32:
4912 ; CHECK:       # %bb.0:
4913 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4914 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4915 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4916 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4917 ; CHECK-NEXT:    vmand.mm v0, v9, v10
4918 ; CHECK-NEXT:    vmv.v.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 <vscale x 2 x float> poison, float %b, i32 0
4924   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4925   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4926   ret <vscale x 2 x i1> %1
4929 define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4930 ; CHECK-LABEL: fcmp_ugt_vv_nxv2f32:
4931 ; CHECK:       # %bb.0:
4932 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4940   ret <vscale x 2 x i1> %1
4943 define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4944 ; CHECK-LABEL: fcmp_ugt_vf_nxv2f32:
4945 ; CHECK:       # %bb.0:
4946 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4947 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4948 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4949 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4955   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4956   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4957   ret <vscale x 2 x i1> %1
4960 define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4961 ; CHECK-LABEL: fcmp_ugt_fv_nxv2f32:
4962 ; CHECK:       # %bb.0:
4963 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4964 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4965 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4966 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
4972   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4973   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4974   ret <vscale x 2 x i1> %1
4977 define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
4978 ; CHECK-LABEL: fcmp_uge_vv_nxv2f32:
4979 ; CHECK:       # %bb.0:
4980 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4988   ret <vscale x 2 x i1> %1
4991 define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
4992 ; CHECK-LABEL: fcmp_uge_vf_nxv2f32:
4993 ; CHECK:       # %bb.0:
4994 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
4995 ; CHECK-NEXT:    vfmv.v.f v9, fa0
4996 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4997 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5003   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5004   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5005   ret <vscale x 2 x i1> %1
5008 define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5009 ; CHECK-LABEL: fcmp_uge_fv_nxv2f32:
5010 ; CHECK:       # %bb.0:
5011 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
5012 ; CHECK-NEXT:    vfmv.v.f v9, fa0
5013 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5014 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5020   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5021   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5022   ret <vscale x 2 x i1> %1
5025 define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
5026 ; CHECK-LABEL: fcmp_ult_vv_nxv2f32:
5027 ; CHECK:       # %bb.0:
5028 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5036   ret <vscale x 2 x i1> %1
5039 define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5040 ; CHECK-LABEL: fcmp_ult_vf_nxv2f32:
5041 ; CHECK:       # %bb.0:
5042 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
5043 ; CHECK-NEXT:    vfmv.v.f v9, fa0
5044 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5045 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5051   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5052   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5053   ret <vscale x 2 x i1> %1
5056 define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5057 ; CHECK-LABEL: fcmp_ult_fv_nxv2f32:
5058 ; CHECK:       # %bb.0:
5059 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
5060 ; CHECK-NEXT:    vfmv.v.f v9, fa0
5061 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5062 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5068   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5069   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5070   ret <vscale x 2 x i1> %1
5073 define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
5074 ; CHECK-LABEL: fcmp_ule_vv_nxv2f32:
5075 ; CHECK:       # %bb.0:
5076 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5084   ret <vscale x 2 x i1> %1
5087 define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5088 ; CHECK-LABEL: fcmp_ule_vf_nxv2f32:
5089 ; CHECK:       # %bb.0:
5090 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
5091 ; CHECK-NEXT:    vfmv.v.f v9, fa0
5092 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5093 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5099   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5100   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5101   ret <vscale x 2 x i1> %1
5104 define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5105 ; CHECK-LABEL: fcmp_ule_fv_nxv2f32:
5106 ; CHECK:       # %bb.0:
5107 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
5108 ; CHECK-NEXT:    vfmv.v.f v9, fa0
5109 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5110 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
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 <vscale x 2 x float> poison, float %b, i32 0
5116   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5117   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5118   ret <vscale x 2 x i1> %1
5121 define <vscale x 2 x i1> @fcmp_une_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
5122 ; CHECK-LABEL: fcmp_une_vv_nxv2f32:
5123 ; CHECK:       # %bb.0:
5124 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
5125 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
5126 ; CHECK-NEXT:    ret
5127   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5128   ret <vscale x 2 x i1> %1
5131 define <vscale x 2 x i1> @fcmp_une_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5132 ; CHECK-LABEL: fcmp_une_vf_nxv2f32:
5133 ; CHECK:       # %bb.0:
5134 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
5135 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5136 ; CHECK-NEXT:    ret
5137   %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
5138   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5139   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5140   ret <vscale x 2 x i1> %1
5143 define <vscale x 2 x i1> @fcmp_une_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5144 ; CHECK-LABEL: fcmp_une_fv_nxv2f32:
5145 ; CHECK:       # %bb.0:
5146 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
5147 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5148 ; CHECK-NEXT:    ret
5149   %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
5150   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5151   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5152   ret <vscale x 2 x i1> %1
5155 define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp {
5156 ; CHECK-LABEL: fcmp_uno_vv_nxv2f32:
5157 ; CHECK:       # %bb.0:
5158 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5164   ret <vscale x 2 x i1> %1
5167 define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5168 ; CHECK-LABEL: fcmp_uno_vf_nxv2f32:
5169 ; CHECK:       # %bb.0:
5170 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x float> poison, float %b, i32 0
5177   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5178   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5179   ret <vscale x 2 x i1> %1
5182 define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp {
5183 ; CHECK-LABEL: fcmp_uno_fv_nxv2f32:
5184 ; CHECK:       # %bb.0:
5185 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, 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 <vscale x 2 x float> poison, float %b, i32 0
5192   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
5193   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5194   ret <vscale x 2 x i1> %1
5197 declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata)
5198 define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5199 ; CHECK-LABEL: fcmp_oeq_vv_nxv4f32:
5200 ; CHECK:       # %bb.0:
5201 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5202 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
5203 ; CHECK-NEXT:    ret
5204   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5205   ret <vscale x 4 x i1> %1
5208 define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5209 ; CHECK-LABEL: fcmp_oeq_vf_nxv4f32:
5210 ; CHECK:       # %bb.0:
5211 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5212 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5213 ; CHECK-NEXT:    ret
5214   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5215   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5216   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5217   ret <vscale x 4 x i1> %1
5220 define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5221 ; CHECK-LABEL: fcmp_oeq_fv_nxv4f32:
5222 ; CHECK:       # %bb.0:
5223 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5224 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5225 ; CHECK-NEXT:    ret
5226   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5227   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5228   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5229   ret <vscale x 4 x i1> %1
5232 define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5233 ; CHECK-LABEL: fcmp_ogt_vv_nxv4f32:
5234 ; CHECK:       # %bb.0:
5235 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5236 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5237 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5238 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5239 ; CHECK-NEXT:    vmv1r.v v0, v12
5240 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
5241 ; CHECK-NEXT:    vmv1r.v v0, v12
5242 ; CHECK-NEXT:    ret
5243   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5244   ret <vscale x 4 x i1> %1
5247 define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5248 ; CHECK-LABEL: fcmp_ogt_vf_nxv4f32:
5249 ; CHECK:       # %bb.0:
5250 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5251 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5252 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5253 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5254 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5255 ; CHECK-NEXT:    vmv1r.v v0, v10
5256 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5257 ; CHECK-NEXT:    vmv1r.v v0, v10
5258 ; CHECK-NEXT:    ret
5259   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5260   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5261   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5262   ret <vscale x 4 x i1> %1
5265 define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5266 ; CHECK-LABEL: fcmp_ogt_fv_nxv4f32:
5267 ; CHECK:       # %bb.0:
5268 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5269 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5270 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5271 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5272 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5273 ; CHECK-NEXT:    vmv1r.v v0, v10
5274 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5275 ; CHECK-NEXT:    vmv1r.v v0, v10
5276 ; CHECK-NEXT:    ret
5277   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5278   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5279   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5280   ret <vscale x 4 x i1> %1
5283 define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5284 ; CHECK-LABEL: fcmp_oge_vv_nxv4f32:
5285 ; CHECK:       # %bb.0:
5286 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5287 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5288 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5289 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5290 ; CHECK-NEXT:    vmv1r.v v0, v12
5291 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
5292 ; CHECK-NEXT:    vmv1r.v v0, v12
5293 ; CHECK-NEXT:    ret
5294   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5295   ret <vscale x 4 x i1> %1
5298 define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5299 ; CHECK-LABEL: fcmp_oge_vf_nxv4f32:
5300 ; CHECK:       # %bb.0:
5301 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5302 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5303 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5304 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5305 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5306 ; CHECK-NEXT:    vmv1r.v v0, v10
5307 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
5308 ; CHECK-NEXT:    vmv1r.v v0, v10
5309 ; CHECK-NEXT:    ret
5310   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5311   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5312   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5313   ret <vscale x 4 x i1> %1
5316 define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5317 ; CHECK-LABEL: fcmp_oge_fv_nxv4f32:
5318 ; CHECK:       # %bb.0:
5319 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5320 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5321 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5322 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5323 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5324 ; CHECK-NEXT:    vmv1r.v v0, v10
5325 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
5326 ; CHECK-NEXT:    vmv1r.v v0, v10
5327 ; CHECK-NEXT:    ret
5328   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5329   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5330   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
5331   ret <vscale x 4 x i1> %1
5334 define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5335 ; CHECK-LABEL: fcmp_olt_vv_nxv4f32:
5336 ; CHECK:       # %bb.0:
5337 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5338 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5339 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5340 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5341 ; CHECK-NEXT:    vmv1r.v v0, v12
5342 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
5343 ; CHECK-NEXT:    vmv1r.v v0, v12
5344 ; CHECK-NEXT:    ret
5345   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
5346   ret <vscale x 4 x i1> %1
5349 define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5350 ; CHECK-LABEL: fcmp_olt_vf_nxv4f32:
5351 ; CHECK:       # %bb.0:
5352 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5353 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5354 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5355 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5356 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5357 ; CHECK-NEXT:    vmv1r.v v0, v10
5358 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5359 ; CHECK-NEXT:    vmv1r.v v0, v10
5360 ; CHECK-NEXT:    ret
5361   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5362   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5363   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
5364   ret <vscale x 4 x i1> %1
5367 define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5368 ; CHECK-LABEL: fcmp_olt_fv_nxv4f32:
5369 ; CHECK:       # %bb.0:
5370 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5371 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5372 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5373 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5374 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5375 ; CHECK-NEXT:    vmv1r.v v0, v10
5376 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5377 ; CHECK-NEXT:    vmv1r.v v0, v10
5378 ; CHECK-NEXT:    ret
5379   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5380   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5381   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
5382   ret <vscale x 4 x i1> %1
5385 define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5386 ; CHECK-LABEL: fcmp_ole_vv_nxv4f32:
5387 ; CHECK:       # %bb.0:
5388 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5389 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5390 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5391 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5392 ; CHECK-NEXT:    vmv1r.v v0, v12
5393 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
5394 ; CHECK-NEXT:    vmv1r.v v0, v12
5395 ; CHECK-NEXT:    ret
5396   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
5397   ret <vscale x 4 x i1> %1
5400 define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5401 ; CHECK-LABEL: fcmp_ole_vf_nxv4f32:
5402 ; CHECK:       # %bb.0:
5403 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5404 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5405 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5406 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5407 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5408 ; CHECK-NEXT:    vmv1r.v v0, v10
5409 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
5410 ; CHECK-NEXT:    vmv1r.v v0, v10
5411 ; CHECK-NEXT:    ret
5412   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5413   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5414   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
5415   ret <vscale x 4 x i1> %1
5418 define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5419 ; CHECK-LABEL: fcmp_ole_fv_nxv4f32:
5420 ; CHECK:       # %bb.0:
5421 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5422 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5423 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5424 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5425 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5426 ; CHECK-NEXT:    vmv1r.v v0, v10
5427 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
5428 ; CHECK-NEXT:    vmv1r.v v0, v10
5429 ; CHECK-NEXT:    ret
5430   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5431   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5432   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
5433   ret <vscale x 4 x i1> %1
5436 define <vscale x 4 x i1> @fcmp_one_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5437 ; CHECK-LABEL: fcmp_one_vv_nxv4f32:
5438 ; CHECK:       # %bb.0:
5439 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5440 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5441 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5442 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5443 ; CHECK-NEXT:    vmv1r.v v13, v12
5444 ; CHECK-NEXT:    vmv1r.v v0, v12
5445 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
5446 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
5447 ; CHECK-NEXT:    vmor.mm v0, v12, v13
5448 ; CHECK-NEXT:    ret
5449   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
5450   ret <vscale x 4 x i1> %1
5453 define <vscale x 4 x i1> @fcmp_one_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5454 ; CHECK-LABEL: fcmp_one_vf_nxv4f32:
5455 ; CHECK:       # %bb.0:
5456 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5457 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5458 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5459 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5460 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5461 ; CHECK-NEXT:    vmv1r.v v11, v10
5462 ; CHECK-NEXT:    vmv1r.v v0, v10
5463 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
5464 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5465 ; CHECK-NEXT:    vmor.mm v0, v10, v11
5466 ; CHECK-NEXT:    ret
5467   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5468   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5469   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
5470   ret <vscale x 4 x i1> %1
5473 define <vscale x 4 x i1> @fcmp_one_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5474 ; CHECK-LABEL: fcmp_one_fv_nxv4f32:
5475 ; CHECK:       # %bb.0:
5476 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5477 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5478 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5479 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5480 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5481 ; CHECK-NEXT:    vmv1r.v v11, v10
5482 ; CHECK-NEXT:    vmv1r.v v0, v10
5483 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
5484 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5485 ; CHECK-NEXT:    vmor.mm v0, v10, v11
5486 ; CHECK-NEXT:    ret
5487   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5488   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5489   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
5490   ret <vscale x 4 x i1> %1
5493 define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5494 ; CHECK-LABEL: fcmp_ord_vv_nxv4f32:
5495 ; CHECK:       # %bb.0:
5496 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5497 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5498 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5499 ; CHECK-NEXT:    vmand.mm v0, v10, v12
5500 ; CHECK-NEXT:    ret
5501   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
5502   ret <vscale x 4 x i1> %1
5505 define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5506 ; CHECK-LABEL: fcmp_ord_vf_nxv4f32:
5507 ; CHECK:       # %bb.0:
5508 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5509 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5510 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5511 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5512 ; CHECK-NEXT:    vmand.mm v0, v10, v12
5513 ; CHECK-NEXT:    ret
5514   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5515   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5516   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
5517   ret <vscale x 4 x i1> %1
5520 define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5521 ; CHECK-LABEL: fcmp_ord_fv_nxv4f32:
5522 ; CHECK:       # %bb.0:
5523 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5524 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5525 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5526 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5527 ; CHECK-NEXT:    vmand.mm v0, v12, v10
5528 ; CHECK-NEXT:    ret
5529   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5530   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5531   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
5532   ret <vscale x 4 x i1> %1
5535 define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5536 ; CHECK-LABEL: fcmp_ueq_vv_nxv4f32:
5537 ; CHECK:       # %bb.0:
5538 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5539 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5540 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5541 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5542 ; CHECK-NEXT:    vmv1r.v v13, v12
5543 ; CHECK-NEXT:    vmv1r.v v0, v12
5544 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
5545 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
5546 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
5547 ; CHECK-NEXT:    ret
5548   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5549   ret <vscale x 4 x i1> %1
5552 define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5553 ; CHECK-LABEL: fcmp_ueq_vf_nxv4f32:
5554 ; CHECK:       # %bb.0:
5555 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5556 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5557 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5558 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5559 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5560 ; CHECK-NEXT:    vmv1r.v v11, v10
5561 ; CHECK-NEXT:    vmv1r.v v0, v10
5562 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
5563 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5564 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
5565 ; CHECK-NEXT:    ret
5566   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5567   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5568   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5569   ret <vscale x 4 x i1> %1
5572 define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5573 ; CHECK-LABEL: fcmp_ueq_fv_nxv4f32:
5574 ; CHECK:       # %bb.0:
5575 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5576 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5577 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5578 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5579 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5580 ; CHECK-NEXT:    vmv1r.v v11, v10
5581 ; CHECK-NEXT:    vmv1r.v v0, v10
5582 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
5583 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5584 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
5585 ; CHECK-NEXT:    ret
5586   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5587   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5588   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5589   ret <vscale x 4 x i1> %1
5592 define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5593 ; CHECK-LABEL: fcmp_ugt_vv_nxv4f32:
5594 ; CHECK:       # %bb.0:
5595 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5596 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5597 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5598 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5599 ; CHECK-NEXT:    vmv1r.v v0, v12
5600 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
5601 ; CHECK-NEXT:    vmnot.m v0, v12
5602 ; CHECK-NEXT:    ret
5603   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5604   ret <vscale x 4 x i1> %1
5607 define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5608 ; CHECK-LABEL: fcmp_ugt_vf_nxv4f32:
5609 ; CHECK:       # %bb.0:
5610 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5611 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5612 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5613 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5614 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5615 ; CHECK-NEXT:    vmv1r.v v0, v10
5616 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
5617 ; CHECK-NEXT:    vmnot.m v0, v10
5618 ; CHECK-NEXT:    ret
5619   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5620   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5621   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5622   ret <vscale x 4 x i1> %1
5625 define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5626 ; CHECK-LABEL: fcmp_ugt_fv_nxv4f32:
5627 ; CHECK:       # %bb.0:
5628 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5629 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5630 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5631 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5632 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5633 ; CHECK-NEXT:    vmv1r.v v0, v10
5634 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
5635 ; CHECK-NEXT:    vmnot.m v0, v10
5636 ; CHECK-NEXT:    ret
5637   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5638   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5639   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5640   ret <vscale x 4 x i1> %1
5643 define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5644 ; CHECK-LABEL: fcmp_uge_vv_nxv4f32:
5645 ; CHECK:       # %bb.0:
5646 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5647 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5648 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5649 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5650 ; CHECK-NEXT:    vmv1r.v v0, v12
5651 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
5652 ; CHECK-NEXT:    vmnot.m v0, v12
5653 ; CHECK-NEXT:    ret
5654   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
5655   ret <vscale x 4 x i1> %1
5658 define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5659 ; CHECK-LABEL: fcmp_uge_vf_nxv4f32:
5660 ; CHECK:       # %bb.0:
5661 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5662 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5663 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5664 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5665 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5666 ; CHECK-NEXT:    vmv1r.v v0, v10
5667 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5668 ; CHECK-NEXT:    vmnot.m v0, v10
5669 ; CHECK-NEXT:    ret
5670   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5671   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5672   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5673   ret <vscale x 4 x i1> %1
5676 define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5677 ; CHECK-LABEL: fcmp_uge_fv_nxv4f32:
5678 ; CHECK:       # %bb.0:
5679 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5680 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5681 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5682 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5683 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5684 ; CHECK-NEXT:    vmv1r.v v0, v10
5685 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5686 ; CHECK-NEXT:    vmnot.m v0, v10
5687 ; CHECK-NEXT:    ret
5688   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5689   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5690   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5691   ret <vscale x 4 x i1> %1
5694 define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5695 ; CHECK-LABEL: fcmp_ult_vv_nxv4f32:
5696 ; CHECK:       # %bb.0:
5697 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5698 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5699 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5700 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5701 ; CHECK-NEXT:    vmv1r.v v0, v12
5702 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
5703 ; CHECK-NEXT:    vmnot.m v0, v12
5704 ; CHECK-NEXT:    ret
5705   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5706   ret <vscale x 4 x i1> %1
5709 define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5710 ; CHECK-LABEL: fcmp_ult_vf_nxv4f32:
5711 ; CHECK:       # %bb.0:
5712 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5713 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5714 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5715 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5716 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5717 ; CHECK-NEXT:    vmv1r.v v0, v10
5718 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
5719 ; CHECK-NEXT:    vmnot.m v0, v10
5720 ; CHECK-NEXT:    ret
5721   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5722   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5723   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5724   ret <vscale x 4 x i1> %1
5727 define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5728 ; CHECK-LABEL: fcmp_ult_fv_nxv4f32:
5729 ; CHECK:       # %bb.0:
5730 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5731 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5732 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5733 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5734 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5735 ; CHECK-NEXT:    vmv1r.v v0, v10
5736 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
5737 ; CHECK-NEXT:    vmnot.m v0, v10
5738 ; CHECK-NEXT:    ret
5739   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5740   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5741   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5742   ret <vscale x 4 x i1> %1
5745 define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5746 ; CHECK-LABEL: fcmp_ule_vv_nxv4f32:
5747 ; CHECK:       # %bb.0:
5748 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5749 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5750 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5751 ; CHECK-NEXT:    vmand.mm v12, v13, v12
5752 ; CHECK-NEXT:    vmv1r.v v0, v12
5753 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
5754 ; CHECK-NEXT:    vmnot.m v0, v12
5755 ; CHECK-NEXT:    ret
5756   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5757   ret <vscale x 4 x i1> %1
5760 define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5761 ; CHECK-LABEL: fcmp_ule_vf_nxv4f32:
5762 ; CHECK:       # %bb.0:
5763 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5764 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5765 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5766 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5767 ; CHECK-NEXT:    vmand.mm v10, v12, v10
5768 ; CHECK-NEXT:    vmv1r.v v0, v10
5769 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5770 ; CHECK-NEXT:    vmnot.m v0, v10
5771 ; CHECK-NEXT:    ret
5772   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5773   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5774   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5775   ret <vscale x 4 x i1> %1
5778 define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5779 ; CHECK-LABEL: fcmp_ule_fv_nxv4f32:
5780 ; CHECK:       # %bb.0:
5781 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
5782 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5783 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5784 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5785 ; CHECK-NEXT:    vmand.mm v10, v10, v12
5786 ; CHECK-NEXT:    vmv1r.v v0, v10
5787 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5788 ; CHECK-NEXT:    vmnot.m v0, v10
5789 ; CHECK-NEXT:    ret
5790   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5791   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5792   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5793   ret <vscale x 4 x i1> %1
5796 define <vscale x 4 x i1> @fcmp_une_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5797 ; CHECK-LABEL: fcmp_une_vv_nxv4f32:
5798 ; CHECK:       # %bb.0:
5799 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5800 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
5801 ; CHECK-NEXT:    ret
5802   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5803   ret <vscale x 4 x i1> %1
5806 define <vscale x 4 x i1> @fcmp_une_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5807 ; CHECK-LABEL: fcmp_une_vf_nxv4f32:
5808 ; CHECK:       # %bb.0:
5809 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5810 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5811 ; CHECK-NEXT:    ret
5812   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5813   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5814   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5815   ret <vscale x 4 x i1> %1
5818 define <vscale x 4 x i1> @fcmp_une_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5819 ; CHECK-LABEL: fcmp_une_fv_nxv4f32:
5820 ; CHECK:       # %bb.0:
5821 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5822 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5823 ; CHECK-NEXT:    ret
5824   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5825   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5826   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5827   ret <vscale x 4 x i1> %1
5830 define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp {
5831 ; CHECK-LABEL: fcmp_uno_vv_nxv4f32:
5832 ; CHECK:       # %bb.0:
5833 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5834 ; CHECK-NEXT:    vmfne.vv v12, v10, v10
5835 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
5836 ; CHECK-NEXT:    vmor.mm v0, v10, v12
5837 ; CHECK-NEXT:    ret
5838   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5839   ret <vscale x 4 x i1> %1
5842 define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5843 ; CHECK-LABEL: fcmp_uno_vf_nxv4f32:
5844 ; CHECK:       # %bb.0:
5845 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5846 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5847 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
5848 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
5849 ; CHECK-NEXT:    vmor.mm v0, v10, v12
5850 ; CHECK-NEXT:    ret
5851   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5852   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5853   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5854   ret <vscale x 4 x i1> %1
5857 define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp {
5858 ; CHECK-LABEL: fcmp_uno_fv_nxv4f32:
5859 ; CHECK:       # %bb.0:
5860 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
5861 ; CHECK-NEXT:    vfmv.v.f v10, fa0
5862 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
5863 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
5864 ; CHECK-NEXT:    vmor.mm v0, v12, v10
5865 ; CHECK-NEXT:    ret
5866   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5867   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5868   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5869   ret <vscale x 4 x i1> %1
5872 declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata)
5873 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
5874 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f32:
5875 ; CHECK:       # %bb.0:
5876 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
5877 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
5878 ; CHECK-NEXT:    ret
5879   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5880   ret <vscale x 8 x i1> %1
5883 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5884 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f32:
5885 ; CHECK:       # %bb.0:
5886 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
5887 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5888 ; CHECK-NEXT:    ret
5889   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5890   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5891   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5892   ret <vscale x 8 x i1> %1
5895 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5896 ; CHECK-LABEL: fcmp_oeq_fv_nxv8f32:
5897 ; CHECK:       # %bb.0:
5898 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
5899 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5900 ; CHECK-NEXT:    ret
5901   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5902   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5903   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5904   ret <vscale x 8 x i1> %1
5907 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
5908 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f32:
5909 ; CHECK:       # %bb.0:
5910 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5911 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
5912 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
5913 ; CHECK-NEXT:    vmand.mm v16, v17, v16
5914 ; CHECK-NEXT:    vmv1r.v v0, v16
5915 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
5916 ; CHECK-NEXT:    vmv1r.v v0, v16
5917 ; CHECK-NEXT:    ret
5918   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5919   ret <vscale x 8 x i1> %1
5922 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5923 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f32:
5924 ; CHECK:       # %bb.0:
5925 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5926 ; CHECK-NEXT:    vfmv.v.f v12, fa0
5927 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
5928 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5929 ; CHECK-NEXT:    vmand.mm v12, v16, v12
5930 ; CHECK-NEXT:    vmv1r.v v0, v12
5931 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
5932 ; CHECK-NEXT:    vmv1r.v v0, v12
5933 ; CHECK-NEXT:    ret
5934   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5935   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5936   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5937   ret <vscale x 8 x i1> %1
5940 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5941 ; CHECK-LABEL: fcmp_ogt_fv_nxv8f32:
5942 ; CHECK:       # %bb.0:
5943 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5944 ; CHECK-NEXT:    vfmv.v.f v12, fa0
5945 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
5946 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5947 ; CHECK-NEXT:    vmand.mm v12, v12, v16
5948 ; CHECK-NEXT:    vmv1r.v v0, v12
5949 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
5950 ; CHECK-NEXT:    vmv1r.v v0, v12
5951 ; CHECK-NEXT:    ret
5952   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5953   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5954   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5955   ret <vscale x 8 x i1> %1
5958 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
5959 ; CHECK-LABEL: fcmp_oge_vv_nxv8f32:
5960 ; CHECK:       # %bb.0:
5961 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5962 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
5963 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
5964 ; CHECK-NEXT:    vmand.mm v16, v17, v16
5965 ; CHECK-NEXT:    vmv1r.v v0, v16
5966 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
5967 ; CHECK-NEXT:    vmv1r.v v0, v16
5968 ; CHECK-NEXT:    ret
5969   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5970   ret <vscale x 8 x i1> %1
5973 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5974 ; CHECK-LABEL: fcmp_oge_vf_nxv8f32:
5975 ; CHECK:       # %bb.0:
5976 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5977 ; CHECK-NEXT:    vfmv.v.f v12, fa0
5978 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
5979 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5980 ; CHECK-NEXT:    vmand.mm v12, v16, v12
5981 ; CHECK-NEXT:    vmv1r.v v0, v12
5982 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
5983 ; CHECK-NEXT:    vmv1r.v v0, v12
5984 ; CHECK-NEXT:    ret
5985   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5986   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5987   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5988   ret <vscale x 8 x i1> %1
5991 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
5992 ; CHECK-LABEL: fcmp_oge_fv_nxv8f32:
5993 ; CHECK:       # %bb.0:
5994 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
5995 ; CHECK-NEXT:    vfmv.v.f v12, fa0
5996 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
5997 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5998 ; CHECK-NEXT:    vmand.mm v12, v12, v16
5999 ; CHECK-NEXT:    vmv1r.v v0, v12
6000 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6001 ; CHECK-NEXT:    vmv1r.v v0, v12
6002 ; CHECK-NEXT:    ret
6003   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6004   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6005   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
6006   ret <vscale x 8 x i1> %1
6009 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6010 ; CHECK-LABEL: fcmp_olt_vv_nxv8f32:
6011 ; CHECK:       # %bb.0:
6012 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6013 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6014 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6015 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6016 ; CHECK-NEXT:    vmv1r.v v0, v16
6017 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
6018 ; CHECK-NEXT:    vmv1r.v v0, v16
6019 ; CHECK-NEXT:    ret
6020   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
6021   ret <vscale x 8 x i1> %1
6024 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6025 ; CHECK-LABEL: fcmp_olt_vf_nxv8f32:
6026 ; CHECK:       # %bb.0:
6027 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6028 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6029 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6030 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6031 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6032 ; CHECK-NEXT:    vmv1r.v v0, v12
6033 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6034 ; CHECK-NEXT:    vmv1r.v v0, v12
6035 ; CHECK-NEXT:    ret
6036   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6037   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6038   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
6039   ret <vscale x 8 x i1> %1
6042 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6043 ; CHECK-LABEL: fcmp_olt_fv_nxv8f32:
6044 ; CHECK:       # %bb.0:
6045 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6046 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6047 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6048 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6049 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6050 ; CHECK-NEXT:    vmv1r.v v0, v12
6051 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6052 ; CHECK-NEXT:    vmv1r.v v0, v12
6053 ; CHECK-NEXT:    ret
6054   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6055   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6056   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6057   ret <vscale x 8 x i1> %1
6060 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6061 ; CHECK-LABEL: fcmp_ole_vv_nxv8f32:
6062 ; CHECK:       # %bb.0:
6063 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6064 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6065 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6066 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6067 ; CHECK-NEXT:    vmv1r.v v0, v16
6068 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
6069 ; CHECK-NEXT:    vmv1r.v v0, v16
6070 ; CHECK-NEXT:    ret
6071   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6072   ret <vscale x 8 x i1> %1
6075 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6076 ; CHECK-LABEL: fcmp_ole_vf_nxv8f32:
6077 ; CHECK:       # %bb.0:
6078 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6079 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6080 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6081 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6082 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6083 ; CHECK-NEXT:    vmv1r.v v0, v12
6084 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6085 ; CHECK-NEXT:    vmv1r.v v0, v12
6086 ; CHECK-NEXT:    ret
6087   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6088   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6089   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6090   ret <vscale x 8 x i1> %1
6093 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6094 ; CHECK-LABEL: fcmp_ole_fv_nxv8f32:
6095 ; CHECK:       # %bb.0:
6096 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6097 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6098 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6099 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6100 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6101 ; CHECK-NEXT:    vmv1r.v v0, v12
6102 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6103 ; CHECK-NEXT:    vmv1r.v v0, v12
6104 ; CHECK-NEXT:    ret
6105   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6106   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6107   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6108   ret <vscale x 8 x i1> %1
6111 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6112 ; CHECK-LABEL: fcmp_one_vv_nxv8f32:
6113 ; CHECK:       # %bb.0:
6114 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6115 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6116 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6117 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6118 ; CHECK-NEXT:    vmv1r.v v17, v16
6119 ; CHECK-NEXT:    vmv1r.v v0, v16
6120 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
6121 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6122 ; CHECK-NEXT:    vmor.mm v0, v16, v17
6123 ; CHECK-NEXT:    ret
6124   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6125   ret <vscale x 8 x i1> %1
6128 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6129 ; CHECK-LABEL: fcmp_one_vf_nxv8f32:
6130 ; CHECK:       # %bb.0:
6131 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6132 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6133 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6134 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6135 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6136 ; CHECK-NEXT:    vmv1r.v v13, v12
6137 ; CHECK-NEXT:    vmv1r.v v0, v12
6138 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
6139 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6140 ; CHECK-NEXT:    vmor.mm v0, v12, v13
6141 ; CHECK-NEXT:    ret
6142   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6143   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6144   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6145   ret <vscale x 8 x i1> %1
6148 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6149 ; CHECK-LABEL: fcmp_one_fv_nxv8f32:
6150 ; CHECK:       # %bb.0:
6151 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6152 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6153 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6154 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6155 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6156 ; CHECK-NEXT:    vmv1r.v v13, v12
6157 ; CHECK-NEXT:    vmv1r.v v0, v12
6158 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
6159 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6160 ; CHECK-NEXT:    vmor.mm v0, v12, v13
6161 ; CHECK-NEXT:    ret
6162   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6163   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6164   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6165   ret <vscale x 8 x i1> %1
6168 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6169 ; CHECK-LABEL: fcmp_ord_vv_nxv8f32:
6170 ; CHECK:       # %bb.0:
6171 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6172 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6173 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6174 ; CHECK-NEXT:    vmand.mm v0, v12, v16
6175 ; CHECK-NEXT:    ret
6176   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6177   ret <vscale x 8 x i1> %1
6180 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6181 ; CHECK-LABEL: fcmp_ord_vf_nxv8f32:
6182 ; CHECK:       # %bb.0:
6183 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6184 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6185 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6186 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6187 ; CHECK-NEXT:    vmand.mm v0, v12, v16
6188 ; CHECK-NEXT:    ret
6189   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6190   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6191   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6192   ret <vscale x 8 x i1> %1
6195 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6196 ; CHECK-LABEL: fcmp_ord_fv_nxv8f32:
6197 ; CHECK:       # %bb.0:
6198 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6199 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6200 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6201 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6202 ; CHECK-NEXT:    vmand.mm v0, v16, v12
6203 ; CHECK-NEXT:    ret
6204   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6205   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6206   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6207   ret <vscale x 8 x i1> %1
6210 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6211 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32:
6212 ; CHECK:       # %bb.0:
6213 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6214 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6215 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6216 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6217 ; CHECK-NEXT:    vmv1r.v v17, v16
6218 ; CHECK-NEXT:    vmv1r.v v0, v16
6219 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
6220 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6221 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
6222 ; CHECK-NEXT:    ret
6223   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6224   ret <vscale x 8 x i1> %1
6227 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6228 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f32:
6229 ; CHECK:       # %bb.0:
6230 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6231 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6232 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6233 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6234 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6235 ; CHECK-NEXT:    vmv1r.v v13, v12
6236 ; CHECK-NEXT:    vmv1r.v v0, v12
6237 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
6238 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6239 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
6240 ; CHECK-NEXT:    ret
6241   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6242   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6243   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6244   ret <vscale x 8 x i1> %1
6247 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6248 ; CHECK-LABEL: fcmp_ueq_fv_nxv8f32:
6249 ; CHECK:       # %bb.0:
6250 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6251 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6252 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6253 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6254 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6255 ; CHECK-NEXT:    vmv1r.v v13, v12
6256 ; CHECK-NEXT:    vmv1r.v v0, v12
6257 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
6258 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6259 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
6260 ; CHECK-NEXT:    ret
6261   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6262   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6263   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6264   ret <vscale x 8 x i1> %1
6267 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6268 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f32:
6269 ; CHECK:       # %bb.0:
6270 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6271 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6272 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6273 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6274 ; CHECK-NEXT:    vmv1r.v v0, v16
6275 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
6276 ; CHECK-NEXT:    vmnot.m v0, v16
6277 ; CHECK-NEXT:    ret
6278   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6279   ret <vscale x 8 x i1> %1
6282 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6283 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f32:
6284 ; CHECK:       # %bb.0:
6285 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6286 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6287 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6288 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6289 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6290 ; CHECK-NEXT:    vmv1r.v v0, v12
6291 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6292 ; CHECK-NEXT:    vmnot.m v0, v12
6293 ; CHECK-NEXT:    ret
6294   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6295   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6296   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6297   ret <vscale x 8 x i1> %1
6300 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6301 ; CHECK-LABEL: fcmp_ugt_fv_nxv8f32:
6302 ; CHECK:       # %bb.0:
6303 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6304 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6305 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6306 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6307 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6308 ; CHECK-NEXT:    vmv1r.v v0, v12
6309 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6310 ; CHECK-NEXT:    vmnot.m v0, v12
6311 ; CHECK-NEXT:    ret
6312   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6313   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6314   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6315   ret <vscale x 8 x i1> %1
6318 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6319 ; CHECK-LABEL: fcmp_uge_vv_nxv8f32:
6320 ; CHECK:       # %bb.0:
6321 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6322 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6323 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6324 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6325 ; CHECK-NEXT:    vmv1r.v v0, v16
6326 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
6327 ; CHECK-NEXT:    vmnot.m v0, v16
6328 ; CHECK-NEXT:    ret
6329   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
6330   ret <vscale x 8 x i1> %1
6333 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6334 ; CHECK-LABEL: fcmp_uge_vf_nxv8f32:
6335 ; CHECK:       # %bb.0:
6336 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6337 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6338 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6339 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6340 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6341 ; CHECK-NEXT:    vmv1r.v v0, v12
6342 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6343 ; CHECK-NEXT:    vmnot.m v0, v12
6344 ; CHECK-NEXT:    ret
6345   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6346   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6347   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
6348   ret <vscale x 8 x i1> %1
6351 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6352 ; CHECK-LABEL: fcmp_uge_fv_nxv8f32:
6353 ; CHECK:       # %bb.0:
6354 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6355 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6356 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6357 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6358 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6359 ; CHECK-NEXT:    vmv1r.v v0, v12
6360 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6361 ; CHECK-NEXT:    vmnot.m v0, v12
6362 ; CHECK-NEXT:    ret
6363   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6364   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6365   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
6366   ret <vscale x 8 x i1> %1
6369 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6370 ; CHECK-LABEL: fcmp_ult_vv_nxv8f32:
6371 ; CHECK:       # %bb.0:
6372 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6373 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6374 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
6375 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6376 ; CHECK-NEXT:    vmv1r.v v0, v16
6377 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
6378 ; CHECK-NEXT:    vmnot.m v0, v16
6379 ; CHECK-NEXT:    ret
6380   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
6381   ret <vscale x 8 x i1> %1
6384 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6385 ; CHECK-LABEL: fcmp_ult_vf_nxv8f32:
6386 ; CHECK:       # %bb.0:
6387 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6388 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6389 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6390 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6391 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6392 ; CHECK-NEXT:    vmv1r.v v0, v12
6393 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6394 ; CHECK-NEXT:    vmnot.m v0, v12
6395 ; CHECK-NEXT:    ret
6396   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6397   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6398   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
6399   ret <vscale x 8 x i1> %1
6402 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6403 ; CHECK-LABEL: fcmp_ult_fv_nxv8f32:
6404 ; CHECK:       # %bb.0:
6405 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6406 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6407 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6408 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6409 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6410 ; CHECK-NEXT:    vmv1r.v v0, v12
6411 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6412 ; CHECK-NEXT:    vmnot.m v0, v12
6413 ; CHECK-NEXT:    ret
6414   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6415   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6416   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
6417   ret <vscale x 8 x i1> %1
6420 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6421 ; CHECK-LABEL: fcmp_ule_vv_nxv8f32:
6422 ; CHECK:       # %bb.0:
6423 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6424 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6425 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
6426 ; CHECK-NEXT:    vmand.mm v16, v17, v16
6427 ; CHECK-NEXT:    vmv1r.v v0, v16
6428 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6429 ; CHECK-NEXT:    vmnot.m v0, v16
6430 ; CHECK-NEXT:    ret
6431   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
6432   ret <vscale x 8 x i1> %1
6435 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6436 ; CHECK-LABEL: fcmp_ule_vf_nxv8f32:
6437 ; CHECK:       # %bb.0:
6438 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6439 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6440 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6441 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6442 ; CHECK-NEXT:    vmand.mm v12, v16, v12
6443 ; CHECK-NEXT:    vmv1r.v v0, v12
6444 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6445 ; CHECK-NEXT:    vmnot.m v0, v12
6446 ; CHECK-NEXT:    ret
6447   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6448   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6449   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
6450   ret <vscale x 8 x i1> %1
6453 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6454 ; CHECK-LABEL: fcmp_ule_fv_nxv8f32:
6455 ; CHECK:       # %bb.0:
6456 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
6457 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6458 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6459 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6460 ; CHECK-NEXT:    vmand.mm v12, v12, v16
6461 ; CHECK-NEXT:    vmv1r.v v0, v12
6462 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6463 ; CHECK-NEXT:    vmnot.m v0, v12
6464 ; CHECK-NEXT:    ret
6465   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6466   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6467   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
6468   ret <vscale x 8 x i1> %1
6471 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6472 ; CHECK-LABEL: fcmp_une_vv_nxv8f32:
6473 ; CHECK:       # %bb.0:
6474 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6475 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
6476 ; CHECK-NEXT:    ret
6477   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
6478   ret <vscale x 8 x i1> %1
6481 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6482 ; CHECK-LABEL: fcmp_une_vf_nxv8f32:
6483 ; CHECK:       # %bb.0:
6484 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6485 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6486 ; CHECK-NEXT:    ret
6487   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6488   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6489   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
6490   ret <vscale x 8 x i1> %1
6493 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6494 ; CHECK-LABEL: fcmp_une_fv_nxv8f32:
6495 ; CHECK:       # %bb.0:
6496 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6497 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6498 ; CHECK-NEXT:    ret
6499   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6500   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6501   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
6502   ret <vscale x 8 x i1> %1
6505 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp {
6506 ; CHECK-LABEL: fcmp_uno_vv_nxv8f32:
6507 ; CHECK:       # %bb.0:
6508 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6509 ; CHECK-NEXT:    vmfne.vv v16, v12, v12
6510 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
6511 ; CHECK-NEXT:    vmor.mm v0, v12, v16
6512 ; CHECK-NEXT:    ret
6513   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
6514   ret <vscale x 8 x i1> %1
6517 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6518 ; CHECK-LABEL: fcmp_uno_vf_nxv8f32:
6519 ; CHECK:       # %bb.0:
6520 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6521 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6522 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
6523 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
6524 ; CHECK-NEXT:    vmor.mm v0, v12, v16
6525 ; CHECK-NEXT:    ret
6526   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6527   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6528   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
6529   ret <vscale x 8 x i1> %1
6532 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp {
6533 ; CHECK-LABEL: fcmp_uno_fv_nxv8f32:
6534 ; CHECK:       # %bb.0:
6535 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
6536 ; CHECK-NEXT:    vfmv.v.f v12, fa0
6537 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
6538 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
6539 ; CHECK-NEXT:    vmor.mm v0, v16, v12
6540 ; CHECK-NEXT:    ret
6541   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
6542   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
6543   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
6544   ret <vscale x 8 x i1> %1
6547 declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata)
6548 define <vscale x 16 x i1> @fcmp_oeq_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6549 ; CHECK-LABEL: fcmp_oeq_vv_nxv16f32:
6550 ; CHECK:       # %bb.0:
6551 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6552 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
6553 ; CHECK-NEXT:    ret
6554   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6555   ret <vscale x 16 x i1> %1
6558 define <vscale x 16 x i1> @fcmp_oeq_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6559 ; CHECK-LABEL: fcmp_oeq_vf_nxv16f32:
6560 ; CHECK:       # %bb.0:
6561 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6562 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6563 ; CHECK-NEXT:    ret
6564   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6565   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6566   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6567   ret <vscale x 16 x i1> %1
6570 define <vscale x 16 x i1> @fcmp_oeq_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6571 ; CHECK-LABEL: fcmp_oeq_fv_nxv16f32:
6572 ; CHECK:       # %bb.0:
6573 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6574 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6575 ; CHECK-NEXT:    ret
6576   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6577   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6578   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6579   ret <vscale x 16 x i1> %1
6582 define <vscale x 16 x i1> @fcmp_ogt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6583 ; CHECK-LABEL: fcmp_ogt_vv_nxv16f32:
6584 ; CHECK:       # %bb.0:
6585 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6586 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
6587 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
6588 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6589 ; CHECK-NEXT:    vmv1r.v v0, v24
6590 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
6591 ; CHECK-NEXT:    vmv1r.v v0, v24
6592 ; CHECK-NEXT:    ret
6593   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6594   ret <vscale x 16 x i1> %1
6597 define <vscale x 16 x i1> @fcmp_ogt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6598 ; CHECK-LABEL: fcmp_ogt_vf_nxv16f32:
6599 ; CHECK:       # %bb.0:
6600 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6601 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6602 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6603 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6604 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6605 ; CHECK-NEXT:    vmv1r.v v0, v16
6606 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
6607 ; CHECK-NEXT:    vmv1r.v v0, v16
6608 ; CHECK-NEXT:    ret
6609   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6610   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6611   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6612   ret <vscale x 16 x i1> %1
6615 define <vscale x 16 x i1> @fcmp_ogt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6616 ; CHECK-LABEL: fcmp_ogt_fv_nxv16f32:
6617 ; CHECK:       # %bb.0:
6618 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6619 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6620 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6621 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6622 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6623 ; CHECK-NEXT:    vmv1r.v v0, v16
6624 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
6625 ; CHECK-NEXT:    vmv1r.v v0, v16
6626 ; CHECK-NEXT:    ret
6627   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6628   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6629   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6630   ret <vscale x 16 x i1> %1
6633 define <vscale x 16 x i1> @fcmp_oge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6634 ; CHECK-LABEL: fcmp_oge_vv_nxv16f32:
6635 ; CHECK:       # %bb.0:
6636 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6637 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
6638 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
6639 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6640 ; CHECK-NEXT:    vmv1r.v v0, v24
6641 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
6642 ; CHECK-NEXT:    vmv1r.v v0, v24
6643 ; CHECK-NEXT:    ret
6644   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
6645   ret <vscale x 16 x i1> %1
6648 define <vscale x 16 x i1> @fcmp_oge_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6649 ; CHECK-LABEL: fcmp_oge_vf_nxv16f32:
6650 ; CHECK:       # %bb.0:
6651 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6652 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6653 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6654 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6655 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6656 ; CHECK-NEXT:    vmv1r.v v0, v16
6657 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
6658 ; CHECK-NEXT:    vmv1r.v v0, v16
6659 ; CHECK-NEXT:    ret
6660   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6661   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6662   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
6663   ret <vscale x 16 x i1> %1
6666 define <vscale x 16 x i1> @fcmp_oge_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6667 ; CHECK-LABEL: fcmp_oge_fv_nxv16f32:
6668 ; CHECK:       # %bb.0:
6669 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6670 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6671 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6672 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6673 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6674 ; CHECK-NEXT:    vmv1r.v v0, v16
6675 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
6676 ; CHECK-NEXT:    vmv1r.v v0, v16
6677 ; CHECK-NEXT:    ret
6678   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6679   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6680   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
6681   ret <vscale x 16 x i1> %1
6684 define <vscale x 16 x i1> @fcmp_olt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6685 ; CHECK-LABEL: fcmp_olt_vv_nxv16f32:
6686 ; CHECK:       # %bb.0:
6687 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6688 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6689 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6690 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6691 ; CHECK-NEXT:    vmv1r.v v0, v24
6692 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
6693 ; CHECK-NEXT:    vmv1r.v v0, v24
6694 ; CHECK-NEXT:    ret
6695   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
6696   ret <vscale x 16 x i1> %1
6699 define <vscale x 16 x i1> @fcmp_olt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6700 ; CHECK-LABEL: fcmp_olt_vf_nxv16f32:
6701 ; CHECK:       # %bb.0:
6702 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6703 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6704 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6705 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6706 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6707 ; CHECK-NEXT:    vmv1r.v v0, v16
6708 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
6709 ; CHECK-NEXT:    vmv1r.v v0, v16
6710 ; CHECK-NEXT:    ret
6711   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6712   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6713   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
6714   ret <vscale x 16 x i1> %1
6717 define <vscale x 16 x i1> @fcmp_olt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6718 ; CHECK-LABEL: fcmp_olt_fv_nxv16f32:
6719 ; CHECK:       # %bb.0:
6720 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6721 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6722 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6723 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6724 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6725 ; CHECK-NEXT:    vmv1r.v v0, v16
6726 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
6727 ; CHECK-NEXT:    vmv1r.v v0, v16
6728 ; CHECK-NEXT:    ret
6729   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6730   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6731   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6732   ret <vscale x 16 x i1> %1
6735 define <vscale x 16 x i1> @fcmp_ole_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6736 ; CHECK-LABEL: fcmp_ole_vv_nxv16f32:
6737 ; CHECK:       # %bb.0:
6738 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6739 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6740 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6741 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6742 ; CHECK-NEXT:    vmv1r.v v0, v24
6743 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
6744 ; CHECK-NEXT:    vmv1r.v v0, v24
6745 ; CHECK-NEXT:    ret
6746   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6747   ret <vscale x 16 x i1> %1
6750 define <vscale x 16 x i1> @fcmp_ole_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6751 ; CHECK-LABEL: fcmp_ole_vf_nxv16f32:
6752 ; CHECK:       # %bb.0:
6753 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6754 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6755 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6756 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6757 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6758 ; CHECK-NEXT:    vmv1r.v v0, v16
6759 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
6760 ; CHECK-NEXT:    vmv1r.v v0, v16
6761 ; CHECK-NEXT:    ret
6762   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6763   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6764   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6765   ret <vscale x 16 x i1> %1
6768 define <vscale x 16 x i1> @fcmp_ole_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6769 ; CHECK-LABEL: fcmp_ole_fv_nxv16f32:
6770 ; CHECK:       # %bb.0:
6771 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6772 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6773 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6774 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6775 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6776 ; CHECK-NEXT:    vmv1r.v v0, v16
6777 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
6778 ; CHECK-NEXT:    vmv1r.v v0, v16
6779 ; CHECK-NEXT:    ret
6780   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6781   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6782   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6783   ret <vscale x 16 x i1> %1
6786 define <vscale x 16 x i1> @fcmp_one_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6787 ; CHECK-LABEL: fcmp_one_vv_nxv16f32:
6788 ; CHECK:       # %bb.0:
6789 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6790 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6791 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6792 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6793 ; CHECK-NEXT:    vmv1r.v v25, v24
6794 ; CHECK-NEXT:    vmv1r.v v0, v24
6795 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
6796 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
6797 ; CHECK-NEXT:    vmor.mm v0, v24, v25
6798 ; CHECK-NEXT:    ret
6799   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6800   ret <vscale x 16 x i1> %1
6803 define <vscale x 16 x i1> @fcmp_one_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6804 ; CHECK-LABEL: fcmp_one_vf_nxv16f32:
6805 ; CHECK:       # %bb.0:
6806 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6807 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6808 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6809 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6810 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6811 ; CHECK-NEXT:    vmv1r.v v17, v16
6812 ; CHECK-NEXT:    vmv1r.v v0, v16
6813 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
6814 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
6815 ; CHECK-NEXT:    vmor.mm v0, v16, v17
6816 ; CHECK-NEXT:    ret
6817   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6818   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6819   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6820   ret <vscale x 16 x i1> %1
6823 define <vscale x 16 x i1> @fcmp_one_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6824 ; CHECK-LABEL: fcmp_one_fv_nxv16f32:
6825 ; CHECK:       # %bb.0:
6826 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6827 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6828 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6829 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6830 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6831 ; CHECK-NEXT:    vmv1r.v v17, v16
6832 ; CHECK-NEXT:    vmv1r.v v0, v16
6833 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
6834 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
6835 ; CHECK-NEXT:    vmor.mm v0, v16, v17
6836 ; CHECK-NEXT:    ret
6837   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6838   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6839   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6840   ret <vscale x 16 x i1> %1
6843 define <vscale x 16 x i1> @fcmp_ord_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6844 ; CHECK-LABEL: fcmp_ord_vv_nxv16f32:
6845 ; CHECK:       # %bb.0:
6846 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6847 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6848 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6849 ; CHECK-NEXT:    vmand.mm v0, v16, v24
6850 ; CHECK-NEXT:    ret
6851   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6852   ret <vscale x 16 x i1> %1
6855 define <vscale x 16 x i1> @fcmp_ord_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6856 ; CHECK-LABEL: fcmp_ord_vf_nxv16f32:
6857 ; CHECK:       # %bb.0:
6858 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6859 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6860 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6861 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6862 ; CHECK-NEXT:    vmand.mm v0, v16, v24
6863 ; CHECK-NEXT:    ret
6864   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6865   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6866   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6867   ret <vscale x 16 x i1> %1
6870 define <vscale x 16 x i1> @fcmp_ord_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6871 ; CHECK-LABEL: fcmp_ord_fv_nxv16f32:
6872 ; CHECK:       # %bb.0:
6873 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
6874 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6875 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6876 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6877 ; CHECK-NEXT:    vmand.mm v0, v24, v16
6878 ; CHECK-NEXT:    ret
6879   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6880   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6881   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6882   ret <vscale x 16 x i1> %1
6885 define <vscale x 16 x i1> @fcmp_ueq_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6886 ; CHECK-LABEL: fcmp_ueq_vv_nxv16f32:
6887 ; CHECK:       # %bb.0:
6888 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6889 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6890 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6891 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6892 ; CHECK-NEXT:    vmv1r.v v25, v24
6893 ; CHECK-NEXT:    vmv1r.v v0, v24
6894 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
6895 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
6896 ; CHECK-NEXT:    vmnor.mm v0, v24, v25
6897 ; CHECK-NEXT:    ret
6898   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6899   ret <vscale x 16 x i1> %1
6902 define <vscale x 16 x i1> @fcmp_ueq_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6903 ; CHECK-LABEL: fcmp_ueq_vf_nxv16f32:
6904 ; CHECK:       # %bb.0:
6905 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6906 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6907 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6908 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6909 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6910 ; CHECK-NEXT:    vmv1r.v v17, v16
6911 ; CHECK-NEXT:    vmv1r.v v0, v16
6912 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
6913 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
6914 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
6915 ; CHECK-NEXT:    ret
6916   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6917   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6918   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6919   ret <vscale x 16 x i1> %1
6922 define <vscale x 16 x i1> @fcmp_ueq_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6923 ; CHECK-LABEL: fcmp_ueq_fv_nxv16f32:
6924 ; CHECK:       # %bb.0:
6925 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6926 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6927 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6928 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6929 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6930 ; CHECK-NEXT:    vmv1r.v v17, v16
6931 ; CHECK-NEXT:    vmv1r.v v0, v16
6932 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
6933 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
6934 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
6935 ; CHECK-NEXT:    ret
6936   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6937   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6938   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6939   ret <vscale x 16 x i1> %1
6942 define <vscale x 16 x i1> @fcmp_ugt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6943 ; CHECK-LABEL: fcmp_ugt_vv_nxv16f32:
6944 ; CHECK:       # %bb.0:
6945 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6946 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6947 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6948 ; CHECK-NEXT:    vmand.mm v24, v25, v24
6949 ; CHECK-NEXT:    vmv1r.v v0, v24
6950 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
6951 ; CHECK-NEXT:    vmnot.m v0, v24
6952 ; CHECK-NEXT:    ret
6953   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6954   ret <vscale x 16 x i1> %1
6957 define <vscale x 16 x i1> @fcmp_ugt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6958 ; CHECK-LABEL: fcmp_ugt_vf_nxv16f32:
6959 ; CHECK:       # %bb.0:
6960 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6961 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6962 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6963 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6964 ; CHECK-NEXT:    vmand.mm v16, v16, v24
6965 ; CHECK-NEXT:    vmv1r.v v0, v16
6966 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
6967 ; CHECK-NEXT:    vmnot.m v0, v16
6968 ; CHECK-NEXT:    ret
6969   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6970   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6971   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6972   ret <vscale x 16 x i1> %1
6975 define <vscale x 16 x i1> @fcmp_ugt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
6976 ; CHECK-LABEL: fcmp_ugt_fv_nxv16f32:
6977 ; CHECK:       # %bb.0:
6978 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6979 ; CHECK-NEXT:    vfmv.v.f v16, fa0
6980 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
6981 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6982 ; CHECK-NEXT:    vmand.mm v16, v24, v16
6983 ; CHECK-NEXT:    vmv1r.v v0, v16
6984 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
6985 ; CHECK-NEXT:    vmnot.m v0, v16
6986 ; CHECK-NEXT:    ret
6987   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6988   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6989   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6990   ret <vscale x 16 x i1> %1
6993 define <vscale x 16 x i1> @fcmp_uge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
6994 ; CHECK-LABEL: fcmp_uge_vv_nxv16f32:
6995 ; CHECK:       # %bb.0:
6996 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
6997 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
6998 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
6999 ; CHECK-NEXT:    vmand.mm v24, v25, v24
7000 ; CHECK-NEXT:    vmv1r.v v0, v24
7001 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
7002 ; CHECK-NEXT:    vmnot.m v0, v24
7003 ; CHECK-NEXT:    ret
7004   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
7005   ret <vscale x 16 x i1> %1
7008 define <vscale x 16 x i1> @fcmp_uge_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7009 ; CHECK-LABEL: fcmp_uge_vf_nxv16f32:
7010 ; CHECK:       # %bb.0:
7011 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7012 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7013 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7014 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7015 ; CHECK-NEXT:    vmand.mm v16, v16, v24
7016 ; CHECK-NEXT:    vmv1r.v v0, v16
7017 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
7018 ; CHECK-NEXT:    vmnot.m v0, v16
7019 ; CHECK-NEXT:    ret
7020   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7021   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7022   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
7023   ret <vscale x 16 x i1> %1
7026 define <vscale x 16 x i1> @fcmp_uge_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7027 ; CHECK-LABEL: fcmp_uge_fv_nxv16f32:
7028 ; CHECK:       # %bb.0:
7029 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7030 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7031 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7032 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7033 ; CHECK-NEXT:    vmand.mm v16, v24, v16
7034 ; CHECK-NEXT:    vmv1r.v v0, v16
7035 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
7036 ; CHECK-NEXT:    vmnot.m v0, v16
7037 ; CHECK-NEXT:    ret
7038   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7039   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7040   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
7041   ret <vscale x 16 x i1> %1
7044 define <vscale x 16 x i1> @fcmp_ult_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
7045 ; CHECK-LABEL: fcmp_ult_vv_nxv16f32:
7046 ; CHECK:       # %bb.0:
7047 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7048 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
7049 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
7050 ; CHECK-NEXT:    vmand.mm v24, v25, v24
7051 ; CHECK-NEXT:    vmv1r.v v0, v24
7052 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
7053 ; CHECK-NEXT:    vmnot.m v0, v24
7054 ; CHECK-NEXT:    ret
7055   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7056   ret <vscale x 16 x i1> %1
7059 define <vscale x 16 x i1> @fcmp_ult_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7060 ; CHECK-LABEL: fcmp_ult_vf_nxv16f32:
7061 ; CHECK:       # %bb.0:
7062 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7063 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7064 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7065 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7066 ; CHECK-NEXT:    vmand.mm v16, v24, v16
7067 ; CHECK-NEXT:    vmv1r.v v0, v16
7068 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
7069 ; CHECK-NEXT:    vmnot.m v0, v16
7070 ; CHECK-NEXT:    ret
7071   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7072   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7073   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7074   ret <vscale x 16 x i1> %1
7077 define <vscale x 16 x i1> @fcmp_ult_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7078 ; CHECK-LABEL: fcmp_ult_fv_nxv16f32:
7079 ; CHECK:       # %bb.0:
7080 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7081 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7082 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7083 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7084 ; CHECK-NEXT:    vmand.mm v16, v16, v24
7085 ; CHECK-NEXT:    vmv1r.v v0, v16
7086 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
7087 ; CHECK-NEXT:    vmnot.m v0, v16
7088 ; CHECK-NEXT:    ret
7089   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7090   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7091   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7092   ret <vscale x 16 x i1> %1
7095 define <vscale x 16 x i1> @fcmp_ule_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
7096 ; CHECK-LABEL: fcmp_ule_vv_nxv16f32:
7097 ; CHECK:       # %bb.0:
7098 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7099 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
7100 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
7101 ; CHECK-NEXT:    vmand.mm v24, v25, v24
7102 ; CHECK-NEXT:    vmv1r.v v0, v24
7103 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
7104 ; CHECK-NEXT:    vmnot.m v0, v24
7105 ; CHECK-NEXT:    ret
7106   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7107   ret <vscale x 16 x i1> %1
7110 define <vscale x 16 x i1> @fcmp_ule_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7111 ; CHECK-LABEL: fcmp_ule_vf_nxv16f32:
7112 ; CHECK:       # %bb.0:
7113 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7114 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7115 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7116 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7117 ; CHECK-NEXT:    vmand.mm v16, v24, v16
7118 ; CHECK-NEXT:    vmv1r.v v0, v16
7119 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
7120 ; CHECK-NEXT:    vmnot.m v0, v16
7121 ; CHECK-NEXT:    ret
7122   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7123   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7124   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7125   ret <vscale x 16 x i1> %1
7128 define <vscale x 16 x i1> @fcmp_ule_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7129 ; CHECK-LABEL: fcmp_ule_fv_nxv16f32:
7130 ; CHECK:       # %bb.0:
7131 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
7132 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7133 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
7134 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7135 ; CHECK-NEXT:    vmand.mm v16, v16, v24
7136 ; CHECK-NEXT:    vmv1r.v v0, v16
7137 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
7138 ; CHECK-NEXT:    vmnot.m v0, v16
7139 ; CHECK-NEXT:    ret
7140   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7141   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7142   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7143   ret <vscale x 16 x i1> %1
7146 define <vscale x 16 x i1> @fcmp_une_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
7147 ; CHECK-LABEL: fcmp_une_vv_nxv16f32:
7148 ; CHECK:       # %bb.0:
7149 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7150 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
7151 ; CHECK-NEXT:    ret
7152   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7153   ret <vscale x 16 x i1> %1
7156 define <vscale x 16 x i1> @fcmp_une_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7157 ; CHECK-LABEL: fcmp_une_vf_nxv16f32:
7158 ; CHECK:       # %bb.0:
7159 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7160 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7161 ; CHECK-NEXT:    ret
7162   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7163   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7164   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7165   ret <vscale x 16 x i1> %1
7168 define <vscale x 16 x i1> @fcmp_une_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7169 ; CHECK-LABEL: fcmp_une_fv_nxv16f32:
7170 ; CHECK:       # %bb.0:
7171 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7172 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7173 ; CHECK-NEXT:    ret
7174   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7175   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7176   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7177   ret <vscale x 16 x i1> %1
7180 define <vscale x 16 x i1> @fcmp_uno_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp {
7181 ; CHECK-LABEL: fcmp_uno_vv_nxv16f32:
7182 ; CHECK:       # %bb.0:
7183 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7184 ; CHECK-NEXT:    vmfne.vv v24, v16, v16
7185 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
7186 ; CHECK-NEXT:    vmor.mm v0, v16, v24
7187 ; CHECK-NEXT:    ret
7188   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7189   ret <vscale x 16 x i1> %1
7192 define <vscale x 16 x i1> @fcmp_uno_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7193 ; CHECK-LABEL: fcmp_uno_vf_nxv16f32:
7194 ; CHECK:       # %bb.0:
7195 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7196 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7197 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
7198 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
7199 ; CHECK-NEXT:    vmor.mm v0, v16, v24
7200 ; CHECK-NEXT:    ret
7201   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7202   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7203   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7204   ret <vscale x 16 x i1> %1
7207 define <vscale x 16 x i1> @fcmp_uno_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp {
7208 ; CHECK-LABEL: fcmp_uno_fv_nxv16f32:
7209 ; CHECK:       # %bb.0:
7210 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
7211 ; CHECK-NEXT:    vfmv.v.f v16, fa0
7212 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
7213 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
7214 ; CHECK-NEXT:    vmor.mm v0, v24, v16
7215 ; CHECK-NEXT:    ret
7216   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
7217   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
7218   %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7219   ret <vscale x 16 x i1> %1
7222 declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata)
7223 define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7224 ; CHECK-LABEL: fcmp_oeq_vv_nxv1f64:
7225 ; CHECK:       # %bb.0:
7226 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7227 ; CHECK-NEXT:    vmfeq.vv v0, v8, v9
7228 ; CHECK-NEXT:    ret
7229   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7230   ret <vscale x 1 x i1> %1
7233 define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7234 ; CHECK-LABEL: fcmp_oeq_vf_nxv1f64:
7235 ; CHECK:       # %bb.0:
7236 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7237 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7238 ; CHECK-NEXT:    ret
7239   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7240   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7241   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7242   ret <vscale x 1 x i1> %1
7245 define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7246 ; CHECK-LABEL: fcmp_oeq_fv_nxv1f64:
7247 ; CHECK:       # %bb.0:
7248 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7249 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7250 ; CHECK-NEXT:    ret
7251   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7252   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7253   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7254   ret <vscale x 1 x i1> %1
7257 define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7258 ; CHECK-LABEL: fcmp_ogt_vv_nxv1f64:
7259 ; CHECK:       # %bb.0:
7260 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7261 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7262 ; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7263 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7264 ; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7265 ; CHECK-NEXT:    ret
7266   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7267   ret <vscale x 1 x i1> %1
7270 define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7271 ; CHECK-LABEL: fcmp_ogt_vf_nxv1f64:
7272 ; CHECK:       # %bb.0:
7273 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7274 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7275 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7276 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7277 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7278 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7279 ; CHECK-NEXT:    ret
7280   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7281   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7282   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7283   ret <vscale x 1 x i1> %1
7286 define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7287 ; CHECK-LABEL: fcmp_ogt_fv_nxv1f64:
7288 ; CHECK:       # %bb.0:
7289 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7290 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7291 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7292 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7293 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7294 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7295 ; CHECK-NEXT:    ret
7296   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7297   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7298   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7299   ret <vscale x 1 x i1> %1
7302 define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7303 ; CHECK-LABEL: fcmp_oge_vv_nxv1f64:
7304 ; CHECK:       # %bb.0:
7305 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7306 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7307 ; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7308 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7309 ; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
7310 ; CHECK-NEXT:    ret
7311   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7312   ret <vscale x 1 x i1> %1
7315 define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7316 ; CHECK-LABEL: fcmp_oge_vf_nxv1f64:
7317 ; CHECK:       # %bb.0:
7318 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7319 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7320 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7321 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7322 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7323 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7324 ; CHECK-NEXT:    ret
7325   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7326   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7327   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7328   ret <vscale x 1 x i1> %1
7331 define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7332 ; CHECK-LABEL: fcmp_oge_fv_nxv1f64:
7333 ; CHECK:       # %bb.0:
7334 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7335 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7336 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7337 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7338 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7339 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7340 ; CHECK-NEXT:    ret
7341   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7342   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7343   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7344   ret <vscale x 1 x i1> %1
7347 define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7348 ; CHECK-LABEL: fcmp_olt_vv_nxv1f64:
7349 ; CHECK:       # %bb.0:
7350 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7351 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7352 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7353 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7354 ; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
7355 ; CHECK-NEXT:    ret
7356   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
7357   ret <vscale x 1 x i1> %1
7360 define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7361 ; CHECK-LABEL: fcmp_olt_vf_nxv1f64:
7362 ; CHECK:       # %bb.0:
7363 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7364 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7365 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7366 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7367 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7368 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7369 ; CHECK-NEXT:    ret
7370   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7371   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7372   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
7373   ret <vscale x 1 x i1> %1
7376 define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7377 ; CHECK-LABEL: fcmp_olt_fv_nxv1f64:
7378 ; CHECK:       # %bb.0:
7379 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7380 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7381 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7382 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7383 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7384 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7385 ; CHECK-NEXT:    ret
7386   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7387   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7388   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
7389   ret <vscale x 1 x i1> %1
7392 define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7393 ; CHECK-LABEL: fcmp_ole_vv_nxv1f64:
7394 ; CHECK:       # %bb.0:
7395 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7396 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7397 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7398 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7399 ; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
7400 ; CHECK-NEXT:    ret
7401   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
7402   ret <vscale x 1 x i1> %1
7405 define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7406 ; CHECK-LABEL: fcmp_ole_vf_nxv1f64:
7407 ; CHECK:       # %bb.0:
7408 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7409 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7410 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7411 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7412 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7413 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7414 ; CHECK-NEXT:    ret
7415   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7416   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7417   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
7418   ret <vscale x 1 x i1> %1
7421 define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7422 ; CHECK-LABEL: fcmp_ole_fv_nxv1f64:
7423 ; CHECK:       # %bb.0:
7424 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7425 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7426 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7427 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7428 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7429 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7430 ; CHECK-NEXT:    ret
7431   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7432   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7433   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
7434   ret <vscale x 1 x i1> %1
7437 define <vscale x 1 x i1> @fcmp_one_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7438 ; CHECK-LABEL: fcmp_one_vv_nxv1f64:
7439 ; CHECK:       # %bb.0:
7440 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7441 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7442 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7443 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7444 ; CHECK-NEXT:    vmv.v.v v10, v0
7445 ; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
7446 ; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7447 ; CHECK-NEXT:    vmor.mm v0, v0, v10
7448 ; CHECK-NEXT:    ret
7449   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
7450   ret <vscale x 1 x i1> %1
7453 define <vscale x 1 x i1> @fcmp_one_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7454 ; CHECK-LABEL: fcmp_one_vf_nxv1f64:
7455 ; CHECK:       # %bb.0:
7456 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7457 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7458 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7459 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7460 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7461 ; CHECK-NEXT:    vmv.v.v v9, v0
7462 ; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
7463 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7464 ; CHECK-NEXT:    vmor.mm v0, v0, v9
7465 ; CHECK-NEXT:    ret
7466   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7467   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7468   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
7469   ret <vscale x 1 x i1> %1
7472 define <vscale x 1 x i1> @fcmp_one_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7473 ; CHECK-LABEL: fcmp_one_fv_nxv1f64:
7474 ; CHECK:       # %bb.0:
7475 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7476 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7477 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7478 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7479 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7480 ; CHECK-NEXT:    vmv.v.v v9, v0
7481 ; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
7482 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7483 ; CHECK-NEXT:    vmor.mm v0, v0, v9
7484 ; CHECK-NEXT:    ret
7485   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7486   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7487   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
7488   ret <vscale x 1 x i1> %1
7491 define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7492 ; CHECK-LABEL: fcmp_ord_vv_nxv1f64:
7493 ; CHECK:       # %bb.0:
7494 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7495 ; CHECK-NEXT:    vmfeq.vv v9, v9, v9
7496 ; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7497 ; CHECK-NEXT:    vmand.mm v0, v8, v9
7498 ; CHECK-NEXT:    ret
7499   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
7500   ret <vscale x 1 x i1> %1
7503 define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7504 ; CHECK-LABEL: fcmp_ord_vf_nxv1f64:
7505 ; CHECK:       # %bb.0:
7506 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7507 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7508 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7509 ; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7510 ; CHECK-NEXT:    vmand.mm v0, v8, v9
7511 ; CHECK-NEXT:    ret
7512   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7513   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7514   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
7515   ret <vscale x 1 x i1> %1
7518 define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7519 ; CHECK-LABEL: fcmp_ord_fv_nxv1f64:
7520 ; CHECK:       # %bb.0:
7521 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7522 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7523 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7524 ; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7525 ; CHECK-NEXT:    vmand.mm v0, v9, v8
7526 ; CHECK-NEXT:    ret
7527   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7528   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7529   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
7530   ret <vscale x 1 x i1> %1
7533 define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7534 ; CHECK-LABEL: fcmp_ueq_vv_nxv1f64:
7535 ; CHECK:       # %bb.0:
7536 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7537 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7538 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7539 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7540 ; CHECK-NEXT:    vmv.v.v v10, v0
7541 ; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
7542 ; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7543 ; CHECK-NEXT:    vmnor.mm v0, v0, v10
7544 ; CHECK-NEXT:    ret
7545   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7546   ret <vscale x 1 x i1> %1
7549 define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7550 ; CHECK-LABEL: fcmp_ueq_vf_nxv1f64:
7551 ; CHECK:       # %bb.0:
7552 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7553 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7554 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7555 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7556 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7557 ; CHECK-NEXT:    vmv.v.v v9, v0
7558 ; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
7559 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7560 ; CHECK-NEXT:    vmnor.mm v0, v0, v9
7561 ; CHECK-NEXT:    ret
7562   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7563   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7564   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7565   ret <vscale x 1 x i1> %1
7568 define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7569 ; CHECK-LABEL: fcmp_ueq_fv_nxv1f64:
7570 ; CHECK:       # %bb.0:
7571 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7572 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7573 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7574 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7575 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7576 ; CHECK-NEXT:    vmv.v.v v9, v0
7577 ; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
7578 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7579 ; CHECK-NEXT:    vmnor.mm v0, v0, v9
7580 ; CHECK-NEXT:    ret
7581   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7582   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7583   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7584   ret <vscale x 1 x i1> %1
7587 define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7588 ; CHECK-LABEL: fcmp_ugt_vv_nxv1f64:
7589 ; CHECK:       # %bb.0:
7590 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7591 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7592 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7593 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7594 ; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
7595 ; CHECK-NEXT:    vmnot.m v0, v0
7596 ; CHECK-NEXT:    ret
7597   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7598   ret <vscale x 1 x i1> %1
7601 define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7602 ; CHECK-LABEL: fcmp_ugt_vf_nxv1f64:
7603 ; CHECK:       # %bb.0:
7604 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7605 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7606 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7607 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7608 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7609 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7610 ; CHECK-NEXT:    vmnot.m v0, v0
7611 ; CHECK-NEXT:    ret
7612   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7613   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7614   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7615   ret <vscale x 1 x i1> %1
7618 define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7619 ; CHECK-LABEL: fcmp_ugt_fv_nxv1f64:
7620 ; CHECK:       # %bb.0:
7621 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7622 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7623 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7624 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7625 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7626 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7627 ; CHECK-NEXT:    vmnot.m v0, v0
7628 ; CHECK-NEXT:    ret
7629   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7630   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7631   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7632   ret <vscale x 1 x i1> %1
7635 define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7636 ; CHECK-LABEL: fcmp_uge_vv_nxv1f64:
7637 ; CHECK:       # %bb.0:
7638 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7639 ; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7640 ; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7641 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7642 ; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
7643 ; CHECK-NEXT:    vmnot.m v0, v0
7644 ; CHECK-NEXT:    ret
7645   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
7646   ret <vscale x 1 x i1> %1
7649 define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7650 ; CHECK-LABEL: fcmp_uge_vf_nxv1f64:
7651 ; CHECK:       # %bb.0:
7652 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7653 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7654 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7655 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7656 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7657 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7658 ; CHECK-NEXT:    vmnot.m v0, v0
7659 ; CHECK-NEXT:    ret
7660   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7661   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7662   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
7663   ret <vscale x 1 x i1> %1
7666 define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7667 ; CHECK-LABEL: fcmp_uge_fv_nxv1f64:
7668 ; CHECK:       # %bb.0:
7669 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7670 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7671 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7672 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7673 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7674 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7675 ; CHECK-NEXT:    vmnot.m v0, v0
7676 ; CHECK-NEXT:    ret
7677   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7678   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7679   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
7680   ret <vscale x 1 x i1> %1
7683 define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7684 ; CHECK-LABEL: fcmp_ult_vv_nxv1f64:
7685 ; CHECK:       # %bb.0:
7686 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7687 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7688 ; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7689 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7690 ; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
7691 ; CHECK-NEXT:    vmnot.m v0, v0
7692 ; CHECK-NEXT:    ret
7693   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7694   ret <vscale x 1 x i1> %1
7697 define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7698 ; CHECK-LABEL: fcmp_ult_vf_nxv1f64:
7699 ; CHECK:       # %bb.0:
7700 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7701 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7702 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7703 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7704 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7705 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7706 ; CHECK-NEXT:    vmnot.m v0, v0
7707 ; CHECK-NEXT:    ret
7708   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7709   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7710   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7711   ret <vscale x 1 x i1> %1
7714 define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7715 ; CHECK-LABEL: fcmp_ult_fv_nxv1f64:
7716 ; CHECK:       # %bb.0:
7717 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7718 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7719 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7720 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7721 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7722 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7723 ; CHECK-NEXT:    vmnot.m v0, v0
7724 ; CHECK-NEXT:    ret
7725   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7726   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7727   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7728   ret <vscale x 1 x i1> %1
7731 define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7732 ; CHECK-LABEL: fcmp_ule_vv_nxv1f64:
7733 ; CHECK:       # %bb.0:
7734 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7735 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7736 ; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7737 ; CHECK-NEXT:    vmand.mm v0, v11, v10
7738 ; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7739 ; CHECK-NEXT:    vmnot.m v0, v0
7740 ; CHECK-NEXT:    ret
7741   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7742   ret <vscale x 1 x i1> %1
7745 define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7746 ; CHECK-LABEL: fcmp_ule_vf_nxv1f64:
7747 ; CHECK:       # %bb.0:
7748 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7749 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7750 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7751 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7752 ; CHECK-NEXT:    vmand.mm v0, v9, v10
7753 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7754 ; CHECK-NEXT:    vmnot.m v0, v0
7755 ; CHECK-NEXT:    ret
7756   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7757   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7758   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7759   ret <vscale x 1 x i1> %1
7762 define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7763 ; CHECK-LABEL: fcmp_ule_fv_nxv1f64:
7764 ; CHECK:       # %bb.0:
7765 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
7766 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7767 ; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7768 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7769 ; CHECK-NEXT:    vmand.mm v0, v10, v9
7770 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7771 ; CHECK-NEXT:    vmnot.m v0, v0
7772 ; CHECK-NEXT:    ret
7773   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7774   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7775   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7776   ret <vscale x 1 x i1> %1
7779 define <vscale x 1 x i1> @fcmp_une_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7780 ; CHECK-LABEL: fcmp_une_vv_nxv1f64:
7781 ; CHECK:       # %bb.0:
7782 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7783 ; CHECK-NEXT:    vmfne.vv v0, v8, v9
7784 ; CHECK-NEXT:    ret
7785   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7786   ret <vscale x 1 x i1> %1
7789 define <vscale x 1 x i1> @fcmp_une_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7790 ; CHECK-LABEL: fcmp_une_vf_nxv1f64:
7791 ; CHECK:       # %bb.0:
7792 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7793 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7794 ; CHECK-NEXT:    ret
7795   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7796   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7797   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7798   ret <vscale x 1 x i1> %1
7801 define <vscale x 1 x i1> @fcmp_une_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7802 ; CHECK-LABEL: fcmp_une_fv_nxv1f64:
7803 ; CHECK:       # %bb.0:
7804 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7805 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7806 ; CHECK-NEXT:    ret
7807   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7808   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7809   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7810   ret <vscale x 1 x i1> %1
7813 define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp {
7814 ; CHECK-LABEL: fcmp_uno_vv_nxv1f64:
7815 ; CHECK:       # %bb.0:
7816 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7817 ; CHECK-NEXT:    vmfne.vv v9, v9, v9
7818 ; CHECK-NEXT:    vmfne.vv v8, v8, v8
7819 ; CHECK-NEXT:    vmor.mm v0, v8, v9
7820 ; CHECK-NEXT:    ret
7821   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7822   ret <vscale x 1 x i1> %1
7825 define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7826 ; CHECK-LABEL: fcmp_uno_vf_nxv1f64:
7827 ; CHECK:       # %bb.0:
7828 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7829 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7830 ; CHECK-NEXT:    vmfne.vf v9, v9, fa0
7831 ; CHECK-NEXT:    vmfne.vv v8, v8, v8
7832 ; CHECK-NEXT:    vmor.mm v0, v8, v9
7833 ; CHECK-NEXT:    ret
7834   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7835   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7836   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7837   ret <vscale x 1 x i1> %1
7840 define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp {
7841 ; CHECK-LABEL: fcmp_uno_fv_nxv1f64:
7842 ; CHECK:       # %bb.0:
7843 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
7844 ; CHECK-NEXT:    vfmv.v.f v9, fa0
7845 ; CHECK-NEXT:    vmfne.vf v9, v9, fa0
7846 ; CHECK-NEXT:    vmfne.vv v8, v8, v8
7847 ; CHECK-NEXT:    vmor.mm v0, v9, v8
7848 ; CHECK-NEXT:    ret
7849   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
7850   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
7851   %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7852   ret <vscale x 1 x i1> %1
7855 declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata)
7856 define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
7857 ; CHECK-LABEL: fcmp_oeq_vv_nxv2f64:
7858 ; CHECK:       # %bb.0:
7859 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
7860 ; CHECK-NEXT:    vmfeq.vv v0, v8, v10
7861 ; CHECK-NEXT:    ret
7862   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7863   ret <vscale x 2 x i1> %1
7866 define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7867 ; CHECK-LABEL: fcmp_oeq_vf_nxv2f64:
7868 ; CHECK:       # %bb.0:
7869 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
7870 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7871 ; CHECK-NEXT:    ret
7872   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7873   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7874   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7875   ret <vscale x 2 x i1> %1
7878 define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7879 ; CHECK-LABEL: fcmp_oeq_fv_nxv2f64:
7880 ; CHECK:       # %bb.0:
7881 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
7882 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7883 ; CHECK-NEXT:    ret
7884   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7885   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7886   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7887   ret <vscale x 2 x i1> %1
7890 define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
7891 ; CHECK-LABEL: fcmp_ogt_vv_nxv2f64:
7892 ; CHECK:       # %bb.0:
7893 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7894 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7895 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
7896 ; CHECK-NEXT:    vmand.mm v12, v13, v12
7897 ; CHECK-NEXT:    vmv1r.v v0, v12
7898 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
7899 ; CHECK-NEXT:    vmv1r.v v0, v12
7900 ; CHECK-NEXT:    ret
7901   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7902   ret <vscale x 2 x i1> %1
7905 define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7906 ; CHECK-LABEL: fcmp_ogt_vf_nxv2f64:
7907 ; CHECK:       # %bb.0:
7908 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7909 ; CHECK-NEXT:    vfmv.v.f v10, fa0
7910 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
7911 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7912 ; CHECK-NEXT:    vmand.mm v10, v12, v10
7913 ; CHECK-NEXT:    vmv1r.v v0, v10
7914 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
7915 ; CHECK-NEXT:    vmv1r.v v0, v10
7916 ; CHECK-NEXT:    ret
7917   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7918   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7919   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7920   ret <vscale x 2 x i1> %1
7923 define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7924 ; CHECK-LABEL: fcmp_ogt_fv_nxv2f64:
7925 ; CHECK:       # %bb.0:
7926 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7927 ; CHECK-NEXT:    vfmv.v.f v10, fa0
7928 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
7929 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7930 ; CHECK-NEXT:    vmand.mm v10, v10, v12
7931 ; CHECK-NEXT:    vmv1r.v v0, v10
7932 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
7933 ; CHECK-NEXT:    vmv1r.v v0, v10
7934 ; CHECK-NEXT:    ret
7935   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7936   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7937   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7938   ret <vscale x 2 x i1> %1
7941 define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
7942 ; CHECK-LABEL: fcmp_oge_vv_nxv2f64:
7943 ; CHECK:       # %bb.0:
7944 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7945 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7946 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
7947 ; CHECK-NEXT:    vmand.mm v12, v13, v12
7948 ; CHECK-NEXT:    vmv1r.v v0, v12
7949 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
7950 ; CHECK-NEXT:    vmv1r.v v0, v12
7951 ; CHECK-NEXT:    ret
7952   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7953   ret <vscale x 2 x i1> %1
7956 define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7957 ; CHECK-LABEL: fcmp_oge_vf_nxv2f64:
7958 ; CHECK:       # %bb.0:
7959 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7960 ; CHECK-NEXT:    vfmv.v.f v10, fa0
7961 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
7962 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7963 ; CHECK-NEXT:    vmand.mm v10, v12, v10
7964 ; CHECK-NEXT:    vmv1r.v v0, v10
7965 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
7966 ; CHECK-NEXT:    vmv1r.v v0, v10
7967 ; CHECK-NEXT:    ret
7968   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7969   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7970   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7971   ret <vscale x 2 x i1> %1
7974 define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
7975 ; CHECK-LABEL: fcmp_oge_fv_nxv2f64:
7976 ; CHECK:       # %bb.0:
7977 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7978 ; CHECK-NEXT:    vfmv.v.f v10, fa0
7979 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
7980 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7981 ; CHECK-NEXT:    vmand.mm v10, v10, v12
7982 ; CHECK-NEXT:    vmv1r.v v0, v10
7983 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
7984 ; CHECK-NEXT:    vmv1r.v v0, v10
7985 ; CHECK-NEXT:    ret
7986   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
7987   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
7988   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7989   ret <vscale x 2 x i1> %1
7992 define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
7993 ; CHECK-LABEL: fcmp_olt_vv_nxv2f64:
7994 ; CHECK:       # %bb.0:
7995 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
7996 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
7997 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
7998 ; CHECK-NEXT:    vmand.mm v12, v13, v12
7999 ; CHECK-NEXT:    vmv1r.v v0, v12
8000 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
8001 ; CHECK-NEXT:    vmv1r.v v0, v12
8002 ; CHECK-NEXT:    ret
8003   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
8004   ret <vscale x 2 x i1> %1
8007 define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8008 ; CHECK-LABEL: fcmp_olt_vf_nxv2f64:
8009 ; CHECK:       # %bb.0:
8010 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8011 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8012 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8013 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8014 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8015 ; CHECK-NEXT:    vmv1r.v v0, v10
8016 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8017 ; CHECK-NEXT:    vmv1r.v v0, v10
8018 ; CHECK-NEXT:    ret
8019   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8020   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8021   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
8022   ret <vscale x 2 x i1> %1
8025 define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8026 ; CHECK-LABEL: fcmp_olt_fv_nxv2f64:
8027 ; CHECK:       # %bb.0:
8028 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8029 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8030 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8031 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8032 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8033 ; CHECK-NEXT:    vmv1r.v v0, v10
8034 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8035 ; CHECK-NEXT:    vmv1r.v v0, v10
8036 ; CHECK-NEXT:    ret
8037   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8038   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8039   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
8040   ret <vscale x 2 x i1> %1
8043 define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8044 ; CHECK-LABEL: fcmp_ole_vv_nxv2f64:
8045 ; CHECK:       # %bb.0:
8046 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8047 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8048 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8049 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8050 ; CHECK-NEXT:    vmv1r.v v0, v12
8051 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
8052 ; CHECK-NEXT:    vmv1r.v v0, v12
8053 ; CHECK-NEXT:    ret
8054   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
8055   ret <vscale x 2 x i1> %1
8058 define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8059 ; CHECK-LABEL: fcmp_ole_vf_nxv2f64:
8060 ; CHECK:       # %bb.0:
8061 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8062 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8063 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8064 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8065 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8066 ; CHECK-NEXT:    vmv1r.v v0, v10
8067 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8068 ; CHECK-NEXT:    vmv1r.v v0, v10
8069 ; CHECK-NEXT:    ret
8070   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8071   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8072   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8073   ret <vscale x 2 x i1> %1
8076 define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8077 ; CHECK-LABEL: fcmp_ole_fv_nxv2f64:
8078 ; CHECK:       # %bb.0:
8079 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8080 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8081 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8082 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8083 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8084 ; CHECK-NEXT:    vmv1r.v v0, v10
8085 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8086 ; CHECK-NEXT:    vmv1r.v v0, v10
8087 ; CHECK-NEXT:    ret
8088   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8089   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8090   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8091   ret <vscale x 2 x i1> %1
8094 define <vscale x 2 x i1> @fcmp_one_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8095 ; CHECK-LABEL: fcmp_one_vv_nxv2f64:
8096 ; CHECK:       # %bb.0:
8097 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8098 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8099 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8100 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8101 ; CHECK-NEXT:    vmv1r.v v13, v12
8102 ; CHECK-NEXT:    vmv1r.v v0, v12
8103 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
8104 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8105 ; CHECK-NEXT:    vmor.mm v0, v12, v13
8106 ; CHECK-NEXT:    ret
8107   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8108   ret <vscale x 2 x i1> %1
8111 define <vscale x 2 x i1> @fcmp_one_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8112 ; CHECK-LABEL: fcmp_one_vf_nxv2f64:
8113 ; CHECK:       # %bb.0:
8114 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8115 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8116 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8117 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8118 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8119 ; CHECK-NEXT:    vmv1r.v v11, v10
8120 ; CHECK-NEXT:    vmv1r.v v0, v10
8121 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
8122 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8123 ; CHECK-NEXT:    vmor.mm v0, v10, v11
8124 ; CHECK-NEXT:    ret
8125   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8126   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8127   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8128   ret <vscale x 2 x i1> %1
8131 define <vscale x 2 x i1> @fcmp_one_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8132 ; CHECK-LABEL: fcmp_one_fv_nxv2f64:
8133 ; CHECK:       # %bb.0:
8134 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8135 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8136 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8137 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8138 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8139 ; CHECK-NEXT:    vmv1r.v v11, v10
8140 ; CHECK-NEXT:    vmv1r.v v0, v10
8141 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
8142 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8143 ; CHECK-NEXT:    vmor.mm v0, v10, v11
8144 ; CHECK-NEXT:    ret
8145   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8146   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8147   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8148   ret <vscale x 2 x i1> %1
8151 define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8152 ; CHECK-LABEL: fcmp_ord_vv_nxv2f64:
8153 ; CHECK:       # %bb.0:
8154 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8155 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8156 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8157 ; CHECK-NEXT:    vmand.mm v0, v10, v12
8158 ; CHECK-NEXT:    ret
8159   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8160   ret <vscale x 2 x i1> %1
8163 define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8164 ; CHECK-LABEL: fcmp_ord_vf_nxv2f64:
8165 ; CHECK:       # %bb.0:
8166 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8167 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8168 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8169 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8170 ; CHECK-NEXT:    vmand.mm v0, v10, v12
8171 ; CHECK-NEXT:    ret
8172   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8173   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8174   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8175   ret <vscale x 2 x i1> %1
8178 define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8179 ; CHECK-LABEL: fcmp_ord_fv_nxv2f64:
8180 ; CHECK:       # %bb.0:
8181 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8182 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8183 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8184 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8185 ; CHECK-NEXT:    vmand.mm v0, v12, v10
8186 ; CHECK-NEXT:    ret
8187   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8188   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8189   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8190   ret <vscale x 2 x i1> %1
8193 define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8194 ; CHECK-LABEL: fcmp_ueq_vv_nxv2f64:
8195 ; CHECK:       # %bb.0:
8196 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8197 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8198 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8199 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8200 ; CHECK-NEXT:    vmv1r.v v13, v12
8201 ; CHECK-NEXT:    vmv1r.v v0, v12
8202 ; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
8203 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8204 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
8205 ; CHECK-NEXT:    ret
8206   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8207   ret <vscale x 2 x i1> %1
8210 define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8211 ; CHECK-LABEL: fcmp_ueq_vf_nxv2f64:
8212 ; CHECK:       # %bb.0:
8213 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8214 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8215 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8216 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8217 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8218 ; CHECK-NEXT:    vmv1r.v v11, v10
8219 ; CHECK-NEXT:    vmv1r.v v0, v10
8220 ; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
8221 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8222 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
8223 ; CHECK-NEXT:    ret
8224   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8225   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8226   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8227   ret <vscale x 2 x i1> %1
8230 define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8231 ; CHECK-LABEL: fcmp_ueq_fv_nxv2f64:
8232 ; CHECK:       # %bb.0:
8233 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8234 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8235 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8236 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8237 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8238 ; CHECK-NEXT:    vmv1r.v v11, v10
8239 ; CHECK-NEXT:    vmv1r.v v0, v10
8240 ; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
8241 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8242 ; CHECK-NEXT:    vmnor.mm v0, v10, v11
8243 ; CHECK-NEXT:    ret
8244   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8245   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8246   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8247   ret <vscale x 2 x i1> %1
8250 define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8251 ; CHECK-LABEL: fcmp_ugt_vv_nxv2f64:
8252 ; CHECK:       # %bb.0:
8253 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8254 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8255 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8256 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8257 ; CHECK-NEXT:    vmv1r.v v0, v12
8258 ; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
8259 ; CHECK-NEXT:    vmnot.m v0, v12
8260 ; CHECK-NEXT:    ret
8261   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8262   ret <vscale x 2 x i1> %1
8265 define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8266 ; CHECK-LABEL: fcmp_ugt_vf_nxv2f64:
8267 ; CHECK:       # %bb.0:
8268 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8269 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8270 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8271 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8272 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8273 ; CHECK-NEXT:    vmv1r.v v0, v10
8274 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8275 ; CHECK-NEXT:    vmnot.m v0, v10
8276 ; CHECK-NEXT:    ret
8277   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8278   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8279   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8280   ret <vscale x 2 x i1> %1
8283 define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8284 ; CHECK-LABEL: fcmp_ugt_fv_nxv2f64:
8285 ; CHECK:       # %bb.0:
8286 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8287 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8288 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8289 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8290 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8291 ; CHECK-NEXT:    vmv1r.v v0, v10
8292 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8293 ; CHECK-NEXT:    vmnot.m v0, v10
8294 ; CHECK-NEXT:    ret
8295   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8296   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8297   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8298   ret <vscale x 2 x i1> %1
8301 define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8302 ; CHECK-LABEL: fcmp_uge_vv_nxv2f64:
8303 ; CHECK:       # %bb.0:
8304 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8305 ; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8306 ; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8307 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8308 ; CHECK-NEXT:    vmv1r.v v0, v12
8309 ; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
8310 ; CHECK-NEXT:    vmnot.m v0, v12
8311 ; CHECK-NEXT:    ret
8312   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8313   ret <vscale x 2 x i1> %1
8316 define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8317 ; CHECK-LABEL: fcmp_uge_vf_nxv2f64:
8318 ; CHECK:       # %bb.0:
8319 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8320 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8321 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8322 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8323 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8324 ; CHECK-NEXT:    vmv1r.v v0, v10
8325 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8326 ; CHECK-NEXT:    vmnot.m v0, v10
8327 ; CHECK-NEXT:    ret
8328   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8329   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8330   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
8331   ret <vscale x 2 x i1> %1
8334 define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8335 ; CHECK-LABEL: fcmp_uge_fv_nxv2f64:
8336 ; CHECK:       # %bb.0:
8337 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8338 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8339 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8340 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8341 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8342 ; CHECK-NEXT:    vmv1r.v v0, v10
8343 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8344 ; CHECK-NEXT:    vmnot.m v0, v10
8345 ; CHECK-NEXT:    ret
8346   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8347   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8348   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
8349   ret <vscale x 2 x i1> %1
8352 define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8353 ; CHECK-LABEL: fcmp_ult_vv_nxv2f64:
8354 ; CHECK:       # %bb.0:
8355 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8356 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8357 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
8358 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8359 ; CHECK-NEXT:    vmv1r.v v0, v12
8360 ; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
8361 ; CHECK-NEXT:    vmnot.m v0, v12
8362 ; CHECK-NEXT:    ret
8363   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
8364   ret <vscale x 2 x i1> %1
8367 define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8368 ; CHECK-LABEL: fcmp_ult_vf_nxv2f64:
8369 ; CHECK:       # %bb.0:
8370 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8371 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8372 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8373 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8374 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8375 ; CHECK-NEXT:    vmv1r.v v0, v10
8376 ; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8377 ; CHECK-NEXT:    vmnot.m v0, v10
8378 ; CHECK-NEXT:    ret
8379   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8380   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8381   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
8382   ret <vscale x 2 x i1> %1
8385 define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8386 ; CHECK-LABEL: fcmp_ult_fv_nxv2f64:
8387 ; CHECK:       # %bb.0:
8388 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8389 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8390 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8391 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8392 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8393 ; CHECK-NEXT:    vmv1r.v v0, v10
8394 ; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8395 ; CHECK-NEXT:    vmnot.m v0, v10
8396 ; CHECK-NEXT:    ret
8397   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8398   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8399   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
8400   ret <vscale x 2 x i1> %1
8403 define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8404 ; CHECK-LABEL: fcmp_ule_vv_nxv2f64:
8405 ; CHECK:       # %bb.0:
8406 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8407 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8408 ; CHECK-NEXT:    vmfeq.vv v13, v10, v10
8409 ; CHECK-NEXT:    vmand.mm v12, v13, v12
8410 ; CHECK-NEXT:    vmv1r.v v0, v12
8411 ; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8412 ; CHECK-NEXT:    vmnot.m v0, v12
8413 ; CHECK-NEXT:    ret
8414   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
8415   ret <vscale x 2 x i1> %1
8418 define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8419 ; CHECK-LABEL: fcmp_ule_vf_nxv2f64:
8420 ; CHECK:       # %bb.0:
8421 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8422 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8423 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8424 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8425 ; CHECK-NEXT:    vmand.mm v10, v12, v10
8426 ; CHECK-NEXT:    vmv1r.v v0, v10
8427 ; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8428 ; CHECK-NEXT:    vmnot.m v0, v10
8429 ; CHECK-NEXT:    ret
8430   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8431   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8432   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
8433   ret <vscale x 2 x i1> %1
8436 define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8437 ; CHECK-LABEL: fcmp_ule_fv_nxv2f64:
8438 ; CHECK:       # %bb.0:
8439 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
8440 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8441 ; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8442 ; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8443 ; CHECK-NEXT:    vmand.mm v10, v10, v12
8444 ; CHECK-NEXT:    vmv1r.v v0, v10
8445 ; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8446 ; CHECK-NEXT:    vmnot.m v0, v10
8447 ; CHECK-NEXT:    ret
8448   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8449   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8450   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
8451   ret <vscale x 2 x i1> %1
8454 define <vscale x 2 x i1> @fcmp_une_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8455 ; CHECK-LABEL: fcmp_une_vv_nxv2f64:
8456 ; CHECK:       # %bb.0:
8457 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8458 ; CHECK-NEXT:    vmfne.vv v0, v8, v10
8459 ; CHECK-NEXT:    ret
8460   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
8461   ret <vscale x 2 x i1> %1
8464 define <vscale x 2 x i1> @fcmp_une_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8465 ; CHECK-LABEL: fcmp_une_vf_nxv2f64:
8466 ; CHECK:       # %bb.0:
8467 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8468 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8469 ; CHECK-NEXT:    ret
8470   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8471   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8472   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
8473   ret <vscale x 2 x i1> %1
8476 define <vscale x 2 x i1> @fcmp_une_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8477 ; CHECK-LABEL: fcmp_une_fv_nxv2f64:
8478 ; CHECK:       # %bb.0:
8479 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8480 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8481 ; CHECK-NEXT:    ret
8482   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8483   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8484   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
8485   ret <vscale x 2 x i1> %1
8488 define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp {
8489 ; CHECK-LABEL: fcmp_uno_vv_nxv2f64:
8490 ; CHECK:       # %bb.0:
8491 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8492 ; CHECK-NEXT:    vmfne.vv v12, v10, v10
8493 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
8494 ; CHECK-NEXT:    vmor.mm v0, v10, v12
8495 ; CHECK-NEXT:    ret
8496   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
8497   ret <vscale x 2 x i1> %1
8500 define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8501 ; CHECK-LABEL: fcmp_uno_vf_nxv2f64:
8502 ; CHECK:       # %bb.0:
8503 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8504 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8505 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
8506 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
8507 ; CHECK-NEXT:    vmor.mm v0, v10, v12
8508 ; CHECK-NEXT:    ret
8509   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8510   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8511   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
8512   ret <vscale x 2 x i1> %1
8515 define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp {
8516 ; CHECK-LABEL: fcmp_uno_fv_nxv2f64:
8517 ; CHECK:       # %bb.0:
8518 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
8519 ; CHECK-NEXT:    vfmv.v.f v10, fa0
8520 ; CHECK-NEXT:    vmfne.vf v12, v10, fa0
8521 ; CHECK-NEXT:    vmfne.vv v10, v8, v8
8522 ; CHECK-NEXT:    vmor.mm v0, v12, v10
8523 ; CHECK-NEXT:    ret
8524   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
8525   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
8526   %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
8527   ret <vscale x 2 x i1> %1
8530 declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata)
8531 define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8532 ; CHECK-LABEL: fcmp_oeq_vv_nxv4f64:
8533 ; CHECK:       # %bb.0:
8534 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8535 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
8536 ; CHECK-NEXT:    ret
8537   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8538   ret <vscale x 4 x i1> %1
8541 define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8542 ; CHECK-LABEL: fcmp_oeq_vf_nxv4f64:
8543 ; CHECK:       # %bb.0:
8544 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8545 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8546 ; CHECK-NEXT:    ret
8547   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8548   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8549   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8550   ret <vscale x 4 x i1> %1
8553 define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8554 ; CHECK-LABEL: fcmp_oeq_fv_nxv4f64:
8555 ; CHECK:       # %bb.0:
8556 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8557 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8558 ; CHECK-NEXT:    ret
8559   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8560   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8561   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8562   ret <vscale x 4 x i1> %1
8565 define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8566 ; CHECK-LABEL: fcmp_ogt_vv_nxv4f64:
8567 ; CHECK:       # %bb.0:
8568 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8569 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
8570 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
8571 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8572 ; CHECK-NEXT:    vmv1r.v v0, v16
8573 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
8574 ; CHECK-NEXT:    vmv1r.v v0, v16
8575 ; CHECK-NEXT:    ret
8576   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8577   ret <vscale x 4 x i1> %1
8580 define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8581 ; CHECK-LABEL: fcmp_ogt_vf_nxv4f64:
8582 ; CHECK:       # %bb.0:
8583 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8584 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8585 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8586 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8587 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8588 ; CHECK-NEXT:    vmv1r.v v0, v12
8589 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
8590 ; CHECK-NEXT:    vmv1r.v v0, v12
8591 ; CHECK-NEXT:    ret
8592   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8593   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8594   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8595   ret <vscale x 4 x i1> %1
8598 define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8599 ; CHECK-LABEL: fcmp_ogt_fv_nxv4f64:
8600 ; CHECK:       # %bb.0:
8601 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8602 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8603 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8604 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8605 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8606 ; CHECK-NEXT:    vmv1r.v v0, v12
8607 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
8608 ; CHECK-NEXT:    vmv1r.v v0, v12
8609 ; CHECK-NEXT:    ret
8610   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8611   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8612   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8613   ret <vscale x 4 x i1> %1
8616 define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8617 ; CHECK-LABEL: fcmp_oge_vv_nxv4f64:
8618 ; CHECK:       # %bb.0:
8619 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8620 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
8621 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
8622 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8623 ; CHECK-NEXT:    vmv1r.v v0, v16
8624 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
8625 ; CHECK-NEXT:    vmv1r.v v0, v16
8626 ; CHECK-NEXT:    ret
8627   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
8628   ret <vscale x 4 x i1> %1
8631 define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8632 ; CHECK-LABEL: fcmp_oge_vf_nxv4f64:
8633 ; CHECK:       # %bb.0:
8634 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8635 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8636 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8637 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8638 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8639 ; CHECK-NEXT:    vmv1r.v v0, v12
8640 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
8641 ; CHECK-NEXT:    vmv1r.v v0, v12
8642 ; CHECK-NEXT:    ret
8643   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8644   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8645   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
8646   ret <vscale x 4 x i1> %1
8649 define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8650 ; CHECK-LABEL: fcmp_oge_fv_nxv4f64:
8651 ; CHECK:       # %bb.0:
8652 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8653 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8654 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8655 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8656 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8657 ; CHECK-NEXT:    vmv1r.v v0, v12
8658 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
8659 ; CHECK-NEXT:    vmv1r.v v0, v12
8660 ; CHECK-NEXT:    ret
8661   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8662   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8663   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
8664   ret <vscale x 4 x i1> %1
8667 define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8668 ; CHECK-LABEL: fcmp_olt_vv_nxv4f64:
8669 ; CHECK:       # %bb.0:
8670 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8671 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8672 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8673 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8674 ; CHECK-NEXT:    vmv1r.v v0, v16
8675 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
8676 ; CHECK-NEXT:    vmv1r.v v0, v16
8677 ; CHECK-NEXT:    ret
8678   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
8679   ret <vscale x 4 x i1> %1
8682 define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8683 ; CHECK-LABEL: fcmp_olt_vf_nxv4f64:
8684 ; CHECK:       # %bb.0:
8685 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8686 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8687 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8688 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8689 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8690 ; CHECK-NEXT:    vmv1r.v v0, v12
8691 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
8692 ; CHECK-NEXT:    vmv1r.v v0, v12
8693 ; CHECK-NEXT:    ret
8694   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8695   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8696   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
8697   ret <vscale x 4 x i1> %1
8700 define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8701 ; CHECK-LABEL: fcmp_olt_fv_nxv4f64:
8702 ; CHECK:       # %bb.0:
8703 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8704 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8705 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8706 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8707 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8708 ; CHECK-NEXT:    vmv1r.v v0, v12
8709 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
8710 ; CHECK-NEXT:    vmv1r.v v0, v12
8711 ; CHECK-NEXT:    ret
8712   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8713   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8714   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
8715   ret <vscale x 4 x i1> %1
8718 define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8719 ; CHECK-LABEL: fcmp_ole_vv_nxv4f64:
8720 ; CHECK:       # %bb.0:
8721 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8722 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8723 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8724 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8725 ; CHECK-NEXT:    vmv1r.v v0, v16
8726 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
8727 ; CHECK-NEXT:    vmv1r.v v0, v16
8728 ; CHECK-NEXT:    ret
8729   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
8730   ret <vscale x 4 x i1> %1
8733 define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8734 ; CHECK-LABEL: fcmp_ole_vf_nxv4f64:
8735 ; CHECK:       # %bb.0:
8736 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8737 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8738 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8739 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8740 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8741 ; CHECK-NEXT:    vmv1r.v v0, v12
8742 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
8743 ; CHECK-NEXT:    vmv1r.v v0, v12
8744 ; CHECK-NEXT:    ret
8745   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8746   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8747   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8748   ret <vscale x 4 x i1> %1
8751 define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8752 ; CHECK-LABEL: fcmp_ole_fv_nxv4f64:
8753 ; CHECK:       # %bb.0:
8754 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8755 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8756 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8757 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8758 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8759 ; CHECK-NEXT:    vmv1r.v v0, v12
8760 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
8761 ; CHECK-NEXT:    vmv1r.v v0, v12
8762 ; CHECK-NEXT:    ret
8763   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8764   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8765   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8766   ret <vscale x 4 x i1> %1
8769 define <vscale x 4 x i1> @fcmp_one_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8770 ; CHECK-LABEL: fcmp_one_vv_nxv4f64:
8771 ; CHECK:       # %bb.0:
8772 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8773 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8774 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8775 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8776 ; CHECK-NEXT:    vmv1r.v v17, v16
8777 ; CHECK-NEXT:    vmv1r.v v0, v16
8778 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
8779 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
8780 ; CHECK-NEXT:    vmor.mm v0, v16, v17
8781 ; CHECK-NEXT:    ret
8782   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8783   ret <vscale x 4 x i1> %1
8786 define <vscale x 4 x i1> @fcmp_one_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8787 ; CHECK-LABEL: fcmp_one_vf_nxv4f64:
8788 ; CHECK:       # %bb.0:
8789 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8790 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8791 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8792 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8793 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8794 ; CHECK-NEXT:    vmv1r.v v13, v12
8795 ; CHECK-NEXT:    vmv1r.v v0, v12
8796 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
8797 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
8798 ; CHECK-NEXT:    vmor.mm v0, v12, v13
8799 ; CHECK-NEXT:    ret
8800   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8801   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8802   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8803   ret <vscale x 4 x i1> %1
8806 define <vscale x 4 x i1> @fcmp_one_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8807 ; CHECK-LABEL: fcmp_one_fv_nxv4f64:
8808 ; CHECK:       # %bb.0:
8809 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8810 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8811 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8812 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8813 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8814 ; CHECK-NEXT:    vmv1r.v v13, v12
8815 ; CHECK-NEXT:    vmv1r.v v0, v12
8816 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
8817 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
8818 ; CHECK-NEXT:    vmor.mm v0, v12, v13
8819 ; CHECK-NEXT:    ret
8820   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8821   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8822   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8823   ret <vscale x 4 x i1> %1
8826 define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8827 ; CHECK-LABEL: fcmp_ord_vv_nxv4f64:
8828 ; CHECK:       # %bb.0:
8829 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8830 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8831 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8832 ; CHECK-NEXT:    vmand.mm v0, v12, v16
8833 ; CHECK-NEXT:    ret
8834   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8835   ret <vscale x 4 x i1> %1
8838 define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8839 ; CHECK-LABEL: fcmp_ord_vf_nxv4f64:
8840 ; CHECK:       # %bb.0:
8841 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8842 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8843 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8844 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8845 ; CHECK-NEXT:    vmand.mm v0, v12, v16
8846 ; CHECK-NEXT:    ret
8847   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8848   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8849   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8850   ret <vscale x 4 x i1> %1
8853 define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8854 ; CHECK-LABEL: fcmp_ord_fv_nxv4f64:
8855 ; CHECK:       # %bb.0:
8856 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
8857 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8858 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8859 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8860 ; CHECK-NEXT:    vmand.mm v0, v16, v12
8861 ; CHECK-NEXT:    ret
8862   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8863   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8864   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8865   ret <vscale x 4 x i1> %1
8868 define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8869 ; CHECK-LABEL: fcmp_ueq_vv_nxv4f64:
8870 ; CHECK:       # %bb.0:
8871 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8872 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8873 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8874 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8875 ; CHECK-NEXT:    vmv1r.v v17, v16
8876 ; CHECK-NEXT:    vmv1r.v v0, v16
8877 ; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
8878 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
8879 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
8880 ; CHECK-NEXT:    ret
8881   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8882   ret <vscale x 4 x i1> %1
8885 define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8886 ; CHECK-LABEL: fcmp_ueq_vf_nxv4f64:
8887 ; CHECK:       # %bb.0:
8888 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8889 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8890 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8891 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8892 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8893 ; CHECK-NEXT:    vmv1r.v v13, v12
8894 ; CHECK-NEXT:    vmv1r.v v0, v12
8895 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
8896 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
8897 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
8898 ; CHECK-NEXT:    ret
8899   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8900   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8901   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8902   ret <vscale x 4 x i1> %1
8905 define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8906 ; CHECK-LABEL: fcmp_ueq_fv_nxv4f64:
8907 ; CHECK:       # %bb.0:
8908 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8909 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8910 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8911 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8912 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8913 ; CHECK-NEXT:    vmv1r.v v13, v12
8914 ; CHECK-NEXT:    vmv1r.v v0, v12
8915 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
8916 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
8917 ; CHECK-NEXT:    vmnor.mm v0, v12, v13
8918 ; CHECK-NEXT:    ret
8919   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8920   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8921   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8922   ret <vscale x 4 x i1> %1
8925 define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8926 ; CHECK-LABEL: fcmp_ugt_vv_nxv4f64:
8927 ; CHECK:       # %bb.0:
8928 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8929 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8930 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8931 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8932 ; CHECK-NEXT:    vmv1r.v v0, v16
8933 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
8934 ; CHECK-NEXT:    vmnot.m v0, v16
8935 ; CHECK-NEXT:    ret
8936   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8937   ret <vscale x 4 x i1> %1
8940 define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8941 ; CHECK-LABEL: fcmp_ugt_vf_nxv4f64:
8942 ; CHECK:       # %bb.0:
8943 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8944 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8945 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8946 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8947 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8948 ; CHECK-NEXT:    vmv1r.v v0, v12
8949 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
8950 ; CHECK-NEXT:    vmnot.m v0, v12
8951 ; CHECK-NEXT:    ret
8952   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8953   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8954   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8955   ret <vscale x 4 x i1> %1
8958 define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8959 ; CHECK-LABEL: fcmp_ugt_fv_nxv4f64:
8960 ; CHECK:       # %bb.0:
8961 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8962 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8963 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8964 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8965 ; CHECK-NEXT:    vmand.mm v12, v16, v12
8966 ; CHECK-NEXT:    vmv1r.v v0, v12
8967 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
8968 ; CHECK-NEXT:    vmnot.m v0, v12
8969 ; CHECK-NEXT:    ret
8970   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
8971   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
8972   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8973   ret <vscale x 4 x i1> %1
8976 define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
8977 ; CHECK-LABEL: fcmp_uge_vv_nxv4f64:
8978 ; CHECK:       # %bb.0:
8979 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8980 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12
8981 ; CHECK-NEXT:    vmfeq.vv v17, v8, v8
8982 ; CHECK-NEXT:    vmand.mm v16, v17, v16
8983 ; CHECK-NEXT:    vmv1r.v v0, v16
8984 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
8985 ; CHECK-NEXT:    vmnot.m v0, v16
8986 ; CHECK-NEXT:    ret
8987   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8988   ret <vscale x 4 x i1> %1
8991 define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
8992 ; CHECK-LABEL: fcmp_uge_vf_nxv4f64:
8993 ; CHECK:       # %bb.0:
8994 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
8995 ; CHECK-NEXT:    vfmv.v.f v12, fa0
8996 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
8997 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8998 ; CHECK-NEXT:    vmand.mm v12, v12, v16
8999 ; CHECK-NEXT:    vmv1r.v v0, v12
9000 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9001 ; CHECK-NEXT:    vmnot.m v0, v12
9002 ; CHECK-NEXT:    ret
9003   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9004   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9005   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
9006   ret <vscale x 4 x i1> %1
9009 define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9010 ; CHECK-LABEL: fcmp_uge_fv_nxv4f64:
9011 ; CHECK:       # %bb.0:
9012 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9013 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9014 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9015 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9016 ; CHECK-NEXT:    vmand.mm v12, v16, v12
9017 ; CHECK-NEXT:    vmv1r.v v0, v12
9018 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9019 ; CHECK-NEXT:    vmnot.m v0, v12
9020 ; CHECK-NEXT:    ret
9021   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9022   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9023   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
9024   ret <vscale x 4 x i1> %1
9027 define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
9028 ; CHECK-LABEL: fcmp_ult_vv_nxv4f64:
9029 ; CHECK:       # %bb.0:
9030 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9031 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9032 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9033 ; CHECK-NEXT:    vmand.mm v16, v17, v16
9034 ; CHECK-NEXT:    vmv1r.v v0, v16
9035 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
9036 ; CHECK-NEXT:    vmnot.m v0, v16
9037 ; CHECK-NEXT:    ret
9038   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
9039   ret <vscale x 4 x i1> %1
9042 define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9043 ; CHECK-LABEL: fcmp_ult_vf_nxv4f64:
9044 ; CHECK:       # %bb.0:
9045 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9046 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9047 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9048 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9049 ; CHECK-NEXT:    vmand.mm v12, v16, v12
9050 ; CHECK-NEXT:    vmv1r.v v0, v12
9051 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
9052 ; CHECK-NEXT:    vmnot.m v0, v12
9053 ; CHECK-NEXT:    ret
9054   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9055   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9056   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
9057   ret <vscale x 4 x i1> %1
9060 define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9061 ; CHECK-LABEL: fcmp_ult_fv_nxv4f64:
9062 ; CHECK:       # %bb.0:
9063 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9064 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9065 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9066 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9067 ; CHECK-NEXT:    vmand.mm v12, v12, v16
9068 ; CHECK-NEXT:    vmv1r.v v0, v12
9069 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
9070 ; CHECK-NEXT:    vmnot.m v0, v12
9071 ; CHECK-NEXT:    ret
9072   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9073   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9074   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
9075   ret <vscale x 4 x i1> %1
9078 define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
9079 ; CHECK-LABEL: fcmp_ule_vv_nxv4f64:
9080 ; CHECK:       # %bb.0:
9081 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9082 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9083 ; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9084 ; CHECK-NEXT:    vmand.mm v16, v17, v16
9085 ; CHECK-NEXT:    vmv1r.v v0, v16
9086 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
9087 ; CHECK-NEXT:    vmnot.m v0, v16
9088 ; CHECK-NEXT:    ret
9089   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9090   ret <vscale x 4 x i1> %1
9093 define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9094 ; CHECK-LABEL: fcmp_ule_vf_nxv4f64:
9095 ; CHECK:       # %bb.0:
9096 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9097 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9098 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9099 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9100 ; CHECK-NEXT:    vmand.mm v12, v16, v12
9101 ; CHECK-NEXT:    vmv1r.v v0, v12
9102 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9103 ; CHECK-NEXT:    vmnot.m v0, v12
9104 ; CHECK-NEXT:    ret
9105   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9106   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9107   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9108   ret <vscale x 4 x i1> %1
9111 define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9112 ; CHECK-LABEL: fcmp_ule_fv_nxv4f64:
9113 ; CHECK:       # %bb.0:
9114 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
9115 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9116 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9117 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9118 ; CHECK-NEXT:    vmand.mm v12, v12, v16
9119 ; CHECK-NEXT:    vmv1r.v v0, v12
9120 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9121 ; CHECK-NEXT:    vmnot.m v0, v12
9122 ; CHECK-NEXT:    ret
9123   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9124   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9125   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9126   ret <vscale x 4 x i1> %1
9129 define <vscale x 4 x i1> @fcmp_une_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
9130 ; CHECK-LABEL: fcmp_une_vv_nxv4f64:
9131 ; CHECK:       # %bb.0:
9132 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9133 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
9134 ; CHECK-NEXT:    ret
9135   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9136   ret <vscale x 4 x i1> %1
9139 define <vscale x 4 x i1> @fcmp_une_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9140 ; CHECK-LABEL: fcmp_une_vf_nxv4f64:
9141 ; CHECK:       # %bb.0:
9142 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9143 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9144 ; CHECK-NEXT:    ret
9145   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9146   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9147   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9148   ret <vscale x 4 x i1> %1
9151 define <vscale x 4 x i1> @fcmp_une_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9152 ; CHECK-LABEL: fcmp_une_fv_nxv4f64:
9153 ; CHECK:       # %bb.0:
9154 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9155 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9156 ; CHECK-NEXT:    ret
9157   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9158   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9159   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9160   ret <vscale x 4 x i1> %1
9163 define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp {
9164 ; CHECK-LABEL: fcmp_uno_vv_nxv4f64:
9165 ; CHECK:       # %bb.0:
9166 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9167 ; CHECK-NEXT:    vmfne.vv v16, v12, v12
9168 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
9169 ; CHECK-NEXT:    vmor.mm v0, v12, v16
9170 ; CHECK-NEXT:    ret
9171   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9172   ret <vscale x 4 x i1> %1
9175 define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9176 ; CHECK-LABEL: fcmp_uno_vf_nxv4f64:
9177 ; CHECK:       # %bb.0:
9178 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9179 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9180 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
9181 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
9182 ; CHECK-NEXT:    vmor.mm v0, v12, v16
9183 ; CHECK-NEXT:    ret
9184   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9185   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9186   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9187   ret <vscale x 4 x i1> %1
9190 define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp {
9191 ; CHECK-LABEL: fcmp_uno_fv_nxv4f64:
9192 ; CHECK:       # %bb.0:
9193 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
9194 ; CHECK-NEXT:    vfmv.v.f v12, fa0
9195 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0
9196 ; CHECK-NEXT:    vmfne.vv v12, v8, v8
9197 ; CHECK-NEXT:    vmor.mm v0, v16, v12
9198 ; CHECK-NEXT:    ret
9199   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
9200   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
9201   %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
9202   ret <vscale x 4 x i1> %1
9205 declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata)
9206 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9207 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f64:
9208 ; CHECK:       # %bb.0:
9209 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9210 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
9211 ; CHECK-NEXT:    ret
9212   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9213   ret <vscale x 8 x i1> %1
9216 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9217 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f64:
9218 ; CHECK:       # %bb.0:
9219 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9220 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9221 ; CHECK-NEXT:    ret
9222   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9223   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9224   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9225   ret <vscale x 8 x i1> %1
9228 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9229 ; CHECK-LABEL: fcmp_oeq_fv_nxv8f64:
9230 ; CHECK:       # %bb.0:
9231 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9232 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9233 ; CHECK-NEXT:    ret
9234   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9235   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9236   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9237   ret <vscale x 8 x i1> %1
9240 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9241 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f64:
9242 ; CHECK:       # %bb.0:
9243 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9244 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
9245 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
9246 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9247 ; CHECK-NEXT:    vmv1r.v v0, v24
9248 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
9249 ; CHECK-NEXT:    vmv1r.v v0, v24
9250 ; CHECK-NEXT:    ret
9251   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9252   ret <vscale x 8 x i1> %1
9255 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9256 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f64:
9257 ; CHECK:       # %bb.0:
9258 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9259 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9260 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9261 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9262 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9263 ; CHECK-NEXT:    vmv1r.v v0, v16
9264 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9265 ; CHECK-NEXT:    vmv1r.v v0, v16
9266 ; CHECK-NEXT:    ret
9267   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9268   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9269   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9270   ret <vscale x 8 x i1> %1
9273 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9274 ; CHECK-LABEL: fcmp_ogt_fv_nxv8f64:
9275 ; CHECK:       # %bb.0:
9276 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9277 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9278 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9279 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9280 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9281 ; CHECK-NEXT:    vmv1r.v v0, v16
9282 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9283 ; CHECK-NEXT:    vmv1r.v v0, v16
9284 ; CHECK-NEXT:    ret
9285   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9286   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9287   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9288   ret <vscale x 8 x i1> %1
9291 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9292 ; CHECK-LABEL: fcmp_oge_vv_nxv8f64:
9293 ; CHECK:       # %bb.0:
9294 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9295 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
9296 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
9297 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9298 ; CHECK-NEXT:    vmv1r.v v0, v24
9299 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
9300 ; CHECK-NEXT:    vmv1r.v v0, v24
9301 ; CHECK-NEXT:    ret
9302   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
9303   ret <vscale x 8 x i1> %1
9306 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9307 ; CHECK-LABEL: fcmp_oge_vf_nxv8f64:
9308 ; CHECK:       # %bb.0:
9309 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9310 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9311 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9312 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9313 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9314 ; CHECK-NEXT:    vmv1r.v v0, v16
9315 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
9316 ; CHECK-NEXT:    vmv1r.v v0, v16
9317 ; CHECK-NEXT:    ret
9318   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9319   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9320   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
9321   ret <vscale x 8 x i1> %1
9324 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9325 ; CHECK-LABEL: fcmp_oge_fv_nxv8f64:
9326 ; CHECK:       # %bb.0:
9327 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9328 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9329 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9330 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9331 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9332 ; CHECK-NEXT:    vmv1r.v v0, v16
9333 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
9334 ; CHECK-NEXT:    vmv1r.v v0, v16
9335 ; CHECK-NEXT:    ret
9336   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9337   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9338   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
9339   ret <vscale x 8 x i1> %1
9342 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9343 ; CHECK-LABEL: fcmp_olt_vv_nxv8f64:
9344 ; CHECK:       # %bb.0:
9345 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9346 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9347 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9348 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9349 ; CHECK-NEXT:    vmv1r.v v0, v24
9350 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
9351 ; CHECK-NEXT:    vmv1r.v v0, v24
9352 ; CHECK-NEXT:    ret
9353   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
9354   ret <vscale x 8 x i1> %1
9357 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9358 ; CHECK-LABEL: fcmp_olt_vf_nxv8f64:
9359 ; CHECK:       # %bb.0:
9360 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9361 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9362 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9363 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9364 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9365 ; CHECK-NEXT:    vmv1r.v v0, v16
9366 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9367 ; CHECK-NEXT:    vmv1r.v v0, v16
9368 ; CHECK-NEXT:    ret
9369   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9370   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9371   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
9372   ret <vscale x 8 x i1> %1
9375 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9376 ; CHECK-LABEL: fcmp_olt_fv_nxv8f64:
9377 ; CHECK:       # %bb.0:
9378 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9379 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9380 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9381 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9382 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9383 ; CHECK-NEXT:    vmv1r.v v0, v16
9384 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9385 ; CHECK-NEXT:    vmv1r.v v0, v16
9386 ; CHECK-NEXT:    ret
9387   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9388   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9389   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
9390   ret <vscale x 8 x i1> %1
9393 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9394 ; CHECK-LABEL: fcmp_ole_vv_nxv8f64:
9395 ; CHECK:       # %bb.0:
9396 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9397 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9398 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9399 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9400 ; CHECK-NEXT:    vmv1r.v v0, v24
9401 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
9402 ; CHECK-NEXT:    vmv1r.v v0, v24
9403 ; CHECK-NEXT:    ret
9404   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
9405   ret <vscale x 8 x i1> %1
9408 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9409 ; CHECK-LABEL: fcmp_ole_vf_nxv8f64:
9410 ; CHECK:       # %bb.0:
9411 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9412 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9413 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9414 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9415 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9416 ; CHECK-NEXT:    vmv1r.v v0, v16
9417 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
9418 ; CHECK-NEXT:    vmv1r.v v0, v16
9419 ; CHECK-NEXT:    ret
9420   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9421   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9422   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
9423   ret <vscale x 8 x i1> %1
9426 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9427 ; CHECK-LABEL: fcmp_ole_fv_nxv8f64:
9428 ; CHECK:       # %bb.0:
9429 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9430 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9431 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9432 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9433 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9434 ; CHECK-NEXT:    vmv1r.v v0, v16
9435 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
9436 ; CHECK-NEXT:    vmv1r.v v0, v16
9437 ; CHECK-NEXT:    ret
9438   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9439   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9440   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
9441   ret <vscale x 8 x i1> %1
9444 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9445 ; CHECK-LABEL: fcmp_one_vv_nxv8f64:
9446 ; CHECK:       # %bb.0:
9447 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9448 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9449 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9450 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9451 ; CHECK-NEXT:    vmv1r.v v25, v24
9452 ; CHECK-NEXT:    vmv1r.v v0, v24
9453 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
9454 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
9455 ; CHECK-NEXT:    vmor.mm v0, v24, v25
9456 ; CHECK-NEXT:    ret
9457   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
9458   ret <vscale x 8 x i1> %1
9461 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9462 ; CHECK-LABEL: fcmp_one_vf_nxv8f64:
9463 ; CHECK:       # %bb.0:
9464 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9465 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9466 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9467 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9468 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9469 ; CHECK-NEXT:    vmv1r.v v17, v16
9470 ; CHECK-NEXT:    vmv1r.v v0, v16
9471 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
9472 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9473 ; CHECK-NEXT:    vmor.mm v0, v16, v17
9474 ; CHECK-NEXT:    ret
9475   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9476   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9477   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
9478   ret <vscale x 8 x i1> %1
9481 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9482 ; CHECK-LABEL: fcmp_one_fv_nxv8f64:
9483 ; CHECK:       # %bb.0:
9484 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9485 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9486 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9487 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9488 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9489 ; CHECK-NEXT:    vmv1r.v v17, v16
9490 ; CHECK-NEXT:    vmv1r.v v0, v16
9491 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
9492 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9493 ; CHECK-NEXT:    vmor.mm v0, v16, v17
9494 ; CHECK-NEXT:    ret
9495   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9496   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9497   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
9498   ret <vscale x 8 x i1> %1
9501 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9502 ; CHECK-LABEL: fcmp_ord_vv_nxv8f64:
9503 ; CHECK:       # %bb.0:
9504 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9505 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9506 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9507 ; CHECK-NEXT:    vmand.mm v0, v16, v24
9508 ; CHECK-NEXT:    ret
9509   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
9510   ret <vscale x 8 x i1> %1
9513 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9514 ; CHECK-LABEL: fcmp_ord_vf_nxv8f64:
9515 ; CHECK:       # %bb.0:
9516 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9517 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9518 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9519 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9520 ; CHECK-NEXT:    vmand.mm v0, v16, v24
9521 ; CHECK-NEXT:    ret
9522   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9523   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9524   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
9525   ret <vscale x 8 x i1> %1
9528 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9529 ; CHECK-LABEL: fcmp_ord_fv_nxv8f64:
9530 ; CHECK:       # %bb.0:
9531 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9532 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9533 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9534 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9535 ; CHECK-NEXT:    vmand.mm v0, v24, v16
9536 ; CHECK-NEXT:    ret
9537   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9538   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9539   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
9540   ret <vscale x 8 x i1> %1
9543 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9544 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f64:
9545 ; CHECK:       # %bb.0:
9546 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9547 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9548 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9549 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9550 ; CHECK-NEXT:    vmv1r.v v25, v24
9551 ; CHECK-NEXT:    vmv1r.v v0, v24
9552 ; CHECK-NEXT:    vmflt.vv v25, v8, v16, v0.t
9553 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
9554 ; CHECK-NEXT:    vmnor.mm v0, v24, v25
9555 ; CHECK-NEXT:    ret
9556   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9557   ret <vscale x 8 x i1> %1
9560 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9561 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f64:
9562 ; CHECK:       # %bb.0:
9563 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9564 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9565 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9566 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9567 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9568 ; CHECK-NEXT:    vmv1r.v v17, v16
9569 ; CHECK-NEXT:    vmv1r.v v0, v16
9570 ; CHECK-NEXT:    vmflt.vf v17, v8, fa0, v0.t
9571 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9572 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
9573 ; CHECK-NEXT:    ret
9574   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9575   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9576   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9577   ret <vscale x 8 x i1> %1
9580 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9581 ; CHECK-LABEL: fcmp_ueq_fv_nxv8f64:
9582 ; CHECK:       # %bb.0:
9583 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9584 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9585 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9586 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9587 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9588 ; CHECK-NEXT:    vmv1r.v v17, v16
9589 ; CHECK-NEXT:    vmv1r.v v0, v16
9590 ; CHECK-NEXT:    vmfgt.vf v17, v8, fa0, v0.t
9591 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9592 ; CHECK-NEXT:    vmnor.mm v0, v16, v17
9593 ; CHECK-NEXT:    ret
9594   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9595   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9596   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9597   ret <vscale x 8 x i1> %1
9600 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9601 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f64:
9602 ; CHECK:       # %bb.0:
9603 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9604 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9605 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9606 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9607 ; CHECK-NEXT:    vmv1r.v v0, v24
9608 ; CHECK-NEXT:    vmfle.vv v24, v8, v16, v0.t
9609 ; CHECK-NEXT:    vmnot.m v0, v24
9610 ; CHECK-NEXT:    ret
9611   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9612   ret <vscale x 8 x i1> %1
9615 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9616 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f64:
9617 ; CHECK:       # %bb.0:
9618 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9619 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9620 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9621 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9622 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9623 ; CHECK-NEXT:    vmv1r.v v0, v16
9624 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
9625 ; CHECK-NEXT:    vmnot.m v0, v16
9626 ; CHECK-NEXT:    ret
9627   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9628   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9629   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9630   ret <vscale x 8 x i1> %1
9633 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9634 ; CHECK-LABEL: fcmp_ugt_fv_nxv8f64:
9635 ; CHECK:       # %bb.0:
9636 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9637 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9638 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9639 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9640 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9641 ; CHECK-NEXT:    vmv1r.v v0, v16
9642 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
9643 ; CHECK-NEXT:    vmnot.m v0, v16
9644 ; CHECK-NEXT:    ret
9645   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9646   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9647   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9648   ret <vscale x 8 x i1> %1
9651 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9652 ; CHECK-LABEL: fcmp_uge_vv_nxv8f64:
9653 ; CHECK:       # %bb.0:
9654 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9655 ; CHECK-NEXT:    vmfeq.vv v24, v16, v16
9656 ; CHECK-NEXT:    vmfeq.vv v25, v8, v8
9657 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9658 ; CHECK-NEXT:    vmv1r.v v0, v24
9659 ; CHECK-NEXT:    vmflt.vv v24, v8, v16, v0.t
9660 ; CHECK-NEXT:    vmnot.m v0, v24
9661 ; CHECK-NEXT:    ret
9662   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
9663   ret <vscale x 8 x i1> %1
9666 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9667 ; CHECK-LABEL: fcmp_uge_vf_nxv8f64:
9668 ; CHECK:       # %bb.0:
9669 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9670 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9671 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9672 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9673 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9674 ; CHECK-NEXT:    vmv1r.v v0, v16
9675 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9676 ; CHECK-NEXT:    vmnot.m v0, v16
9677 ; CHECK-NEXT:    ret
9678   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9679   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9680   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
9681   ret <vscale x 8 x i1> %1
9684 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9685 ; CHECK-LABEL: fcmp_uge_fv_nxv8f64:
9686 ; CHECK:       # %bb.0:
9687 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9688 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9689 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9690 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9691 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9692 ; CHECK-NEXT:    vmv1r.v v0, v16
9693 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9694 ; CHECK-NEXT:    vmnot.m v0, v16
9695 ; CHECK-NEXT:    ret
9696   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9697   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9698   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
9699   ret <vscale x 8 x i1> %1
9702 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9703 ; CHECK-LABEL: fcmp_ult_vv_nxv8f64:
9704 ; CHECK:       # %bb.0:
9705 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9706 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
9707 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
9708 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9709 ; CHECK-NEXT:    vmv1r.v v0, v24
9710 ; CHECK-NEXT:    vmfle.vv v24, v16, v8, v0.t
9711 ; CHECK-NEXT:    vmnot.m v0, v24
9712 ; CHECK-NEXT:    ret
9713   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
9714   ret <vscale x 8 x i1> %1
9717 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9718 ; CHECK-LABEL: fcmp_ult_vf_nxv8f64:
9719 ; CHECK:       # %bb.0:
9720 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9721 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9722 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9723 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9724 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9725 ; CHECK-NEXT:    vmv1r.v v0, v16
9726 ; CHECK-NEXT:    vmfge.vf v16, v8, fa0, v0.t
9727 ; CHECK-NEXT:    vmnot.m v0, v16
9728 ; CHECK-NEXT:    ret
9729   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9730   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9731   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
9732   ret <vscale x 8 x i1> %1
9735 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9736 ; CHECK-LABEL: fcmp_ult_fv_nxv8f64:
9737 ; CHECK:       # %bb.0:
9738 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9739 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9740 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9741 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9742 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9743 ; CHECK-NEXT:    vmv1r.v v0, v16
9744 ; CHECK-NEXT:    vmfle.vf v16, v8, fa0, v0.t
9745 ; CHECK-NEXT:    vmnot.m v0, v16
9746 ; CHECK-NEXT:    ret
9747   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9748   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9749   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
9750   ret <vscale x 8 x i1> %1
9753 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9754 ; CHECK-LABEL: fcmp_ule_vv_nxv8f64:
9755 ; CHECK:       # %bb.0:
9756 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9757 ; CHECK-NEXT:    vmfeq.vv v24, v8, v8
9758 ; CHECK-NEXT:    vmfeq.vv v25, v16, v16
9759 ; CHECK-NEXT:    vmand.mm v24, v25, v24
9760 ; CHECK-NEXT:    vmv1r.v v0, v24
9761 ; CHECK-NEXT:    vmflt.vv v24, v16, v8, v0.t
9762 ; CHECK-NEXT:    vmnot.m v0, v24
9763 ; CHECK-NEXT:    ret
9764   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9765   ret <vscale x 8 x i1> %1
9768 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9769 ; CHECK-LABEL: fcmp_ule_vf_nxv8f64:
9770 ; CHECK:       # %bb.0:
9771 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9772 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9773 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9774 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9775 ; CHECK-NEXT:    vmand.mm v16, v24, v16
9776 ; CHECK-NEXT:    vmv1r.v v0, v16
9777 ; CHECK-NEXT:    vmfgt.vf v16, v8, fa0, v0.t
9778 ; CHECK-NEXT:    vmnot.m v0, v16
9779 ; CHECK-NEXT:    ret
9780   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9781   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9782   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9783   ret <vscale x 8 x i1> %1
9786 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9787 ; CHECK-LABEL: fcmp_ule_fv_nxv8f64:
9788 ; CHECK:       # %bb.0:
9789 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
9790 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9791 ; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
9792 ; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9793 ; CHECK-NEXT:    vmand.mm v16, v16, v24
9794 ; CHECK-NEXT:    vmv1r.v v0, v16
9795 ; CHECK-NEXT:    vmflt.vf v16, v8, fa0, v0.t
9796 ; CHECK-NEXT:    vmnot.m v0, v16
9797 ; CHECK-NEXT:    ret
9798   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9799   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9800   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9801   ret <vscale x 8 x i1> %1
9804 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9805 ; CHECK-LABEL: fcmp_une_vv_nxv8f64:
9806 ; CHECK:       # %bb.0:
9807 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9808 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
9809 ; CHECK-NEXT:    ret
9810   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9811   ret <vscale x 8 x i1> %1
9814 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9815 ; CHECK-LABEL: fcmp_une_vf_nxv8f64:
9816 ; CHECK:       # %bb.0:
9817 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9818 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9819 ; CHECK-NEXT:    ret
9820   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9821   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9822   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9823   ret <vscale x 8 x i1> %1
9826 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9827 ; CHECK-LABEL: fcmp_une_fv_nxv8f64:
9828 ; CHECK:       # %bb.0:
9829 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9830 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9831 ; CHECK-NEXT:    ret
9832   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9833   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9834   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9835   ret <vscale x 8 x i1> %1
9838 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp {
9839 ; CHECK-LABEL: fcmp_uno_vv_nxv8f64:
9840 ; CHECK:       # %bb.0:
9841 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9842 ; CHECK-NEXT:    vmfne.vv v24, v16, v16
9843 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
9844 ; CHECK-NEXT:    vmor.mm v0, v16, v24
9845 ; CHECK-NEXT:    ret
9846   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9847   ret <vscale x 8 x i1> %1
9850 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9851 ; CHECK-LABEL: fcmp_uno_vf_nxv8f64:
9852 ; CHECK:       # %bb.0:
9853 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9854 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9855 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
9856 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
9857 ; CHECK-NEXT:    vmor.mm v0, v16, v24
9858 ; CHECK-NEXT:    ret
9859   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9860   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9861   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9862   ret <vscale x 8 x i1> %1
9865 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp {
9866 ; CHECK-LABEL: fcmp_uno_fv_nxv8f64:
9867 ; CHECK:       # %bb.0:
9868 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
9869 ; CHECK-NEXT:    vfmv.v.f v16, fa0
9870 ; CHECK-NEXT:    vmfne.vf v24, v16, fa0
9871 ; CHECK-NEXT:    vmfne.vv v16, v8, v8
9872 ; CHECK-NEXT:    vmor.mm v0, v24, v16
9873 ; CHECK-NEXT:    ret
9874   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
9875   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
9876   %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
9877   ret <vscale x 8 x i1> %1