xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfcmp-constrained-sdnode.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata)
8define <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
16}
17
18define <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
28}
29
30define <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
40}
41
42define <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
53}
54
55define <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.vv v10, v8, v8
61; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
62; CHECK-NEXT:    vmand.mm v0, v9, v10
63; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
64; CHECK-NEXT:    ret
65  %head = insertelement <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
69}
70
71define <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.vv v10, v8, v8
77; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
78; CHECK-NEXT:    vmand.mm v0, v10, v9
79; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
80; CHECK-NEXT:    ret
81  %head = insertelement <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
85}
86
87define <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
98}
99
100define <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.vv v10, v8, v8
106; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
107; CHECK-NEXT:    vmand.mm v0, v9, v10
108; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
109; CHECK-NEXT:    ret
110  %head = insertelement <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
114}
115
116define <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.vv v10, v8, v8
122; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
123; CHECK-NEXT:    vmand.mm v0, v10, v9
124; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
125; CHECK-NEXT:    ret
126  %head = insertelement <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
130}
131
132define <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
143}
144
145define <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.vv v10, v8, v8
151; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
152; CHECK-NEXT:    vmand.mm v0, v10, v9
153; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
154; CHECK-NEXT:    ret
155  %head = insertelement <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
159}
160
161define <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.vv v10, v8, v8
167; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
168; CHECK-NEXT:    vmand.mm v0, v9, v10
169; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
170; CHECK-NEXT:    ret
171  %head = insertelement <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
175}
176
177define <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
188}
189
190define <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.vv v10, v8, v8
196; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
197; CHECK-NEXT:    vmand.mm v0, v10, v9
198; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
199; CHECK-NEXT:    ret
200  %head = insertelement <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
204}
205
206define <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.vv v10, v8, v8
212; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
213; CHECK-NEXT:    vmand.mm v0, v9, v10
214; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
215; CHECK-NEXT:    ret
216  %head = insertelement <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
220}
221
222define <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
236}
237
238define <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.vv v10, v8, v8
244; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
245; CHECK-NEXT:    vmand.mm v0, v10, v9
246; CHECK-NEXT:    vmv1r.v v9, v0
247; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
248; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
249; CHECK-NEXT:    vmor.mm v0, v0, v9
250; CHECK-NEXT:    ret
251  %head = insertelement <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
255}
256
257define <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.vv v10, v8, v8
263; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
264; CHECK-NEXT:    vmand.mm v0, v9, v10
265; CHECK-NEXT:    vmv1r.v v9, v0
266; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
267; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
268; CHECK-NEXT:    vmor.mm v0, v0, v9
269; CHECK-NEXT:    ret
270  %head = insertelement <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
274}
275
276define <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
286}
287
288define <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
301}
302
303define <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
316}
317
318define <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
332}
333
334define <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.vv v10, v8, v8
340; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
341; CHECK-NEXT:    vmand.mm v0, v10, v9
342; CHECK-NEXT:    vmv1r.v v9, v0
343; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
344; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
345; CHECK-NEXT:    vmnor.mm v0, v0, v9
346; CHECK-NEXT:    ret
347  %head = insertelement <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
351}
352
353define <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.vv v10, v8, v8
359; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
360; CHECK-NEXT:    vmand.mm v0, v9, v10
361; CHECK-NEXT:    vmv1r.v v9, v0
362; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
363; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
364; CHECK-NEXT:    vmnor.mm v0, v0, v9
365; CHECK-NEXT:    ret
366  %head = insertelement <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
370}
371
372define <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
384}
385
386define <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.vv v10, v8, v8
392; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
393; CHECK-NEXT:    vmand.mm v0, v10, v9
394; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
395; CHECK-NEXT:    vmnot.m v0, v0
396; CHECK-NEXT:    ret
397  %head = insertelement <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
401}
402
403define <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.vv v10, v8, v8
409; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
410; CHECK-NEXT:    vmand.mm v0, v9, v10
411; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
412; CHECK-NEXT:    vmnot.m v0, v0
413; CHECK-NEXT:    ret
414  %head = insertelement <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
418}
419
420define <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
432}
433
434define <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.vv v10, v8, v8
440; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
441; CHECK-NEXT:    vmand.mm v0, v10, v9
442; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
443; CHECK-NEXT:    vmnot.m v0, v0
444; CHECK-NEXT:    ret
445  %head = insertelement <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
449}
450
451define <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.vv v10, v8, v8
457; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
458; CHECK-NEXT:    vmand.mm v0, v9, v10
459; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
460; CHECK-NEXT:    vmnot.m v0, v0
461; CHECK-NEXT:    ret
462  %head = insertelement <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
466}
467
468define <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
480}
481
482define <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.vv v10, v8, v8
488; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
489; CHECK-NEXT:    vmand.mm v0, v9, v10
490; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
491; CHECK-NEXT:    vmnot.m v0, v0
492; CHECK-NEXT:    ret
493  %head = insertelement <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
497}
498
499define <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.vv v10, v8, v8
505; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
506; CHECK-NEXT:    vmand.mm v0, v10, v9
507; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
508; CHECK-NEXT:    vmnot.m v0, v0
509; CHECK-NEXT:    ret
510  %head = insertelement <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
514}
515
516define <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
528}
529
530define <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.vv v10, v8, v8
536; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
537; CHECK-NEXT:    vmand.mm v0, v9, v10
538; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
539; CHECK-NEXT:    vmnot.m v0, v0
540; CHECK-NEXT:    ret
541  %head = insertelement <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
545}
546
547define <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.vv v10, v8, v8
553; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
554; CHECK-NEXT:    vmand.mm v0, v10, v9
555; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
556; CHECK-NEXT:    vmnot.m v0, v0
557; CHECK-NEXT:    ret
558  %head = insertelement <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
562}
563
564define <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
572}
573
574define <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
584}
585
586define <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
596}
597
598define <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
608}
609
610define <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
623}
624
625define <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
638}
639
640declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata)
641define <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
649}
650
651define <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
661}
662
663define <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
673}
674
675define <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
686}
687
688define <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.vv v10, v8, v8
694; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
695; CHECK-NEXT:    vmand.mm v0, v9, v10
696; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
697; CHECK-NEXT:    ret
698  %head = insertelement <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
702}
703
704define <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.vv v10, v8, v8
710; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
711; CHECK-NEXT:    vmand.mm v0, v10, v9
712; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
713; CHECK-NEXT:    ret
714  %head = insertelement <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
718}
719
720define <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
731}
732
733define <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.vv v10, v8, v8
739; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
740; CHECK-NEXT:    vmand.mm v0, v9, v10
741; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
742; CHECK-NEXT:    ret
743  %head = insertelement <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
747}
748
749define <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.vv v10, v8, v8
755; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
756; CHECK-NEXT:    vmand.mm v0, v10, v9
757; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
758; CHECK-NEXT:    ret
759  %head = insertelement <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
763}
764
765define <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
776}
777
778define <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.vv v10, v8, v8
784; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
785; CHECK-NEXT:    vmand.mm v0, v10, v9
786; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
787; CHECK-NEXT:    ret
788  %head = insertelement <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
792}
793
794define <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.vv v10, v8, v8
800; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
801; CHECK-NEXT:    vmand.mm v0, v9, v10
802; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
803; CHECK-NEXT:    ret
804  %head = insertelement <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
808}
809
810define <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
821}
822
823define <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.vv v10, v8, v8
829; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
830; CHECK-NEXT:    vmand.mm v0, v10, v9
831; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
832; CHECK-NEXT:    ret
833  %head = insertelement <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
837}
838
839define <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.vv v10, v8, v8
845; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
846; CHECK-NEXT:    vmand.mm v0, v9, v10
847; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
848; CHECK-NEXT:    ret
849  %head = insertelement <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
853}
854
855define <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
869}
870
871define <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.vv v10, v8, v8
877; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
878; CHECK-NEXT:    vmand.mm v0, v10, v9
879; CHECK-NEXT:    vmv1r.v v9, v0
880; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
881; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
882; CHECK-NEXT:    vmor.mm v0, v0, v9
883; CHECK-NEXT:    ret
884  %head = insertelement <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
888}
889
890define <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.vv v10, v8, v8
896; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
897; CHECK-NEXT:    vmand.mm v0, v9, v10
898; CHECK-NEXT:    vmv1r.v v9, v0
899; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
900; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
901; CHECK-NEXT:    vmor.mm v0, v0, v9
902; CHECK-NEXT:    ret
903  %head = insertelement <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
907}
908
909define <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
919}
920
921define <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
934}
935
936define <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
949}
950
951define <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
965}
966
967define <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.vv v10, v8, v8
973; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
974; CHECK-NEXT:    vmand.mm v0, v10, v9
975; CHECK-NEXT:    vmv1r.v v9, v0
976; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
977; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
978; CHECK-NEXT:    vmnor.mm v0, v0, v9
979; CHECK-NEXT:    ret
980  %head = insertelement <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
984}
985
986define <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.vv v10, v8, v8
992; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
993; CHECK-NEXT:    vmand.mm v0, v9, v10
994; CHECK-NEXT:    vmv1r.v v9, v0
995; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
996; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
997; CHECK-NEXT:    vmnor.mm v0, v0, v9
998; CHECK-NEXT:    ret
999  %head = insertelement <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
1003}
1004
1005define <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
1017}
1018
1019define <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.vv v10, v8, v8
1025; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1026; CHECK-NEXT:    vmand.mm v0, v10, v9
1027; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1028; CHECK-NEXT:    vmnot.m v0, v0
1029; CHECK-NEXT:    ret
1030  %head = insertelement <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
1034}
1035
1036define <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.vv v10, v8, v8
1042; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1043; CHECK-NEXT:    vmand.mm v0, v9, v10
1044; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1045; CHECK-NEXT:    vmnot.m v0, v0
1046; CHECK-NEXT:    ret
1047  %head = insertelement <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
1051}
1052
1053define <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
1065}
1066
1067define <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.vv v10, v8, v8
1073; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1074; CHECK-NEXT:    vmand.mm v0, v10, v9
1075; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1076; CHECK-NEXT:    vmnot.m v0, v0
1077; CHECK-NEXT:    ret
1078  %head = insertelement <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
1082}
1083
1084define <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.vv v10, v8, v8
1090; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1091; CHECK-NEXT:    vmand.mm v0, v9, v10
1092; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1093; CHECK-NEXT:    vmnot.m v0, v0
1094; CHECK-NEXT:    ret
1095  %head = insertelement <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
1099}
1100
1101define <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
1113}
1114
1115define <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.vv v10, v8, v8
1121; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1122; CHECK-NEXT:    vmand.mm v0, v9, v10
1123; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1124; CHECK-NEXT:    vmnot.m v0, v0
1125; CHECK-NEXT:    ret
1126  %head = insertelement <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
1130}
1131
1132define <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.vv v10, v8, v8
1138; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1139; CHECK-NEXT:    vmand.mm v0, v10, v9
1140; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1141; CHECK-NEXT:    vmnot.m v0, v0
1142; CHECK-NEXT:    ret
1143  %head = insertelement <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
1147}
1148
1149define <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
1161}
1162
1163define <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.vv v10, v8, v8
1169; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1170; CHECK-NEXT:    vmand.mm v0, v9, v10
1171; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1172; CHECK-NEXT:    vmnot.m v0, v0
1173; CHECK-NEXT:    ret
1174  %head = insertelement <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
1178}
1179
1180define <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.vv v10, v8, v8
1186; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1187; CHECK-NEXT:    vmand.mm v0, v10, v9
1188; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1189; CHECK-NEXT:    vmnot.m v0, v0
1190; CHECK-NEXT:    ret
1191  %head = insertelement <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
1195}
1196
1197define <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
1205}
1206
1207define <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
1217}
1218
1219define <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
1229}
1230
1231define <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
1241}
1242
1243define <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
1256}
1257
1258define <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
1271}
1272
1273declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata)
1274define <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
1282}
1283
1284define <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
1294}
1295
1296define <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
1306}
1307
1308define <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
1319}
1320
1321define <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.vv v10, v8, v8
1327; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1328; CHECK-NEXT:    vmand.mm v0, v9, v10
1329; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1330; CHECK-NEXT:    ret
1331  %head = insertelement <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
1335}
1336
1337define <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.vv v10, v8, v8
1343; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1344; CHECK-NEXT:    vmand.mm v0, v10, v9
1345; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1346; CHECK-NEXT:    ret
1347  %head = insertelement <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
1351}
1352
1353define <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
1364}
1365
1366define <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.vv v10, v8, v8
1372; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1373; CHECK-NEXT:    vmand.mm v0, v9, v10
1374; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1375; CHECK-NEXT:    ret
1376  %head = insertelement <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
1380}
1381
1382define <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.vv v10, v8, v8
1388; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1389; CHECK-NEXT:    vmand.mm v0, v10, v9
1390; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1391; CHECK-NEXT:    ret
1392  %head = insertelement <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
1396}
1397
1398define <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
1409}
1410
1411define <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.vv v10, v8, v8
1417; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1418; CHECK-NEXT:    vmand.mm v0, v10, v9
1419; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1420; CHECK-NEXT:    ret
1421  %head = insertelement <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
1425}
1426
1427define <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.vv v10, v8, v8
1433; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1434; CHECK-NEXT:    vmand.mm v0, v9, v10
1435; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1436; CHECK-NEXT:    ret
1437  %head = insertelement <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
1441}
1442
1443define <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
1454}
1455
1456define <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.vv v10, v8, v8
1462; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1463; CHECK-NEXT:    vmand.mm v0, v10, v9
1464; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1465; CHECK-NEXT:    ret
1466  %head = insertelement <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
1470}
1471
1472define <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.vv v10, v8, v8
1478; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1479; CHECK-NEXT:    vmand.mm v0, v9, v10
1480; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1481; CHECK-NEXT:    ret
1482  %head = insertelement <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
1486}
1487
1488define <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
1502}
1503
1504define <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.vv v10, v8, v8
1510; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
1521}
1522
1523define <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.vv v10, v8, v8
1529; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
1540}
1541
1542define <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
1552}
1553
1554define <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
1567}
1568
1569define <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
1582}
1583
1584define <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
1598}
1599
1600define <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.vv v10, v8, v8
1606; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
1617}
1618
1619define <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.vv v10, v8, v8
1625; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
1636}
1637
1638define <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
1650}
1651
1652define <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.vv v10, v8, v8
1658; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1659; CHECK-NEXT:    vmand.mm v0, v10, v9
1660; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1661; CHECK-NEXT:    vmnot.m v0, v0
1662; CHECK-NEXT:    ret
1663  %head = insertelement <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
1667}
1668
1669define <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.vv v10, v8, v8
1675; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1676; CHECK-NEXT:    vmand.mm v0, v9, v10
1677; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1678; CHECK-NEXT:    vmnot.m v0, v0
1679; CHECK-NEXT:    ret
1680  %head = insertelement <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
1684}
1685
1686define <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
1698}
1699
1700define <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.vv v10, v8, v8
1706; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1707; CHECK-NEXT:    vmand.mm v0, v10, v9
1708; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1709; CHECK-NEXT:    vmnot.m v0, v0
1710; CHECK-NEXT:    ret
1711  %head = insertelement <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
1715}
1716
1717define <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.vv v10, v8, v8
1723; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1724; CHECK-NEXT:    vmand.mm v0, v9, v10
1725; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1726; CHECK-NEXT:    vmnot.m v0, v0
1727; CHECK-NEXT:    ret
1728  %head = insertelement <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
1732}
1733
1734define <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
1746}
1747
1748define <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.vv v10, v8, v8
1754; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1755; CHECK-NEXT:    vmand.mm v0, v9, v10
1756; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1757; CHECK-NEXT:    vmnot.m v0, v0
1758; CHECK-NEXT:    ret
1759  %head = insertelement <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
1763}
1764
1765define <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.vv v10, v8, v8
1771; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1772; CHECK-NEXT:    vmand.mm v0, v10, v9
1773; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1774; CHECK-NEXT:    vmnot.m v0, v0
1775; CHECK-NEXT:    ret
1776  %head = insertelement <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
1780}
1781
1782define <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
1794}
1795
1796define <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.vv v10, v8, v8
1802; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1803; CHECK-NEXT:    vmand.mm v0, v9, v10
1804; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1805; CHECK-NEXT:    vmnot.m v0, v0
1806; CHECK-NEXT:    ret
1807  %head = insertelement <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
1811}
1812
1813define <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.vv v10, v8, v8
1819; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1820; CHECK-NEXT:    vmand.mm v0, v10, v9
1821; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1822; CHECK-NEXT:    vmnot.m v0, v0
1823; CHECK-NEXT:    ret
1824  %head = insertelement <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
1828}
1829
1830define <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
1838}
1839
1840define <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
1850}
1851
1852define <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
1862}
1863
1864define <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
1874}
1875
1876define <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
1889}
1890
1891define <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
1904}
1905
1906declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata)
1907define <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
1915}
1916
1917define <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
1927}
1928
1929define <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
1939}
1940
1941define <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
1954}
1955
1956define <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
1972}
1973
1974define <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
1990}
1991
1992define <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
2005}
2006
2007define <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
2023}
2024
2025define <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
2041}
2042
2043define <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
2056}
2057
2058define <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
2074}
2075
2076define <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
2092}
2093
2094define <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
2107}
2108
2109define <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
2125}
2126
2127define <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
2143}
2144
2145define <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
2160}
2161
2162define <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.vv v12, v8, v8
2168; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2169; CHECK-NEXT:    vmand.mm v10, v12, v13
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
2180}
2181
2182define <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.vv v12, v8, v8
2188; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2189; CHECK-NEXT:    vmand.mm v10, v13, v12
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
2200}
2201
2202define <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
2212}
2213
2214define <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
2227}
2228
2229define <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
2242}
2243
2244define <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
2259}
2260
2261define <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.vv v12, v8, v8
2267; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2268; CHECK-NEXT:    vmand.mm v10, v12, v13
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
2279}
2280
2281define <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.vv v12, v8, v8
2287; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2288; CHECK-NEXT:    vmand.mm v10, v13, v12
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
2299}
2300
2301define <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
2314}
2315
2316define <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
2332}
2333
2334define <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
2350}
2351
2352define <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
2365}
2366
2367define <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
2383}
2384
2385define <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
2401}
2402
2403define <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
2416}
2417
2418define <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
2434}
2435
2436define <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
2452}
2453
2454define <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
2467}
2468
2469define <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
2485}
2486
2487define <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
2503}
2504
2505define <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
2513}
2514
2515define <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
2525}
2526
2527define <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
2537}
2538
2539define <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
2549}
2550
2551define <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
2564}
2565
2566define <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
2579}
2580
2581declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata)
2582define <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
2590}
2591
2592define <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
2602}
2603
2604define <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
2614}
2615
2616define <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
2629}
2630
2631define <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
2647}
2648
2649define <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
2665}
2666
2667define <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
2680}
2681
2682define <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
2698}
2699
2700define <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
2716}
2717
2718define <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
2731}
2732
2733define <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
2749}
2750
2751define <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
2767}
2768
2769define <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
2782}
2783
2784define <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
2800}
2801
2802define <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
2818}
2819
2820define <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
2835}
2836
2837define <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
2855}
2856
2857define <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
2875}
2876
2877define <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
2887}
2888
2889define <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
2902}
2903
2904define <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
2917}
2918
2919define <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
2934}
2935
2936define <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
2954}
2955
2956define <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
2974}
2975
2976define <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
2989}
2990
2991define <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
3007}
3008
3009define <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
3025}
3026
3027define <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
3040}
3041
3042define <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
3058}
3059
3060define <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
3076}
3077
3078define <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
3091}
3092
3093define <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
3109}
3110
3111define <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
3127}
3128
3129define <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
3142}
3143
3144define <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
3160}
3161
3162define <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
3178}
3179
3180define <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
3188}
3189
3190define <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
3200}
3201
3202define <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
3212}
3213
3214define <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
3224}
3225
3226define <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
3239}
3240
3241define <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
3254}
3255
3256declare <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata)
3257define <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
3265}
3266
3267define <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
3277}
3278
3279define <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
3289}
3290
3291define <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
3304}
3305
3306define <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
3322}
3323
3324define <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
3340}
3341
3342define <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
3355}
3356
3357define <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
3373}
3374
3375define <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
3391}
3392
3393define <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
3406}
3407
3408define <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
3424}
3425
3426define <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
3442}
3443
3444define <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
3457}
3458
3459define <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
3475}
3476
3477define <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
3493}
3494
3495define <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
3510}
3511
3512define <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
3530}
3531
3532define <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
3550}
3551
3552define <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
3562}
3563
3564define <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
3577}
3578
3579define <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
3592}
3593
3594define <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
3609}
3610
3611define <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
3629}
3630
3631define <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
3649}
3650
3651define <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
3664}
3665
3666define <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
3682}
3683
3684define <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
3700}
3701
3702define <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
3715}
3716
3717define <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
3733}
3734
3735define <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
3751}
3752
3753define <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
3766}
3767
3768define <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
3784}
3785
3786define <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
3802}
3803
3804define <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
3817}
3818
3819define <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
3835}
3836
3837define <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
3853}
3854
3855define <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
3863}
3864
3865define <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
3875}
3876
3877define <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
3887}
3888
3889define <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
3899}
3900
3901define <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
3914}
3915
3916define <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
3929}
3930
3931declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata)
3932define <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
3940}
3941
3942define <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
3952}
3953
3954define <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
3964}
3965
3966define <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
3977}
3978
3979define <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.vv v10, v8, v8
3985; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
3986; CHECK-NEXT:    vmand.mm v0, v9, v10
3987; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
3988; CHECK-NEXT:    ret
3989  %head = insertelement <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
3993}
3994
3995define <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.vv v10, v8, v8
4001; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4002; CHECK-NEXT:    vmand.mm v0, v10, v9
4003; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4004; CHECK-NEXT:    ret
4005  %head = insertelement <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
4009}
4010
4011define <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
4022}
4023
4024define <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.vv v10, v8, v8
4030; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4031; CHECK-NEXT:    vmand.mm v0, v9, v10
4032; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4033; CHECK-NEXT:    ret
4034  %head = insertelement <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
4038}
4039
4040define <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.vv v10, v8, v8
4046; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4047; CHECK-NEXT:    vmand.mm v0, v10, v9
4048; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4049; CHECK-NEXT:    ret
4050  %head = insertelement <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
4054}
4055
4056define <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
4067}
4068
4069define <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.vv v10, v8, v8
4075; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4076; CHECK-NEXT:    vmand.mm v0, v10, v9
4077; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4078; CHECK-NEXT:    ret
4079  %head = insertelement <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
4083}
4084
4085define <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.vv v10, v8, v8
4091; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4092; CHECK-NEXT:    vmand.mm v0, v9, v10
4093; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4094; CHECK-NEXT:    ret
4095  %head = insertelement <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
4099}
4100
4101define <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
4112}
4113
4114define <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.vv v10, v8, v8
4120; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4121; CHECK-NEXT:    vmand.mm v0, v10, v9
4122; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4123; CHECK-NEXT:    ret
4124  %head = insertelement <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
4128}
4129
4130define <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.vv v10, v8, v8
4136; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4137; CHECK-NEXT:    vmand.mm v0, v9, v10
4138; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4139; CHECK-NEXT:    ret
4140  %head = insertelement <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
4144}
4145
4146define <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
4160}
4161
4162define <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.vv v10, v8, v8
4168; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4169; CHECK-NEXT:    vmand.mm v0, v10, v9
4170; CHECK-NEXT:    vmv1r.v v9, v0
4171; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4172; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4173; CHECK-NEXT:    vmor.mm v0, v0, v9
4174; CHECK-NEXT:    ret
4175  %head = insertelement <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
4179}
4180
4181define <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.vv v10, v8, v8
4187; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4188; CHECK-NEXT:    vmand.mm v0, v9, v10
4189; CHECK-NEXT:    vmv1r.v v9, v0
4190; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4191; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4192; CHECK-NEXT:    vmor.mm v0, v0, v9
4193; CHECK-NEXT:    ret
4194  %head = insertelement <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
4198}
4199
4200define <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
4210}
4211
4212define <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
4225}
4226
4227define <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
4240}
4241
4242define <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
4256}
4257
4258define <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.vv v10, v8, v8
4264; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4265; CHECK-NEXT:    vmand.mm v0, v10, v9
4266; CHECK-NEXT:    vmv1r.v v9, v0
4267; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4268; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4269; CHECK-NEXT:    vmnor.mm v0, v0, v9
4270; CHECK-NEXT:    ret
4271  %head = insertelement <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
4275}
4276
4277define <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.vv v10, v8, v8
4283; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4284; CHECK-NEXT:    vmand.mm v0, v9, v10
4285; CHECK-NEXT:    vmv1r.v v9, v0
4286; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4287; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4288; CHECK-NEXT:    vmnor.mm v0, v0, v9
4289; CHECK-NEXT:    ret
4290  %head = insertelement <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
4294}
4295
4296define <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
4308}
4309
4310define <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.vv v10, v8, v8
4316; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4317; CHECK-NEXT:    vmand.mm v0, v10, v9
4318; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4319; CHECK-NEXT:    vmnot.m v0, v0
4320; CHECK-NEXT:    ret
4321  %head = insertelement <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
4325}
4326
4327define <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.vv v10, v8, v8
4333; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4334; CHECK-NEXT:    vmand.mm v0, v9, v10
4335; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4336; CHECK-NEXT:    vmnot.m v0, v0
4337; CHECK-NEXT:    ret
4338  %head = insertelement <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
4342}
4343
4344define <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
4356}
4357
4358define <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.vv v10, v8, v8
4364; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4365; CHECK-NEXT:    vmand.mm v0, v10, v9
4366; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4367; CHECK-NEXT:    vmnot.m v0, v0
4368; CHECK-NEXT:    ret
4369  %head = insertelement <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
4373}
4374
4375define <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.vv v10, v8, v8
4381; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4382; CHECK-NEXT:    vmand.mm v0, v9, v10
4383; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4384; CHECK-NEXT:    vmnot.m v0, v0
4385; CHECK-NEXT:    ret
4386  %head = insertelement <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
4390}
4391
4392define <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
4404}
4405
4406define <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.vv v10, v8, v8
4412; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4413; CHECK-NEXT:    vmand.mm v0, v9, v10
4414; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4415; CHECK-NEXT:    vmnot.m v0, v0
4416; CHECK-NEXT:    ret
4417  %head = insertelement <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
4421}
4422
4423define <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.vv v10, v8, v8
4429; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4430; CHECK-NEXT:    vmand.mm v0, v10, v9
4431; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4432; CHECK-NEXT:    vmnot.m v0, v0
4433; CHECK-NEXT:    ret
4434  %head = insertelement <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
4438}
4439
4440define <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
4452}
4453
4454define <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.vv v10, v8, v8
4460; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4461; CHECK-NEXT:    vmand.mm v0, v9, v10
4462; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4463; CHECK-NEXT:    vmnot.m v0, v0
4464; CHECK-NEXT:    ret
4465  %head = insertelement <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
4469}
4470
4471define <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.vv v10, v8, v8
4477; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4478; CHECK-NEXT:    vmand.mm v0, v10, v9
4479; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4480; CHECK-NEXT:    vmnot.m v0, v0
4481; CHECK-NEXT:    ret
4482  %head = insertelement <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
4486}
4487
4488define <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
4496}
4497
4498define <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
4508}
4509
4510define <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
4520}
4521
4522define <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
4532}
4533
4534define <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
4547}
4548
4549define <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
4562}
4563
4564declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata)
4565define <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
4573}
4574
4575define <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
4585}
4586
4587define <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
4597}
4598
4599define <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
4610}
4611
4612define <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.vv v10, v8, v8
4618; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4619; CHECK-NEXT:    vmand.mm v0, v9, v10
4620; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4621; CHECK-NEXT:    ret
4622  %head = insertelement <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
4626}
4627
4628define <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.vv v10, v8, v8
4634; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4635; CHECK-NEXT:    vmand.mm v0, v10, v9
4636; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4637; CHECK-NEXT:    ret
4638  %head = insertelement <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
4642}
4643
4644define <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
4655}
4656
4657define <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.vv v10, v8, v8
4663; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4664; CHECK-NEXT:    vmand.mm v0, v9, v10
4665; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4666; CHECK-NEXT:    ret
4667  %head = insertelement <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
4671}
4672
4673define <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.vv v10, v8, v8
4679; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4680; CHECK-NEXT:    vmand.mm v0, v10, v9
4681; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4682; CHECK-NEXT:    ret
4683  %head = insertelement <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
4687}
4688
4689define <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
4700}
4701
4702define <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.vv v10, v8, v8
4708; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4709; CHECK-NEXT:    vmand.mm v0, v10, v9
4710; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4711; CHECK-NEXT:    ret
4712  %head = insertelement <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
4716}
4717
4718define <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.vv v10, v8, v8
4724; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4725; CHECK-NEXT:    vmand.mm v0, v9, v10
4726; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4727; CHECK-NEXT:    ret
4728  %head = insertelement <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
4732}
4733
4734define <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
4745}
4746
4747define <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.vv v10, v8, v8
4753; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4754; CHECK-NEXT:    vmand.mm v0, v10, v9
4755; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4756; CHECK-NEXT:    ret
4757  %head = insertelement <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
4761}
4762
4763define <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.vv v10, v8, v8
4769; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4770; CHECK-NEXT:    vmand.mm v0, v9, v10
4771; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4772; CHECK-NEXT:    ret
4773  %head = insertelement <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
4777}
4778
4779define <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
4793}
4794
4795define <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.vv v10, v8, v8
4801; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
4812}
4813
4814define <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.vv v10, v8, v8
4820; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
4831}
4832
4833define <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
4843}
4844
4845define <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
4858}
4859
4860define <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
4873}
4874
4875define <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
4889}
4890
4891define <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.vv v10, v8, v8
4897; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
4908}
4909
4910define <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.vv v10, v8, v8
4916; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
4927}
4928
4929define <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
4941}
4942
4943define <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.vv v10, v8, v8
4949; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4950; CHECK-NEXT:    vmand.mm v0, v10, v9
4951; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4952; CHECK-NEXT:    vmnot.m v0, v0
4953; CHECK-NEXT:    ret
4954  %head = insertelement <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
4958}
4959
4960define <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.vv v10, v8, v8
4966; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4967; CHECK-NEXT:    vmand.mm v0, v9, v10
4968; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4969; CHECK-NEXT:    vmnot.m v0, v0
4970; CHECK-NEXT:    ret
4971  %head = insertelement <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
4975}
4976
4977define <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
4989}
4990
4991define <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.vv v10, v8, v8
4997; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4998; CHECK-NEXT:    vmand.mm v0, v10, v9
4999; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5000; CHECK-NEXT:    vmnot.m v0, v0
5001; CHECK-NEXT:    ret
5002  %head = insertelement <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
5006}
5007
5008define <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.vv v10, v8, v8
5014; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5015; CHECK-NEXT:    vmand.mm v0, v9, v10
5016; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5017; CHECK-NEXT:    vmnot.m v0, v0
5018; CHECK-NEXT:    ret
5019  %head = insertelement <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
5023}
5024
5025define <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
5037}
5038
5039define <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.vv v10, v8, v8
5045; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5046; CHECK-NEXT:    vmand.mm v0, v9, v10
5047; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5048; CHECK-NEXT:    vmnot.m v0, v0
5049; CHECK-NEXT:    ret
5050  %head = insertelement <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
5054}
5055
5056define <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.vv v10, v8, v8
5062; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5063; CHECK-NEXT:    vmand.mm v0, v10, v9
5064; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5065; CHECK-NEXT:    vmnot.m v0, v0
5066; CHECK-NEXT:    ret
5067  %head = insertelement <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
5071}
5072
5073define <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
5085}
5086
5087define <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.vv v10, v8, v8
5093; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5094; CHECK-NEXT:    vmand.mm v0, v9, v10
5095; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5096; CHECK-NEXT:    vmnot.m v0, v0
5097; CHECK-NEXT:    ret
5098  %head = insertelement <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
5102}
5103
5104define <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.vv v10, v8, v8
5110; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5111; CHECK-NEXT:    vmand.mm v0, v10, v9
5112; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5113; CHECK-NEXT:    vmnot.m v0, v0
5114; CHECK-NEXT:    ret
5115  %head = insertelement <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
5119}
5120
5121define <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
5129}
5130
5131define <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
5141}
5142
5143define <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
5153}
5154
5155define <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
5165}
5166
5167define <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
5180}
5181
5182define <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
5195}
5196
5197declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata)
5198define <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
5206}
5207
5208define <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
5218}
5219
5220define <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
5230}
5231
5232define <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
5245}
5246
5247define <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
5263}
5264
5265define <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
5281}
5282
5283define <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
5296}
5297
5298define <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
5314}
5315
5316define <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
5332}
5333
5334define <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
5347}
5348
5349define <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
5365}
5366
5367define <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
5383}
5384
5385define <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
5398}
5399
5400define <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
5416}
5417
5418define <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
5434}
5435
5436define <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
5451}
5452
5453define <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.vv v12, v8, v8
5459; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
5460; CHECK-NEXT:    vmand.mm v10, v12, v13
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
5471}
5472
5473define <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.vv v12, v8, v8
5479; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
5480; CHECK-NEXT:    vmand.mm v10, v13, v12
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
5491}
5492
5493define <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
5503}
5504
5505define <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
5518}
5519
5520define <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
5533}
5534
5535define <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
5550}
5551
5552define <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.vv v12, v8, v8
5558; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
5559; CHECK-NEXT:    vmand.mm v10, v12, v13
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
5570}
5571
5572define <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.vv v12, v8, v8
5578; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
5579; CHECK-NEXT:    vmand.mm v10, v13, v12
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
5590}
5591
5592define <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
5605}
5606
5607define <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
5623}
5624
5625define <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
5641}
5642
5643define <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
5656}
5657
5658define <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
5674}
5675
5676define <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
5692}
5693
5694define <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
5707}
5708
5709define <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
5725}
5726
5727define <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
5743}
5744
5745define <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
5758}
5759
5760define <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
5776}
5777
5778define <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
5794}
5795
5796define <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
5804}
5805
5806define <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
5816}
5817
5818define <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
5828}
5829
5830define <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
5840}
5841
5842define <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
5855}
5856
5857define <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
5870}
5871
5872declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata)
5873define <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
5881}
5882
5883define <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
5893}
5894
5895define <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
5905}
5906
5907define <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
5920}
5921
5922define <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
5938}
5939
5940define <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
5956}
5957
5958define <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
5971}
5972
5973define <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
5989}
5990
5991define <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
6007}
6008
6009define <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
6022}
6023
6024define <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
6040}
6041
6042define <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
6058}
6059
6060define <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
6073}
6074
6075define <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
6091}
6092
6093define <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
6109}
6110
6111define <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
6126}
6127
6128define <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
6146}
6147
6148define <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
6166}
6167
6168define <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
6178}
6179
6180define <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
6193}
6194
6195define <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
6208}
6209
6210define <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
6225}
6226
6227define <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
6245}
6246
6247define <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
6265}
6266
6267define <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
6280}
6281
6282define <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
6298}
6299
6300define <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
6316}
6317
6318define <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
6331}
6332
6333define <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
6349}
6350
6351define <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
6367}
6368
6369define <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
6382}
6383
6384define <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
6400}
6401
6402define <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
6418}
6419
6420define <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
6433}
6434
6435define <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
6451}
6452
6453define <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
6469}
6470
6471define <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
6479}
6480
6481define <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
6491}
6492
6493define <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
6503}
6504
6505define <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
6515}
6516
6517define <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
6530}
6531
6532define <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
6545}
6546
6547declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata)
6548define <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
6556}
6557
6558define <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
6568}
6569
6570define <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
6580}
6581
6582define <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
6595}
6596
6597define <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
6613}
6614
6615define <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
6631}
6632
6633define <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
6646}
6647
6648define <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
6664}
6665
6666define <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
6682}
6683
6684define <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
6697}
6698
6699define <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
6715}
6716
6717define <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
6733}
6734
6735define <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
6748}
6749
6750define <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
6766}
6767
6768define <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
6784}
6785
6786define <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
6801}
6802
6803define <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
6821}
6822
6823define <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
6841}
6842
6843define <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
6853}
6854
6855define <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
6868}
6869
6870define <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
6883}
6884
6885define <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
6900}
6901
6902define <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
6920}
6921
6922define <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
6940}
6941
6942define <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
6955}
6956
6957define <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
6973}
6974
6975define <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
6991}
6992
6993define <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
7006}
7007
7008define <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
7024}
7025
7026define <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
7042}
7043
7044define <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
7057}
7058
7059define <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
7075}
7076
7077define <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
7093}
7094
7095define <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
7108}
7109
7110define <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
7126}
7127
7128define <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
7144}
7145
7146define <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
7154}
7155
7156define <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
7166}
7167
7168define <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
7178}
7179
7180define <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
7190}
7191
7192define <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
7205}
7206
7207define <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
7220}
7221
7222declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata)
7223define <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
7231}
7232
7233define <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
7243}
7244
7245define <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
7255}
7256
7257define <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
7268}
7269
7270define <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.vv v10, v8, v8
7276; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7284}
7285
7286define <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.vv v10, v8, v8
7292; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7300}
7301
7302define <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
7313}
7314
7315define <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.vv v10, v8, v8
7321; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7329}
7330
7331define <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.vv v10, v8, v8
7337; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7345}
7346
7347define <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
7358}
7359
7360define <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.vv v10, v8, v8
7366; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7374}
7375
7376define <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.vv v10, v8, v8
7382; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7390}
7391
7392define <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
7403}
7404
7405define <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.vv v10, v8, v8
7411; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7419}
7420
7421define <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.vv v10, v8, v8
7427; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7435}
7436
7437define <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
7451}
7452
7453define <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.vv v10, v8, v8
7459; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7470}
7471
7472define <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.vv v10, v8, v8
7478; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7489}
7490
7491define <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
7501}
7502
7503define <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
7516}
7517
7518define <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
7531}
7532
7533define <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
7547}
7548
7549define <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.vv v10, v8, v8
7555; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7566}
7567
7568define <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.vv v10, v8, v8
7574; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7585}
7586
7587define <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
7599}
7600
7601define <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.vv v10, v8, v8
7607; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7616}
7617
7618define <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.vv v10, v8, v8
7624; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7633}
7634
7635define <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
7647}
7648
7649define <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.vv v10, v8, v8
7655; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7664}
7665
7666define <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.vv v10, v8, v8
7672; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7681}
7682
7683define <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
7695}
7696
7697define <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.vv v10, v8, v8
7703; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7712}
7713
7714define <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.vv v10, v8, v8
7720; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7729}
7730
7731define <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
7743}
7744
7745define <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.vv v10, v8, v8
7751; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7760}
7761
7762define <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.vv v10, v8, v8
7768; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
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
7777}
7778
7779define <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
7787}
7788
7789define <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
7799}
7800
7801define <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
7811}
7812
7813define <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
7823}
7824
7825define <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
7838}
7839
7840define <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
7853}
7854
7855declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata)
7856define <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
7864}
7865
7866define <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
7876}
7877
7878define <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
7888}
7889
7890define <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
7903}
7904
7905define <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
7921}
7922
7923define <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
7939}
7940
7941define <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
7954}
7955
7956define <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
7972}
7973
7974define <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
7990}
7991
7992define <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
8005}
8006
8007define <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
8023}
8024
8025define <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
8041}
8042
8043define <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
8056}
8057
8058define <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
8074}
8075
8076define <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
8092}
8093
8094define <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
8109}
8110
8111define <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.vv v12, v8, v8
8117; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8118; CHECK-NEXT:    vmand.mm v10, v12, v13
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
8129}
8130
8131define <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.vv v12, v8, v8
8137; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8138; CHECK-NEXT:    vmand.mm v10, v13, v12
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
8149}
8150
8151define <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
8161}
8162
8163define <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
8176}
8177
8178define <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
8191}
8192
8193define <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
8208}
8209
8210define <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.vv v12, v8, v8
8216; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8217; CHECK-NEXT:    vmand.mm v10, v12, v13
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
8228}
8229
8230define <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.vv v12, v8, v8
8236; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8237; CHECK-NEXT:    vmand.mm v10, v13, v12
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
8248}
8249
8250define <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
8263}
8264
8265define <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
8281}
8282
8283define <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
8299}
8300
8301define <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
8314}
8315
8316define <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
8332}
8333
8334define <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
8350}
8351
8352define <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
8365}
8366
8367define <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
8383}
8384
8385define <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
8401}
8402
8403define <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
8416}
8417
8418define <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
8434}
8435
8436define <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
8452}
8453
8454define <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
8462}
8463
8464define <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
8474}
8475
8476define <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
8486}
8487
8488define <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
8498}
8499
8500define <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
8513}
8514
8515define <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
8528}
8529
8530declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata)
8531define <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
8539}
8540
8541define <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
8551}
8552
8553define <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
8563}
8564
8565define <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
8578}
8579
8580define <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
8596}
8597
8598define <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
8614}
8615
8616define <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
8629}
8630
8631define <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
8647}
8648
8649define <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
8665}
8666
8667define <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
8680}
8681
8682define <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
8698}
8699
8700define <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
8716}
8717
8718define <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
8731}
8732
8733define <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
8749}
8750
8751define <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
8767}
8768
8769define <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
8784}
8785
8786define <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
8804}
8805
8806define <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
8824}
8825
8826define <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
8836}
8837
8838define <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
8851}
8852
8853define <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
8866}
8867
8868define <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
8883}
8884
8885define <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
8903}
8904
8905define <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
8923}
8924
8925define <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
8938}
8939
8940define <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
8956}
8957
8958define <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
8974}
8975
8976define <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
8989}
8990
8991define <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
9007}
9008
9009define <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
9025}
9026
9027define <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
9040}
9041
9042define <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
9058}
9059
9060define <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
9076}
9077
9078define <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
9091}
9092
9093define <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
9109}
9110
9111define <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
9127}
9128
9129define <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
9137}
9138
9139define <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
9149}
9150
9151define <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
9161}
9162
9163define <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
9173}
9174
9175define <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
9188}
9189
9190define <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
9203}
9204
9205declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata)
9206define <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
9214}
9215
9216define <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
9226}
9227
9228define <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
9238}
9239
9240define <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
9253}
9254
9255define <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
9271}
9272
9273define <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
9289}
9290
9291define <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
9304}
9305
9306define <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
9322}
9323
9324define <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
9340}
9341
9342define <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
9355}
9356
9357define <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
9373}
9374
9375define <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
9391}
9392
9393define <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
9406}
9407
9408define <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
9424}
9425
9426define <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
9442}
9443
9444define <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
9459}
9460
9461define <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
9479}
9480
9481define <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
9499}
9500
9501define <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
9511}
9512
9513define <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
9526}
9527
9528define <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
9541}
9542
9543define <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
9558}
9559
9560define <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
9578}
9579
9580define <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
9598}
9599
9600define <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
9613}
9614
9615define <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
9631}
9632
9633define <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
9649}
9650
9651define <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
9664}
9665
9666define <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
9682}
9683
9684define <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
9700}
9701
9702define <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
9715}
9716
9717define <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
9733}
9734
9735define <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
9751}
9752
9753define <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
9766}
9767
9768define <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
9784}
9785
9786define <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
9802}
9803
9804define <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
9812}
9813
9814define <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
9824}
9825
9826define <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
9836}
9837
9838define <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
9848}
9849
9850define <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
9863}
9864
9865define <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
9878}
9879