xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-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 <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half>, <1 x half>, metadata, metadata)
8define <1 x i1> @fcmp_oeq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
9; CHECK-LABEL: fcmp_oeq_vv_v1f16:
10; CHECK:       # %bb.0:
11; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
12; CHECK-NEXT:    vmfeq.vv v0, v8, v9
13; CHECK-NEXT:    ret
14  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
15  ret <1 x i1> %1
16}
17
18define <1 x i1> @fcmp_oeq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
19; CHECK-LABEL: fcmp_oeq_vf_v1f16:
20; CHECK:       # %bb.0:
21; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
22; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
23; CHECK-NEXT:    ret
24  %head = insertelement <1 x half> poison, half %b, i32 0
25  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
26  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
27  ret <1 x i1> %1
28}
29
30define <1 x i1> @fcmp_oeq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
31; CHECK-LABEL: fcmp_oeq_fv_v1f16:
32; CHECK:       # %bb.0:
33; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
34; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
35; CHECK-NEXT:    ret
36  %head = insertelement <1 x half> poison, half %b, i32 0
37  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
38  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
39  ret <1 x i1> %1
40}
41
42define <1 x i1> @fcmp_ogt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
43; CHECK-LABEL: fcmp_ogt_vv_v1f16:
44; CHECK:       # %bb.0:
45; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
46; CHECK-NEXT:    vmfeq.vv v10, v8, v8
47; CHECK-NEXT:    vmfeq.vv v11, v9, v9
48; CHECK-NEXT:    vmand.mm v0, v11, v10
49; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
50; CHECK-NEXT:    ret
51  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
52  ret <1 x i1> %1
53}
54
55define <1 x i1> @fcmp_ogt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
56; CHECK-LABEL: fcmp_ogt_vf_v1f16:
57; CHECK:       # %bb.0:
58; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
59; CHECK-NEXT:    vfmv.s.f v9, fa0
60; CHECK-NEXT:    vmfeq.vv v10, v8, v8
61; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
62; CHECK-NEXT:    vmand.mm v0, v9, v10
63; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
64; CHECK-NEXT:    ret
65  %head = insertelement <1 x half> poison, half %b, i32 0
66  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
67  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
68  ret <1 x i1> %1
69}
70
71define <1 x i1> @fcmp_ogt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
72; CHECK-LABEL: fcmp_ogt_fv_v1f16:
73; CHECK:       # %bb.0:
74; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
75; CHECK-NEXT:    vfmv.s.f v9, fa0
76; CHECK-NEXT:    vmfeq.vv v10, v8, v8
77; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
78; CHECK-NEXT:    vmand.mm v0, v10, v9
79; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
80; CHECK-NEXT:    ret
81  %head = insertelement <1 x half> poison, half %b, i32 0
82  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
83  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
84  ret <1 x i1> %1
85}
86
87define <1 x i1> @fcmp_oge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
88; CHECK-LABEL: fcmp_oge_vv_v1f16:
89; CHECK:       # %bb.0:
90; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
91; CHECK-NEXT:    vmfeq.vv v10, v8, v8
92; CHECK-NEXT:    vmfeq.vv v11, v9, v9
93; CHECK-NEXT:    vmand.mm v0, v11, v10
94; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
95; CHECK-NEXT:    ret
96  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
97  ret <1 x i1> %1
98}
99
100define <1 x i1> @fcmp_oge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
101; CHECK-LABEL: fcmp_oge_vf_v1f16:
102; CHECK:       # %bb.0:
103; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
104; CHECK-NEXT:    vfmv.s.f v9, fa0
105; CHECK-NEXT:    vmfeq.vv v10, v8, v8
106; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
107; CHECK-NEXT:    vmand.mm v0, v9, v10
108; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
109; CHECK-NEXT:    ret
110  %head = insertelement <1 x half> poison, half %b, i32 0
111  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
112  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
113  ret <1 x i1> %1
114}
115
116define <1 x i1> @fcmp_oge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
117; CHECK-LABEL: fcmp_oge_fv_v1f16:
118; CHECK:       # %bb.0:
119; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
120; CHECK-NEXT:    vfmv.s.f v9, fa0
121; CHECK-NEXT:    vmfeq.vv v10, v8, v8
122; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
123; CHECK-NEXT:    vmand.mm v0, v10, v9
124; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
125; CHECK-NEXT:    ret
126  %head = insertelement <1 x half> poison, half %b, i32 0
127  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
128  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
129  ret <1 x i1> %1
130}
131
132define <1 x i1> @fcmp_olt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
133; CHECK-LABEL: fcmp_olt_vv_v1f16:
134; CHECK:       # %bb.0:
135; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
136; CHECK-NEXT:    vmfeq.vv v10, v9, v9
137; CHECK-NEXT:    vmfeq.vv v11, v8, v8
138; CHECK-NEXT:    vmand.mm v0, v11, v10
139; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
140; CHECK-NEXT:    ret
141  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
142  ret <1 x i1> %1
143}
144
145define <1 x i1> @fcmp_olt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
146; CHECK-LABEL: fcmp_olt_vf_v1f16:
147; CHECK:       # %bb.0:
148; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
149; CHECK-NEXT:    vfmv.s.f v9, fa0
150; CHECK-NEXT:    vmfeq.vv v10, v8, v8
151; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
152; CHECK-NEXT:    vmand.mm v0, v10, v9
153; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
154; CHECK-NEXT:    ret
155  %head = insertelement <1 x half> poison, half %b, i32 0
156  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
157  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
158  ret <1 x i1> %1
159}
160
161define <1 x i1> @fcmp_olt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
162; CHECK-LABEL: fcmp_olt_fv_v1f16:
163; CHECK:       # %bb.0:
164; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
165; CHECK-NEXT:    vfmv.s.f v9, fa0
166; CHECK-NEXT:    vmfeq.vv v10, v8, v8
167; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
168; CHECK-NEXT:    vmand.mm v0, v9, v10
169; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
170; CHECK-NEXT:    ret
171  %head = insertelement <1 x half> poison, half %b, i32 0
172  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
173  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
174  ret <1 x i1> %1
175}
176
177define <1 x i1> @fcmp_ole_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
178; CHECK-LABEL: fcmp_ole_vv_v1f16:
179; CHECK:       # %bb.0:
180; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
181; CHECK-NEXT:    vmfeq.vv v10, v9, v9
182; CHECK-NEXT:    vmfeq.vv v11, v8, v8
183; CHECK-NEXT:    vmand.mm v0, v11, v10
184; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
185; CHECK-NEXT:    ret
186  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
187  ret <1 x i1> %1
188}
189
190define <1 x i1> @fcmp_ole_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
191; CHECK-LABEL: fcmp_ole_vf_v1f16:
192; CHECK:       # %bb.0:
193; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
194; CHECK-NEXT:    vfmv.s.f v9, fa0
195; CHECK-NEXT:    vmfeq.vv v10, v8, v8
196; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
197; CHECK-NEXT:    vmand.mm v0, v10, v9
198; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
199; CHECK-NEXT:    ret
200  %head = insertelement <1 x half> poison, half %b, i32 0
201  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
202  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
203  ret <1 x i1> %1
204}
205
206define <1 x i1> @fcmp_ole_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
207; CHECK-LABEL: fcmp_ole_fv_v1f16:
208; CHECK:       # %bb.0:
209; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
210; CHECK-NEXT:    vfmv.s.f v9, fa0
211; CHECK-NEXT:    vmfeq.vv v10, v8, v8
212; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
213; CHECK-NEXT:    vmand.mm v0, v9, v10
214; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
215; CHECK-NEXT:    ret
216  %head = insertelement <1 x half> poison, half %b, i32 0
217  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
218  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
219  ret <1 x i1> %1
220}
221
222define <1 x i1> @fcmp_one_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
223; CHECK-LABEL: fcmp_one_vv_v1f16:
224; CHECK:       # %bb.0:
225; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
226; CHECK-NEXT:    vmfeq.vv v10, v9, v9
227; CHECK-NEXT:    vmfeq.vv v11, v8, v8
228; CHECK-NEXT:    vmand.mm v0, v11, v10
229; CHECK-NEXT:    vmv1r.v v10, v0
230; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
231; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
232; CHECK-NEXT:    vmor.mm v0, v0, v10
233; CHECK-NEXT:    ret
234  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
235  ret <1 x i1> %1
236}
237
238define <1 x i1> @fcmp_one_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
239; CHECK-LABEL: fcmp_one_vf_v1f16:
240; CHECK:       # %bb.0:
241; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
242; CHECK-NEXT:    vfmv.s.f v9, fa0
243; CHECK-NEXT:    vmfeq.vv v10, v8, v8
244; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
245; CHECK-NEXT:    vmand.mm v0, v10, v9
246; CHECK-NEXT:    vmv1r.v v9, v0
247; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
248; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
249; CHECK-NEXT:    vmor.mm v0, v0, v9
250; CHECK-NEXT:    ret
251  %head = insertelement <1 x half> poison, half %b, i32 0
252  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
253  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
254  ret <1 x i1> %1
255}
256
257define <1 x i1> @fcmp_one_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
258; CHECK-LABEL: fcmp_one_fv_v1f16:
259; CHECK:       # %bb.0:
260; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
261; CHECK-NEXT:    vfmv.s.f v9, fa0
262; CHECK-NEXT:    vmfeq.vv v10, v8, v8
263; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
264; CHECK-NEXT:    vmand.mm v0, v9, v10
265; CHECK-NEXT:    vmv1r.v v9, v0
266; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
267; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
268; CHECK-NEXT:    vmor.mm v0, v0, v9
269; CHECK-NEXT:    ret
270  %head = insertelement <1 x half> poison, half %b, i32 0
271  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
272  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
273  ret <1 x i1> %1
274}
275
276define <1 x i1> @fcmp_ord_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
277; CHECK-LABEL: fcmp_ord_vv_v1f16:
278; CHECK:       # %bb.0:
279; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
280; CHECK-NEXT:    vmfeq.vv v9, v9, v9
281; CHECK-NEXT:    vmfeq.vv v8, v8, v8
282; CHECK-NEXT:    vmand.mm v0, v8, v9
283; CHECK-NEXT:    ret
284  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
285  ret <1 x i1> %1
286}
287
288define <1 x i1> @fcmp_ord_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
289; CHECK-LABEL: fcmp_ord_vf_v1f16:
290; CHECK:       # %bb.0:
291; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
292; CHECK-NEXT:    vfmv.s.f v9, fa0
293; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
294; CHECK-NEXT:    vmfeq.vv v8, v8, v8
295; CHECK-NEXT:    vmand.mm v0, v8, v9
296; CHECK-NEXT:    ret
297  %head = insertelement <1 x half> poison, half %b, i32 0
298  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
299  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
300  ret <1 x i1> %1
301}
302
303define <1 x i1> @fcmp_ord_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
304; CHECK-LABEL: fcmp_ord_fv_v1f16:
305; CHECK:       # %bb.0:
306; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
307; CHECK-NEXT:    vfmv.s.f v9, fa0
308; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
309; CHECK-NEXT:    vmfeq.vv v8, v8, v8
310; CHECK-NEXT:    vmand.mm v0, v9, v8
311; CHECK-NEXT:    ret
312  %head = insertelement <1 x half> poison, half %b, i32 0
313  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
314  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
315  ret <1 x i1> %1
316}
317
318define <1 x i1> @fcmp_ueq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
319; CHECK-LABEL: fcmp_ueq_vv_v1f16:
320; CHECK:       # %bb.0:
321; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
322; CHECK-NEXT:    vmfeq.vv v10, v9, v9
323; CHECK-NEXT:    vmfeq.vv v11, v8, v8
324; CHECK-NEXT:    vmand.mm v0, v11, v10
325; CHECK-NEXT:    vmv1r.v v10, v0
326; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
327; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
328; CHECK-NEXT:    vmnor.mm v0, v0, v10
329; CHECK-NEXT:    ret
330  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
331  ret <1 x i1> %1
332}
333
334define <1 x i1> @fcmp_ueq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
335; CHECK-LABEL: fcmp_ueq_vf_v1f16:
336; CHECK:       # %bb.0:
337; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
338; CHECK-NEXT:    vfmv.s.f v9, fa0
339; CHECK-NEXT:    vmfeq.vv v10, v8, v8
340; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
341; CHECK-NEXT:    vmand.mm v0, v10, v9
342; CHECK-NEXT:    vmv1r.v v9, v0
343; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
344; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
345; CHECK-NEXT:    vmnor.mm v0, v0, v9
346; CHECK-NEXT:    ret
347  %head = insertelement <1 x half> poison, half %b, i32 0
348  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
349  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
350  ret <1 x i1> %1
351}
352
353define <1 x i1> @fcmp_ueq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
354; CHECK-LABEL: fcmp_ueq_fv_v1f16:
355; CHECK:       # %bb.0:
356; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
357; CHECK-NEXT:    vfmv.s.f v9, fa0
358; CHECK-NEXT:    vmfeq.vv v10, v8, v8
359; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
360; CHECK-NEXT:    vmand.mm v0, v9, v10
361; CHECK-NEXT:    vmv1r.v v9, v0
362; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
363; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
364; CHECK-NEXT:    vmnor.mm v0, v0, v9
365; CHECK-NEXT:    ret
366  %head = insertelement <1 x half> poison, half %b, i32 0
367  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
368  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
369  ret <1 x i1> %1
370}
371
372define <1 x i1> @fcmp_ugt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
373; CHECK-LABEL: fcmp_ugt_vv_v1f16:
374; CHECK:       # %bb.0:
375; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
376; CHECK-NEXT:    vmfeq.vv v10, v9, v9
377; CHECK-NEXT:    vmfeq.vv v11, v8, v8
378; CHECK-NEXT:    vmand.mm v0, v11, v10
379; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
380; CHECK-NEXT:    vmnot.m v0, v0
381; CHECK-NEXT:    ret
382  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
383  ret <1 x i1> %1
384}
385
386define <1 x i1> @fcmp_ugt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
387; CHECK-LABEL: fcmp_ugt_vf_v1f16:
388; CHECK:       # %bb.0:
389; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
390; CHECK-NEXT:    vfmv.s.f v9, fa0
391; CHECK-NEXT:    vmfeq.vv v10, v8, v8
392; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
393; CHECK-NEXT:    vmand.mm v0, v10, v9
394; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
395; CHECK-NEXT:    vmnot.m v0, v0
396; CHECK-NEXT:    ret
397  %head = insertelement <1 x half> poison, half %b, i32 0
398  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
399  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
400  ret <1 x i1> %1
401}
402
403define <1 x i1> @fcmp_ugt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
404; CHECK-LABEL: fcmp_ugt_fv_v1f16:
405; CHECK:       # %bb.0:
406; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
407; CHECK-NEXT:    vfmv.s.f v9, fa0
408; CHECK-NEXT:    vmfeq.vv v10, v8, v8
409; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
410; CHECK-NEXT:    vmand.mm v0, v9, v10
411; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
412; CHECK-NEXT:    vmnot.m v0, v0
413; CHECK-NEXT:    ret
414  %head = insertelement <1 x half> poison, half %b, i32 0
415  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
416  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
417  ret <1 x i1> %1
418}
419
420define <1 x i1> @fcmp_uge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
421; CHECK-LABEL: fcmp_uge_vv_v1f16:
422; CHECK:       # %bb.0:
423; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
424; CHECK-NEXT:    vmfeq.vv v10, v9, v9
425; CHECK-NEXT:    vmfeq.vv v11, v8, v8
426; CHECK-NEXT:    vmand.mm v0, v11, v10
427; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
428; CHECK-NEXT:    vmnot.m v0, v0
429; CHECK-NEXT:    ret
430  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
431  ret <1 x i1> %1
432}
433
434define <1 x i1> @fcmp_uge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
435; CHECK-LABEL: fcmp_uge_vf_v1f16:
436; CHECK:       # %bb.0:
437; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
438; CHECK-NEXT:    vfmv.s.f v9, fa0
439; CHECK-NEXT:    vmfeq.vv v10, v8, v8
440; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
441; CHECK-NEXT:    vmand.mm v0, v10, v9
442; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
443; CHECK-NEXT:    vmnot.m v0, v0
444; CHECK-NEXT:    ret
445  %head = insertelement <1 x half> poison, half %b, i32 0
446  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
447  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
448  ret <1 x i1> %1
449}
450
451define <1 x i1> @fcmp_uge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
452; CHECK-LABEL: fcmp_uge_fv_v1f16:
453; CHECK:       # %bb.0:
454; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
455; CHECK-NEXT:    vfmv.s.f v9, fa0
456; CHECK-NEXT:    vmfeq.vv v10, v8, v8
457; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
458; CHECK-NEXT:    vmand.mm v0, v9, v10
459; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
460; CHECK-NEXT:    vmnot.m v0, v0
461; CHECK-NEXT:    ret
462  %head = insertelement <1 x half> poison, half %b, i32 0
463  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
464  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
465  ret <1 x i1> %1
466}
467
468define <1 x i1> @fcmp_ult_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
469; CHECK-LABEL: fcmp_ult_vv_v1f16:
470; CHECK:       # %bb.0:
471; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
472; CHECK-NEXT:    vmfeq.vv v10, v8, v8
473; CHECK-NEXT:    vmfeq.vv v11, v9, v9
474; CHECK-NEXT:    vmand.mm v0, v11, v10
475; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
476; CHECK-NEXT:    vmnot.m v0, v0
477; CHECK-NEXT:    ret
478  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
479  ret <1 x i1> %1
480}
481
482define <1 x i1> @fcmp_ult_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
483; CHECK-LABEL: fcmp_ult_vf_v1f16:
484; CHECK:       # %bb.0:
485; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
486; CHECK-NEXT:    vfmv.s.f v9, fa0
487; CHECK-NEXT:    vmfeq.vv v10, v8, v8
488; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
489; CHECK-NEXT:    vmand.mm v0, v9, v10
490; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
491; CHECK-NEXT:    vmnot.m v0, v0
492; CHECK-NEXT:    ret
493  %head = insertelement <1 x half> poison, half %b, i32 0
494  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
495  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
496  ret <1 x i1> %1
497}
498
499define <1 x i1> @fcmp_ult_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
500; CHECK-LABEL: fcmp_ult_fv_v1f16:
501; CHECK:       # %bb.0:
502; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
503; CHECK-NEXT:    vfmv.s.f v9, fa0
504; CHECK-NEXT:    vmfeq.vv v10, v8, v8
505; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
506; CHECK-NEXT:    vmand.mm v0, v10, v9
507; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
508; CHECK-NEXT:    vmnot.m v0, v0
509; CHECK-NEXT:    ret
510  %head = insertelement <1 x half> poison, half %b, i32 0
511  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
512  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
513  ret <1 x i1> %1
514}
515
516define <1 x i1> @fcmp_ule_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
517; CHECK-LABEL: fcmp_ule_vv_v1f16:
518; CHECK:       # %bb.0:
519; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
520; CHECK-NEXT:    vmfeq.vv v10, v8, v8
521; CHECK-NEXT:    vmfeq.vv v11, v9, v9
522; CHECK-NEXT:    vmand.mm v0, v11, v10
523; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
524; CHECK-NEXT:    vmnot.m v0, v0
525; CHECK-NEXT:    ret
526  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
527  ret <1 x i1> %1
528}
529
530define <1 x i1> @fcmp_ule_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
531; CHECK-LABEL: fcmp_ule_vf_v1f16:
532; CHECK:       # %bb.0:
533; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
534; CHECK-NEXT:    vfmv.s.f v9, fa0
535; CHECK-NEXT:    vmfeq.vv v10, v8, v8
536; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
537; CHECK-NEXT:    vmand.mm v0, v9, v10
538; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
539; CHECK-NEXT:    vmnot.m v0, v0
540; CHECK-NEXT:    ret
541  %head = insertelement <1 x half> poison, half %b, i32 0
542  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
543  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
544  ret <1 x i1> %1
545}
546
547define <1 x i1> @fcmp_ule_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
548; CHECK-LABEL: fcmp_ule_fv_v1f16:
549; CHECK:       # %bb.0:
550; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
551; CHECK-NEXT:    vfmv.s.f v9, fa0
552; CHECK-NEXT:    vmfeq.vv v10, v8, v8
553; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
554; CHECK-NEXT:    vmand.mm v0, v10, v9
555; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
556; CHECK-NEXT:    vmnot.m v0, v0
557; CHECK-NEXT:    ret
558  %head = insertelement <1 x half> poison, half %b, i32 0
559  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
560  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
561  ret <1 x i1> %1
562}
563
564define <1 x i1> @fcmp_une_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
565; CHECK-LABEL: fcmp_une_vv_v1f16:
566; CHECK:       # %bb.0:
567; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
568; CHECK-NEXT:    vmfne.vv v0, v8, v9
569; CHECK-NEXT:    ret
570  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
571  ret <1 x i1> %1
572}
573
574define <1 x i1> @fcmp_une_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
575; CHECK-LABEL: fcmp_une_vf_v1f16:
576; CHECK:       # %bb.0:
577; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
578; CHECK-NEXT:    vmfne.vf v0, v8, fa0
579; CHECK-NEXT:    ret
580  %head = insertelement <1 x half> poison, half %b, i32 0
581  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
582  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
583  ret <1 x i1> %1
584}
585
586define <1 x i1> @fcmp_une_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
587; CHECK-LABEL: fcmp_une_fv_v1f16:
588; CHECK:       # %bb.0:
589; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
590; CHECK-NEXT:    vmfne.vf v0, v8, fa0
591; CHECK-NEXT:    ret
592  %head = insertelement <1 x half> poison, half %b, i32 0
593  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
594  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
595  ret <1 x i1> %1
596}
597
598define <1 x i1> @fcmp_uno_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp {
599; CHECK-LABEL: fcmp_uno_vv_v1f16:
600; CHECK:       # %bb.0:
601; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
602; CHECK-NEXT:    vmfne.vv v9, v9, v9
603; CHECK-NEXT:    vmfne.vv v8, v8, v8
604; CHECK-NEXT:    vmor.mm v0, v8, v9
605; CHECK-NEXT:    ret
606  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
607  ret <1 x i1> %1
608}
609
610define <1 x i1> @fcmp_uno_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp {
611; CHECK-LABEL: fcmp_uno_vf_v1f16:
612; CHECK:       # %bb.0:
613; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
614; CHECK-NEXT:    vfmv.s.f v9, fa0
615; CHECK-NEXT:    vmfne.vf v9, v9, fa0
616; CHECK-NEXT:    vmfne.vv v8, v8, v8
617; CHECK-NEXT:    vmor.mm v0, v8, v9
618; CHECK-NEXT:    ret
619  %head = insertelement <1 x half> poison, half %b, i32 0
620  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
621  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
622  ret <1 x i1> %1
623}
624
625define <1 x i1> @fcmp_uno_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp {
626; CHECK-LABEL: fcmp_uno_fv_v1f16:
627; CHECK:       # %bb.0:
628; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
629; CHECK-NEXT:    vfmv.s.f v9, fa0
630; CHECK-NEXT:    vmfne.vf v9, v9, fa0
631; CHECK-NEXT:    vmfne.vv v8, v8, v8
632; CHECK-NEXT:    vmor.mm v0, v9, v8
633; CHECK-NEXT:    ret
634  %head = insertelement <1 x half> poison, half %b, i32 0
635  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
636  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
637  ret <1 x i1> %1
638}
639
640declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half>, <2 x half>, metadata, metadata)
641define <2 x i1> @fcmp_oeq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
642; CHECK-LABEL: fcmp_oeq_vv_v2f16:
643; CHECK:       # %bb.0:
644; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
645; CHECK-NEXT:    vmfeq.vv v0, v8, v9
646; CHECK-NEXT:    ret
647  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
648  ret <2 x i1> %1
649}
650
651define <2 x i1> @fcmp_oeq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
652; CHECK-LABEL: fcmp_oeq_vf_v2f16:
653; CHECK:       # %bb.0:
654; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
655; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
656; CHECK-NEXT:    ret
657  %head = insertelement <2 x half> poison, half %b, i32 0
658  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
659  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
660  ret <2 x i1> %1
661}
662
663define <2 x i1> @fcmp_oeq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
664; CHECK-LABEL: fcmp_oeq_fv_v2f16:
665; CHECK:       # %bb.0:
666; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
667; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
668; CHECK-NEXT:    ret
669  %head = insertelement <2 x half> poison, half %b, i32 0
670  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
671  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
672  ret <2 x i1> %1
673}
674
675define <2 x i1> @fcmp_ogt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
676; CHECK-LABEL: fcmp_ogt_vv_v2f16:
677; CHECK:       # %bb.0:
678; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
679; CHECK-NEXT:    vmfeq.vv v10, v8, v8
680; CHECK-NEXT:    vmfeq.vv v11, v9, v9
681; CHECK-NEXT:    vmand.mm v0, v11, v10
682; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
683; CHECK-NEXT:    ret
684  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
685  ret <2 x i1> %1
686}
687
688define <2 x i1> @fcmp_ogt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
689; CHECK-LABEL: fcmp_ogt_vf_v2f16:
690; CHECK:       # %bb.0:
691; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
692; CHECK-NEXT:    vfmv.v.f v9, fa0
693; CHECK-NEXT:    vmfeq.vv v10, v8, v8
694; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
695; CHECK-NEXT:    vmand.mm v0, v9, v10
696; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
697; CHECK-NEXT:    ret
698  %head = insertelement <2 x half> poison, half %b, i32 0
699  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
700  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
701  ret <2 x i1> %1
702}
703
704define <2 x i1> @fcmp_ogt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
705; CHECK-LABEL: fcmp_ogt_fv_v2f16:
706; CHECK:       # %bb.0:
707; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
708; CHECK-NEXT:    vfmv.v.f v9, fa0
709; CHECK-NEXT:    vmfeq.vv v10, v8, v8
710; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
711; CHECK-NEXT:    vmand.mm v0, v10, v9
712; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
713; CHECK-NEXT:    ret
714  %head = insertelement <2 x half> poison, half %b, i32 0
715  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
716  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
717  ret <2 x i1> %1
718}
719
720define <2 x i1> @fcmp_oge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
721; CHECK-LABEL: fcmp_oge_vv_v2f16:
722; CHECK:       # %bb.0:
723; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
724; CHECK-NEXT:    vmfeq.vv v10, v8, v8
725; CHECK-NEXT:    vmfeq.vv v11, v9, v9
726; CHECK-NEXT:    vmand.mm v0, v11, v10
727; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
728; CHECK-NEXT:    ret
729  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
730  ret <2 x i1> %1
731}
732
733define <2 x i1> @fcmp_oge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
734; CHECK-LABEL: fcmp_oge_vf_v2f16:
735; CHECK:       # %bb.0:
736; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
737; CHECK-NEXT:    vfmv.v.f v9, fa0
738; CHECK-NEXT:    vmfeq.vv v10, v8, v8
739; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
740; CHECK-NEXT:    vmand.mm v0, v9, v10
741; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
742; CHECK-NEXT:    ret
743  %head = insertelement <2 x half> poison, half %b, i32 0
744  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
745  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
746  ret <2 x i1> %1
747}
748
749define <2 x i1> @fcmp_oge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
750; CHECK-LABEL: fcmp_oge_fv_v2f16:
751; CHECK:       # %bb.0:
752; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
753; CHECK-NEXT:    vfmv.v.f v9, fa0
754; CHECK-NEXT:    vmfeq.vv v10, v8, v8
755; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
756; CHECK-NEXT:    vmand.mm v0, v10, v9
757; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
758; CHECK-NEXT:    ret
759  %head = insertelement <2 x half> poison, half %b, i32 0
760  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
761  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
762  ret <2 x i1> %1
763}
764
765define <2 x i1> @fcmp_olt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
766; CHECK-LABEL: fcmp_olt_vv_v2f16:
767; CHECK:       # %bb.0:
768; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
769; CHECK-NEXT:    vmfeq.vv v10, v9, v9
770; CHECK-NEXT:    vmfeq.vv v11, v8, v8
771; CHECK-NEXT:    vmand.mm v0, v11, v10
772; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
773; CHECK-NEXT:    ret
774  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
775  ret <2 x i1> %1
776}
777
778define <2 x i1> @fcmp_olt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
779; CHECK-LABEL: fcmp_olt_vf_v2f16:
780; CHECK:       # %bb.0:
781; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
782; CHECK-NEXT:    vfmv.v.f v9, fa0
783; CHECK-NEXT:    vmfeq.vv v10, v8, v8
784; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
785; CHECK-NEXT:    vmand.mm v0, v10, v9
786; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
787; CHECK-NEXT:    ret
788  %head = insertelement <2 x half> poison, half %b, i32 0
789  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
790  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
791  ret <2 x i1> %1
792}
793
794define <2 x i1> @fcmp_olt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
795; CHECK-LABEL: fcmp_olt_fv_v2f16:
796; CHECK:       # %bb.0:
797; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
798; CHECK-NEXT:    vfmv.v.f v9, fa0
799; CHECK-NEXT:    vmfeq.vv v10, v8, v8
800; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
801; CHECK-NEXT:    vmand.mm v0, v9, v10
802; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
803; CHECK-NEXT:    ret
804  %head = insertelement <2 x half> poison, half %b, i32 0
805  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
806  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
807  ret <2 x i1> %1
808}
809
810define <2 x i1> @fcmp_ole_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
811; CHECK-LABEL: fcmp_ole_vv_v2f16:
812; CHECK:       # %bb.0:
813; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
814; CHECK-NEXT:    vmfeq.vv v10, v9, v9
815; CHECK-NEXT:    vmfeq.vv v11, v8, v8
816; CHECK-NEXT:    vmand.mm v0, v11, v10
817; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
818; CHECK-NEXT:    ret
819  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
820  ret <2 x i1> %1
821}
822
823define <2 x i1> @fcmp_ole_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
824; CHECK-LABEL: fcmp_ole_vf_v2f16:
825; CHECK:       # %bb.0:
826; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
827; CHECK-NEXT:    vfmv.v.f v9, fa0
828; CHECK-NEXT:    vmfeq.vv v10, v8, v8
829; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
830; CHECK-NEXT:    vmand.mm v0, v10, v9
831; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
832; CHECK-NEXT:    ret
833  %head = insertelement <2 x half> poison, half %b, i32 0
834  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
835  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
836  ret <2 x i1> %1
837}
838
839define <2 x i1> @fcmp_ole_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
840; CHECK-LABEL: fcmp_ole_fv_v2f16:
841; CHECK:       # %bb.0:
842; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
843; CHECK-NEXT:    vfmv.v.f v9, fa0
844; CHECK-NEXT:    vmfeq.vv v10, v8, v8
845; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
846; CHECK-NEXT:    vmand.mm v0, v9, v10
847; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
848; CHECK-NEXT:    ret
849  %head = insertelement <2 x half> poison, half %b, i32 0
850  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
851  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
852  ret <2 x i1> %1
853}
854
855define <2 x i1> @fcmp_one_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
856; CHECK-LABEL: fcmp_one_vv_v2f16:
857; CHECK:       # %bb.0:
858; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
859; CHECK-NEXT:    vmfeq.vv v10, v9, v9
860; CHECK-NEXT:    vmfeq.vv v11, v8, v8
861; CHECK-NEXT:    vmand.mm v0, v11, v10
862; CHECK-NEXT:    vmv1r.v v10, v0
863; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
864; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
865; CHECK-NEXT:    vmor.mm v0, v0, v10
866; CHECK-NEXT:    ret
867  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
868  ret <2 x i1> %1
869}
870
871define <2 x i1> @fcmp_one_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
872; CHECK-LABEL: fcmp_one_vf_v2f16:
873; CHECK:       # %bb.0:
874; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
875; CHECK-NEXT:    vfmv.v.f v9, fa0
876; CHECK-NEXT:    vmfeq.vv v10, v8, v8
877; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
878; CHECK-NEXT:    vmand.mm v0, v10, v9
879; CHECK-NEXT:    vmv1r.v v9, v0
880; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
881; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
882; CHECK-NEXT:    vmor.mm v0, v0, v9
883; CHECK-NEXT:    ret
884  %head = insertelement <2 x half> poison, half %b, i32 0
885  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
886  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
887  ret <2 x i1> %1
888}
889
890define <2 x i1> @fcmp_one_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
891; CHECK-LABEL: fcmp_one_fv_v2f16:
892; CHECK:       # %bb.0:
893; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
894; CHECK-NEXT:    vfmv.v.f v9, fa0
895; CHECK-NEXT:    vmfeq.vv v10, v8, v8
896; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
897; CHECK-NEXT:    vmand.mm v0, v9, v10
898; CHECK-NEXT:    vmv1r.v v9, v0
899; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
900; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
901; CHECK-NEXT:    vmor.mm v0, v0, v9
902; CHECK-NEXT:    ret
903  %head = insertelement <2 x half> poison, half %b, i32 0
904  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
905  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
906  ret <2 x i1> %1
907}
908
909define <2 x i1> @fcmp_ord_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
910; CHECK-LABEL: fcmp_ord_vv_v2f16:
911; CHECK:       # %bb.0:
912; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
913; CHECK-NEXT:    vmfeq.vv v9, v9, v9
914; CHECK-NEXT:    vmfeq.vv v8, v8, v8
915; CHECK-NEXT:    vmand.mm v0, v8, v9
916; CHECK-NEXT:    ret
917  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
918  ret <2 x i1> %1
919}
920
921define <2 x i1> @fcmp_ord_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
922; CHECK-LABEL: fcmp_ord_vf_v2f16:
923; CHECK:       # %bb.0:
924; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
925; CHECK-NEXT:    vfmv.v.f v9, fa0
926; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
927; CHECK-NEXT:    vmfeq.vv v8, v8, v8
928; CHECK-NEXT:    vmand.mm v0, v8, v9
929; CHECK-NEXT:    ret
930  %head = insertelement <2 x half> poison, half %b, i32 0
931  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
932  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
933  ret <2 x i1> %1
934}
935
936define <2 x i1> @fcmp_ord_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
937; CHECK-LABEL: fcmp_ord_fv_v2f16:
938; CHECK:       # %bb.0:
939; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
940; CHECK-NEXT:    vfmv.v.f v9, fa0
941; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
942; CHECK-NEXT:    vmfeq.vv v8, v8, v8
943; CHECK-NEXT:    vmand.mm v0, v9, v8
944; CHECK-NEXT:    ret
945  %head = insertelement <2 x half> poison, half %b, i32 0
946  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
947  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
948  ret <2 x i1> %1
949}
950
951define <2 x i1> @fcmp_ueq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
952; CHECK-LABEL: fcmp_ueq_vv_v2f16:
953; CHECK:       # %bb.0:
954; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
955; CHECK-NEXT:    vmfeq.vv v10, v9, v9
956; CHECK-NEXT:    vmfeq.vv v11, v8, v8
957; CHECK-NEXT:    vmand.mm v0, v11, v10
958; CHECK-NEXT:    vmv1r.v v10, v0
959; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
960; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
961; CHECK-NEXT:    vmnor.mm v0, v0, v10
962; CHECK-NEXT:    ret
963  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
964  ret <2 x i1> %1
965}
966
967define <2 x i1> @fcmp_ueq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
968; CHECK-LABEL: fcmp_ueq_vf_v2f16:
969; CHECK:       # %bb.0:
970; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
971; CHECK-NEXT:    vfmv.v.f v9, fa0
972; CHECK-NEXT:    vmfeq.vv v10, v8, v8
973; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
974; CHECK-NEXT:    vmand.mm v0, v10, v9
975; CHECK-NEXT:    vmv1r.v v9, v0
976; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
977; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
978; CHECK-NEXT:    vmnor.mm v0, v0, v9
979; CHECK-NEXT:    ret
980  %head = insertelement <2 x half> poison, half %b, i32 0
981  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
982  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
983  ret <2 x i1> %1
984}
985
986define <2 x i1> @fcmp_ueq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
987; CHECK-LABEL: fcmp_ueq_fv_v2f16:
988; CHECK:       # %bb.0:
989; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
990; CHECK-NEXT:    vfmv.v.f v9, fa0
991; CHECK-NEXT:    vmfeq.vv v10, v8, v8
992; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
993; CHECK-NEXT:    vmand.mm v0, v9, v10
994; CHECK-NEXT:    vmv1r.v v9, v0
995; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
996; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
997; CHECK-NEXT:    vmnor.mm v0, v0, v9
998; CHECK-NEXT:    ret
999  %head = insertelement <2 x half> poison, half %b, i32 0
1000  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1001  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1002  ret <2 x i1> %1
1003}
1004
1005define <2 x i1> @fcmp_ugt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1006; CHECK-LABEL: fcmp_ugt_vv_v2f16:
1007; CHECK:       # %bb.0:
1008; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1009; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1010; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1011; CHECK-NEXT:    vmand.mm v0, v11, v10
1012; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
1013; CHECK-NEXT:    vmnot.m v0, v0
1014; CHECK-NEXT:    ret
1015  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1016  ret <2 x i1> %1
1017}
1018
1019define <2 x i1> @fcmp_ugt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1020; CHECK-LABEL: fcmp_ugt_vf_v2f16:
1021; CHECK:       # %bb.0:
1022; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1023; CHECK-NEXT:    vfmv.v.f v9, fa0
1024; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1025; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1026; CHECK-NEXT:    vmand.mm v0, v10, v9
1027; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1028; CHECK-NEXT:    vmnot.m v0, v0
1029; CHECK-NEXT:    ret
1030  %head = insertelement <2 x half> poison, half %b, i32 0
1031  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1032  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1033  ret <2 x i1> %1
1034}
1035
1036define <2 x i1> @fcmp_ugt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1037; CHECK-LABEL: fcmp_ugt_fv_v2f16:
1038; CHECK:       # %bb.0:
1039; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1040; CHECK-NEXT:    vfmv.v.f v9, fa0
1041; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1042; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1043; CHECK-NEXT:    vmand.mm v0, v9, v10
1044; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1045; CHECK-NEXT:    vmnot.m v0, v0
1046; CHECK-NEXT:    ret
1047  %head = insertelement <2 x half> poison, half %b, i32 0
1048  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1049  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1050  ret <2 x i1> %1
1051}
1052
1053define <2 x i1> @fcmp_uge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1054; CHECK-LABEL: fcmp_uge_vv_v2f16:
1055; CHECK:       # %bb.0:
1056; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1057; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1058; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1059; CHECK-NEXT:    vmand.mm v0, v11, v10
1060; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
1061; CHECK-NEXT:    vmnot.m v0, v0
1062; CHECK-NEXT:    ret
1063  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1064  ret <2 x i1> %1
1065}
1066
1067define <2 x i1> @fcmp_uge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1068; CHECK-LABEL: fcmp_uge_vf_v2f16:
1069; CHECK:       # %bb.0:
1070; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1071; CHECK-NEXT:    vfmv.v.f v9, fa0
1072; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1073; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1074; CHECK-NEXT:    vmand.mm v0, v10, v9
1075; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1076; CHECK-NEXT:    vmnot.m v0, v0
1077; CHECK-NEXT:    ret
1078  %head = insertelement <2 x half> poison, half %b, i32 0
1079  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1080  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1081  ret <2 x i1> %1
1082}
1083
1084define <2 x i1> @fcmp_uge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1085; CHECK-LABEL: fcmp_uge_fv_v2f16:
1086; CHECK:       # %bb.0:
1087; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1088; CHECK-NEXT:    vfmv.v.f v9, fa0
1089; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1090; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1091; CHECK-NEXT:    vmand.mm v0, v9, v10
1092; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1093; CHECK-NEXT:    vmnot.m v0, v0
1094; CHECK-NEXT:    ret
1095  %head = insertelement <2 x half> poison, half %b, i32 0
1096  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1097  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1098  ret <2 x i1> %1
1099}
1100
1101define <2 x i1> @fcmp_ult_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1102; CHECK-LABEL: fcmp_ult_vv_v2f16:
1103; CHECK:       # %bb.0:
1104; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1105; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1106; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1107; CHECK-NEXT:    vmand.mm v0, v11, v10
1108; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
1109; CHECK-NEXT:    vmnot.m v0, v0
1110; CHECK-NEXT:    ret
1111  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1112  ret <2 x i1> %1
1113}
1114
1115define <2 x i1> @fcmp_ult_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1116; CHECK-LABEL: fcmp_ult_vf_v2f16:
1117; CHECK:       # %bb.0:
1118; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1119; CHECK-NEXT:    vfmv.v.f v9, fa0
1120; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1121; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1122; CHECK-NEXT:    vmand.mm v0, v9, v10
1123; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1124; CHECK-NEXT:    vmnot.m v0, v0
1125; CHECK-NEXT:    ret
1126  %head = insertelement <2 x half> poison, half %b, i32 0
1127  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1128  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1129  ret <2 x i1> %1
1130}
1131
1132define <2 x i1> @fcmp_ult_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1133; CHECK-LABEL: fcmp_ult_fv_v2f16:
1134; CHECK:       # %bb.0:
1135; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1136; CHECK-NEXT:    vfmv.v.f v9, fa0
1137; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1138; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1139; CHECK-NEXT:    vmand.mm v0, v10, v9
1140; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1141; CHECK-NEXT:    vmnot.m v0, v0
1142; CHECK-NEXT:    ret
1143  %head = insertelement <2 x half> poison, half %b, i32 0
1144  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1145  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1146  ret <2 x i1> %1
1147}
1148
1149define <2 x i1> @fcmp_ule_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1150; CHECK-LABEL: fcmp_ule_vv_v2f16:
1151; CHECK:       # %bb.0:
1152; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1153; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1154; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1155; CHECK-NEXT:    vmand.mm v0, v11, v10
1156; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1157; CHECK-NEXT:    vmnot.m v0, v0
1158; CHECK-NEXT:    ret
1159  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1160  ret <2 x i1> %1
1161}
1162
1163define <2 x i1> @fcmp_ule_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1164; CHECK-LABEL: fcmp_ule_vf_v2f16:
1165; CHECK:       # %bb.0:
1166; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1167; CHECK-NEXT:    vfmv.v.f v9, fa0
1168; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1169; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1170; CHECK-NEXT:    vmand.mm v0, v9, v10
1171; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1172; CHECK-NEXT:    vmnot.m v0, v0
1173; CHECK-NEXT:    ret
1174  %head = insertelement <2 x half> poison, half %b, i32 0
1175  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1176  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1177  ret <2 x i1> %1
1178}
1179
1180define <2 x i1> @fcmp_ule_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1181; CHECK-LABEL: fcmp_ule_fv_v2f16:
1182; CHECK:       # %bb.0:
1183; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1184; CHECK-NEXT:    vfmv.v.f v9, fa0
1185; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1186; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1187; CHECK-NEXT:    vmand.mm v0, v10, v9
1188; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1189; CHECK-NEXT:    vmnot.m v0, v0
1190; CHECK-NEXT:    ret
1191  %head = insertelement <2 x half> poison, half %b, i32 0
1192  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1193  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1194  ret <2 x i1> %1
1195}
1196
1197define <2 x i1> @fcmp_une_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1198; CHECK-LABEL: fcmp_une_vv_v2f16:
1199; CHECK:       # %bb.0:
1200; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1201; CHECK-NEXT:    vmfne.vv v0, v8, v9
1202; CHECK-NEXT:    ret
1203  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1204  ret <2 x i1> %1
1205}
1206
1207define <2 x i1> @fcmp_une_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1208; CHECK-LABEL: fcmp_une_vf_v2f16:
1209; CHECK:       # %bb.0:
1210; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1211; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1212; CHECK-NEXT:    ret
1213  %head = insertelement <2 x half> poison, half %b, i32 0
1214  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1215  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1216  ret <2 x i1> %1
1217}
1218
1219define <2 x i1> @fcmp_une_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1220; CHECK-LABEL: fcmp_une_fv_v2f16:
1221; CHECK:       # %bb.0:
1222; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1223; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1224; CHECK-NEXT:    ret
1225  %head = insertelement <2 x half> poison, half %b, i32 0
1226  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1227  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1228  ret <2 x i1> %1
1229}
1230
1231define <2 x i1> @fcmp_uno_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp {
1232; CHECK-LABEL: fcmp_uno_vv_v2f16:
1233; CHECK:       # %bb.0:
1234; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1235; CHECK-NEXT:    vmfne.vv v9, v9, v9
1236; CHECK-NEXT:    vmfne.vv v8, v8, v8
1237; CHECK-NEXT:    vmor.mm v0, v8, v9
1238; CHECK-NEXT:    ret
1239  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1240  ret <2 x i1> %1
1241}
1242
1243define <2 x i1> @fcmp_uno_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1244; CHECK-LABEL: fcmp_uno_vf_v2f16:
1245; CHECK:       # %bb.0:
1246; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1247; CHECK-NEXT:    vfmv.v.f v9, fa0
1248; CHECK-NEXT:    vmfne.vf v9, v9, fa0
1249; CHECK-NEXT:    vmfne.vv v8, v8, v8
1250; CHECK-NEXT:    vmor.mm v0, v8, v9
1251; CHECK-NEXT:    ret
1252  %head = insertelement <2 x half> poison, half %b, i32 0
1253  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1254  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1255  ret <2 x i1> %1
1256}
1257
1258define <2 x i1> @fcmp_uno_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp {
1259; CHECK-LABEL: fcmp_uno_fv_v2f16:
1260; CHECK:       # %bb.0:
1261; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1262; CHECK-NEXT:    vfmv.v.f v9, fa0
1263; CHECK-NEXT:    vmfne.vf v9, v9, fa0
1264; CHECK-NEXT:    vmfne.vv v8, v8, v8
1265; CHECK-NEXT:    vmor.mm v0, v9, v8
1266; CHECK-NEXT:    ret
1267  %head = insertelement <2 x half> poison, half %b, i32 0
1268  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
1269  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1270  ret <2 x i1> %1
1271}
1272
1273declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half>, <4 x half>, metadata, metadata)
1274define <4 x i1> @fcmp_oeq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1275; CHECK-LABEL: fcmp_oeq_vv_v4f16:
1276; CHECK:       # %bb.0:
1277; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1278; CHECK-NEXT:    vmfeq.vv v0, v8, v9
1279; CHECK-NEXT:    ret
1280  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1281  ret <4 x i1> %1
1282}
1283
1284define <4 x i1> @fcmp_oeq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1285; CHECK-LABEL: fcmp_oeq_vf_v4f16:
1286; CHECK:       # %bb.0:
1287; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1288; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1289; CHECK-NEXT:    ret
1290  %head = insertelement <4 x half> poison, half %b, i32 0
1291  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1292  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1293  ret <4 x i1> %1
1294}
1295
1296define <4 x i1> @fcmp_oeq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1297; CHECK-LABEL: fcmp_oeq_fv_v4f16:
1298; CHECK:       # %bb.0:
1299; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1300; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1301; CHECK-NEXT:    ret
1302  %head = insertelement <4 x half> poison, half %b, i32 0
1303  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1304  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1305  ret <4 x i1> %1
1306}
1307
1308define <4 x i1> @fcmp_ogt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1309; CHECK-LABEL: fcmp_ogt_vv_v4f16:
1310; CHECK:       # %bb.0:
1311; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1312; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1313; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1314; CHECK-NEXT:    vmand.mm v0, v11, v10
1315; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1316; CHECK-NEXT:    ret
1317  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1318  ret <4 x i1> %1
1319}
1320
1321define <4 x i1> @fcmp_ogt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1322; CHECK-LABEL: fcmp_ogt_vf_v4f16:
1323; CHECK:       # %bb.0:
1324; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1325; CHECK-NEXT:    vfmv.v.f v9, fa0
1326; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1327; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1328; CHECK-NEXT:    vmand.mm v0, v9, v10
1329; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1330; CHECK-NEXT:    ret
1331  %head = insertelement <4 x half> poison, half %b, i32 0
1332  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1333  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1334  ret <4 x i1> %1
1335}
1336
1337define <4 x i1> @fcmp_ogt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1338; CHECK-LABEL: fcmp_ogt_fv_v4f16:
1339; CHECK:       # %bb.0:
1340; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1341; CHECK-NEXT:    vfmv.v.f v9, fa0
1342; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1343; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1344; CHECK-NEXT:    vmand.mm v0, v10, v9
1345; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1346; CHECK-NEXT:    ret
1347  %head = insertelement <4 x half> poison, half %b, i32 0
1348  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1349  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1350  ret <4 x i1> %1
1351}
1352
1353define <4 x i1> @fcmp_oge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1354; CHECK-LABEL: fcmp_oge_vv_v4f16:
1355; CHECK:       # %bb.0:
1356; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1357; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1358; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1359; CHECK-NEXT:    vmand.mm v0, v11, v10
1360; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
1361; CHECK-NEXT:    ret
1362  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
1363  ret <4 x i1> %1
1364}
1365
1366define <4 x i1> @fcmp_oge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1367; CHECK-LABEL: fcmp_oge_vf_v4f16:
1368; CHECK:       # %bb.0:
1369; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1370; CHECK-NEXT:    vfmv.v.f v9, fa0
1371; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1372; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1373; CHECK-NEXT:    vmand.mm v0, v9, v10
1374; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1375; CHECK-NEXT:    ret
1376  %head = insertelement <4 x half> poison, half %b, i32 0
1377  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1378  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
1379  ret <4 x i1> %1
1380}
1381
1382define <4 x i1> @fcmp_oge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1383; CHECK-LABEL: fcmp_oge_fv_v4f16:
1384; CHECK:       # %bb.0:
1385; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1386; CHECK-NEXT:    vfmv.v.f v9, fa0
1387; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1388; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1389; CHECK-NEXT:    vmand.mm v0, v10, v9
1390; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1391; CHECK-NEXT:    ret
1392  %head = insertelement <4 x half> poison, half %b, i32 0
1393  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1394  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
1395  ret <4 x i1> %1
1396}
1397
1398define <4 x i1> @fcmp_olt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1399; CHECK-LABEL: fcmp_olt_vv_v4f16:
1400; CHECK:       # %bb.0:
1401; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1402; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1403; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1404; CHECK-NEXT:    vmand.mm v0, v11, v10
1405; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
1406; CHECK-NEXT:    ret
1407  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
1408  ret <4 x i1> %1
1409}
1410
1411define <4 x i1> @fcmp_olt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1412; CHECK-LABEL: fcmp_olt_vf_v4f16:
1413; CHECK:       # %bb.0:
1414; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1415; CHECK-NEXT:    vfmv.v.f v9, fa0
1416; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1417; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1418; CHECK-NEXT:    vmand.mm v0, v10, v9
1419; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1420; CHECK-NEXT:    ret
1421  %head = insertelement <4 x half> poison, half %b, i32 0
1422  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1423  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
1424  ret <4 x i1> %1
1425}
1426
1427define <4 x i1> @fcmp_olt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1428; CHECK-LABEL: fcmp_olt_fv_v4f16:
1429; CHECK:       # %bb.0:
1430; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1431; CHECK-NEXT:    vfmv.v.f v9, fa0
1432; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1433; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1434; CHECK-NEXT:    vmand.mm v0, v9, v10
1435; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1436; CHECK-NEXT:    ret
1437  %head = insertelement <4 x half> poison, half %b, i32 0
1438  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1439  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
1440  ret <4 x i1> %1
1441}
1442
1443define <4 x i1> @fcmp_ole_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1444; CHECK-LABEL: fcmp_ole_vv_v4f16:
1445; CHECK:       # %bb.0:
1446; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1447; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1448; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1449; CHECK-NEXT:    vmand.mm v0, v11, v10
1450; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
1451; CHECK-NEXT:    ret
1452  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
1453  ret <4 x i1> %1
1454}
1455
1456define <4 x i1> @fcmp_ole_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1457; CHECK-LABEL: fcmp_ole_vf_v4f16:
1458; CHECK:       # %bb.0:
1459; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1460; CHECK-NEXT:    vfmv.v.f v9, fa0
1461; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1462; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1463; CHECK-NEXT:    vmand.mm v0, v10, v9
1464; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1465; CHECK-NEXT:    ret
1466  %head = insertelement <4 x half> poison, half %b, i32 0
1467  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1468  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
1469  ret <4 x i1> %1
1470}
1471
1472define <4 x i1> @fcmp_ole_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1473; CHECK-LABEL: fcmp_ole_fv_v4f16:
1474; CHECK:       # %bb.0:
1475; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1476; CHECK-NEXT:    vfmv.v.f v9, fa0
1477; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1478; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1479; CHECK-NEXT:    vmand.mm v0, v9, v10
1480; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1481; CHECK-NEXT:    ret
1482  %head = insertelement <4 x half> poison, half %b, i32 0
1483  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1484  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
1485  ret <4 x i1> %1
1486}
1487
1488define <4 x i1> @fcmp_one_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1489; CHECK-LABEL: fcmp_one_vv_v4f16:
1490; CHECK:       # %bb.0:
1491; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1492; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1493; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1494; CHECK-NEXT:    vmand.mm v0, v11, v10
1495; CHECK-NEXT:    vmv1r.v v10, v0
1496; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
1497; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1498; CHECK-NEXT:    vmor.mm v0, v0, v10
1499; CHECK-NEXT:    ret
1500  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
1501  ret <4 x i1> %1
1502}
1503
1504define <4 x i1> @fcmp_one_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1505; CHECK-LABEL: fcmp_one_vf_v4f16:
1506; CHECK:       # %bb.0:
1507; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1508; CHECK-NEXT:    vfmv.v.f v9, fa0
1509; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1510; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1511; CHECK-NEXT:    vmand.mm v0, v10, v9
1512; CHECK-NEXT:    vmv1r.v v9, v0
1513; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
1514; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1515; CHECK-NEXT:    vmor.mm v0, v0, v9
1516; CHECK-NEXT:    ret
1517  %head = insertelement <4 x half> poison, half %b, i32 0
1518  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1519  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
1520  ret <4 x i1> %1
1521}
1522
1523define <4 x i1> @fcmp_one_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1524; CHECK-LABEL: fcmp_one_fv_v4f16:
1525; CHECK:       # %bb.0:
1526; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1527; CHECK-NEXT:    vfmv.v.f v9, fa0
1528; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1529; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1530; CHECK-NEXT:    vmand.mm v0, v9, v10
1531; CHECK-NEXT:    vmv1r.v v9, v0
1532; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
1533; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1534; CHECK-NEXT:    vmor.mm v0, v0, v9
1535; CHECK-NEXT:    ret
1536  %head = insertelement <4 x half> poison, half %b, i32 0
1537  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1538  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
1539  ret <4 x i1> %1
1540}
1541
1542define <4 x i1> @fcmp_ord_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1543; CHECK-LABEL: fcmp_ord_vv_v4f16:
1544; CHECK:       # %bb.0:
1545; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1546; CHECK-NEXT:    vmfeq.vv v9, v9, v9
1547; CHECK-NEXT:    vmfeq.vv v8, v8, v8
1548; CHECK-NEXT:    vmand.mm v0, v8, v9
1549; CHECK-NEXT:    ret
1550  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
1551  ret <4 x i1> %1
1552}
1553
1554define <4 x i1> @fcmp_ord_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1555; CHECK-LABEL: fcmp_ord_vf_v4f16:
1556; CHECK:       # %bb.0:
1557; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1558; CHECK-NEXT:    vfmv.v.f v9, fa0
1559; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1560; CHECK-NEXT:    vmfeq.vv v8, v8, v8
1561; CHECK-NEXT:    vmand.mm v0, v8, v9
1562; CHECK-NEXT:    ret
1563  %head = insertelement <4 x half> poison, half %b, i32 0
1564  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1565  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
1566  ret <4 x i1> %1
1567}
1568
1569define <4 x i1> @fcmp_ord_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1570; CHECK-LABEL: fcmp_ord_fv_v4f16:
1571; CHECK:       # %bb.0:
1572; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1573; CHECK-NEXT:    vfmv.v.f v9, fa0
1574; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1575; CHECK-NEXT:    vmfeq.vv v8, v8, v8
1576; CHECK-NEXT:    vmand.mm v0, v9, v8
1577; CHECK-NEXT:    ret
1578  %head = insertelement <4 x half> poison, half %b, i32 0
1579  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1580  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
1581  ret <4 x i1> %1
1582}
1583
1584define <4 x i1> @fcmp_ueq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1585; CHECK-LABEL: fcmp_ueq_vv_v4f16:
1586; CHECK:       # %bb.0:
1587; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1588; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1589; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1590; CHECK-NEXT:    vmand.mm v0, v11, v10
1591; CHECK-NEXT:    vmv1r.v v10, v0
1592; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
1593; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1594; CHECK-NEXT:    vmnor.mm v0, v0, v10
1595; CHECK-NEXT:    ret
1596  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1597  ret <4 x i1> %1
1598}
1599
1600define <4 x i1> @fcmp_ueq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1601; CHECK-LABEL: fcmp_ueq_vf_v4f16:
1602; CHECK:       # %bb.0:
1603; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1604; CHECK-NEXT:    vfmv.v.f v9, fa0
1605; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1606; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1607; CHECK-NEXT:    vmand.mm v0, v10, v9
1608; CHECK-NEXT:    vmv1r.v v9, v0
1609; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
1610; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1611; CHECK-NEXT:    vmnor.mm v0, v0, v9
1612; CHECK-NEXT:    ret
1613  %head = insertelement <4 x half> poison, half %b, i32 0
1614  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1615  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1616  ret <4 x i1> %1
1617}
1618
1619define <4 x i1> @fcmp_ueq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1620; CHECK-LABEL: fcmp_ueq_fv_v4f16:
1621; CHECK:       # %bb.0:
1622; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1623; CHECK-NEXT:    vfmv.v.f v9, fa0
1624; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1625; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1626; CHECK-NEXT:    vmand.mm v0, v9, v10
1627; CHECK-NEXT:    vmv1r.v v9, v0
1628; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
1629; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1630; CHECK-NEXT:    vmnor.mm v0, v0, v9
1631; CHECK-NEXT:    ret
1632  %head = insertelement <4 x half> poison, half %b, i32 0
1633  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1634  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
1635  ret <4 x i1> %1
1636}
1637
1638define <4 x i1> @fcmp_ugt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1639; CHECK-LABEL: fcmp_ugt_vv_v4f16:
1640; CHECK:       # %bb.0:
1641; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1642; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1643; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1644; CHECK-NEXT:    vmand.mm v0, v11, v10
1645; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
1646; CHECK-NEXT:    vmnot.m v0, v0
1647; CHECK-NEXT:    ret
1648  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1649  ret <4 x i1> %1
1650}
1651
1652define <4 x i1> @fcmp_ugt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1653; CHECK-LABEL: fcmp_ugt_vf_v4f16:
1654; CHECK:       # %bb.0:
1655; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1656; CHECK-NEXT:    vfmv.v.f v9, fa0
1657; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1658; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1659; CHECK-NEXT:    vmand.mm v0, v10, v9
1660; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1661; CHECK-NEXT:    vmnot.m v0, v0
1662; CHECK-NEXT:    ret
1663  %head = insertelement <4 x half> poison, half %b, i32 0
1664  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1665  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1666  ret <4 x i1> %1
1667}
1668
1669define <4 x i1> @fcmp_ugt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1670; CHECK-LABEL: fcmp_ugt_fv_v4f16:
1671; CHECK:       # %bb.0:
1672; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1673; CHECK-NEXT:    vfmv.v.f v9, fa0
1674; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1675; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1676; CHECK-NEXT:    vmand.mm v0, v9, v10
1677; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1678; CHECK-NEXT:    vmnot.m v0, v0
1679; CHECK-NEXT:    ret
1680  %head = insertelement <4 x half> poison, half %b, i32 0
1681  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1682  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
1683  ret <4 x i1> %1
1684}
1685
1686define <4 x i1> @fcmp_uge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1687; CHECK-LABEL: fcmp_uge_vv_v4f16:
1688; CHECK:       # %bb.0:
1689; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1690; CHECK-NEXT:    vmfeq.vv v10, v9, v9
1691; CHECK-NEXT:    vmfeq.vv v11, v8, v8
1692; CHECK-NEXT:    vmand.mm v0, v11, v10
1693; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
1694; CHECK-NEXT:    vmnot.m v0, v0
1695; CHECK-NEXT:    ret
1696  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
1697  ret <4 x i1> %1
1698}
1699
1700define <4 x i1> @fcmp_uge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1701; CHECK-LABEL: fcmp_uge_vf_v4f16:
1702; CHECK:       # %bb.0:
1703; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1704; CHECK-NEXT:    vfmv.v.f v9, fa0
1705; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1706; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1707; CHECK-NEXT:    vmand.mm v0, v10, v9
1708; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1709; CHECK-NEXT:    vmnot.m v0, v0
1710; CHECK-NEXT:    ret
1711  %head = insertelement <4 x half> poison, half %b, i32 0
1712  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1713  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
1714  ret <4 x i1> %1
1715}
1716
1717define <4 x i1> @fcmp_uge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1718; CHECK-LABEL: fcmp_uge_fv_v4f16:
1719; CHECK:       # %bb.0:
1720; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1721; CHECK-NEXT:    vfmv.v.f v9, fa0
1722; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1723; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1724; CHECK-NEXT:    vmand.mm v0, v9, v10
1725; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1726; CHECK-NEXT:    vmnot.m v0, v0
1727; CHECK-NEXT:    ret
1728  %head = insertelement <4 x half> poison, half %b, i32 0
1729  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1730  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
1731  ret <4 x i1> %1
1732}
1733
1734define <4 x i1> @fcmp_ult_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1735; CHECK-LABEL: fcmp_ult_vv_v4f16:
1736; CHECK:       # %bb.0:
1737; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1738; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1739; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1740; CHECK-NEXT:    vmand.mm v0, v11, v10
1741; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
1742; CHECK-NEXT:    vmnot.m v0, v0
1743; CHECK-NEXT:    ret
1744  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
1745  ret <4 x i1> %1
1746}
1747
1748define <4 x i1> @fcmp_ult_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1749; CHECK-LABEL: fcmp_ult_vf_v4f16:
1750; CHECK:       # %bb.0:
1751; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1752; CHECK-NEXT:    vfmv.v.f v9, fa0
1753; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1754; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1755; CHECK-NEXT:    vmand.mm v0, v9, v10
1756; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
1757; CHECK-NEXT:    vmnot.m v0, v0
1758; CHECK-NEXT:    ret
1759  %head = insertelement <4 x half> poison, half %b, i32 0
1760  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1761  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
1762  ret <4 x i1> %1
1763}
1764
1765define <4 x i1> @fcmp_ult_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1766; CHECK-LABEL: fcmp_ult_fv_v4f16:
1767; CHECK:       # %bb.0:
1768; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1769; CHECK-NEXT:    vfmv.v.f v9, fa0
1770; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1771; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1772; CHECK-NEXT:    vmand.mm v0, v10, v9
1773; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
1774; CHECK-NEXT:    vmnot.m v0, v0
1775; CHECK-NEXT:    ret
1776  %head = insertelement <4 x half> poison, half %b, i32 0
1777  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1778  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
1779  ret <4 x i1> %1
1780}
1781
1782define <4 x i1> @fcmp_ule_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1783; CHECK-LABEL: fcmp_ule_vv_v4f16:
1784; CHECK:       # %bb.0:
1785; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1786; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1787; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1788; CHECK-NEXT:    vmand.mm v0, v11, v10
1789; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1790; CHECK-NEXT:    vmnot.m v0, v0
1791; CHECK-NEXT:    ret
1792  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
1793  ret <4 x i1> %1
1794}
1795
1796define <4 x i1> @fcmp_ule_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1797; CHECK-LABEL: fcmp_ule_vf_v4f16:
1798; CHECK:       # %bb.0:
1799; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1800; CHECK-NEXT:    vfmv.v.f v9, fa0
1801; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1802; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1803; CHECK-NEXT:    vmand.mm v0, v9, v10
1804; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1805; CHECK-NEXT:    vmnot.m v0, v0
1806; CHECK-NEXT:    ret
1807  %head = insertelement <4 x half> poison, half %b, i32 0
1808  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1809  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
1810  ret <4 x i1> %1
1811}
1812
1813define <4 x i1> @fcmp_ule_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1814; CHECK-LABEL: fcmp_ule_fv_v4f16:
1815; CHECK:       # %bb.0:
1816; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1817; CHECK-NEXT:    vfmv.v.f v9, fa0
1818; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1819; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1820; CHECK-NEXT:    vmand.mm v0, v10, v9
1821; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1822; CHECK-NEXT:    vmnot.m v0, v0
1823; CHECK-NEXT:    ret
1824  %head = insertelement <4 x half> poison, half %b, i32 0
1825  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1826  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
1827  ret <4 x i1> %1
1828}
1829
1830define <4 x i1> @fcmp_une_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1831; CHECK-LABEL: fcmp_une_vv_v4f16:
1832; CHECK:       # %bb.0:
1833; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1834; CHECK-NEXT:    vmfne.vv v0, v8, v9
1835; CHECK-NEXT:    ret
1836  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
1837  ret <4 x i1> %1
1838}
1839
1840define <4 x i1> @fcmp_une_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1841; CHECK-LABEL: fcmp_une_vf_v4f16:
1842; CHECK:       # %bb.0:
1843; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1844; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1845; CHECK-NEXT:    ret
1846  %head = insertelement <4 x half> poison, half %b, i32 0
1847  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1848  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
1849  ret <4 x i1> %1
1850}
1851
1852define <4 x i1> @fcmp_une_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1853; CHECK-LABEL: fcmp_une_fv_v4f16:
1854; CHECK:       # %bb.0:
1855; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1856; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1857; CHECK-NEXT:    ret
1858  %head = insertelement <4 x half> poison, half %b, i32 0
1859  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1860  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
1861  ret <4 x i1> %1
1862}
1863
1864define <4 x i1> @fcmp_uno_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp {
1865; CHECK-LABEL: fcmp_uno_vv_v4f16:
1866; CHECK:       # %bb.0:
1867; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1868; CHECK-NEXT:    vmfne.vv v9, v9, v9
1869; CHECK-NEXT:    vmfne.vv v8, v8, v8
1870; CHECK-NEXT:    vmor.mm v0, v8, v9
1871; CHECK-NEXT:    ret
1872  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
1873  ret <4 x i1> %1
1874}
1875
1876define <4 x i1> @fcmp_uno_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1877; CHECK-LABEL: fcmp_uno_vf_v4f16:
1878; CHECK:       # %bb.0:
1879; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1880; CHECK-NEXT:    vfmv.v.f v9, fa0
1881; CHECK-NEXT:    vmfne.vf v9, v9, fa0
1882; CHECK-NEXT:    vmfne.vv v8, v8, v8
1883; CHECK-NEXT:    vmor.mm v0, v8, v9
1884; CHECK-NEXT:    ret
1885  %head = insertelement <4 x half> poison, half %b, i32 0
1886  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1887  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
1888  ret <4 x i1> %1
1889}
1890
1891define <4 x i1> @fcmp_uno_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp {
1892; CHECK-LABEL: fcmp_uno_fv_v4f16:
1893; CHECK:       # %bb.0:
1894; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1895; CHECK-NEXT:    vfmv.v.f v9, fa0
1896; CHECK-NEXT:    vmfne.vf v9, v9, fa0
1897; CHECK-NEXT:    vmfne.vv v8, v8, v8
1898; CHECK-NEXT:    vmor.mm v0, v9, v8
1899; CHECK-NEXT:    ret
1900  %head = insertelement <4 x half> poison, half %b, i32 0
1901  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
1902  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
1903  ret <4 x i1> %1
1904}
1905
1906declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half>, <8 x half>, metadata, metadata)
1907define <8 x i1> @fcmp_oeq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1908; CHECK-LABEL: fcmp_oeq_vv_v8f16:
1909; CHECK:       # %bb.0:
1910; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1911; CHECK-NEXT:    vmfeq.vv v0, v8, v9
1912; CHECK-NEXT:    ret
1913  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1914  ret <8 x i1> %1
1915}
1916
1917define <8 x i1> @fcmp_oeq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1918; CHECK-LABEL: fcmp_oeq_vf_v8f16:
1919; CHECK:       # %bb.0:
1920; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1921; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1922; CHECK-NEXT:    ret
1923  %head = insertelement <8 x half> poison, half %b, i32 0
1924  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1925  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1926  ret <8 x i1> %1
1927}
1928
1929define <8 x i1> @fcmp_oeq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1930; CHECK-LABEL: fcmp_oeq_fv_v8f16:
1931; CHECK:       # %bb.0:
1932; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1933; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1934; CHECK-NEXT:    ret
1935  %head = insertelement <8 x half> poison, half %b, i32 0
1936  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1937  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
1938  ret <8 x i1> %1
1939}
1940
1941define <8 x i1> @fcmp_ogt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1942; CHECK-LABEL: fcmp_ogt_vv_v8f16:
1943; CHECK:       # %bb.0:
1944; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1945; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1946; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1947; CHECK-NEXT:    vmand.mm v0, v11, v10
1948; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
1949; CHECK-NEXT:    ret
1950  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1951  ret <8 x i1> %1
1952}
1953
1954define <8 x i1> @fcmp_ogt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1955; CHECK-LABEL: fcmp_ogt_vf_v8f16:
1956; CHECK:       # %bb.0:
1957; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1958; CHECK-NEXT:    vfmv.v.f v9, fa0
1959; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1960; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1961; CHECK-NEXT:    vmand.mm v0, v9, v10
1962; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
1963; CHECK-NEXT:    ret
1964  %head = insertelement <8 x half> poison, half %b, i32 0
1965  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1966  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1967  ret <8 x i1> %1
1968}
1969
1970define <8 x i1> @fcmp_ogt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
1971; CHECK-LABEL: fcmp_ogt_fv_v8f16:
1972; CHECK:       # %bb.0:
1973; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1974; CHECK-NEXT:    vfmv.v.f v9, fa0
1975; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1976; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
1977; CHECK-NEXT:    vmand.mm v0, v10, v9
1978; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
1979; CHECK-NEXT:    ret
1980  %head = insertelement <8 x half> poison, half %b, i32 0
1981  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
1982  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
1983  ret <8 x i1> %1
1984}
1985
1986define <8 x i1> @fcmp_oge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
1987; CHECK-LABEL: fcmp_oge_vv_v8f16:
1988; CHECK:       # %bb.0:
1989; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1990; CHECK-NEXT:    vmfeq.vv v10, v8, v8
1991; CHECK-NEXT:    vmfeq.vv v11, v9, v9
1992; CHECK-NEXT:    vmand.mm v0, v11, v10
1993; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
1994; CHECK-NEXT:    ret
1995  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
1996  ret <8 x i1> %1
1997}
1998
1999define <8 x i1> @fcmp_oge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2000; CHECK-LABEL: fcmp_oge_vf_v8f16:
2001; CHECK:       # %bb.0:
2002; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2003; CHECK-NEXT:    vfmv.v.f v9, fa0
2004; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2005; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2006; CHECK-NEXT:    vmand.mm v0, v9, v10
2007; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
2008; CHECK-NEXT:    ret
2009  %head = insertelement <8 x half> poison, half %b, i32 0
2010  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2011  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2012  ret <8 x i1> %1
2013}
2014
2015define <8 x i1> @fcmp_oge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2016; CHECK-LABEL: fcmp_oge_fv_v8f16:
2017; CHECK:       # %bb.0:
2018; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2019; CHECK-NEXT:    vfmv.v.f v9, fa0
2020; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2021; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2022; CHECK-NEXT:    vmand.mm v0, v10, v9
2023; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
2024; CHECK-NEXT:    ret
2025  %head = insertelement <8 x half> poison, half %b, i32 0
2026  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2027  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2028  ret <8 x i1> %1
2029}
2030
2031define <8 x i1> @fcmp_olt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2032; CHECK-LABEL: fcmp_olt_vv_v8f16:
2033; CHECK:       # %bb.0:
2034; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2035; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2036; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2037; CHECK-NEXT:    vmand.mm v0, v11, v10
2038; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
2039; CHECK-NEXT:    ret
2040  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2041  ret <8 x i1> %1
2042}
2043
2044define <8 x i1> @fcmp_olt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2045; CHECK-LABEL: fcmp_olt_vf_v8f16:
2046; CHECK:       # %bb.0:
2047; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2048; CHECK-NEXT:    vfmv.v.f v9, fa0
2049; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2050; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2051; CHECK-NEXT:    vmand.mm v0, v10, v9
2052; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
2053; CHECK-NEXT:    ret
2054  %head = insertelement <8 x half> poison, half %b, i32 0
2055  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2056  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2057  ret <8 x i1> %1
2058}
2059
2060define <8 x i1> @fcmp_olt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2061; CHECK-LABEL: fcmp_olt_fv_v8f16:
2062; CHECK:       # %bb.0:
2063; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2064; CHECK-NEXT:    vfmv.v.f v9, fa0
2065; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2066; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2067; CHECK-NEXT:    vmand.mm v0, v9, v10
2068; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
2069; CHECK-NEXT:    ret
2070  %head = insertelement <8 x half> poison, half %b, i32 0
2071  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2072  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2073  ret <8 x i1> %1
2074}
2075
2076define <8 x i1> @fcmp_ole_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2077; CHECK-LABEL: fcmp_ole_vv_v8f16:
2078; CHECK:       # %bb.0:
2079; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2080; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2081; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2082; CHECK-NEXT:    vmand.mm v0, v11, v10
2083; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
2084; CHECK-NEXT:    ret
2085  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2086  ret <8 x i1> %1
2087}
2088
2089define <8 x i1> @fcmp_ole_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2090; CHECK-LABEL: fcmp_ole_vf_v8f16:
2091; CHECK:       # %bb.0:
2092; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2093; CHECK-NEXT:    vfmv.v.f v9, fa0
2094; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2095; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2096; CHECK-NEXT:    vmand.mm v0, v10, v9
2097; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
2098; CHECK-NEXT:    ret
2099  %head = insertelement <8 x half> poison, half %b, i32 0
2100  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2101  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2102  ret <8 x i1> %1
2103}
2104
2105define <8 x i1> @fcmp_ole_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2106; CHECK-LABEL: fcmp_ole_fv_v8f16:
2107; CHECK:       # %bb.0:
2108; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2109; CHECK-NEXT:    vfmv.v.f v9, fa0
2110; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2111; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2112; CHECK-NEXT:    vmand.mm v0, v9, v10
2113; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
2114; CHECK-NEXT:    ret
2115  %head = insertelement <8 x half> poison, half %b, i32 0
2116  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2117  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2118  ret <8 x i1> %1
2119}
2120
2121define <8 x i1> @fcmp_one_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2122; CHECK-LABEL: fcmp_one_vv_v8f16:
2123; CHECK:       # %bb.0:
2124; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2125; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2126; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2127; CHECK-NEXT:    vmand.mm v0, v11, v10
2128; CHECK-NEXT:    vmv.v.v v10, v0
2129; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
2130; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
2131; CHECK-NEXT:    vmor.mm v0, v0, v10
2132; CHECK-NEXT:    ret
2133  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2134  ret <8 x i1> %1
2135}
2136
2137define <8 x i1> @fcmp_one_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2138; CHECK-LABEL: fcmp_one_vf_v8f16:
2139; CHECK:       # %bb.0:
2140; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2141; CHECK-NEXT:    vfmv.v.f v9, fa0
2142; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2143; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2144; CHECK-NEXT:    vmand.mm v0, v10, v9
2145; CHECK-NEXT:    vmv.v.v v9, v0
2146; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
2147; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
2148; CHECK-NEXT:    vmor.mm v0, v0, v9
2149; CHECK-NEXT:    ret
2150  %head = insertelement <8 x half> poison, half %b, i32 0
2151  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2152  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2153  ret <8 x i1> %1
2154}
2155
2156define <8 x i1> @fcmp_one_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2157; CHECK-LABEL: fcmp_one_fv_v8f16:
2158; CHECK:       # %bb.0:
2159; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2160; CHECK-NEXT:    vfmv.v.f v9, fa0
2161; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2162; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2163; CHECK-NEXT:    vmand.mm v0, v9, v10
2164; CHECK-NEXT:    vmv.v.v v9, v0
2165; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
2166; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
2167; CHECK-NEXT:    vmor.mm v0, v0, v9
2168; CHECK-NEXT:    ret
2169  %head = insertelement <8 x half> poison, half %b, i32 0
2170  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2171  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2172  ret <8 x i1> %1
2173}
2174
2175define <8 x i1> @fcmp_ord_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2176; CHECK-LABEL: fcmp_ord_vv_v8f16:
2177; CHECK:       # %bb.0:
2178; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2179; CHECK-NEXT:    vmfeq.vv v9, v9, v9
2180; CHECK-NEXT:    vmfeq.vv v8, v8, v8
2181; CHECK-NEXT:    vmand.mm v0, v8, v9
2182; CHECK-NEXT:    ret
2183  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2184  ret <8 x i1> %1
2185}
2186
2187define <8 x i1> @fcmp_ord_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2188; CHECK-LABEL: fcmp_ord_vf_v8f16:
2189; CHECK:       # %bb.0:
2190; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2191; CHECK-NEXT:    vfmv.v.f v9, fa0
2192; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2193; CHECK-NEXT:    vmfeq.vv v8, v8, v8
2194; CHECK-NEXT:    vmand.mm v0, v8, v9
2195; CHECK-NEXT:    ret
2196  %head = insertelement <8 x half> poison, half %b, i32 0
2197  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2198  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2199  ret <8 x i1> %1
2200}
2201
2202define <8 x i1> @fcmp_ord_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2203; CHECK-LABEL: fcmp_ord_fv_v8f16:
2204; CHECK:       # %bb.0:
2205; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2206; CHECK-NEXT:    vfmv.v.f v9, fa0
2207; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2208; CHECK-NEXT:    vmfeq.vv v8, v8, v8
2209; CHECK-NEXT:    vmand.mm v0, v9, v8
2210; CHECK-NEXT:    ret
2211  %head = insertelement <8 x half> poison, half %b, i32 0
2212  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2213  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2214  ret <8 x i1> %1
2215}
2216
2217define <8 x i1> @fcmp_ueq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2218; CHECK-LABEL: fcmp_ueq_vv_v8f16:
2219; CHECK:       # %bb.0:
2220; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2221; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2222; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2223; CHECK-NEXT:    vmand.mm v0, v11, v10
2224; CHECK-NEXT:    vmv.v.v v10, v0
2225; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
2226; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
2227; CHECK-NEXT:    vmnor.mm v0, v0, v10
2228; CHECK-NEXT:    ret
2229  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2230  ret <8 x i1> %1
2231}
2232
2233define <8 x i1> @fcmp_ueq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2234; CHECK-LABEL: fcmp_ueq_vf_v8f16:
2235; CHECK:       # %bb.0:
2236; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2237; CHECK-NEXT:    vfmv.v.f v9, fa0
2238; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2239; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2240; CHECK-NEXT:    vmand.mm v0, v10, v9
2241; CHECK-NEXT:    vmv.v.v v9, v0
2242; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
2243; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
2244; CHECK-NEXT:    vmnor.mm v0, v0, v9
2245; CHECK-NEXT:    ret
2246  %head = insertelement <8 x half> poison, half %b, i32 0
2247  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2248  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2249  ret <8 x i1> %1
2250}
2251
2252define <8 x i1> @fcmp_ueq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2253; CHECK-LABEL: fcmp_ueq_fv_v8f16:
2254; CHECK:       # %bb.0:
2255; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2256; CHECK-NEXT:    vfmv.v.f v9, fa0
2257; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2258; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2259; CHECK-NEXT:    vmand.mm v0, v9, v10
2260; CHECK-NEXT:    vmv.v.v v9, v0
2261; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
2262; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
2263; CHECK-NEXT:    vmnor.mm v0, v0, v9
2264; CHECK-NEXT:    ret
2265  %head = insertelement <8 x half> poison, half %b, i32 0
2266  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2267  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2268  ret <8 x i1> %1
2269}
2270
2271define <8 x i1> @fcmp_ugt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2272; CHECK-LABEL: fcmp_ugt_vv_v8f16:
2273; CHECK:       # %bb.0:
2274; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2275; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2276; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2277; CHECK-NEXT:    vmand.mm v0, v11, v10
2278; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
2279; CHECK-NEXT:    vmnot.m v0, v0
2280; CHECK-NEXT:    ret
2281  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2282  ret <8 x i1> %1
2283}
2284
2285define <8 x i1> @fcmp_ugt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2286; CHECK-LABEL: fcmp_ugt_vf_v8f16:
2287; CHECK:       # %bb.0:
2288; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2289; CHECK-NEXT:    vfmv.v.f v9, fa0
2290; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2291; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2292; CHECK-NEXT:    vmand.mm v0, v10, v9
2293; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
2294; CHECK-NEXT:    vmnot.m v0, v0
2295; CHECK-NEXT:    ret
2296  %head = insertelement <8 x half> poison, half %b, i32 0
2297  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2298  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2299  ret <8 x i1> %1
2300}
2301
2302define <8 x i1> @fcmp_ugt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2303; CHECK-LABEL: fcmp_ugt_fv_v8f16:
2304; CHECK:       # %bb.0:
2305; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2306; CHECK-NEXT:    vfmv.v.f v9, fa0
2307; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2308; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2309; CHECK-NEXT:    vmand.mm v0, v9, v10
2310; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
2311; CHECK-NEXT:    vmnot.m v0, v0
2312; CHECK-NEXT:    ret
2313  %head = insertelement <8 x half> poison, half %b, i32 0
2314  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2315  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2316  ret <8 x i1> %1
2317}
2318
2319define <8 x i1> @fcmp_uge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2320; CHECK-LABEL: fcmp_uge_vv_v8f16:
2321; CHECK:       # %bb.0:
2322; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2323; CHECK-NEXT:    vmfeq.vv v10, v9, v9
2324; CHECK-NEXT:    vmfeq.vv v11, v8, v8
2325; CHECK-NEXT:    vmand.mm v0, v11, v10
2326; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
2327; CHECK-NEXT:    vmnot.m v0, v0
2328; CHECK-NEXT:    ret
2329  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
2330  ret <8 x i1> %1
2331}
2332
2333define <8 x i1> @fcmp_uge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2334; CHECK-LABEL: fcmp_uge_vf_v8f16:
2335; CHECK:       # %bb.0:
2336; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2337; CHECK-NEXT:    vfmv.v.f v9, fa0
2338; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2339; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2340; CHECK-NEXT:    vmand.mm v0, v10, v9
2341; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
2342; CHECK-NEXT:    vmnot.m v0, v0
2343; CHECK-NEXT:    ret
2344  %head = insertelement <8 x half> poison, half %b, i32 0
2345  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2346  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
2347  ret <8 x i1> %1
2348}
2349
2350define <8 x i1> @fcmp_uge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2351; CHECK-LABEL: fcmp_uge_fv_v8f16:
2352; CHECK:       # %bb.0:
2353; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2354; CHECK-NEXT:    vfmv.v.f v9, fa0
2355; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2356; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2357; CHECK-NEXT:    vmand.mm v0, v9, v10
2358; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
2359; CHECK-NEXT:    vmnot.m v0, v0
2360; CHECK-NEXT:    ret
2361  %head = insertelement <8 x half> poison, half %b, i32 0
2362  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2363  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
2364  ret <8 x i1> %1
2365}
2366
2367define <8 x i1> @fcmp_ult_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2368; CHECK-LABEL: fcmp_ult_vv_v8f16:
2369; CHECK:       # %bb.0:
2370; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2371; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2372; CHECK-NEXT:    vmfeq.vv v11, v9, v9
2373; CHECK-NEXT:    vmand.mm v0, v11, v10
2374; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
2375; CHECK-NEXT:    vmnot.m v0, v0
2376; CHECK-NEXT:    ret
2377  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
2378  ret <8 x i1> %1
2379}
2380
2381define <8 x i1> @fcmp_ult_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2382; CHECK-LABEL: fcmp_ult_vf_v8f16:
2383; CHECK:       # %bb.0:
2384; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2385; CHECK-NEXT:    vfmv.v.f v9, fa0
2386; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2387; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2388; CHECK-NEXT:    vmand.mm v0, v9, v10
2389; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
2390; CHECK-NEXT:    vmnot.m v0, v0
2391; CHECK-NEXT:    ret
2392  %head = insertelement <8 x half> poison, half %b, i32 0
2393  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2394  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
2395  ret <8 x i1> %1
2396}
2397
2398define <8 x i1> @fcmp_ult_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2399; CHECK-LABEL: fcmp_ult_fv_v8f16:
2400; CHECK:       # %bb.0:
2401; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2402; CHECK-NEXT:    vfmv.v.f v9, fa0
2403; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2404; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2405; CHECK-NEXT:    vmand.mm v0, v10, v9
2406; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
2407; CHECK-NEXT:    vmnot.m v0, v0
2408; CHECK-NEXT:    ret
2409  %head = insertelement <8 x half> poison, half %b, i32 0
2410  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2411  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
2412  ret <8 x i1> %1
2413}
2414
2415define <8 x i1> @fcmp_ule_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2416; CHECK-LABEL: fcmp_ule_vv_v8f16:
2417; CHECK:       # %bb.0:
2418; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2419; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2420; CHECK-NEXT:    vmfeq.vv v11, v9, v9
2421; CHECK-NEXT:    vmand.mm v0, v11, v10
2422; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
2423; CHECK-NEXT:    vmnot.m v0, v0
2424; CHECK-NEXT:    ret
2425  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
2426  ret <8 x i1> %1
2427}
2428
2429define <8 x i1> @fcmp_ule_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2430; CHECK-LABEL: fcmp_ule_vf_v8f16:
2431; CHECK:       # %bb.0:
2432; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2433; CHECK-NEXT:    vfmv.v.f v9, fa0
2434; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2435; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2436; CHECK-NEXT:    vmand.mm v0, v9, v10
2437; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
2438; CHECK-NEXT:    vmnot.m v0, v0
2439; CHECK-NEXT:    ret
2440  %head = insertelement <8 x half> poison, half %b, i32 0
2441  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2442  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
2443  ret <8 x i1> %1
2444}
2445
2446define <8 x i1> @fcmp_ule_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2447; CHECK-LABEL: fcmp_ule_fv_v8f16:
2448; CHECK:       # %bb.0:
2449; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2450; CHECK-NEXT:    vfmv.v.f v9, fa0
2451; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2452; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
2453; CHECK-NEXT:    vmand.mm v0, v10, v9
2454; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
2455; CHECK-NEXT:    vmnot.m v0, v0
2456; CHECK-NEXT:    ret
2457  %head = insertelement <8 x half> poison, half %b, i32 0
2458  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2459  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
2460  ret <8 x i1> %1
2461}
2462
2463define <8 x i1> @fcmp_une_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2464; CHECK-LABEL: fcmp_une_vv_v8f16:
2465; CHECK:       # %bb.0:
2466; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2467; CHECK-NEXT:    vmfne.vv v0, v8, v9
2468; CHECK-NEXT:    ret
2469  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
2470  ret <8 x i1> %1
2471}
2472
2473define <8 x i1> @fcmp_une_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2474; CHECK-LABEL: fcmp_une_vf_v8f16:
2475; CHECK:       # %bb.0:
2476; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2477; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2478; CHECK-NEXT:    ret
2479  %head = insertelement <8 x half> poison, half %b, i32 0
2480  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2481  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
2482  ret <8 x i1> %1
2483}
2484
2485define <8 x i1> @fcmp_une_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2486; CHECK-LABEL: fcmp_une_fv_v8f16:
2487; CHECK:       # %bb.0:
2488; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2489; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2490; CHECK-NEXT:    ret
2491  %head = insertelement <8 x half> poison, half %b, i32 0
2492  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2493  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
2494  ret <8 x i1> %1
2495}
2496
2497define <8 x i1> @fcmp_uno_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp {
2498; CHECK-LABEL: fcmp_uno_vv_v8f16:
2499; CHECK:       # %bb.0:
2500; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2501; CHECK-NEXT:    vmfne.vv v9, v9, v9
2502; CHECK-NEXT:    vmfne.vv v8, v8, v8
2503; CHECK-NEXT:    vmor.mm v0, v8, v9
2504; CHECK-NEXT:    ret
2505  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
2506  ret <8 x i1> %1
2507}
2508
2509define <8 x i1> @fcmp_uno_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2510; CHECK-LABEL: fcmp_uno_vf_v8f16:
2511; CHECK:       # %bb.0:
2512; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2513; CHECK-NEXT:    vfmv.v.f v9, fa0
2514; CHECK-NEXT:    vmfne.vf v9, v9, fa0
2515; CHECK-NEXT:    vmfne.vv v8, v8, v8
2516; CHECK-NEXT:    vmor.mm v0, v8, v9
2517; CHECK-NEXT:    ret
2518  %head = insertelement <8 x half> poison, half %b, i32 0
2519  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2520  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
2521  ret <8 x i1> %1
2522}
2523
2524define <8 x i1> @fcmp_uno_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp {
2525; CHECK-LABEL: fcmp_uno_fv_v8f16:
2526; CHECK:       # %bb.0:
2527; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2528; CHECK-NEXT:    vfmv.v.f v9, fa0
2529; CHECK-NEXT:    vmfne.vf v9, v9, fa0
2530; CHECK-NEXT:    vmfne.vv v8, v8, v8
2531; CHECK-NEXT:    vmor.mm v0, v9, v8
2532; CHECK-NEXT:    ret
2533  %head = insertelement <8 x half> poison, half %b, i32 0
2534  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
2535  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
2536  ret <8 x i1> %1
2537}
2538
2539declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half>, <16 x half>, metadata, metadata)
2540define <16 x i1> @fcmp_oeq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2541; CHECK-LABEL: fcmp_oeq_vv_v16f16:
2542; CHECK:       # %bb.0:
2543; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2544; CHECK-NEXT:    vmfeq.vv v0, v8, v10
2545; CHECK-NEXT:    ret
2546  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2547  ret <16 x i1> %1
2548}
2549
2550define <16 x i1> @fcmp_oeq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2551; CHECK-LABEL: fcmp_oeq_vf_v16f16:
2552; CHECK:       # %bb.0:
2553; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2554; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2555; CHECK-NEXT:    ret
2556  %head = insertelement <16 x half> poison, half %b, i32 0
2557  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2558  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2559  ret <16 x i1> %1
2560}
2561
2562define <16 x i1> @fcmp_oeq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2563; CHECK-LABEL: fcmp_oeq_fv_v16f16:
2564; CHECK:       # %bb.0:
2565; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2566; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2567; CHECK-NEXT:    ret
2568  %head = insertelement <16 x half> poison, half %b, i32 0
2569  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2570  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
2571  ret <16 x i1> %1
2572}
2573
2574define <16 x i1> @fcmp_ogt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2575; CHECK-LABEL: fcmp_ogt_vv_v16f16:
2576; CHECK:       # %bb.0:
2577; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2578; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2579; CHECK-NEXT:    vmfeq.vv v13, v10, v10
2580; CHECK-NEXT:    vmand.mm v12, v13, v12
2581; CHECK-NEXT:    vmv1r.v v0, v12
2582; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2583; CHECK-NEXT:    vmv1r.v v0, v12
2584; CHECK-NEXT:    ret
2585  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2586  ret <16 x i1> %1
2587}
2588
2589define <16 x i1> @fcmp_ogt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2590; CHECK-LABEL: fcmp_ogt_vf_v16f16:
2591; CHECK:       # %bb.0:
2592; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2593; CHECK-NEXT:    vfmv.v.f v10, fa0
2594; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2595; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2596; CHECK-NEXT:    vmand.mm v10, v12, v10
2597; CHECK-NEXT:    vmv1r.v v0, v10
2598; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2599; CHECK-NEXT:    vmv1r.v v0, v10
2600; CHECK-NEXT:    ret
2601  %head = insertelement <16 x half> poison, half %b, i32 0
2602  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2603  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2604  ret <16 x i1> %1
2605}
2606
2607define <16 x i1> @fcmp_ogt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2608; CHECK-LABEL: fcmp_ogt_fv_v16f16:
2609; CHECK:       # %bb.0:
2610; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2611; CHECK-NEXT:    vfmv.v.f v10, fa0
2612; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2613; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2614; CHECK-NEXT:    vmand.mm v10, v10, v12
2615; CHECK-NEXT:    vmv1r.v v0, v10
2616; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2617; CHECK-NEXT:    vmv1r.v v0, v10
2618; CHECK-NEXT:    ret
2619  %head = insertelement <16 x half> poison, half %b, i32 0
2620  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2621  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
2622  ret <16 x i1> %1
2623}
2624
2625define <16 x i1> @fcmp_oge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2626; CHECK-LABEL: fcmp_oge_vv_v16f16:
2627; CHECK:       # %bb.0:
2628; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2629; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2630; CHECK-NEXT:    vmfeq.vv v13, v10, v10
2631; CHECK-NEXT:    vmand.mm v12, v13, v12
2632; CHECK-NEXT:    vmv1r.v v0, v12
2633; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
2634; CHECK-NEXT:    vmv1r.v v0, v12
2635; CHECK-NEXT:    ret
2636  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
2637  ret <16 x i1> %1
2638}
2639
2640define <16 x i1> @fcmp_oge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2641; CHECK-LABEL: fcmp_oge_vf_v16f16:
2642; CHECK:       # %bb.0:
2643; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2644; CHECK-NEXT:    vfmv.v.f v10, fa0
2645; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2646; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2647; CHECK-NEXT:    vmand.mm v10, v12, v10
2648; CHECK-NEXT:    vmv1r.v v0, v10
2649; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2650; CHECK-NEXT:    vmv1r.v v0, v10
2651; CHECK-NEXT:    ret
2652  %head = insertelement <16 x half> poison, half %b, i32 0
2653  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2654  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
2655  ret <16 x i1> %1
2656}
2657
2658define <16 x i1> @fcmp_oge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2659; CHECK-LABEL: fcmp_oge_fv_v16f16:
2660; CHECK:       # %bb.0:
2661; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2662; CHECK-NEXT:    vfmv.v.f v10, fa0
2663; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2664; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2665; CHECK-NEXT:    vmand.mm v10, v10, v12
2666; CHECK-NEXT:    vmv1r.v v0, v10
2667; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2668; CHECK-NEXT:    vmv1r.v v0, v10
2669; CHECK-NEXT:    ret
2670  %head = insertelement <16 x half> poison, half %b, i32 0
2671  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2672  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
2673  ret <16 x i1> %1
2674}
2675
2676define <16 x i1> @fcmp_olt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2677; CHECK-LABEL: fcmp_olt_vv_v16f16:
2678; CHECK:       # %bb.0:
2679; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2680; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2681; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2682; CHECK-NEXT:    vmand.mm v12, v13, v12
2683; CHECK-NEXT:    vmv1r.v v0, v12
2684; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
2685; CHECK-NEXT:    vmv1r.v v0, v12
2686; CHECK-NEXT:    ret
2687  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
2688  ret <16 x i1> %1
2689}
2690
2691define <16 x i1> @fcmp_olt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2692; CHECK-LABEL: fcmp_olt_vf_v16f16:
2693; CHECK:       # %bb.0:
2694; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2695; CHECK-NEXT:    vfmv.v.f v10, fa0
2696; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2697; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2698; CHECK-NEXT:    vmand.mm v10, v10, v12
2699; CHECK-NEXT:    vmv1r.v v0, v10
2700; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2701; CHECK-NEXT:    vmv1r.v v0, v10
2702; CHECK-NEXT:    ret
2703  %head = insertelement <16 x half> poison, half %b, i32 0
2704  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2705  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
2706  ret <16 x i1> %1
2707}
2708
2709define <16 x i1> @fcmp_olt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2710; CHECK-LABEL: fcmp_olt_fv_v16f16:
2711; CHECK:       # %bb.0:
2712; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2713; CHECK-NEXT:    vfmv.v.f v10, fa0
2714; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2715; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2716; CHECK-NEXT:    vmand.mm v10, v12, v10
2717; CHECK-NEXT:    vmv1r.v v0, v10
2718; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2719; CHECK-NEXT:    vmv1r.v v0, v10
2720; CHECK-NEXT:    ret
2721  %head = insertelement <16 x half> poison, half %b, i32 0
2722  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2723  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
2724  ret <16 x i1> %1
2725}
2726
2727define <16 x i1> @fcmp_ole_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2728; CHECK-LABEL: fcmp_ole_vv_v16f16:
2729; CHECK:       # %bb.0:
2730; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2731; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2732; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2733; CHECK-NEXT:    vmand.mm v12, v13, v12
2734; CHECK-NEXT:    vmv1r.v v0, v12
2735; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
2736; CHECK-NEXT:    vmv1r.v v0, v12
2737; CHECK-NEXT:    ret
2738  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
2739  ret <16 x i1> %1
2740}
2741
2742define <16 x i1> @fcmp_ole_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2743; CHECK-LABEL: fcmp_ole_vf_v16f16:
2744; CHECK:       # %bb.0:
2745; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2746; CHECK-NEXT:    vfmv.v.f v10, fa0
2747; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2748; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2749; CHECK-NEXT:    vmand.mm v10, v10, v12
2750; CHECK-NEXT:    vmv1r.v v0, v10
2751; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2752; CHECK-NEXT:    vmv1r.v v0, v10
2753; CHECK-NEXT:    ret
2754  %head = insertelement <16 x half> poison, half %b, i32 0
2755  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2756  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
2757  ret <16 x i1> %1
2758}
2759
2760define <16 x i1> @fcmp_ole_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2761; CHECK-LABEL: fcmp_ole_fv_v16f16:
2762; CHECK:       # %bb.0:
2763; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2764; CHECK-NEXT:    vfmv.v.f v10, fa0
2765; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2766; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2767; CHECK-NEXT:    vmand.mm v10, v12, v10
2768; CHECK-NEXT:    vmv1r.v v0, v10
2769; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2770; CHECK-NEXT:    vmv1r.v v0, v10
2771; CHECK-NEXT:    ret
2772  %head = insertelement <16 x half> poison, half %b, i32 0
2773  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2774  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
2775  ret <16 x i1> %1
2776}
2777
2778define <16 x i1> @fcmp_one_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2779; CHECK-LABEL: fcmp_one_vv_v16f16:
2780; CHECK:       # %bb.0:
2781; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2782; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2783; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2784; CHECK-NEXT:    vmand.mm v12, v13, v12
2785; CHECK-NEXT:    vmv1r.v v13, v12
2786; CHECK-NEXT:    vmv1r.v v0, v12
2787; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
2788; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2789; CHECK-NEXT:    vmor.mm v0, v12, v13
2790; CHECK-NEXT:    ret
2791  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
2792  ret <16 x i1> %1
2793}
2794
2795define <16 x i1> @fcmp_one_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2796; CHECK-LABEL: fcmp_one_vf_v16f16:
2797; CHECK:       # %bb.0:
2798; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2799; CHECK-NEXT:    vfmv.v.f v10, fa0
2800; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2801; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2802; CHECK-NEXT:    vmand.mm v10, v12, v13
2803; CHECK-NEXT:    vmv1r.v v11, v10
2804; CHECK-NEXT:    vmv1r.v v0, v10
2805; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
2806; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2807; CHECK-NEXT:    vmor.mm v0, v10, v11
2808; CHECK-NEXT:    ret
2809  %head = insertelement <16 x half> poison, half %b, i32 0
2810  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2811  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
2812  ret <16 x i1> %1
2813}
2814
2815define <16 x i1> @fcmp_one_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2816; CHECK-LABEL: fcmp_one_fv_v16f16:
2817; CHECK:       # %bb.0:
2818; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2819; CHECK-NEXT:    vfmv.v.f v10, fa0
2820; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2821; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2822; CHECK-NEXT:    vmand.mm v10, v13, v12
2823; CHECK-NEXT:    vmv1r.v v11, v10
2824; CHECK-NEXT:    vmv1r.v v0, v10
2825; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
2826; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2827; CHECK-NEXT:    vmor.mm v0, v10, v11
2828; CHECK-NEXT:    ret
2829  %head = insertelement <16 x half> poison, half %b, i32 0
2830  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2831  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
2832  ret <16 x i1> %1
2833}
2834
2835define <16 x i1> @fcmp_ord_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2836; CHECK-LABEL: fcmp_ord_vv_v16f16:
2837; CHECK:       # %bb.0:
2838; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2839; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2840; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2841; CHECK-NEXT:    vmand.mm v0, v10, v12
2842; CHECK-NEXT:    ret
2843  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
2844  ret <16 x i1> %1
2845}
2846
2847define <16 x i1> @fcmp_ord_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2848; CHECK-LABEL: fcmp_ord_vf_v16f16:
2849; CHECK:       # %bb.0:
2850; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2851; CHECK-NEXT:    vfmv.v.f v10, fa0
2852; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2853; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2854; CHECK-NEXT:    vmand.mm v0, v10, v12
2855; CHECK-NEXT:    ret
2856  %head = insertelement <16 x half> poison, half %b, i32 0
2857  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2858  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
2859  ret <16 x i1> %1
2860}
2861
2862define <16 x i1> @fcmp_ord_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2863; CHECK-LABEL: fcmp_ord_fv_v16f16:
2864; CHECK:       # %bb.0:
2865; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
2866; CHECK-NEXT:    vfmv.v.f v10, fa0
2867; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2868; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2869; CHECK-NEXT:    vmand.mm v0, v12, v10
2870; CHECK-NEXT:    ret
2871  %head = insertelement <16 x half> poison, half %b, i32 0
2872  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2873  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
2874  ret <16 x i1> %1
2875}
2876
2877define <16 x i1> @fcmp_ueq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2878; CHECK-LABEL: fcmp_ueq_vv_v16f16:
2879; CHECK:       # %bb.0:
2880; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2881; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2882; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2883; CHECK-NEXT:    vmand.mm v12, v13, v12
2884; CHECK-NEXT:    vmv1r.v v13, v12
2885; CHECK-NEXT:    vmv1r.v v0, v12
2886; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
2887; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
2888; CHECK-NEXT:    vmnor.mm v0, v12, v13
2889; CHECK-NEXT:    ret
2890  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2891  ret <16 x i1> %1
2892}
2893
2894define <16 x i1> @fcmp_ueq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2895; CHECK-LABEL: fcmp_ueq_vf_v16f16:
2896; CHECK:       # %bb.0:
2897; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2898; CHECK-NEXT:    vfmv.v.f v10, fa0
2899; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2900; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2901; CHECK-NEXT:    vmand.mm v10, v12, v13
2902; CHECK-NEXT:    vmv1r.v v11, v10
2903; CHECK-NEXT:    vmv1r.v v0, v10
2904; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
2905; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
2906; CHECK-NEXT:    vmnor.mm v0, v10, v11
2907; CHECK-NEXT:    ret
2908  %head = insertelement <16 x half> poison, half %b, i32 0
2909  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2910  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2911  ret <16 x i1> %1
2912}
2913
2914define <16 x i1> @fcmp_ueq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2915; CHECK-LABEL: fcmp_ueq_fv_v16f16:
2916; CHECK:       # %bb.0:
2917; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2918; CHECK-NEXT:    vfmv.v.f v10, fa0
2919; CHECK-NEXT:    vmfeq.vv v12, v8, v8
2920; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
2921; CHECK-NEXT:    vmand.mm v10, v13, v12
2922; CHECK-NEXT:    vmv1r.v v11, v10
2923; CHECK-NEXT:    vmv1r.v v0, v10
2924; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
2925; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
2926; CHECK-NEXT:    vmnor.mm v0, v10, v11
2927; CHECK-NEXT:    ret
2928  %head = insertelement <16 x half> poison, half %b, i32 0
2929  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2930  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
2931  ret <16 x i1> %1
2932}
2933
2934define <16 x i1> @fcmp_ugt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2935; CHECK-LABEL: fcmp_ugt_vv_v16f16:
2936; CHECK:       # %bb.0:
2937; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2938; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2939; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2940; CHECK-NEXT:    vmand.mm v12, v13, v12
2941; CHECK-NEXT:    vmv1r.v v0, v12
2942; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
2943; CHECK-NEXT:    vmnot.m v0, v12
2944; CHECK-NEXT:    ret
2945  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2946  ret <16 x i1> %1
2947}
2948
2949define <16 x i1> @fcmp_ugt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2950; CHECK-LABEL: fcmp_ugt_vf_v16f16:
2951; CHECK:       # %bb.0:
2952; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2953; CHECK-NEXT:    vfmv.v.f v10, fa0
2954; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2955; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2956; CHECK-NEXT:    vmand.mm v10, v10, v12
2957; CHECK-NEXT:    vmv1r.v v0, v10
2958; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
2959; CHECK-NEXT:    vmnot.m v0, v10
2960; CHECK-NEXT:    ret
2961  %head = insertelement <16 x half> poison, half %b, i32 0
2962  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2963  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2964  ret <16 x i1> %1
2965}
2966
2967define <16 x i1> @fcmp_ugt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
2968; CHECK-LABEL: fcmp_ugt_fv_v16f16:
2969; CHECK:       # %bb.0:
2970; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2971; CHECK-NEXT:    vfmv.v.f v10, fa0
2972; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
2973; CHECK-NEXT:    vmfeq.vv v10, v8, v8
2974; CHECK-NEXT:    vmand.mm v10, v12, v10
2975; CHECK-NEXT:    vmv1r.v v0, v10
2976; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
2977; CHECK-NEXT:    vmnot.m v0, v10
2978; CHECK-NEXT:    ret
2979  %head = insertelement <16 x half> poison, half %b, i32 0
2980  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
2981  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
2982  ret <16 x i1> %1
2983}
2984
2985define <16 x i1> @fcmp_uge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
2986; CHECK-LABEL: fcmp_uge_vv_v16f16:
2987; CHECK:       # %bb.0:
2988; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
2989; CHECK-NEXT:    vmfeq.vv v12, v10, v10
2990; CHECK-NEXT:    vmfeq.vv v13, v8, v8
2991; CHECK-NEXT:    vmand.mm v12, v13, v12
2992; CHECK-NEXT:    vmv1r.v v0, v12
2993; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
2994; CHECK-NEXT:    vmnot.m v0, v12
2995; CHECK-NEXT:    ret
2996  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
2997  ret <16 x i1> %1
2998}
2999
3000define <16 x i1> @fcmp_uge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3001; CHECK-LABEL: fcmp_uge_vf_v16f16:
3002; CHECK:       # %bb.0:
3003; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3004; CHECK-NEXT:    vfmv.v.f v10, fa0
3005; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3006; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3007; CHECK-NEXT:    vmand.mm v10, v10, v12
3008; CHECK-NEXT:    vmv1r.v v0, v10
3009; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
3010; CHECK-NEXT:    vmnot.m v0, v10
3011; CHECK-NEXT:    ret
3012  %head = insertelement <16 x half> poison, half %b, i32 0
3013  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3014  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3015  ret <16 x i1> %1
3016}
3017
3018define <16 x i1> @fcmp_uge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3019; CHECK-LABEL: fcmp_uge_fv_v16f16:
3020; CHECK:       # %bb.0:
3021; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3022; CHECK-NEXT:    vfmv.v.f v10, fa0
3023; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3024; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3025; CHECK-NEXT:    vmand.mm v10, v12, v10
3026; CHECK-NEXT:    vmv1r.v v0, v10
3027; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
3028; CHECK-NEXT:    vmnot.m v0, v10
3029; CHECK-NEXT:    ret
3030  %head = insertelement <16 x half> poison, half %b, i32 0
3031  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3032  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3033  ret <16 x i1> %1
3034}
3035
3036define <16 x i1> @fcmp_ult_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3037; CHECK-LABEL: fcmp_ult_vv_v16f16:
3038; CHECK:       # %bb.0:
3039; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3040; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3041; CHECK-NEXT:    vmfeq.vv v13, v10, v10
3042; CHECK-NEXT:    vmand.mm v12, v13, v12
3043; CHECK-NEXT:    vmv1r.v v0, v12
3044; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
3045; CHECK-NEXT:    vmnot.m v0, v12
3046; CHECK-NEXT:    ret
3047  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3048  ret <16 x i1> %1
3049}
3050
3051define <16 x i1> @fcmp_ult_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3052; CHECK-LABEL: fcmp_ult_vf_v16f16:
3053; CHECK:       # %bb.0:
3054; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3055; CHECK-NEXT:    vfmv.v.f v10, fa0
3056; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3057; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3058; CHECK-NEXT:    vmand.mm v10, v12, v10
3059; CHECK-NEXT:    vmv1r.v v0, v10
3060; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
3061; CHECK-NEXT:    vmnot.m v0, v10
3062; CHECK-NEXT:    ret
3063  %head = insertelement <16 x half> poison, half %b, i32 0
3064  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3065  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3066  ret <16 x i1> %1
3067}
3068
3069define <16 x i1> @fcmp_ult_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3070; CHECK-LABEL: fcmp_ult_fv_v16f16:
3071; CHECK:       # %bb.0:
3072; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3073; CHECK-NEXT:    vfmv.v.f v10, fa0
3074; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3075; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3076; CHECK-NEXT:    vmand.mm v10, v10, v12
3077; CHECK-NEXT:    vmv1r.v v0, v10
3078; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
3079; CHECK-NEXT:    vmnot.m v0, v10
3080; CHECK-NEXT:    ret
3081  %head = insertelement <16 x half> poison, half %b, i32 0
3082  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3083  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3084  ret <16 x i1> %1
3085}
3086
3087define <16 x i1> @fcmp_ule_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3088; CHECK-LABEL: fcmp_ule_vv_v16f16:
3089; CHECK:       # %bb.0:
3090; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3091; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3092; CHECK-NEXT:    vmfeq.vv v13, v10, v10
3093; CHECK-NEXT:    vmand.mm v12, v13, v12
3094; CHECK-NEXT:    vmv1r.v v0, v12
3095; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
3096; CHECK-NEXT:    vmnot.m v0, v12
3097; CHECK-NEXT:    ret
3098  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3099  ret <16 x i1> %1
3100}
3101
3102define <16 x i1> @fcmp_ule_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3103; CHECK-LABEL: fcmp_ule_vf_v16f16:
3104; CHECK:       # %bb.0:
3105; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3106; CHECK-NEXT:    vfmv.v.f v10, fa0
3107; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3108; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3109; CHECK-NEXT:    vmand.mm v10, v12, v10
3110; CHECK-NEXT:    vmv1r.v v0, v10
3111; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
3112; CHECK-NEXT:    vmnot.m v0, v10
3113; CHECK-NEXT:    ret
3114  %head = insertelement <16 x half> poison, half %b, i32 0
3115  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3116  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3117  ret <16 x i1> %1
3118}
3119
3120define <16 x i1> @fcmp_ule_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3121; CHECK-LABEL: fcmp_ule_fv_v16f16:
3122; CHECK:       # %bb.0:
3123; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
3124; CHECK-NEXT:    vfmv.v.f v10, fa0
3125; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
3126; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3127; CHECK-NEXT:    vmand.mm v10, v10, v12
3128; CHECK-NEXT:    vmv1r.v v0, v10
3129; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
3130; CHECK-NEXT:    vmnot.m v0, v10
3131; CHECK-NEXT:    ret
3132  %head = insertelement <16 x half> poison, half %b, i32 0
3133  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3134  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3135  ret <16 x i1> %1
3136}
3137
3138define <16 x i1> @fcmp_une_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3139; CHECK-LABEL: fcmp_une_vv_v16f16:
3140; CHECK:       # %bb.0:
3141; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3142; CHECK-NEXT:    vmfne.vv v0, v8, v10
3143; CHECK-NEXT:    ret
3144  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3145  ret <16 x i1> %1
3146}
3147
3148define <16 x i1> @fcmp_une_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3149; CHECK-LABEL: fcmp_une_vf_v16f16:
3150; CHECK:       # %bb.0:
3151; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3152; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3153; CHECK-NEXT:    ret
3154  %head = insertelement <16 x half> poison, half %b, i32 0
3155  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3156  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3157  ret <16 x i1> %1
3158}
3159
3160define <16 x i1> @fcmp_une_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3161; CHECK-LABEL: fcmp_une_fv_v16f16:
3162; CHECK:       # %bb.0:
3163; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3164; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3165; CHECK-NEXT:    ret
3166  %head = insertelement <16 x half> poison, half %b, i32 0
3167  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3168  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3169  ret <16 x i1> %1
3170}
3171
3172define <16 x i1> @fcmp_uno_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp {
3173; CHECK-LABEL: fcmp_uno_vv_v16f16:
3174; CHECK:       # %bb.0:
3175; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3176; CHECK-NEXT:    vmfne.vv v12, v10, v10
3177; CHECK-NEXT:    vmfne.vv v10, v8, v8
3178; CHECK-NEXT:    vmor.mm v0, v10, v12
3179; CHECK-NEXT:    ret
3180  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3181  ret <16 x i1> %1
3182}
3183
3184define <16 x i1> @fcmp_uno_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3185; CHECK-LABEL: fcmp_uno_vf_v16f16:
3186; CHECK:       # %bb.0:
3187; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3188; CHECK-NEXT:    vfmv.v.f v10, fa0
3189; CHECK-NEXT:    vmfne.vf v12, v10, fa0
3190; CHECK-NEXT:    vmfne.vv v10, v8, v8
3191; CHECK-NEXT:    vmor.mm v0, v10, v12
3192; CHECK-NEXT:    ret
3193  %head = insertelement <16 x half> poison, half %b, i32 0
3194  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3195  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3196  ret <16 x i1> %1
3197}
3198
3199define <16 x i1> @fcmp_uno_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp {
3200; CHECK-LABEL: fcmp_uno_fv_v16f16:
3201; CHECK:       # %bb.0:
3202; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
3203; CHECK-NEXT:    vfmv.v.f v10, fa0
3204; CHECK-NEXT:    vmfne.vf v12, v10, fa0
3205; CHECK-NEXT:    vmfne.vv v10, v8, v8
3206; CHECK-NEXT:    vmor.mm v0, v12, v10
3207; CHECK-NEXT:    ret
3208  %head = insertelement <16 x half> poison, half %b, i32 0
3209  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
3210  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3211  ret <16 x i1> %1
3212}
3213
3214declare <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half>, <32 x half>, metadata, metadata)
3215define <32 x i1> @fcmp_oeq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3216; CHECK-LABEL: fcmp_oeq_vv_v32f16:
3217; CHECK:       # %bb.0:
3218; CHECK-NEXT:    li a0, 32
3219; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3220; CHECK-NEXT:    vmfeq.vv v0, v8, v12
3221; CHECK-NEXT:    ret
3222  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3223  ret <32 x i1> %1
3224}
3225
3226define <32 x i1> @fcmp_oeq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3227; CHECK-LABEL: fcmp_oeq_vf_v32f16:
3228; CHECK:       # %bb.0:
3229; CHECK-NEXT:    li a0, 32
3230; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3231; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3232; CHECK-NEXT:    ret
3233  %head = insertelement <32 x half> poison, half %b, i32 0
3234  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3235  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3236  ret <32 x i1> %1
3237}
3238
3239define <32 x i1> @fcmp_oeq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3240; CHECK-LABEL: fcmp_oeq_fv_v32f16:
3241; CHECK:       # %bb.0:
3242; CHECK-NEXT:    li a0, 32
3243; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3244; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3245; CHECK-NEXT:    ret
3246  %head = insertelement <32 x half> poison, half %b, i32 0
3247  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3248  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3249  ret <32 x i1> %1
3250}
3251
3252define <32 x i1> @fcmp_ogt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3253; CHECK-LABEL: fcmp_ogt_vv_v32f16:
3254; CHECK:       # %bb.0:
3255; CHECK-NEXT:    li a0, 32
3256; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3257; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3258; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3259; CHECK-NEXT:    vmand.mm v16, v17, v16
3260; CHECK-NEXT:    vmv1r.v v0, v16
3261; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
3262; CHECK-NEXT:    vmv1r.v v0, v16
3263; CHECK-NEXT:    ret
3264  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3265  ret <32 x i1> %1
3266}
3267
3268define <32 x i1> @fcmp_ogt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3269; CHECK-LABEL: fcmp_ogt_vf_v32f16:
3270; CHECK:       # %bb.0:
3271; CHECK-NEXT:    li a0, 32
3272; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3273; CHECK-NEXT:    vfmv.v.f v12, fa0
3274; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3275; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3276; CHECK-NEXT:    vmand.mm v12, v16, v12
3277; CHECK-NEXT:    vmv1r.v v0, v12
3278; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3279; CHECK-NEXT:    vmv1r.v v0, v12
3280; CHECK-NEXT:    ret
3281  %head = insertelement <32 x half> poison, half %b, i32 0
3282  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3283  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3284  ret <32 x i1> %1
3285}
3286
3287define <32 x i1> @fcmp_ogt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3288; CHECK-LABEL: fcmp_ogt_fv_v32f16:
3289; CHECK:       # %bb.0:
3290; CHECK-NEXT:    li a0, 32
3291; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3292; CHECK-NEXT:    vfmv.v.f v12, fa0
3293; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3294; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3295; CHECK-NEXT:    vmand.mm v12, v12, v16
3296; CHECK-NEXT:    vmv1r.v v0, v12
3297; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3298; CHECK-NEXT:    vmv1r.v v0, v12
3299; CHECK-NEXT:    ret
3300  %head = insertelement <32 x half> poison, half %b, i32 0
3301  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3302  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3303  ret <32 x i1> %1
3304}
3305
3306define <32 x i1> @fcmp_oge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3307; CHECK-LABEL: fcmp_oge_vv_v32f16:
3308; CHECK:       # %bb.0:
3309; CHECK-NEXT:    li a0, 32
3310; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3311; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3312; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3313; CHECK-NEXT:    vmand.mm v16, v17, v16
3314; CHECK-NEXT:    vmv1r.v v0, v16
3315; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
3316; CHECK-NEXT:    vmv1r.v v0, v16
3317; CHECK-NEXT:    ret
3318  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
3319  ret <32 x i1> %1
3320}
3321
3322define <32 x i1> @fcmp_oge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3323; CHECK-LABEL: fcmp_oge_vf_v32f16:
3324; CHECK:       # %bb.0:
3325; CHECK-NEXT:    li a0, 32
3326; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3327; CHECK-NEXT:    vfmv.v.f v12, fa0
3328; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3329; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3330; CHECK-NEXT:    vmand.mm v12, v16, v12
3331; CHECK-NEXT:    vmv1r.v v0, v12
3332; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3333; CHECK-NEXT:    vmv1r.v v0, v12
3334; CHECK-NEXT:    ret
3335  %head = insertelement <32 x half> poison, half %b, i32 0
3336  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3337  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
3338  ret <32 x i1> %1
3339}
3340
3341define <32 x i1> @fcmp_oge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3342; CHECK-LABEL: fcmp_oge_fv_v32f16:
3343; CHECK:       # %bb.0:
3344; CHECK-NEXT:    li a0, 32
3345; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3346; CHECK-NEXT:    vfmv.v.f v12, fa0
3347; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3348; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3349; CHECK-NEXT:    vmand.mm v12, v12, v16
3350; CHECK-NEXT:    vmv1r.v v0, v12
3351; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3352; CHECK-NEXT:    vmv1r.v v0, v12
3353; CHECK-NEXT:    ret
3354  %head = insertelement <32 x half> poison, half %b, i32 0
3355  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3356  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
3357  ret <32 x i1> %1
3358}
3359
3360define <32 x i1> @fcmp_olt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3361; CHECK-LABEL: fcmp_olt_vv_v32f16:
3362; CHECK:       # %bb.0:
3363; CHECK-NEXT:    li a0, 32
3364; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3365; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3366; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3367; CHECK-NEXT:    vmand.mm v16, v17, v16
3368; CHECK-NEXT:    vmv1r.v v0, v16
3369; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
3370; CHECK-NEXT:    vmv1r.v v0, v16
3371; CHECK-NEXT:    ret
3372  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
3373  ret <32 x i1> %1
3374}
3375
3376define <32 x i1> @fcmp_olt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3377; CHECK-LABEL: fcmp_olt_vf_v32f16:
3378; CHECK:       # %bb.0:
3379; CHECK-NEXT:    li a0, 32
3380; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3381; CHECK-NEXT:    vfmv.v.f v12, fa0
3382; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3383; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3384; CHECK-NEXT:    vmand.mm v12, v12, v16
3385; CHECK-NEXT:    vmv1r.v v0, v12
3386; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3387; CHECK-NEXT:    vmv1r.v v0, v12
3388; CHECK-NEXT:    ret
3389  %head = insertelement <32 x half> poison, half %b, i32 0
3390  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3391  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
3392  ret <32 x i1> %1
3393}
3394
3395define <32 x i1> @fcmp_olt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3396; CHECK-LABEL: fcmp_olt_fv_v32f16:
3397; CHECK:       # %bb.0:
3398; CHECK-NEXT:    li a0, 32
3399; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3400; CHECK-NEXT:    vfmv.v.f v12, fa0
3401; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3402; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3403; CHECK-NEXT:    vmand.mm v12, v16, v12
3404; CHECK-NEXT:    vmv1r.v v0, v12
3405; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3406; CHECK-NEXT:    vmv1r.v v0, v12
3407; CHECK-NEXT:    ret
3408  %head = insertelement <32 x half> poison, half %b, i32 0
3409  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3410  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
3411  ret <32 x i1> %1
3412}
3413
3414define <32 x i1> @fcmp_ole_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3415; CHECK-LABEL: fcmp_ole_vv_v32f16:
3416; CHECK:       # %bb.0:
3417; CHECK-NEXT:    li a0, 32
3418; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3419; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3420; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3421; CHECK-NEXT:    vmand.mm v16, v17, v16
3422; CHECK-NEXT:    vmv1r.v v0, v16
3423; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
3424; CHECK-NEXT:    vmv1r.v v0, v16
3425; CHECK-NEXT:    ret
3426  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
3427  ret <32 x i1> %1
3428}
3429
3430define <32 x i1> @fcmp_ole_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3431; CHECK-LABEL: fcmp_ole_vf_v32f16:
3432; CHECK:       # %bb.0:
3433; CHECK-NEXT:    li a0, 32
3434; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3435; CHECK-NEXT:    vfmv.v.f v12, fa0
3436; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3437; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3438; CHECK-NEXT:    vmand.mm v12, v12, v16
3439; CHECK-NEXT:    vmv1r.v v0, v12
3440; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3441; CHECK-NEXT:    vmv1r.v v0, v12
3442; CHECK-NEXT:    ret
3443  %head = insertelement <32 x half> poison, half %b, i32 0
3444  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3445  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
3446  ret <32 x i1> %1
3447}
3448
3449define <32 x i1> @fcmp_ole_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3450; CHECK-LABEL: fcmp_ole_fv_v32f16:
3451; CHECK:       # %bb.0:
3452; CHECK-NEXT:    li a0, 32
3453; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3454; CHECK-NEXT:    vfmv.v.f v12, fa0
3455; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3456; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3457; CHECK-NEXT:    vmand.mm v12, v16, v12
3458; CHECK-NEXT:    vmv1r.v v0, v12
3459; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3460; CHECK-NEXT:    vmv1r.v v0, v12
3461; CHECK-NEXT:    ret
3462  %head = insertelement <32 x half> poison, half %b, i32 0
3463  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3464  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
3465  ret <32 x i1> %1
3466}
3467
3468define <32 x i1> @fcmp_one_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3469; CHECK-LABEL: fcmp_one_vv_v32f16:
3470; CHECK:       # %bb.0:
3471; CHECK-NEXT:    li a0, 32
3472; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3473; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3474; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3475; CHECK-NEXT:    vmand.mm v16, v17, v16
3476; CHECK-NEXT:    vmv1r.v v17, v16
3477; CHECK-NEXT:    vmv1r.v v0, v16
3478; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
3479; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
3480; CHECK-NEXT:    vmor.mm v0, v16, v17
3481; CHECK-NEXT:    ret
3482  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
3483  ret <32 x i1> %1
3484}
3485
3486define <32 x i1> @fcmp_one_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3487; CHECK-LABEL: fcmp_one_vf_v32f16:
3488; CHECK:       # %bb.0:
3489; CHECK-NEXT:    li a0, 32
3490; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3491; CHECK-NEXT:    vfmv.v.f v12, fa0
3492; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3493; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3494; CHECK-NEXT:    vmand.mm v12, v12, v16
3495; CHECK-NEXT:    vmv1r.v v13, v12
3496; CHECK-NEXT:    vmv1r.v v0, v12
3497; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
3498; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3499; CHECK-NEXT:    vmor.mm v0, v12, v13
3500; CHECK-NEXT:    ret
3501  %head = insertelement <32 x half> poison, half %b, i32 0
3502  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3503  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
3504  ret <32 x i1> %1
3505}
3506
3507define <32 x i1> @fcmp_one_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3508; CHECK-LABEL: fcmp_one_fv_v32f16:
3509; CHECK:       # %bb.0:
3510; CHECK-NEXT:    li a0, 32
3511; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3512; CHECK-NEXT:    vfmv.v.f v12, fa0
3513; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3514; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3515; CHECK-NEXT:    vmand.mm v12, v16, v12
3516; CHECK-NEXT:    vmv1r.v v13, v12
3517; CHECK-NEXT:    vmv1r.v v0, v12
3518; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
3519; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3520; CHECK-NEXT:    vmor.mm v0, v12, v13
3521; CHECK-NEXT:    ret
3522  %head = insertelement <32 x half> poison, half %b, i32 0
3523  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3524  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
3525  ret <32 x i1> %1
3526}
3527
3528define <32 x i1> @fcmp_ord_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3529; CHECK-LABEL: fcmp_ord_vv_v32f16:
3530; CHECK:       # %bb.0:
3531; CHECK-NEXT:    li a0, 32
3532; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3533; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3534; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3535; CHECK-NEXT:    vmand.mm v0, v12, v16
3536; CHECK-NEXT:    ret
3537  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
3538  ret <32 x i1> %1
3539}
3540
3541define <32 x i1> @fcmp_ord_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3542; CHECK-LABEL: fcmp_ord_vf_v32f16:
3543; CHECK:       # %bb.0:
3544; CHECK-NEXT:    li a0, 32
3545; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3546; CHECK-NEXT:    vfmv.v.f v12, fa0
3547; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3548; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3549; CHECK-NEXT:    vmand.mm v0, v12, v16
3550; CHECK-NEXT:    ret
3551  %head = insertelement <32 x half> poison, half %b, i32 0
3552  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3553  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
3554  ret <32 x i1> %1
3555}
3556
3557define <32 x i1> @fcmp_ord_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3558; CHECK-LABEL: fcmp_ord_fv_v32f16:
3559; CHECK:       # %bb.0:
3560; CHECK-NEXT:    li a0, 32
3561; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3562; CHECK-NEXT:    vfmv.v.f v12, fa0
3563; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3564; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3565; CHECK-NEXT:    vmand.mm v0, v16, v12
3566; CHECK-NEXT:    ret
3567  %head = insertelement <32 x half> poison, half %b, i32 0
3568  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3569  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
3570  ret <32 x i1> %1
3571}
3572
3573define <32 x i1> @fcmp_ueq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3574; CHECK-LABEL: fcmp_ueq_vv_v32f16:
3575; CHECK:       # %bb.0:
3576; CHECK-NEXT:    li a0, 32
3577; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3578; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3579; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3580; CHECK-NEXT:    vmand.mm v16, v17, v16
3581; CHECK-NEXT:    vmv1r.v v17, v16
3582; CHECK-NEXT:    vmv1r.v v0, v16
3583; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
3584; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
3585; CHECK-NEXT:    vmnor.mm v0, v16, v17
3586; CHECK-NEXT:    ret
3587  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3588  ret <32 x i1> %1
3589}
3590
3591define <32 x i1> @fcmp_ueq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3592; CHECK-LABEL: fcmp_ueq_vf_v32f16:
3593; CHECK:       # %bb.0:
3594; CHECK-NEXT:    li a0, 32
3595; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3596; CHECK-NEXT:    vfmv.v.f v12, fa0
3597; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3598; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3599; CHECK-NEXT:    vmand.mm v12, v12, v16
3600; CHECK-NEXT:    vmv1r.v v13, v12
3601; CHECK-NEXT:    vmv1r.v v0, v12
3602; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
3603; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3604; CHECK-NEXT:    vmnor.mm v0, v12, v13
3605; CHECK-NEXT:    ret
3606  %head = insertelement <32 x half> poison, half %b, i32 0
3607  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3608  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3609  ret <32 x i1> %1
3610}
3611
3612define <32 x i1> @fcmp_ueq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3613; CHECK-LABEL: fcmp_ueq_fv_v32f16:
3614; CHECK:       # %bb.0:
3615; CHECK-NEXT:    li a0, 32
3616; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3617; CHECK-NEXT:    vfmv.v.f v12, fa0
3618; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3619; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3620; CHECK-NEXT:    vmand.mm v12, v16, v12
3621; CHECK-NEXT:    vmv1r.v v13, v12
3622; CHECK-NEXT:    vmv1r.v v0, v12
3623; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
3624; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3625; CHECK-NEXT:    vmnor.mm v0, v12, v13
3626; CHECK-NEXT:    ret
3627  %head = insertelement <32 x half> poison, half %b, i32 0
3628  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3629  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
3630  ret <32 x i1> %1
3631}
3632
3633define <32 x i1> @fcmp_ugt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3634; CHECK-LABEL: fcmp_ugt_vv_v32f16:
3635; CHECK:       # %bb.0:
3636; CHECK-NEXT:    li a0, 32
3637; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3638; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3639; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3640; CHECK-NEXT:    vmand.mm v16, v17, v16
3641; CHECK-NEXT:    vmv1r.v v0, v16
3642; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
3643; CHECK-NEXT:    vmnot.m v0, v16
3644; CHECK-NEXT:    ret
3645  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3646  ret <32 x i1> %1
3647}
3648
3649define <32 x i1> @fcmp_ugt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3650; CHECK-LABEL: fcmp_ugt_vf_v32f16:
3651; CHECK:       # %bb.0:
3652; CHECK-NEXT:    li a0, 32
3653; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3654; CHECK-NEXT:    vfmv.v.f v12, fa0
3655; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3656; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3657; CHECK-NEXT:    vmand.mm v12, v12, v16
3658; CHECK-NEXT:    vmv1r.v v0, v12
3659; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3660; CHECK-NEXT:    vmnot.m v0, v12
3661; CHECK-NEXT:    ret
3662  %head = insertelement <32 x half> poison, half %b, i32 0
3663  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3664  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3665  ret <32 x i1> %1
3666}
3667
3668define <32 x i1> @fcmp_ugt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3669; CHECK-LABEL: fcmp_ugt_fv_v32f16:
3670; CHECK:       # %bb.0:
3671; CHECK-NEXT:    li a0, 32
3672; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3673; CHECK-NEXT:    vfmv.v.f v12, fa0
3674; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3675; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3676; CHECK-NEXT:    vmand.mm v12, v16, v12
3677; CHECK-NEXT:    vmv1r.v v0, v12
3678; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3679; CHECK-NEXT:    vmnot.m v0, v12
3680; CHECK-NEXT:    ret
3681  %head = insertelement <32 x half> poison, half %b, i32 0
3682  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3683  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
3684  ret <32 x i1> %1
3685}
3686
3687define <32 x i1> @fcmp_uge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3688; CHECK-LABEL: fcmp_uge_vv_v32f16:
3689; CHECK:       # %bb.0:
3690; CHECK-NEXT:    li a0, 32
3691; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3692; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3693; CHECK-NEXT:    vmfeq.vv v17, v8, v8
3694; CHECK-NEXT:    vmand.mm v16, v17, v16
3695; CHECK-NEXT:    vmv1r.v v0, v16
3696; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
3697; CHECK-NEXT:    vmnot.m v0, v16
3698; CHECK-NEXT:    ret
3699  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
3700  ret <32 x i1> %1
3701}
3702
3703define <32 x i1> @fcmp_uge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3704; CHECK-LABEL: fcmp_uge_vf_v32f16:
3705; CHECK:       # %bb.0:
3706; CHECK-NEXT:    li a0, 32
3707; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3708; CHECK-NEXT:    vfmv.v.f v12, fa0
3709; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3710; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3711; CHECK-NEXT:    vmand.mm v12, v12, v16
3712; CHECK-NEXT:    vmv1r.v v0, v12
3713; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3714; CHECK-NEXT:    vmnot.m v0, v12
3715; CHECK-NEXT:    ret
3716  %head = insertelement <32 x half> poison, half %b, i32 0
3717  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3718  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
3719  ret <32 x i1> %1
3720}
3721
3722define <32 x i1> @fcmp_uge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3723; CHECK-LABEL: fcmp_uge_fv_v32f16:
3724; CHECK:       # %bb.0:
3725; CHECK-NEXT:    li a0, 32
3726; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3727; CHECK-NEXT:    vfmv.v.f v12, fa0
3728; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3729; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3730; CHECK-NEXT:    vmand.mm v12, v16, v12
3731; CHECK-NEXT:    vmv1r.v v0, v12
3732; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3733; CHECK-NEXT:    vmnot.m v0, v12
3734; CHECK-NEXT:    ret
3735  %head = insertelement <32 x half> poison, half %b, i32 0
3736  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3737  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
3738  ret <32 x i1> %1
3739}
3740
3741define <32 x i1> @fcmp_ult_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3742; CHECK-LABEL: fcmp_ult_vv_v32f16:
3743; CHECK:       # %bb.0:
3744; CHECK-NEXT:    li a0, 32
3745; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3746; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3747; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3748; CHECK-NEXT:    vmand.mm v16, v17, v16
3749; CHECK-NEXT:    vmv1r.v v0, v16
3750; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
3751; CHECK-NEXT:    vmnot.m v0, v16
3752; CHECK-NEXT:    ret
3753  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
3754  ret <32 x i1> %1
3755}
3756
3757define <32 x i1> @fcmp_ult_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3758; CHECK-LABEL: fcmp_ult_vf_v32f16:
3759; CHECK:       # %bb.0:
3760; CHECK-NEXT:    li a0, 32
3761; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3762; CHECK-NEXT:    vfmv.v.f v12, fa0
3763; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3764; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3765; CHECK-NEXT:    vmand.mm v12, v16, v12
3766; CHECK-NEXT:    vmv1r.v v0, v12
3767; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
3768; CHECK-NEXT:    vmnot.m v0, v12
3769; CHECK-NEXT:    ret
3770  %head = insertelement <32 x half> poison, half %b, i32 0
3771  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3772  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
3773  ret <32 x i1> %1
3774}
3775
3776define <32 x i1> @fcmp_ult_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3777; CHECK-LABEL: fcmp_ult_fv_v32f16:
3778; CHECK:       # %bb.0:
3779; CHECK-NEXT:    li a0, 32
3780; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3781; CHECK-NEXT:    vfmv.v.f v12, fa0
3782; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3783; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3784; CHECK-NEXT:    vmand.mm v12, v12, v16
3785; CHECK-NEXT:    vmv1r.v v0, v12
3786; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
3787; CHECK-NEXT:    vmnot.m v0, v12
3788; CHECK-NEXT:    ret
3789  %head = insertelement <32 x half> poison, half %b, i32 0
3790  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3791  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
3792  ret <32 x i1> %1
3793}
3794
3795define <32 x i1> @fcmp_ule_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3796; CHECK-LABEL: fcmp_ule_vv_v32f16:
3797; CHECK:       # %bb.0:
3798; CHECK-NEXT:    li a0, 32
3799; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3800; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3801; CHECK-NEXT:    vmfeq.vv v17, v12, v12
3802; CHECK-NEXT:    vmand.mm v16, v17, v16
3803; CHECK-NEXT:    vmv1r.v v0, v16
3804; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
3805; CHECK-NEXT:    vmnot.m v0, v16
3806; CHECK-NEXT:    ret
3807  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
3808  ret <32 x i1> %1
3809}
3810
3811define <32 x i1> @fcmp_ule_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3812; CHECK-LABEL: fcmp_ule_vf_v32f16:
3813; CHECK:       # %bb.0:
3814; CHECK-NEXT:    li a0, 32
3815; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3816; CHECK-NEXT:    vfmv.v.f v12, fa0
3817; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3818; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3819; CHECK-NEXT:    vmand.mm v12, v16, v12
3820; CHECK-NEXT:    vmv1r.v v0, v12
3821; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
3822; CHECK-NEXT:    vmnot.m v0, v12
3823; CHECK-NEXT:    ret
3824  %head = insertelement <32 x half> poison, half %b, i32 0
3825  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3826  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
3827  ret <32 x i1> %1
3828}
3829
3830define <32 x i1> @fcmp_ule_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3831; CHECK-LABEL: fcmp_ule_fv_v32f16:
3832; CHECK:       # %bb.0:
3833; CHECK-NEXT:    li a0, 32
3834; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3835; CHECK-NEXT:    vfmv.v.f v12, fa0
3836; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3837; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3838; CHECK-NEXT:    vmand.mm v12, v12, v16
3839; CHECK-NEXT:    vmv1r.v v0, v12
3840; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
3841; CHECK-NEXT:    vmnot.m v0, v12
3842; CHECK-NEXT:    ret
3843  %head = insertelement <32 x half> poison, half %b, i32 0
3844  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3845  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
3846  ret <32 x i1> %1
3847}
3848
3849define <32 x i1> @fcmp_une_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3850; CHECK-LABEL: fcmp_une_vv_v32f16:
3851; CHECK:       # %bb.0:
3852; CHECK-NEXT:    li a0, 32
3853; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3854; CHECK-NEXT:    vmfne.vv v0, v8, v12
3855; CHECK-NEXT:    ret
3856  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
3857  ret <32 x i1> %1
3858}
3859
3860define <32 x i1> @fcmp_une_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3861; CHECK-LABEL: fcmp_une_vf_v32f16:
3862; CHECK:       # %bb.0:
3863; CHECK-NEXT:    li a0, 32
3864; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3865; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3866; CHECK-NEXT:    ret
3867  %head = insertelement <32 x half> poison, half %b, i32 0
3868  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3869  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
3870  ret <32 x i1> %1
3871}
3872
3873define <32 x i1> @fcmp_une_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3874; CHECK-LABEL: fcmp_une_fv_v32f16:
3875; CHECK:       # %bb.0:
3876; CHECK-NEXT:    li a0, 32
3877; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3878; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3879; CHECK-NEXT:    ret
3880  %head = insertelement <32 x half> poison, half %b, i32 0
3881  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3882  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
3883  ret <32 x i1> %1
3884}
3885
3886define <32 x i1> @fcmp_uno_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp {
3887; CHECK-LABEL: fcmp_uno_vv_v32f16:
3888; CHECK:       # %bb.0:
3889; CHECK-NEXT:    li a0, 32
3890; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3891; CHECK-NEXT:    vmfne.vv v16, v12, v12
3892; CHECK-NEXT:    vmfne.vv v12, v8, v8
3893; CHECK-NEXT:    vmor.mm v0, v12, v16
3894; CHECK-NEXT:    ret
3895  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
3896  ret <32 x i1> %1
3897}
3898
3899define <32 x i1> @fcmp_uno_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3900; CHECK-LABEL: fcmp_uno_vf_v32f16:
3901; CHECK:       # %bb.0:
3902; CHECK-NEXT:    li a0, 32
3903; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3904; CHECK-NEXT:    vfmv.v.f v12, fa0
3905; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3906; CHECK-NEXT:    vmfne.vv v12, v8, v8
3907; CHECK-NEXT:    vmor.mm v0, v12, v16
3908; CHECK-NEXT:    ret
3909  %head = insertelement <32 x half> poison, half %b, i32 0
3910  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3911  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
3912  ret <32 x i1> %1
3913}
3914
3915define <32 x i1> @fcmp_uno_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp {
3916; CHECK-LABEL: fcmp_uno_fv_v32f16:
3917; CHECK:       # %bb.0:
3918; CHECK-NEXT:    li a0, 32
3919; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3920; CHECK-NEXT:    vfmv.v.f v12, fa0
3921; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3922; CHECK-NEXT:    vmfne.vv v12, v8, v8
3923; CHECK-NEXT:    vmor.mm v0, v16, v12
3924; CHECK-NEXT:    ret
3925  %head = insertelement <32 x half> poison, half %b, i32 0
3926  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
3927  %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
3928  ret <32 x i1> %1
3929}
3930
3931declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float>, <1 x float>, metadata, metadata)
3932define <1 x i1> @fcmp_oeq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
3933; CHECK-LABEL: fcmp_oeq_vv_v1f32:
3934; CHECK:       # %bb.0:
3935; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3936; CHECK-NEXT:    vmfeq.vv v0, v8, v9
3937; CHECK-NEXT:    ret
3938  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3939  ret <1 x i1> %1
3940}
3941
3942define <1 x i1> @fcmp_oeq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3943; CHECK-LABEL: fcmp_oeq_vf_v1f32:
3944; CHECK:       # %bb.0:
3945; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3946; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3947; CHECK-NEXT:    ret
3948  %head = insertelement <1 x float> poison, float %b, i32 0
3949  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3950  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3951  ret <1 x i1> %1
3952}
3953
3954define <1 x i1> @fcmp_oeq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3955; CHECK-LABEL: fcmp_oeq_fv_v1f32:
3956; CHECK:       # %bb.0:
3957; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
3958; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3959; CHECK-NEXT:    ret
3960  %head = insertelement <1 x float> poison, float %b, i32 0
3961  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3962  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
3963  ret <1 x i1> %1
3964}
3965
3966define <1 x i1> @fcmp_ogt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
3967; CHECK-LABEL: fcmp_ogt_vv_v1f32:
3968; CHECK:       # %bb.0:
3969; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
3970; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3971; CHECK-NEXT:    vmfeq.vv v11, v9, v9
3972; CHECK-NEXT:    vmand.mm v0, v11, v10
3973; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
3974; CHECK-NEXT:    ret
3975  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3976  ret <1 x i1> %1
3977}
3978
3979define <1 x i1> @fcmp_ogt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3980; CHECK-LABEL: fcmp_ogt_vf_v1f32:
3981; CHECK:       # %bb.0:
3982; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
3983; CHECK-NEXT:    vfmv.s.f v9, fa0
3984; CHECK-NEXT:    vmfeq.vv v10, v8, v8
3985; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
3986; CHECK-NEXT:    vmand.mm v0, v9, v10
3987; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
3988; CHECK-NEXT:    ret
3989  %head = insertelement <1 x float> poison, float %b, i32 0
3990  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
3991  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
3992  ret <1 x i1> %1
3993}
3994
3995define <1 x i1> @fcmp_ogt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
3996; CHECK-LABEL: fcmp_ogt_fv_v1f32:
3997; CHECK:       # %bb.0:
3998; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
3999; CHECK-NEXT:    vfmv.s.f v9, fa0
4000; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4001; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4002; CHECK-NEXT:    vmand.mm v0, v10, v9
4003; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4004; CHECK-NEXT:    ret
4005  %head = insertelement <1 x float> poison, float %b, i32 0
4006  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4007  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4008  ret <1 x i1> %1
4009}
4010
4011define <1 x i1> @fcmp_oge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4012; CHECK-LABEL: fcmp_oge_vv_v1f32:
4013; CHECK:       # %bb.0:
4014; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4015; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4016; CHECK-NEXT:    vmfeq.vv v11, v9, v9
4017; CHECK-NEXT:    vmand.mm v0, v11, v10
4018; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
4019; CHECK-NEXT:    ret
4020  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4021  ret <1 x i1> %1
4022}
4023
4024define <1 x i1> @fcmp_oge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4025; CHECK-LABEL: fcmp_oge_vf_v1f32:
4026; CHECK:       # %bb.0:
4027; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4028; CHECK-NEXT:    vfmv.s.f v9, fa0
4029; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4030; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4031; CHECK-NEXT:    vmand.mm v0, v9, v10
4032; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4033; CHECK-NEXT:    ret
4034  %head = insertelement <1 x float> poison, float %b, i32 0
4035  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4036  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4037  ret <1 x i1> %1
4038}
4039
4040define <1 x i1> @fcmp_oge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4041; CHECK-LABEL: fcmp_oge_fv_v1f32:
4042; CHECK:       # %bb.0:
4043; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4044; CHECK-NEXT:    vfmv.s.f v9, fa0
4045; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4046; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4047; CHECK-NEXT:    vmand.mm v0, v10, v9
4048; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4049; CHECK-NEXT:    ret
4050  %head = insertelement <1 x float> poison, float %b, i32 0
4051  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4052  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4053  ret <1 x i1> %1
4054}
4055
4056define <1 x i1> @fcmp_olt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4057; CHECK-LABEL: fcmp_olt_vv_v1f32:
4058; CHECK:       # %bb.0:
4059; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4060; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4061; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4062; CHECK-NEXT:    vmand.mm v0, v11, v10
4063; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
4064; CHECK-NEXT:    ret
4065  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4066  ret <1 x i1> %1
4067}
4068
4069define <1 x i1> @fcmp_olt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4070; CHECK-LABEL: fcmp_olt_vf_v1f32:
4071; CHECK:       # %bb.0:
4072; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4073; CHECK-NEXT:    vfmv.s.f v9, fa0
4074; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4075; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4076; CHECK-NEXT:    vmand.mm v0, v10, v9
4077; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4078; CHECK-NEXT:    ret
4079  %head = insertelement <1 x float> poison, float %b, i32 0
4080  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4081  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4082  ret <1 x i1> %1
4083}
4084
4085define <1 x i1> @fcmp_olt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4086; CHECK-LABEL: fcmp_olt_fv_v1f32:
4087; CHECK:       # %bb.0:
4088; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4089; CHECK-NEXT:    vfmv.s.f v9, fa0
4090; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4091; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4092; CHECK-NEXT:    vmand.mm v0, v9, v10
4093; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4094; CHECK-NEXT:    ret
4095  %head = insertelement <1 x float> poison, float %b, i32 0
4096  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4097  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4098  ret <1 x i1> %1
4099}
4100
4101define <1 x i1> @fcmp_ole_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4102; CHECK-LABEL: fcmp_ole_vv_v1f32:
4103; CHECK:       # %bb.0:
4104; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4105; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4106; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4107; CHECK-NEXT:    vmand.mm v0, v11, v10
4108; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
4109; CHECK-NEXT:    ret
4110  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4111  ret <1 x i1> %1
4112}
4113
4114define <1 x i1> @fcmp_ole_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4115; CHECK-LABEL: fcmp_ole_vf_v1f32:
4116; CHECK:       # %bb.0:
4117; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4118; CHECK-NEXT:    vfmv.s.f v9, fa0
4119; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4120; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4121; CHECK-NEXT:    vmand.mm v0, v10, v9
4122; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4123; CHECK-NEXT:    ret
4124  %head = insertelement <1 x float> poison, float %b, i32 0
4125  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4126  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4127  ret <1 x i1> %1
4128}
4129
4130define <1 x i1> @fcmp_ole_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4131; CHECK-LABEL: fcmp_ole_fv_v1f32:
4132; CHECK:       # %bb.0:
4133; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4134; CHECK-NEXT:    vfmv.s.f v9, fa0
4135; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4136; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4137; CHECK-NEXT:    vmand.mm v0, v9, v10
4138; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4139; CHECK-NEXT:    ret
4140  %head = insertelement <1 x float> poison, float %b, i32 0
4141  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4142  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4143  ret <1 x i1> %1
4144}
4145
4146define <1 x i1> @fcmp_one_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4147; CHECK-LABEL: fcmp_one_vv_v1f32:
4148; CHECK:       # %bb.0:
4149; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4150; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4151; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4152; CHECK-NEXT:    vmand.mm v0, v11, v10
4153; CHECK-NEXT:    vmv1r.v v10, v0
4154; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
4155; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4156; CHECK-NEXT:    vmor.mm v0, v0, v10
4157; CHECK-NEXT:    ret
4158  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4159  ret <1 x i1> %1
4160}
4161
4162define <1 x i1> @fcmp_one_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4163; CHECK-LABEL: fcmp_one_vf_v1f32:
4164; CHECK:       # %bb.0:
4165; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4166; CHECK-NEXT:    vfmv.s.f v9, fa0
4167; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4168; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4169; CHECK-NEXT:    vmand.mm v0, v10, v9
4170; CHECK-NEXT:    vmv1r.v v9, v0
4171; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4172; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4173; CHECK-NEXT:    vmor.mm v0, v0, v9
4174; CHECK-NEXT:    ret
4175  %head = insertelement <1 x float> poison, float %b, i32 0
4176  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4177  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4178  ret <1 x i1> %1
4179}
4180
4181define <1 x i1> @fcmp_one_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4182; CHECK-LABEL: fcmp_one_fv_v1f32:
4183; CHECK:       # %bb.0:
4184; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4185; CHECK-NEXT:    vfmv.s.f v9, fa0
4186; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4187; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4188; CHECK-NEXT:    vmand.mm v0, v9, v10
4189; CHECK-NEXT:    vmv1r.v v9, v0
4190; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4191; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4192; CHECK-NEXT:    vmor.mm v0, v0, v9
4193; CHECK-NEXT:    ret
4194  %head = insertelement <1 x float> poison, float %b, i32 0
4195  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4196  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4197  ret <1 x i1> %1
4198}
4199
4200define <1 x i1> @fcmp_ord_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4201; CHECK-LABEL: fcmp_ord_vv_v1f32:
4202; CHECK:       # %bb.0:
4203; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4204; CHECK-NEXT:    vmfeq.vv v9, v9, v9
4205; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4206; CHECK-NEXT:    vmand.mm v0, v8, v9
4207; CHECK-NEXT:    ret
4208  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4209  ret <1 x i1> %1
4210}
4211
4212define <1 x i1> @fcmp_ord_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4213; CHECK-LABEL: fcmp_ord_vf_v1f32:
4214; CHECK:       # %bb.0:
4215; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4216; CHECK-NEXT:    vfmv.s.f v9, fa0
4217; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4218; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4219; CHECK-NEXT:    vmand.mm v0, v8, v9
4220; CHECK-NEXT:    ret
4221  %head = insertelement <1 x float> poison, float %b, i32 0
4222  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4223  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4224  ret <1 x i1> %1
4225}
4226
4227define <1 x i1> @fcmp_ord_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4228; CHECK-LABEL: fcmp_ord_fv_v1f32:
4229; CHECK:       # %bb.0:
4230; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4231; CHECK-NEXT:    vfmv.s.f v9, fa0
4232; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4233; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4234; CHECK-NEXT:    vmand.mm v0, v9, v8
4235; CHECK-NEXT:    ret
4236  %head = insertelement <1 x float> poison, float %b, i32 0
4237  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4238  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4239  ret <1 x i1> %1
4240}
4241
4242define <1 x i1> @fcmp_ueq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4243; CHECK-LABEL: fcmp_ueq_vv_v1f32:
4244; CHECK:       # %bb.0:
4245; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4246; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4247; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4248; CHECK-NEXT:    vmand.mm v0, v11, v10
4249; CHECK-NEXT:    vmv1r.v v10, v0
4250; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
4251; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4252; CHECK-NEXT:    vmnor.mm v0, v0, v10
4253; CHECK-NEXT:    ret
4254  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4255  ret <1 x i1> %1
4256}
4257
4258define <1 x i1> @fcmp_ueq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4259; CHECK-LABEL: fcmp_ueq_vf_v1f32:
4260; CHECK:       # %bb.0:
4261; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4262; CHECK-NEXT:    vfmv.s.f v9, fa0
4263; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4264; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4265; CHECK-NEXT:    vmand.mm v0, v10, v9
4266; CHECK-NEXT:    vmv1r.v v9, v0
4267; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4268; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4269; CHECK-NEXT:    vmnor.mm v0, v0, v9
4270; CHECK-NEXT:    ret
4271  %head = insertelement <1 x float> poison, float %b, i32 0
4272  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4273  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4274  ret <1 x i1> %1
4275}
4276
4277define <1 x i1> @fcmp_ueq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4278; CHECK-LABEL: fcmp_ueq_fv_v1f32:
4279; CHECK:       # %bb.0:
4280; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4281; CHECK-NEXT:    vfmv.s.f v9, fa0
4282; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4283; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4284; CHECK-NEXT:    vmand.mm v0, v9, v10
4285; CHECK-NEXT:    vmv1r.v v9, v0
4286; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4287; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4288; CHECK-NEXT:    vmnor.mm v0, v0, v9
4289; CHECK-NEXT:    ret
4290  %head = insertelement <1 x float> poison, float %b, i32 0
4291  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4292  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4293  ret <1 x i1> %1
4294}
4295
4296define <1 x i1> @fcmp_ugt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4297; CHECK-LABEL: fcmp_ugt_vv_v1f32:
4298; CHECK:       # %bb.0:
4299; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4300; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4301; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4302; CHECK-NEXT:    vmand.mm v0, v11, v10
4303; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
4304; CHECK-NEXT:    vmnot.m v0, v0
4305; CHECK-NEXT:    ret
4306  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4307  ret <1 x i1> %1
4308}
4309
4310define <1 x i1> @fcmp_ugt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4311; CHECK-LABEL: fcmp_ugt_vf_v1f32:
4312; CHECK:       # %bb.0:
4313; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4314; CHECK-NEXT:    vfmv.s.f v9, fa0
4315; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4316; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4317; CHECK-NEXT:    vmand.mm v0, v10, v9
4318; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4319; CHECK-NEXT:    vmnot.m v0, v0
4320; CHECK-NEXT:    ret
4321  %head = insertelement <1 x float> poison, float %b, i32 0
4322  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4323  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4324  ret <1 x i1> %1
4325}
4326
4327define <1 x i1> @fcmp_ugt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4328; CHECK-LABEL: fcmp_ugt_fv_v1f32:
4329; CHECK:       # %bb.0:
4330; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4331; CHECK-NEXT:    vfmv.s.f v9, fa0
4332; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4333; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4334; CHECK-NEXT:    vmand.mm v0, v9, v10
4335; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4336; CHECK-NEXT:    vmnot.m v0, v0
4337; CHECK-NEXT:    ret
4338  %head = insertelement <1 x float> poison, float %b, i32 0
4339  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4340  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4341  ret <1 x i1> %1
4342}
4343
4344define <1 x i1> @fcmp_uge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4345; CHECK-LABEL: fcmp_uge_vv_v1f32:
4346; CHECK:       # %bb.0:
4347; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4348; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4349; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4350; CHECK-NEXT:    vmand.mm v0, v11, v10
4351; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
4352; CHECK-NEXT:    vmnot.m v0, v0
4353; CHECK-NEXT:    ret
4354  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4355  ret <1 x i1> %1
4356}
4357
4358define <1 x i1> @fcmp_uge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4359; CHECK-LABEL: fcmp_uge_vf_v1f32:
4360; CHECK:       # %bb.0:
4361; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4362; CHECK-NEXT:    vfmv.s.f v9, fa0
4363; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4364; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4365; CHECK-NEXT:    vmand.mm v0, v10, v9
4366; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4367; CHECK-NEXT:    vmnot.m v0, v0
4368; CHECK-NEXT:    ret
4369  %head = insertelement <1 x float> poison, float %b, i32 0
4370  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4371  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
4372  ret <1 x i1> %1
4373}
4374
4375define <1 x i1> @fcmp_uge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4376; CHECK-LABEL: fcmp_uge_fv_v1f32:
4377; CHECK:       # %bb.0:
4378; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4379; CHECK-NEXT:    vfmv.s.f v9, fa0
4380; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4381; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4382; CHECK-NEXT:    vmand.mm v0, v9, v10
4383; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4384; CHECK-NEXT:    vmnot.m v0, v0
4385; CHECK-NEXT:    ret
4386  %head = insertelement <1 x float> poison, float %b, i32 0
4387  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4388  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
4389  ret <1 x i1> %1
4390}
4391
4392define <1 x i1> @fcmp_ult_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4393; CHECK-LABEL: fcmp_ult_vv_v1f32:
4394; CHECK:       # %bb.0:
4395; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4396; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4397; CHECK-NEXT:    vmfeq.vv v11, v9, v9
4398; CHECK-NEXT:    vmand.mm v0, v11, v10
4399; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
4400; CHECK-NEXT:    vmnot.m v0, v0
4401; CHECK-NEXT:    ret
4402  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
4403  ret <1 x i1> %1
4404}
4405
4406define <1 x i1> @fcmp_ult_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4407; CHECK-LABEL: fcmp_ult_vf_v1f32:
4408; CHECK:       # %bb.0:
4409; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4410; CHECK-NEXT:    vfmv.s.f v9, fa0
4411; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4412; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4413; CHECK-NEXT:    vmand.mm v0, v9, v10
4414; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4415; CHECK-NEXT:    vmnot.m v0, v0
4416; CHECK-NEXT:    ret
4417  %head = insertelement <1 x float> poison, float %b, i32 0
4418  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4419  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
4420  ret <1 x i1> %1
4421}
4422
4423define <1 x i1> @fcmp_ult_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4424; CHECK-LABEL: fcmp_ult_fv_v1f32:
4425; CHECK:       # %bb.0:
4426; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4427; CHECK-NEXT:    vfmv.s.f v9, fa0
4428; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4429; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4430; CHECK-NEXT:    vmand.mm v0, v10, v9
4431; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4432; CHECK-NEXT:    vmnot.m v0, v0
4433; CHECK-NEXT:    ret
4434  %head = insertelement <1 x float> poison, float %b, i32 0
4435  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4436  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
4437  ret <1 x i1> %1
4438}
4439
4440define <1 x i1> @fcmp_ule_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4441; CHECK-LABEL: fcmp_ule_vv_v1f32:
4442; CHECK:       # %bb.0:
4443; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4444; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4445; CHECK-NEXT:    vmfeq.vv v11, v9, v9
4446; CHECK-NEXT:    vmand.mm v0, v11, v10
4447; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4448; CHECK-NEXT:    vmnot.m v0, v0
4449; CHECK-NEXT:    ret
4450  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
4451  ret <1 x i1> %1
4452}
4453
4454define <1 x i1> @fcmp_ule_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4455; CHECK-LABEL: fcmp_ule_vf_v1f32:
4456; CHECK:       # %bb.0:
4457; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4458; CHECK-NEXT:    vfmv.s.f v9, fa0
4459; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4460; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4461; CHECK-NEXT:    vmand.mm v0, v9, v10
4462; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4463; CHECK-NEXT:    vmnot.m v0, v0
4464; CHECK-NEXT:    ret
4465  %head = insertelement <1 x float> poison, float %b, i32 0
4466  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4467  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
4468  ret <1 x i1> %1
4469}
4470
4471define <1 x i1> @fcmp_ule_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4472; CHECK-LABEL: fcmp_ule_fv_v1f32:
4473; CHECK:       # %bb.0:
4474; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
4475; CHECK-NEXT:    vfmv.s.f v9, fa0
4476; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4477; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4478; CHECK-NEXT:    vmand.mm v0, v10, v9
4479; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4480; CHECK-NEXT:    vmnot.m v0, v0
4481; CHECK-NEXT:    ret
4482  %head = insertelement <1 x float> poison, float %b, i32 0
4483  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4484  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
4485  ret <1 x i1> %1
4486}
4487
4488define <1 x i1> @fcmp_une_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4489; CHECK-LABEL: fcmp_une_vv_v1f32:
4490; CHECK:       # %bb.0:
4491; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4492; CHECK-NEXT:    vmfne.vv v0, v8, v9
4493; CHECK-NEXT:    ret
4494  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
4495  ret <1 x i1> %1
4496}
4497
4498define <1 x i1> @fcmp_une_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4499; CHECK-LABEL: fcmp_une_vf_v1f32:
4500; CHECK:       # %bb.0:
4501; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4502; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4503; CHECK-NEXT:    ret
4504  %head = insertelement <1 x float> poison, float %b, i32 0
4505  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4506  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
4507  ret <1 x i1> %1
4508}
4509
4510define <1 x i1> @fcmp_une_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4511; CHECK-LABEL: fcmp_une_fv_v1f32:
4512; CHECK:       # %bb.0:
4513; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4514; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4515; CHECK-NEXT:    ret
4516  %head = insertelement <1 x float> poison, float %b, i32 0
4517  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4518  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
4519  ret <1 x i1> %1
4520}
4521
4522define <1 x i1> @fcmp_uno_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp {
4523; CHECK-LABEL: fcmp_uno_vv_v1f32:
4524; CHECK:       # %bb.0:
4525; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4526; CHECK-NEXT:    vmfne.vv v9, v9, v9
4527; CHECK-NEXT:    vmfne.vv v8, v8, v8
4528; CHECK-NEXT:    vmor.mm v0, v8, v9
4529; CHECK-NEXT:    ret
4530  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
4531  ret <1 x i1> %1
4532}
4533
4534define <1 x i1> @fcmp_uno_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4535; CHECK-LABEL: fcmp_uno_vf_v1f32:
4536; CHECK:       # %bb.0:
4537; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4538; CHECK-NEXT:    vfmv.s.f v9, fa0
4539; CHECK-NEXT:    vmfne.vf v9, v9, fa0
4540; CHECK-NEXT:    vmfne.vv v8, v8, v8
4541; CHECK-NEXT:    vmor.mm v0, v8, v9
4542; CHECK-NEXT:    ret
4543  %head = insertelement <1 x float> poison, float %b, i32 0
4544  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4545  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
4546  ret <1 x i1> %1
4547}
4548
4549define <1 x i1> @fcmp_uno_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp {
4550; CHECK-LABEL: fcmp_uno_fv_v1f32:
4551; CHECK:       # %bb.0:
4552; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
4553; CHECK-NEXT:    vfmv.s.f v9, fa0
4554; CHECK-NEXT:    vmfne.vf v9, v9, fa0
4555; CHECK-NEXT:    vmfne.vv v8, v8, v8
4556; CHECK-NEXT:    vmor.mm v0, v9, v8
4557; CHECK-NEXT:    ret
4558  %head = insertelement <1 x float> poison, float %b, i32 0
4559  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
4560  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
4561  ret <1 x i1> %1
4562}
4563
4564declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float>, <2 x float>, metadata, metadata)
4565define <2 x i1> @fcmp_oeq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4566; CHECK-LABEL: fcmp_oeq_vv_v2f32:
4567; CHECK:       # %bb.0:
4568; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4569; CHECK-NEXT:    vmfeq.vv v0, v8, v9
4570; CHECK-NEXT:    ret
4571  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4572  ret <2 x i1> %1
4573}
4574
4575define <2 x i1> @fcmp_oeq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4576; CHECK-LABEL: fcmp_oeq_vf_v2f32:
4577; CHECK:       # %bb.0:
4578; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4579; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4580; CHECK-NEXT:    ret
4581  %head = insertelement <2 x float> poison, float %b, i32 0
4582  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4583  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4584  ret <2 x i1> %1
4585}
4586
4587define <2 x i1> @fcmp_oeq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4588; CHECK-LABEL: fcmp_oeq_fv_v2f32:
4589; CHECK:       # %bb.0:
4590; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4591; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4592; CHECK-NEXT:    ret
4593  %head = insertelement <2 x float> poison, float %b, i32 0
4594  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4595  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
4596  ret <2 x i1> %1
4597}
4598
4599define <2 x i1> @fcmp_ogt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4600; CHECK-LABEL: fcmp_ogt_vv_v2f32:
4601; CHECK:       # %bb.0:
4602; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4603; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4604; CHECK-NEXT:    vmfeq.vv v11, v9, v9
4605; CHECK-NEXT:    vmand.mm v0, v11, v10
4606; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4607; CHECK-NEXT:    ret
4608  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4609  ret <2 x i1> %1
4610}
4611
4612define <2 x i1> @fcmp_ogt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4613; CHECK-LABEL: fcmp_ogt_vf_v2f32:
4614; CHECK:       # %bb.0:
4615; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4616; CHECK-NEXT:    vfmv.v.f v9, fa0
4617; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4618; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4619; CHECK-NEXT:    vmand.mm v0, v9, v10
4620; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4621; CHECK-NEXT:    ret
4622  %head = insertelement <2 x float> poison, float %b, i32 0
4623  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4624  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4625  ret <2 x i1> %1
4626}
4627
4628define <2 x i1> @fcmp_ogt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4629; CHECK-LABEL: fcmp_ogt_fv_v2f32:
4630; CHECK:       # %bb.0:
4631; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4632; CHECK-NEXT:    vfmv.v.f v9, fa0
4633; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4634; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4635; CHECK-NEXT:    vmand.mm v0, v10, v9
4636; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4637; CHECK-NEXT:    ret
4638  %head = insertelement <2 x float> poison, float %b, i32 0
4639  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4640  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
4641  ret <2 x i1> %1
4642}
4643
4644define <2 x i1> @fcmp_oge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4645; CHECK-LABEL: fcmp_oge_vv_v2f32:
4646; CHECK:       # %bb.0:
4647; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4648; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4649; CHECK-NEXT:    vmfeq.vv v11, v9, v9
4650; CHECK-NEXT:    vmand.mm v0, v11, v10
4651; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
4652; CHECK-NEXT:    ret
4653  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
4654  ret <2 x i1> %1
4655}
4656
4657define <2 x i1> @fcmp_oge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4658; CHECK-LABEL: fcmp_oge_vf_v2f32:
4659; CHECK:       # %bb.0:
4660; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4661; CHECK-NEXT:    vfmv.v.f v9, fa0
4662; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4663; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4664; CHECK-NEXT:    vmand.mm v0, v9, v10
4665; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4666; CHECK-NEXT:    ret
4667  %head = insertelement <2 x float> poison, float %b, i32 0
4668  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4669  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
4670  ret <2 x i1> %1
4671}
4672
4673define <2 x i1> @fcmp_oge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4674; CHECK-LABEL: fcmp_oge_fv_v2f32:
4675; CHECK:       # %bb.0:
4676; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4677; CHECK-NEXT:    vfmv.v.f v9, fa0
4678; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4679; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4680; CHECK-NEXT:    vmand.mm v0, v10, v9
4681; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4682; CHECK-NEXT:    ret
4683  %head = insertelement <2 x float> poison, float %b, i32 0
4684  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4685  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
4686  ret <2 x i1> %1
4687}
4688
4689define <2 x i1> @fcmp_olt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4690; CHECK-LABEL: fcmp_olt_vv_v2f32:
4691; CHECK:       # %bb.0:
4692; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4693; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4694; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4695; CHECK-NEXT:    vmand.mm v0, v11, v10
4696; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
4697; CHECK-NEXT:    ret
4698  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
4699  ret <2 x i1> %1
4700}
4701
4702define <2 x i1> @fcmp_olt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4703; CHECK-LABEL: fcmp_olt_vf_v2f32:
4704; CHECK:       # %bb.0:
4705; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4706; CHECK-NEXT:    vfmv.v.f v9, fa0
4707; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4708; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4709; CHECK-NEXT:    vmand.mm v0, v10, v9
4710; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4711; CHECK-NEXT:    ret
4712  %head = insertelement <2 x float> poison, float %b, i32 0
4713  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4714  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
4715  ret <2 x i1> %1
4716}
4717
4718define <2 x i1> @fcmp_olt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4719; CHECK-LABEL: fcmp_olt_fv_v2f32:
4720; CHECK:       # %bb.0:
4721; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4722; CHECK-NEXT:    vfmv.v.f v9, fa0
4723; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4724; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4725; CHECK-NEXT:    vmand.mm v0, v9, v10
4726; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4727; CHECK-NEXT:    ret
4728  %head = insertelement <2 x float> poison, float %b, i32 0
4729  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4730  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
4731  ret <2 x i1> %1
4732}
4733
4734define <2 x i1> @fcmp_ole_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4735; CHECK-LABEL: fcmp_ole_vv_v2f32:
4736; CHECK:       # %bb.0:
4737; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4738; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4739; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4740; CHECK-NEXT:    vmand.mm v0, v11, v10
4741; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
4742; CHECK-NEXT:    ret
4743  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
4744  ret <2 x i1> %1
4745}
4746
4747define <2 x i1> @fcmp_ole_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4748; CHECK-LABEL: fcmp_ole_vf_v2f32:
4749; CHECK:       # %bb.0:
4750; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4751; CHECK-NEXT:    vfmv.v.f v9, fa0
4752; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4753; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4754; CHECK-NEXT:    vmand.mm v0, v10, v9
4755; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4756; CHECK-NEXT:    ret
4757  %head = insertelement <2 x float> poison, float %b, i32 0
4758  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4759  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
4760  ret <2 x i1> %1
4761}
4762
4763define <2 x i1> @fcmp_ole_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4764; CHECK-LABEL: fcmp_ole_fv_v2f32:
4765; CHECK:       # %bb.0:
4766; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4767; CHECK-NEXT:    vfmv.v.f v9, fa0
4768; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4769; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4770; CHECK-NEXT:    vmand.mm v0, v9, v10
4771; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4772; CHECK-NEXT:    ret
4773  %head = insertelement <2 x float> poison, float %b, i32 0
4774  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4775  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
4776  ret <2 x i1> %1
4777}
4778
4779define <2 x i1> @fcmp_one_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4780; CHECK-LABEL: fcmp_one_vv_v2f32:
4781; CHECK:       # %bb.0:
4782; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4783; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4784; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4785; CHECK-NEXT:    vmand.mm v0, v11, v10
4786; CHECK-NEXT:    vmv1r.v v10, v0
4787; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
4788; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4789; CHECK-NEXT:    vmor.mm v0, v0, v10
4790; CHECK-NEXT:    ret
4791  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
4792  ret <2 x i1> %1
4793}
4794
4795define <2 x i1> @fcmp_one_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4796; CHECK-LABEL: fcmp_one_vf_v2f32:
4797; CHECK:       # %bb.0:
4798; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4799; CHECK-NEXT:    vfmv.v.f v9, fa0
4800; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4801; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4802; CHECK-NEXT:    vmand.mm v0, v10, v9
4803; CHECK-NEXT:    vmv1r.v v9, v0
4804; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4805; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4806; CHECK-NEXT:    vmor.mm v0, v0, v9
4807; CHECK-NEXT:    ret
4808  %head = insertelement <2 x float> poison, float %b, i32 0
4809  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4810  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
4811  ret <2 x i1> %1
4812}
4813
4814define <2 x i1> @fcmp_one_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4815; CHECK-LABEL: fcmp_one_fv_v2f32:
4816; CHECK:       # %bb.0:
4817; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4818; CHECK-NEXT:    vfmv.v.f v9, fa0
4819; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4820; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4821; CHECK-NEXT:    vmand.mm v0, v9, v10
4822; CHECK-NEXT:    vmv1r.v v9, v0
4823; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4824; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4825; CHECK-NEXT:    vmor.mm v0, v0, v9
4826; CHECK-NEXT:    ret
4827  %head = insertelement <2 x float> poison, float %b, i32 0
4828  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4829  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
4830  ret <2 x i1> %1
4831}
4832
4833define <2 x i1> @fcmp_ord_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4834; CHECK-LABEL: fcmp_ord_vv_v2f32:
4835; CHECK:       # %bb.0:
4836; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4837; CHECK-NEXT:    vmfeq.vv v9, v9, v9
4838; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4839; CHECK-NEXT:    vmand.mm v0, v8, v9
4840; CHECK-NEXT:    ret
4841  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
4842  ret <2 x i1> %1
4843}
4844
4845define <2 x i1> @fcmp_ord_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4846; CHECK-LABEL: fcmp_ord_vf_v2f32:
4847; CHECK:       # %bb.0:
4848; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4849; CHECK-NEXT:    vfmv.v.f v9, fa0
4850; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4851; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4852; CHECK-NEXT:    vmand.mm v0, v8, v9
4853; CHECK-NEXT:    ret
4854  %head = insertelement <2 x float> poison, float %b, i32 0
4855  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4856  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
4857  ret <2 x i1> %1
4858}
4859
4860define <2 x i1> @fcmp_ord_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4861; CHECK-LABEL: fcmp_ord_fv_v2f32:
4862; CHECK:       # %bb.0:
4863; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
4864; CHECK-NEXT:    vfmv.v.f v9, fa0
4865; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4866; CHECK-NEXT:    vmfeq.vv v8, v8, v8
4867; CHECK-NEXT:    vmand.mm v0, v9, v8
4868; CHECK-NEXT:    ret
4869  %head = insertelement <2 x float> poison, float %b, i32 0
4870  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4871  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
4872  ret <2 x i1> %1
4873}
4874
4875define <2 x i1> @fcmp_ueq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4876; CHECK-LABEL: fcmp_ueq_vv_v2f32:
4877; CHECK:       # %bb.0:
4878; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4879; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4880; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4881; CHECK-NEXT:    vmand.mm v0, v11, v10
4882; CHECK-NEXT:    vmv1r.v v10, v0
4883; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
4884; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
4885; CHECK-NEXT:    vmnor.mm v0, v0, v10
4886; CHECK-NEXT:    ret
4887  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4888  ret <2 x i1> %1
4889}
4890
4891define <2 x i1> @fcmp_ueq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4892; CHECK-LABEL: fcmp_ueq_vf_v2f32:
4893; CHECK:       # %bb.0:
4894; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4895; CHECK-NEXT:    vfmv.v.f v9, fa0
4896; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4897; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4898; CHECK-NEXT:    vmand.mm v0, v10, v9
4899; CHECK-NEXT:    vmv1r.v v9, v0
4900; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
4901; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
4902; CHECK-NEXT:    vmnor.mm v0, v0, v9
4903; CHECK-NEXT:    ret
4904  %head = insertelement <2 x float> poison, float %b, i32 0
4905  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4906  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4907  ret <2 x i1> %1
4908}
4909
4910define <2 x i1> @fcmp_ueq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4911; CHECK-LABEL: fcmp_ueq_fv_v2f32:
4912; CHECK:       # %bb.0:
4913; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4914; CHECK-NEXT:    vfmv.v.f v9, fa0
4915; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4916; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4917; CHECK-NEXT:    vmand.mm v0, v9, v10
4918; CHECK-NEXT:    vmv1r.v v9, v0
4919; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
4920; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
4921; CHECK-NEXT:    vmnor.mm v0, v0, v9
4922; CHECK-NEXT:    ret
4923  %head = insertelement <2 x float> poison, float %b, i32 0
4924  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4925  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
4926  ret <2 x i1> %1
4927}
4928
4929define <2 x i1> @fcmp_ugt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4930; CHECK-LABEL: fcmp_ugt_vv_v2f32:
4931; CHECK:       # %bb.0:
4932; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4933; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4934; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4935; CHECK-NEXT:    vmand.mm v0, v11, v10
4936; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
4937; CHECK-NEXT:    vmnot.m v0, v0
4938; CHECK-NEXT:    ret
4939  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4940  ret <2 x i1> %1
4941}
4942
4943define <2 x i1> @fcmp_ugt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4944; CHECK-LABEL: fcmp_ugt_vf_v2f32:
4945; CHECK:       # %bb.0:
4946; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4947; CHECK-NEXT:    vfmv.v.f v9, fa0
4948; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4949; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4950; CHECK-NEXT:    vmand.mm v0, v10, v9
4951; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
4952; CHECK-NEXT:    vmnot.m v0, v0
4953; CHECK-NEXT:    ret
4954  %head = insertelement <2 x float> poison, float %b, i32 0
4955  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4956  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4957  ret <2 x i1> %1
4958}
4959
4960define <2 x i1> @fcmp_ugt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4961; CHECK-LABEL: fcmp_ugt_fv_v2f32:
4962; CHECK:       # %bb.0:
4963; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4964; CHECK-NEXT:    vfmv.v.f v9, fa0
4965; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4966; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4967; CHECK-NEXT:    vmand.mm v0, v9, v10
4968; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
4969; CHECK-NEXT:    vmnot.m v0, v0
4970; CHECK-NEXT:    ret
4971  %head = insertelement <2 x float> poison, float %b, i32 0
4972  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
4973  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
4974  ret <2 x i1> %1
4975}
4976
4977define <2 x i1> @fcmp_uge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
4978; CHECK-LABEL: fcmp_uge_vv_v2f32:
4979; CHECK:       # %bb.0:
4980; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4981; CHECK-NEXT:    vmfeq.vv v10, v9, v9
4982; CHECK-NEXT:    vmfeq.vv v11, v8, v8
4983; CHECK-NEXT:    vmand.mm v0, v11, v10
4984; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
4985; CHECK-NEXT:    vmnot.m v0, v0
4986; CHECK-NEXT:    ret
4987  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
4988  ret <2 x i1> %1
4989}
4990
4991define <2 x i1> @fcmp_uge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
4992; CHECK-LABEL: fcmp_uge_vf_v2f32:
4993; CHECK:       # %bb.0:
4994; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
4995; CHECK-NEXT:    vfmv.v.f v9, fa0
4996; CHECK-NEXT:    vmfeq.vv v10, v8, v8
4997; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
4998; CHECK-NEXT:    vmand.mm v0, v10, v9
4999; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5000; CHECK-NEXT:    vmnot.m v0, v0
5001; CHECK-NEXT:    ret
5002  %head = insertelement <2 x float> poison, float %b, i32 0
5003  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5004  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5005  ret <2 x i1> %1
5006}
5007
5008define <2 x i1> @fcmp_uge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5009; CHECK-LABEL: fcmp_uge_fv_v2f32:
5010; CHECK:       # %bb.0:
5011; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5012; CHECK-NEXT:    vfmv.v.f v9, fa0
5013; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5014; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5015; CHECK-NEXT:    vmand.mm v0, v9, v10
5016; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5017; CHECK-NEXT:    vmnot.m v0, v0
5018; CHECK-NEXT:    ret
5019  %head = insertelement <2 x float> poison, float %b, i32 0
5020  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5021  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5022  ret <2 x i1> %1
5023}
5024
5025define <2 x i1> @fcmp_ult_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5026; CHECK-LABEL: fcmp_ult_vv_v2f32:
5027; CHECK:       # %bb.0:
5028; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5029; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5030; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5031; CHECK-NEXT:    vmand.mm v0, v11, v10
5032; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
5033; CHECK-NEXT:    vmnot.m v0, v0
5034; CHECK-NEXT:    ret
5035  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5036  ret <2 x i1> %1
5037}
5038
5039define <2 x i1> @fcmp_ult_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5040; CHECK-LABEL: fcmp_ult_vf_v2f32:
5041; CHECK:       # %bb.0:
5042; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5043; CHECK-NEXT:    vfmv.v.f v9, fa0
5044; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5045; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5046; CHECK-NEXT:    vmand.mm v0, v9, v10
5047; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5048; CHECK-NEXT:    vmnot.m v0, v0
5049; CHECK-NEXT:    ret
5050  %head = insertelement <2 x float> poison, float %b, i32 0
5051  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5052  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5053  ret <2 x i1> %1
5054}
5055
5056define <2 x i1> @fcmp_ult_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5057; CHECK-LABEL: fcmp_ult_fv_v2f32:
5058; CHECK:       # %bb.0:
5059; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5060; CHECK-NEXT:    vfmv.v.f v9, fa0
5061; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5062; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5063; CHECK-NEXT:    vmand.mm v0, v10, v9
5064; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5065; CHECK-NEXT:    vmnot.m v0, v0
5066; CHECK-NEXT:    ret
5067  %head = insertelement <2 x float> poison, float %b, i32 0
5068  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5069  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5070  ret <2 x i1> %1
5071}
5072
5073define <2 x i1> @fcmp_ule_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5074; CHECK-LABEL: fcmp_ule_vv_v2f32:
5075; CHECK:       # %bb.0:
5076; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5077; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5078; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5079; CHECK-NEXT:    vmand.mm v0, v11, v10
5080; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
5081; CHECK-NEXT:    vmnot.m v0, v0
5082; CHECK-NEXT:    ret
5083  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5084  ret <2 x i1> %1
5085}
5086
5087define <2 x i1> @fcmp_ule_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5088; CHECK-LABEL: fcmp_ule_vf_v2f32:
5089; CHECK:       # %bb.0:
5090; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5091; CHECK-NEXT:    vfmv.v.f v9, fa0
5092; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5093; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5094; CHECK-NEXT:    vmand.mm v0, v9, v10
5095; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5096; CHECK-NEXT:    vmnot.m v0, v0
5097; CHECK-NEXT:    ret
5098  %head = insertelement <2 x float> poison, float %b, i32 0
5099  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5100  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5101  ret <2 x i1> %1
5102}
5103
5104define <2 x i1> @fcmp_ule_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5105; CHECK-LABEL: fcmp_ule_fv_v2f32:
5106; CHECK:       # %bb.0:
5107; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
5108; CHECK-NEXT:    vfmv.v.f v9, fa0
5109; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5110; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5111; CHECK-NEXT:    vmand.mm v0, v10, v9
5112; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5113; CHECK-NEXT:    vmnot.m v0, v0
5114; CHECK-NEXT:    ret
5115  %head = insertelement <2 x float> poison, float %b, i32 0
5116  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5117  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5118  ret <2 x i1> %1
5119}
5120
5121define <2 x i1> @fcmp_une_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5122; CHECK-LABEL: fcmp_une_vv_v2f32:
5123; CHECK:       # %bb.0:
5124; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5125; CHECK-NEXT:    vmfne.vv v0, v8, v9
5126; CHECK-NEXT:    ret
5127  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5128  ret <2 x i1> %1
5129}
5130
5131define <2 x i1> @fcmp_une_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5132; CHECK-LABEL: fcmp_une_vf_v2f32:
5133; CHECK:       # %bb.0:
5134; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5135; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5136; CHECK-NEXT:    ret
5137  %head = insertelement <2 x float> poison, float %b, i32 0
5138  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5139  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5140  ret <2 x i1> %1
5141}
5142
5143define <2 x i1> @fcmp_une_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5144; CHECK-LABEL: fcmp_une_fv_v2f32:
5145; CHECK:       # %bb.0:
5146; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5147; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5148; CHECK-NEXT:    ret
5149  %head = insertelement <2 x float> poison, float %b, i32 0
5150  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5151  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5152  ret <2 x i1> %1
5153}
5154
5155define <2 x i1> @fcmp_uno_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp {
5156; CHECK-LABEL: fcmp_uno_vv_v2f32:
5157; CHECK:       # %bb.0:
5158; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5159; CHECK-NEXT:    vmfne.vv v9, v9, v9
5160; CHECK-NEXT:    vmfne.vv v8, v8, v8
5161; CHECK-NEXT:    vmor.mm v0, v8, v9
5162; CHECK-NEXT:    ret
5163  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5164  ret <2 x i1> %1
5165}
5166
5167define <2 x i1> @fcmp_uno_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5168; CHECK-LABEL: fcmp_uno_vf_v2f32:
5169; CHECK:       # %bb.0:
5170; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5171; CHECK-NEXT:    vfmv.v.f v9, fa0
5172; CHECK-NEXT:    vmfne.vf v9, v9, fa0
5173; CHECK-NEXT:    vmfne.vv v8, v8, v8
5174; CHECK-NEXT:    vmor.mm v0, v8, v9
5175; CHECK-NEXT:    ret
5176  %head = insertelement <2 x float> poison, float %b, i32 0
5177  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5178  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5179  ret <2 x i1> %1
5180}
5181
5182define <2 x i1> @fcmp_uno_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp {
5183; CHECK-LABEL: fcmp_uno_fv_v2f32:
5184; CHECK:       # %bb.0:
5185; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
5186; CHECK-NEXT:    vfmv.v.f v9, fa0
5187; CHECK-NEXT:    vmfne.vf v9, v9, fa0
5188; CHECK-NEXT:    vmfne.vv v8, v8, v8
5189; CHECK-NEXT:    vmor.mm v0, v9, v8
5190; CHECK-NEXT:    ret
5191  %head = insertelement <2 x float> poison, float %b, i32 0
5192  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
5193  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5194  ret <2 x i1> %1
5195}
5196
5197declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)
5198define <4 x i1> @fcmp_oeq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5199; CHECK-LABEL: fcmp_oeq_vv_v4f32:
5200; CHECK:       # %bb.0:
5201; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5202; CHECK-NEXT:    vmfeq.vv v0, v8, v9
5203; CHECK-NEXT:    ret
5204  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5205  ret <4 x i1> %1
5206}
5207
5208define <4 x i1> @fcmp_oeq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5209; CHECK-LABEL: fcmp_oeq_vf_v4f32:
5210; CHECK:       # %bb.0:
5211; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5212; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5213; CHECK-NEXT:    ret
5214  %head = insertelement <4 x float> poison, float %b, i32 0
5215  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5216  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5217  ret <4 x i1> %1
5218}
5219
5220define <4 x i1> @fcmp_oeq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5221; CHECK-LABEL: fcmp_oeq_fv_v4f32:
5222; CHECK:       # %bb.0:
5223; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5224; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5225; CHECK-NEXT:    ret
5226  %head = insertelement <4 x float> poison, float %b, i32 0
5227  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5228  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5229  ret <4 x i1> %1
5230}
5231
5232define <4 x i1> @fcmp_ogt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5233; CHECK-LABEL: fcmp_ogt_vv_v4f32:
5234; CHECK:       # %bb.0:
5235; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5236; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5237; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5238; CHECK-NEXT:    vmand.mm v0, v11, v10
5239; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
5240; CHECK-NEXT:    ret
5241  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5242  ret <4 x i1> %1
5243}
5244
5245define <4 x i1> @fcmp_ogt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5246; CHECK-LABEL: fcmp_ogt_vf_v4f32:
5247; CHECK:       # %bb.0:
5248; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5249; CHECK-NEXT:    vfmv.v.f v9, fa0
5250; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5251; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5252; CHECK-NEXT:    vmand.mm v0, v9, v10
5253; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5254; CHECK-NEXT:    ret
5255  %head = insertelement <4 x float> poison, float %b, i32 0
5256  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5257  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5258  ret <4 x i1> %1
5259}
5260
5261define <4 x i1> @fcmp_ogt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5262; CHECK-LABEL: fcmp_ogt_fv_v4f32:
5263; CHECK:       # %bb.0:
5264; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5265; CHECK-NEXT:    vfmv.v.f v9, fa0
5266; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5267; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5268; CHECK-NEXT:    vmand.mm v0, v10, v9
5269; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5270; CHECK-NEXT:    ret
5271  %head = insertelement <4 x float> poison, float %b, i32 0
5272  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5273  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5274  ret <4 x i1> %1
5275}
5276
5277define <4 x i1> @fcmp_oge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5278; CHECK-LABEL: fcmp_oge_vv_v4f32:
5279; CHECK:       # %bb.0:
5280; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5281; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5282; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5283; CHECK-NEXT:    vmand.mm v0, v11, v10
5284; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
5285; CHECK-NEXT:    ret
5286  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5287  ret <4 x i1> %1
5288}
5289
5290define <4 x i1> @fcmp_oge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5291; CHECK-LABEL: fcmp_oge_vf_v4f32:
5292; CHECK:       # %bb.0:
5293; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5294; CHECK-NEXT:    vfmv.v.f v9, fa0
5295; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5296; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5297; CHECK-NEXT:    vmand.mm v0, v9, v10
5298; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5299; CHECK-NEXT:    ret
5300  %head = insertelement <4 x float> poison, float %b, i32 0
5301  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5302  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5303  ret <4 x i1> %1
5304}
5305
5306define <4 x i1> @fcmp_oge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5307; CHECK-LABEL: fcmp_oge_fv_v4f32:
5308; CHECK:       # %bb.0:
5309; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5310; CHECK-NEXT:    vfmv.v.f v9, fa0
5311; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5312; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5313; CHECK-NEXT:    vmand.mm v0, v10, v9
5314; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5315; CHECK-NEXT:    ret
5316  %head = insertelement <4 x float> poison, float %b, i32 0
5317  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5318  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
5319  ret <4 x i1> %1
5320}
5321
5322define <4 x i1> @fcmp_olt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5323; CHECK-LABEL: fcmp_olt_vv_v4f32:
5324; CHECK:       # %bb.0:
5325; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5326; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5327; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5328; CHECK-NEXT:    vmand.mm v0, v11, v10
5329; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
5330; CHECK-NEXT:    ret
5331  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
5332  ret <4 x i1> %1
5333}
5334
5335define <4 x i1> @fcmp_olt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5336; CHECK-LABEL: fcmp_olt_vf_v4f32:
5337; CHECK:       # %bb.0:
5338; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5339; CHECK-NEXT:    vfmv.v.f v9, fa0
5340; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5341; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5342; CHECK-NEXT:    vmand.mm v0, v10, v9
5343; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5344; CHECK-NEXT:    ret
5345  %head = insertelement <4 x float> poison, float %b, i32 0
5346  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5347  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
5348  ret <4 x i1> %1
5349}
5350
5351define <4 x i1> @fcmp_olt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5352; CHECK-LABEL: fcmp_olt_fv_v4f32:
5353; CHECK:       # %bb.0:
5354; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5355; CHECK-NEXT:    vfmv.v.f v9, fa0
5356; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5357; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5358; CHECK-NEXT:    vmand.mm v0, v9, v10
5359; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5360; CHECK-NEXT:    ret
5361  %head = insertelement <4 x float> poison, float %b, i32 0
5362  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5363  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
5364  ret <4 x i1> %1
5365}
5366
5367define <4 x i1> @fcmp_ole_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5368; CHECK-LABEL: fcmp_ole_vv_v4f32:
5369; CHECK:       # %bb.0:
5370; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5371; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5372; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5373; CHECK-NEXT:    vmand.mm v0, v11, v10
5374; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
5375; CHECK-NEXT:    ret
5376  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
5377  ret <4 x i1> %1
5378}
5379
5380define <4 x i1> @fcmp_ole_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5381; CHECK-LABEL: fcmp_ole_vf_v4f32:
5382; CHECK:       # %bb.0:
5383; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5384; CHECK-NEXT:    vfmv.v.f v9, fa0
5385; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5386; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5387; CHECK-NEXT:    vmand.mm v0, v10, v9
5388; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5389; CHECK-NEXT:    ret
5390  %head = insertelement <4 x float> poison, float %b, i32 0
5391  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5392  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
5393  ret <4 x i1> %1
5394}
5395
5396define <4 x i1> @fcmp_ole_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5397; CHECK-LABEL: fcmp_ole_fv_v4f32:
5398; CHECK:       # %bb.0:
5399; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5400; CHECK-NEXT:    vfmv.v.f v9, fa0
5401; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5402; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5403; CHECK-NEXT:    vmand.mm v0, v9, v10
5404; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5405; CHECK-NEXT:    ret
5406  %head = insertelement <4 x float> poison, float %b, i32 0
5407  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5408  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
5409  ret <4 x i1> %1
5410}
5411
5412define <4 x i1> @fcmp_one_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5413; CHECK-LABEL: fcmp_one_vv_v4f32:
5414; CHECK:       # %bb.0:
5415; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5416; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5417; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5418; CHECK-NEXT:    vmand.mm v0, v11, v10
5419; CHECK-NEXT:    vmv.v.v v10, v0
5420; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
5421; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
5422; CHECK-NEXT:    vmor.mm v0, v0, v10
5423; CHECK-NEXT:    ret
5424  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
5425  ret <4 x i1> %1
5426}
5427
5428define <4 x i1> @fcmp_one_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5429; CHECK-LABEL: fcmp_one_vf_v4f32:
5430; CHECK:       # %bb.0:
5431; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5432; CHECK-NEXT:    vfmv.v.f v9, fa0
5433; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5434; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5435; CHECK-NEXT:    vmand.mm v0, v10, v9
5436; CHECK-NEXT:    vmv.v.v v9, v0
5437; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
5438; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5439; CHECK-NEXT:    vmor.mm v0, v0, v9
5440; CHECK-NEXT:    ret
5441  %head = insertelement <4 x float> poison, float %b, i32 0
5442  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5443  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
5444  ret <4 x i1> %1
5445}
5446
5447define <4 x i1> @fcmp_one_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5448; CHECK-LABEL: fcmp_one_fv_v4f32:
5449; CHECK:       # %bb.0:
5450; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5451; CHECK-NEXT:    vfmv.v.f v9, fa0
5452; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5453; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5454; CHECK-NEXT:    vmand.mm v0, v9, v10
5455; CHECK-NEXT:    vmv.v.v v9, v0
5456; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
5457; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5458; CHECK-NEXT:    vmor.mm v0, v0, v9
5459; CHECK-NEXT:    ret
5460  %head = insertelement <4 x float> poison, float %b, i32 0
5461  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5462  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
5463  ret <4 x i1> %1
5464}
5465
5466define <4 x i1> @fcmp_ord_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5467; CHECK-LABEL: fcmp_ord_vv_v4f32:
5468; CHECK:       # %bb.0:
5469; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5470; CHECK-NEXT:    vmfeq.vv v9, v9, v9
5471; CHECK-NEXT:    vmfeq.vv v8, v8, v8
5472; CHECK-NEXT:    vmand.mm v0, v8, v9
5473; CHECK-NEXT:    ret
5474  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
5475  ret <4 x i1> %1
5476}
5477
5478define <4 x i1> @fcmp_ord_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5479; CHECK-LABEL: fcmp_ord_vf_v4f32:
5480; CHECK:       # %bb.0:
5481; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5482; CHECK-NEXT:    vfmv.v.f v9, fa0
5483; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5484; CHECK-NEXT:    vmfeq.vv v8, v8, v8
5485; CHECK-NEXT:    vmand.mm v0, v8, v9
5486; CHECK-NEXT:    ret
5487  %head = insertelement <4 x float> poison, float %b, i32 0
5488  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5489  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
5490  ret <4 x i1> %1
5491}
5492
5493define <4 x i1> @fcmp_ord_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5494; CHECK-LABEL: fcmp_ord_fv_v4f32:
5495; CHECK:       # %bb.0:
5496; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5497; CHECK-NEXT:    vfmv.v.f v9, fa0
5498; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5499; CHECK-NEXT:    vmfeq.vv v8, v8, v8
5500; CHECK-NEXT:    vmand.mm v0, v9, v8
5501; CHECK-NEXT:    ret
5502  %head = insertelement <4 x float> poison, float %b, i32 0
5503  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5504  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
5505  ret <4 x i1> %1
5506}
5507
5508define <4 x i1> @fcmp_ueq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5509; CHECK-LABEL: fcmp_ueq_vv_v4f32:
5510; CHECK:       # %bb.0:
5511; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5512; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5513; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5514; CHECK-NEXT:    vmand.mm v0, v11, v10
5515; CHECK-NEXT:    vmv.v.v v10, v0
5516; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
5517; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
5518; CHECK-NEXT:    vmnor.mm v0, v0, v10
5519; CHECK-NEXT:    ret
5520  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5521  ret <4 x i1> %1
5522}
5523
5524define <4 x i1> @fcmp_ueq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5525; CHECK-LABEL: fcmp_ueq_vf_v4f32:
5526; CHECK:       # %bb.0:
5527; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5528; CHECK-NEXT:    vfmv.v.f v9, fa0
5529; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5530; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5531; CHECK-NEXT:    vmand.mm v0, v10, v9
5532; CHECK-NEXT:    vmv.v.v v9, v0
5533; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
5534; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5535; CHECK-NEXT:    vmnor.mm v0, v0, v9
5536; CHECK-NEXT:    ret
5537  %head = insertelement <4 x float> poison, float %b, i32 0
5538  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5539  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5540  ret <4 x i1> %1
5541}
5542
5543define <4 x i1> @fcmp_ueq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5544; CHECK-LABEL: fcmp_ueq_fv_v4f32:
5545; CHECK:       # %bb.0:
5546; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5547; CHECK-NEXT:    vfmv.v.f v9, fa0
5548; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5549; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5550; CHECK-NEXT:    vmand.mm v0, v9, v10
5551; CHECK-NEXT:    vmv.v.v v9, v0
5552; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
5553; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5554; CHECK-NEXT:    vmnor.mm v0, v0, v9
5555; CHECK-NEXT:    ret
5556  %head = insertelement <4 x float> poison, float %b, i32 0
5557  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5558  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
5559  ret <4 x i1> %1
5560}
5561
5562define <4 x i1> @fcmp_ugt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5563; CHECK-LABEL: fcmp_ugt_vv_v4f32:
5564; CHECK:       # %bb.0:
5565; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5566; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5567; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5568; CHECK-NEXT:    vmand.mm v0, v11, v10
5569; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
5570; CHECK-NEXT:    vmnot.m v0, v0
5571; CHECK-NEXT:    ret
5572  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5573  ret <4 x i1> %1
5574}
5575
5576define <4 x i1> @fcmp_ugt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5577; CHECK-LABEL: fcmp_ugt_vf_v4f32:
5578; CHECK:       # %bb.0:
5579; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5580; CHECK-NEXT:    vfmv.v.f v9, fa0
5581; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5582; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5583; CHECK-NEXT:    vmand.mm v0, v10, v9
5584; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5585; CHECK-NEXT:    vmnot.m v0, v0
5586; CHECK-NEXT:    ret
5587  %head = insertelement <4 x float> poison, float %b, i32 0
5588  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5589  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5590  ret <4 x i1> %1
5591}
5592
5593define <4 x i1> @fcmp_ugt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5594; CHECK-LABEL: fcmp_ugt_fv_v4f32:
5595; CHECK:       # %bb.0:
5596; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5597; CHECK-NEXT:    vfmv.v.f v9, fa0
5598; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5599; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5600; CHECK-NEXT:    vmand.mm v0, v9, v10
5601; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5602; CHECK-NEXT:    vmnot.m v0, v0
5603; CHECK-NEXT:    ret
5604  %head = insertelement <4 x float> poison, float %b, i32 0
5605  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5606  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
5607  ret <4 x i1> %1
5608}
5609
5610define <4 x i1> @fcmp_uge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5611; CHECK-LABEL: fcmp_uge_vv_v4f32:
5612; CHECK:       # %bb.0:
5613; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5614; CHECK-NEXT:    vmfeq.vv v10, v9, v9
5615; CHECK-NEXT:    vmfeq.vv v11, v8, v8
5616; CHECK-NEXT:    vmand.mm v0, v11, v10
5617; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
5618; CHECK-NEXT:    vmnot.m v0, v0
5619; CHECK-NEXT:    ret
5620  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
5621  ret <4 x i1> %1
5622}
5623
5624define <4 x i1> @fcmp_uge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5625; CHECK-LABEL: fcmp_uge_vf_v4f32:
5626; CHECK:       # %bb.0:
5627; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5628; CHECK-NEXT:    vfmv.v.f v9, fa0
5629; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5630; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5631; CHECK-NEXT:    vmand.mm v0, v10, v9
5632; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5633; CHECK-NEXT:    vmnot.m v0, v0
5634; CHECK-NEXT:    ret
5635  %head = insertelement <4 x float> poison, float %b, i32 0
5636  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5637  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
5638  ret <4 x i1> %1
5639}
5640
5641define <4 x i1> @fcmp_uge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5642; CHECK-LABEL: fcmp_uge_fv_v4f32:
5643; CHECK:       # %bb.0:
5644; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5645; CHECK-NEXT:    vfmv.v.f v9, fa0
5646; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5647; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5648; CHECK-NEXT:    vmand.mm v0, v9, v10
5649; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5650; CHECK-NEXT:    vmnot.m v0, v0
5651; CHECK-NEXT:    ret
5652  %head = insertelement <4 x float> poison, float %b, i32 0
5653  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5654  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
5655  ret <4 x i1> %1
5656}
5657
5658define <4 x i1> @fcmp_ult_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5659; CHECK-LABEL: fcmp_ult_vv_v4f32:
5660; CHECK:       # %bb.0:
5661; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5662; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5663; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5664; CHECK-NEXT:    vmand.mm v0, v11, v10
5665; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
5666; CHECK-NEXT:    vmnot.m v0, v0
5667; CHECK-NEXT:    ret
5668  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
5669  ret <4 x i1> %1
5670}
5671
5672define <4 x i1> @fcmp_ult_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5673; CHECK-LABEL: fcmp_ult_vf_v4f32:
5674; CHECK:       # %bb.0:
5675; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5676; CHECK-NEXT:    vfmv.v.f v9, fa0
5677; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5678; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5679; CHECK-NEXT:    vmand.mm v0, v9, v10
5680; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
5681; CHECK-NEXT:    vmnot.m v0, v0
5682; CHECK-NEXT:    ret
5683  %head = insertelement <4 x float> poison, float %b, i32 0
5684  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5685  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
5686  ret <4 x i1> %1
5687}
5688
5689define <4 x i1> @fcmp_ult_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5690; CHECK-LABEL: fcmp_ult_fv_v4f32:
5691; CHECK:       # %bb.0:
5692; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5693; CHECK-NEXT:    vfmv.v.f v9, fa0
5694; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5695; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5696; CHECK-NEXT:    vmand.mm v0, v10, v9
5697; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
5698; CHECK-NEXT:    vmnot.m v0, v0
5699; CHECK-NEXT:    ret
5700  %head = insertelement <4 x float> poison, float %b, i32 0
5701  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5702  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
5703  ret <4 x i1> %1
5704}
5705
5706define <4 x i1> @fcmp_ule_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5707; CHECK-LABEL: fcmp_ule_vv_v4f32:
5708; CHECK:       # %bb.0:
5709; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5710; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5711; CHECK-NEXT:    vmfeq.vv v11, v9, v9
5712; CHECK-NEXT:    vmand.mm v0, v11, v10
5713; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
5714; CHECK-NEXT:    vmnot.m v0, v0
5715; CHECK-NEXT:    ret
5716  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
5717  ret <4 x i1> %1
5718}
5719
5720define <4 x i1> @fcmp_ule_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5721; CHECK-LABEL: fcmp_ule_vf_v4f32:
5722; CHECK:       # %bb.0:
5723; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5724; CHECK-NEXT:    vfmv.v.f v9, fa0
5725; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5726; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5727; CHECK-NEXT:    vmand.mm v0, v9, v10
5728; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
5729; CHECK-NEXT:    vmnot.m v0, v0
5730; CHECK-NEXT:    ret
5731  %head = insertelement <4 x float> poison, float %b, i32 0
5732  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5733  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
5734  ret <4 x i1> %1
5735}
5736
5737define <4 x i1> @fcmp_ule_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5738; CHECK-LABEL: fcmp_ule_fv_v4f32:
5739; CHECK:       # %bb.0:
5740; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
5741; CHECK-NEXT:    vfmv.v.f v9, fa0
5742; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5743; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
5744; CHECK-NEXT:    vmand.mm v0, v10, v9
5745; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
5746; CHECK-NEXT:    vmnot.m v0, v0
5747; CHECK-NEXT:    ret
5748  %head = insertelement <4 x float> poison, float %b, i32 0
5749  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5750  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
5751  ret <4 x i1> %1
5752}
5753
5754define <4 x i1> @fcmp_une_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5755; CHECK-LABEL: fcmp_une_vv_v4f32:
5756; CHECK:       # %bb.0:
5757; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5758; CHECK-NEXT:    vmfne.vv v0, v8, v9
5759; CHECK-NEXT:    ret
5760  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
5761  ret <4 x i1> %1
5762}
5763
5764define <4 x i1> @fcmp_une_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5765; CHECK-LABEL: fcmp_une_vf_v4f32:
5766; CHECK:       # %bb.0:
5767; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5768; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5769; CHECK-NEXT:    ret
5770  %head = insertelement <4 x float> poison, float %b, i32 0
5771  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5772  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
5773  ret <4 x i1> %1
5774}
5775
5776define <4 x i1> @fcmp_une_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5777; CHECK-LABEL: fcmp_une_fv_v4f32:
5778; CHECK:       # %bb.0:
5779; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5780; CHECK-NEXT:    vmfne.vf v0, v8, fa0
5781; CHECK-NEXT:    ret
5782  %head = insertelement <4 x float> poison, float %b, i32 0
5783  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5784  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
5785  ret <4 x i1> %1
5786}
5787
5788define <4 x i1> @fcmp_uno_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp {
5789; CHECK-LABEL: fcmp_uno_vv_v4f32:
5790; CHECK:       # %bb.0:
5791; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5792; CHECK-NEXT:    vmfne.vv v9, v9, v9
5793; CHECK-NEXT:    vmfne.vv v8, v8, v8
5794; CHECK-NEXT:    vmor.mm v0, v8, v9
5795; CHECK-NEXT:    ret
5796  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
5797  ret <4 x i1> %1
5798}
5799
5800define <4 x i1> @fcmp_uno_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5801; CHECK-LABEL: fcmp_uno_vf_v4f32:
5802; CHECK:       # %bb.0:
5803; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5804; CHECK-NEXT:    vfmv.v.f v9, fa0
5805; CHECK-NEXT:    vmfne.vf v9, v9, fa0
5806; CHECK-NEXT:    vmfne.vv v8, v8, v8
5807; CHECK-NEXT:    vmor.mm v0, v8, v9
5808; CHECK-NEXT:    ret
5809  %head = insertelement <4 x float> poison, float %b, i32 0
5810  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5811  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
5812  ret <4 x i1> %1
5813}
5814
5815define <4 x i1> @fcmp_uno_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp {
5816; CHECK-LABEL: fcmp_uno_fv_v4f32:
5817; CHECK:       # %bb.0:
5818; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
5819; CHECK-NEXT:    vfmv.v.f v9, fa0
5820; CHECK-NEXT:    vmfne.vf v9, v9, fa0
5821; CHECK-NEXT:    vmfne.vv v8, v8, v8
5822; CHECK-NEXT:    vmor.mm v0, v9, v8
5823; CHECK-NEXT:    ret
5824  %head = insertelement <4 x float> poison, float %b, i32 0
5825  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
5826  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
5827  ret <4 x i1> %1
5828}
5829
5830declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float>, <8 x float>, metadata, metadata)
5831define <8 x i1> @fcmp_oeq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5832; CHECK-LABEL: fcmp_oeq_vv_v8f32:
5833; CHECK:       # %bb.0:
5834; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5835; CHECK-NEXT:    vmfeq.vv v0, v8, v10
5836; CHECK-NEXT:    ret
5837  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5838  ret <8 x i1> %1
5839}
5840
5841define <8 x i1> @fcmp_oeq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5842; CHECK-LABEL: fcmp_oeq_vf_v8f32:
5843; CHECK:       # %bb.0:
5844; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5845; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5846; CHECK-NEXT:    ret
5847  %head = insertelement <8 x float> poison, float %b, i32 0
5848  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5849  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5850  ret <8 x i1> %1
5851}
5852
5853define <8 x i1> @fcmp_oeq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5854; CHECK-LABEL: fcmp_oeq_fv_v8f32:
5855; CHECK:       # %bb.0:
5856; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5857; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
5858; CHECK-NEXT:    ret
5859  %head = insertelement <8 x float> poison, float %b, i32 0
5860  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5861  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5862  ret <8 x i1> %1
5863}
5864
5865define <8 x i1> @fcmp_ogt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5866; CHECK-LABEL: fcmp_ogt_vv_v8f32:
5867; CHECK:       # %bb.0:
5868; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5869; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5870; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5871; CHECK-NEXT:    vmand.mm v12, v13, v12
5872; CHECK-NEXT:    vmv1r.v v0, v12
5873; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
5874; CHECK-NEXT:    vmv1r.v v0, v12
5875; CHECK-NEXT:    ret
5876  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5877  ret <8 x i1> %1
5878}
5879
5880define <8 x i1> @fcmp_ogt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5881; CHECK-LABEL: fcmp_ogt_vf_v8f32:
5882; CHECK:       # %bb.0:
5883; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5884; CHECK-NEXT:    vfmv.v.f v10, fa0
5885; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5886; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5887; CHECK-NEXT:    vmand.mm v10, v12, v10
5888; CHECK-NEXT:    vmv1r.v v0, v10
5889; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
5890; CHECK-NEXT:    vmv1r.v v0, v10
5891; CHECK-NEXT:    ret
5892  %head = insertelement <8 x float> poison, float %b, i32 0
5893  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5894  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5895  ret <8 x i1> %1
5896}
5897
5898define <8 x i1> @fcmp_ogt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5899; CHECK-LABEL: fcmp_ogt_fv_v8f32:
5900; CHECK:       # %bb.0:
5901; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5902; CHECK-NEXT:    vfmv.v.f v10, fa0
5903; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5904; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5905; CHECK-NEXT:    vmand.mm v10, v10, v12
5906; CHECK-NEXT:    vmv1r.v v0, v10
5907; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5908; CHECK-NEXT:    vmv1r.v v0, v10
5909; CHECK-NEXT:    ret
5910  %head = insertelement <8 x float> poison, float %b, i32 0
5911  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5912  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
5913  ret <8 x i1> %1
5914}
5915
5916define <8 x i1> @fcmp_oge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5917; CHECK-LABEL: fcmp_oge_vv_v8f32:
5918; CHECK:       # %bb.0:
5919; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5920; CHECK-NEXT:    vmfeq.vv v12, v8, v8
5921; CHECK-NEXT:    vmfeq.vv v13, v10, v10
5922; CHECK-NEXT:    vmand.mm v12, v13, v12
5923; CHECK-NEXT:    vmv1r.v v0, v12
5924; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
5925; CHECK-NEXT:    vmv1r.v v0, v12
5926; CHECK-NEXT:    ret
5927  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
5928  ret <8 x i1> %1
5929}
5930
5931define <8 x i1> @fcmp_oge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5932; CHECK-LABEL: fcmp_oge_vf_v8f32:
5933; CHECK:       # %bb.0:
5934; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5935; CHECK-NEXT:    vfmv.v.f v10, fa0
5936; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5937; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5938; CHECK-NEXT:    vmand.mm v10, v12, v10
5939; CHECK-NEXT:    vmv1r.v v0, v10
5940; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
5941; CHECK-NEXT:    vmv1r.v v0, v10
5942; CHECK-NEXT:    ret
5943  %head = insertelement <8 x float> poison, float %b, i32 0
5944  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5945  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
5946  ret <8 x i1> %1
5947}
5948
5949define <8 x i1> @fcmp_oge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5950; CHECK-LABEL: fcmp_oge_fv_v8f32:
5951; CHECK:       # %bb.0:
5952; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5953; CHECK-NEXT:    vfmv.v.f v10, fa0
5954; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5955; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5956; CHECK-NEXT:    vmand.mm v10, v10, v12
5957; CHECK-NEXT:    vmv1r.v v0, v10
5958; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
5959; CHECK-NEXT:    vmv1r.v v0, v10
5960; CHECK-NEXT:    ret
5961  %head = insertelement <8 x float> poison, float %b, i32 0
5962  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5963  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
5964  ret <8 x i1> %1
5965}
5966
5967define <8 x i1> @fcmp_olt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
5968; CHECK-LABEL: fcmp_olt_vv_v8f32:
5969; CHECK:       # %bb.0:
5970; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5971; CHECK-NEXT:    vmfeq.vv v12, v10, v10
5972; CHECK-NEXT:    vmfeq.vv v13, v8, v8
5973; CHECK-NEXT:    vmand.mm v12, v13, v12
5974; CHECK-NEXT:    vmv1r.v v0, v12
5975; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
5976; CHECK-NEXT:    vmv1r.v v0, v12
5977; CHECK-NEXT:    ret
5978  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
5979  ret <8 x i1> %1
5980}
5981
5982define <8 x i1> @fcmp_olt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
5983; CHECK-LABEL: fcmp_olt_vf_v8f32:
5984; CHECK:       # %bb.0:
5985; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
5986; CHECK-NEXT:    vfmv.v.f v10, fa0
5987; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
5988; CHECK-NEXT:    vmfeq.vv v10, v8, v8
5989; CHECK-NEXT:    vmand.mm v10, v10, v12
5990; CHECK-NEXT:    vmv1r.v v0, v10
5991; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
5992; CHECK-NEXT:    vmv1r.v v0, v10
5993; CHECK-NEXT:    ret
5994  %head = insertelement <8 x float> poison, float %b, i32 0
5995  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
5996  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
5997  ret <8 x i1> %1
5998}
5999
6000define <8 x i1> @fcmp_olt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6001; CHECK-LABEL: fcmp_olt_fv_v8f32:
6002; CHECK:       # %bb.0:
6003; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6004; CHECK-NEXT:    vfmv.v.f v10, fa0
6005; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6006; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6007; CHECK-NEXT:    vmand.mm v10, v12, v10
6008; CHECK-NEXT:    vmv1r.v v0, v10
6009; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
6010; CHECK-NEXT:    vmv1r.v v0, v10
6011; CHECK-NEXT:    ret
6012  %head = insertelement <8 x float> poison, float %b, i32 0
6013  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6014  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6015  ret <8 x i1> %1
6016}
6017
6018define <8 x i1> @fcmp_ole_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6019; CHECK-LABEL: fcmp_ole_vv_v8f32:
6020; CHECK:       # %bb.0:
6021; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6022; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6023; CHECK-NEXT:    vmfeq.vv v13, v8, v8
6024; CHECK-NEXT:    vmand.mm v12, v13, v12
6025; CHECK-NEXT:    vmv1r.v v0, v12
6026; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
6027; CHECK-NEXT:    vmv1r.v v0, v12
6028; CHECK-NEXT:    ret
6029  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6030  ret <8 x i1> %1
6031}
6032
6033define <8 x i1> @fcmp_ole_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6034; CHECK-LABEL: fcmp_ole_vf_v8f32:
6035; CHECK:       # %bb.0:
6036; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6037; CHECK-NEXT:    vfmv.v.f v10, fa0
6038; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6039; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6040; CHECK-NEXT:    vmand.mm v10, v10, v12
6041; CHECK-NEXT:    vmv1r.v v0, v10
6042; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
6043; CHECK-NEXT:    vmv1r.v v0, v10
6044; CHECK-NEXT:    ret
6045  %head = insertelement <8 x float> poison, float %b, i32 0
6046  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6047  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6048  ret <8 x i1> %1
6049}
6050
6051define <8 x i1> @fcmp_ole_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6052; CHECK-LABEL: fcmp_ole_fv_v8f32:
6053; CHECK:       # %bb.0:
6054; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6055; CHECK-NEXT:    vfmv.v.f v10, fa0
6056; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6057; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6058; CHECK-NEXT:    vmand.mm v10, v12, v10
6059; CHECK-NEXT:    vmv1r.v v0, v10
6060; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
6061; CHECK-NEXT:    vmv1r.v v0, v10
6062; CHECK-NEXT:    ret
6063  %head = insertelement <8 x float> poison, float %b, i32 0
6064  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6065  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6066  ret <8 x i1> %1
6067}
6068
6069define <8 x i1> @fcmp_one_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6070; CHECK-LABEL: fcmp_one_vv_v8f32:
6071; CHECK:       # %bb.0:
6072; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6073; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6074; CHECK-NEXT:    vmfeq.vv v13, v8, v8
6075; CHECK-NEXT:    vmand.mm v12, v13, v12
6076; CHECK-NEXT:    vmv1r.v v13, v12
6077; CHECK-NEXT:    vmv1r.v v0, v12
6078; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
6079; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
6080; CHECK-NEXT:    vmor.mm v0, v12, v13
6081; CHECK-NEXT:    ret
6082  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6083  ret <8 x i1> %1
6084}
6085
6086define <8 x i1> @fcmp_one_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6087; CHECK-LABEL: fcmp_one_vf_v8f32:
6088; CHECK:       # %bb.0:
6089; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6090; CHECK-NEXT:    vfmv.v.f v10, fa0
6091; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6092; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
6093; CHECK-NEXT:    vmand.mm v10, v12, v13
6094; CHECK-NEXT:    vmv1r.v v11, v10
6095; CHECK-NEXT:    vmv1r.v v0, v10
6096; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
6097; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
6098; CHECK-NEXT:    vmor.mm v0, v10, v11
6099; CHECK-NEXT:    ret
6100  %head = insertelement <8 x float> poison, float %b, i32 0
6101  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6102  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6103  ret <8 x i1> %1
6104}
6105
6106define <8 x i1> @fcmp_one_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6107; CHECK-LABEL: fcmp_one_fv_v8f32:
6108; CHECK:       # %bb.0:
6109; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6110; CHECK-NEXT:    vfmv.v.f v10, fa0
6111; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6112; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
6113; CHECK-NEXT:    vmand.mm v10, v13, v12
6114; CHECK-NEXT:    vmv1r.v v11, v10
6115; CHECK-NEXT:    vmv1r.v v0, v10
6116; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
6117; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
6118; CHECK-NEXT:    vmor.mm v0, v10, v11
6119; CHECK-NEXT:    ret
6120  %head = insertelement <8 x float> poison, float %b, i32 0
6121  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6122  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6123  ret <8 x i1> %1
6124}
6125
6126define <8 x i1> @fcmp_ord_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6127; CHECK-LABEL: fcmp_ord_vv_v8f32:
6128; CHECK:       # %bb.0:
6129; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6130; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6131; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6132; CHECK-NEXT:    vmand.mm v0, v10, v12
6133; CHECK-NEXT:    ret
6134  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6135  ret <8 x i1> %1
6136}
6137
6138define <8 x i1> @fcmp_ord_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6139; CHECK-LABEL: fcmp_ord_vf_v8f32:
6140; CHECK:       # %bb.0:
6141; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6142; CHECK-NEXT:    vfmv.v.f v10, fa0
6143; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6144; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6145; CHECK-NEXT:    vmand.mm v0, v10, v12
6146; CHECK-NEXT:    ret
6147  %head = insertelement <8 x float> poison, float %b, i32 0
6148  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6149  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6150  ret <8 x i1> %1
6151}
6152
6153define <8 x i1> @fcmp_ord_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6154; CHECK-LABEL: fcmp_ord_fv_v8f32:
6155; CHECK:       # %bb.0:
6156; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6157; CHECK-NEXT:    vfmv.v.f v10, fa0
6158; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6159; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6160; CHECK-NEXT:    vmand.mm v0, v12, v10
6161; CHECK-NEXT:    ret
6162  %head = insertelement <8 x float> poison, float %b, i32 0
6163  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6164  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6165  ret <8 x i1> %1
6166}
6167
6168define <8 x i1> @fcmp_ueq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6169; CHECK-LABEL: fcmp_ueq_vv_v8f32:
6170; CHECK:       # %bb.0:
6171; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6172; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6173; CHECK-NEXT:    vmfeq.vv v13, v8, v8
6174; CHECK-NEXT:    vmand.mm v12, v13, v12
6175; CHECK-NEXT:    vmv1r.v v13, v12
6176; CHECK-NEXT:    vmv1r.v v0, v12
6177; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
6178; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
6179; CHECK-NEXT:    vmnor.mm v0, v12, v13
6180; CHECK-NEXT:    ret
6181  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6182  ret <8 x i1> %1
6183}
6184
6185define <8 x i1> @fcmp_ueq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6186; CHECK-LABEL: fcmp_ueq_vf_v8f32:
6187; CHECK:       # %bb.0:
6188; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6189; CHECK-NEXT:    vfmv.v.f v10, fa0
6190; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6191; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
6192; CHECK-NEXT:    vmand.mm v10, v12, v13
6193; CHECK-NEXT:    vmv1r.v v11, v10
6194; CHECK-NEXT:    vmv1r.v v0, v10
6195; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
6196; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
6197; CHECK-NEXT:    vmnor.mm v0, v10, v11
6198; CHECK-NEXT:    ret
6199  %head = insertelement <8 x float> poison, float %b, i32 0
6200  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6201  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6202  ret <8 x i1> %1
6203}
6204
6205define <8 x i1> @fcmp_ueq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6206; CHECK-LABEL: fcmp_ueq_fv_v8f32:
6207; CHECK:       # %bb.0:
6208; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6209; CHECK-NEXT:    vfmv.v.f v10, fa0
6210; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6211; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
6212; CHECK-NEXT:    vmand.mm v10, v13, v12
6213; CHECK-NEXT:    vmv1r.v v11, v10
6214; CHECK-NEXT:    vmv1r.v v0, v10
6215; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
6216; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
6217; CHECK-NEXT:    vmnor.mm v0, v10, v11
6218; CHECK-NEXT:    ret
6219  %head = insertelement <8 x float> poison, float %b, i32 0
6220  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6221  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6222  ret <8 x i1> %1
6223}
6224
6225define <8 x i1> @fcmp_ugt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6226; CHECK-LABEL: fcmp_ugt_vv_v8f32:
6227; CHECK:       # %bb.0:
6228; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6229; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6230; CHECK-NEXT:    vmfeq.vv v13, v8, v8
6231; CHECK-NEXT:    vmand.mm v12, v13, v12
6232; CHECK-NEXT:    vmv1r.v v0, v12
6233; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
6234; CHECK-NEXT:    vmnot.m v0, v12
6235; CHECK-NEXT:    ret
6236  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6237  ret <8 x i1> %1
6238}
6239
6240define <8 x i1> @fcmp_ugt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6241; CHECK-LABEL: fcmp_ugt_vf_v8f32:
6242; CHECK:       # %bb.0:
6243; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6244; CHECK-NEXT:    vfmv.v.f v10, fa0
6245; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6246; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6247; CHECK-NEXT:    vmand.mm v10, v10, v12
6248; CHECK-NEXT:    vmv1r.v v0, v10
6249; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
6250; CHECK-NEXT:    vmnot.m v0, v10
6251; CHECK-NEXT:    ret
6252  %head = insertelement <8 x float> poison, float %b, i32 0
6253  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6254  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6255  ret <8 x i1> %1
6256}
6257
6258define <8 x i1> @fcmp_ugt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6259; CHECK-LABEL: fcmp_ugt_fv_v8f32:
6260; CHECK:       # %bb.0:
6261; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6262; CHECK-NEXT:    vfmv.v.f v10, fa0
6263; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6264; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6265; CHECK-NEXT:    vmand.mm v10, v12, v10
6266; CHECK-NEXT:    vmv1r.v v0, v10
6267; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
6268; CHECK-NEXT:    vmnot.m v0, v10
6269; CHECK-NEXT:    ret
6270  %head = insertelement <8 x float> poison, float %b, i32 0
6271  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6272  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6273  ret <8 x i1> %1
6274}
6275
6276define <8 x i1> @fcmp_uge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6277; CHECK-LABEL: fcmp_uge_vv_v8f32:
6278; CHECK:       # %bb.0:
6279; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6280; CHECK-NEXT:    vmfeq.vv v12, v10, v10
6281; CHECK-NEXT:    vmfeq.vv v13, v8, v8
6282; CHECK-NEXT:    vmand.mm v12, v13, v12
6283; CHECK-NEXT:    vmv1r.v v0, v12
6284; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
6285; CHECK-NEXT:    vmnot.m v0, v12
6286; CHECK-NEXT:    ret
6287  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
6288  ret <8 x i1> %1
6289}
6290
6291define <8 x i1> @fcmp_uge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6292; CHECK-LABEL: fcmp_uge_vf_v8f32:
6293; CHECK:       # %bb.0:
6294; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6295; CHECK-NEXT:    vfmv.v.f v10, fa0
6296; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6297; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6298; CHECK-NEXT:    vmand.mm v10, v10, v12
6299; CHECK-NEXT:    vmv1r.v v0, v10
6300; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
6301; CHECK-NEXT:    vmnot.m v0, v10
6302; CHECK-NEXT:    ret
6303  %head = insertelement <8 x float> poison, float %b, i32 0
6304  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6305  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
6306  ret <8 x i1> %1
6307}
6308
6309define <8 x i1> @fcmp_uge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6310; CHECK-LABEL: fcmp_uge_fv_v8f32:
6311; CHECK:       # %bb.0:
6312; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6313; CHECK-NEXT:    vfmv.v.f v10, fa0
6314; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6315; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6316; CHECK-NEXT:    vmand.mm v10, v12, v10
6317; CHECK-NEXT:    vmv1r.v v0, v10
6318; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
6319; CHECK-NEXT:    vmnot.m v0, v10
6320; CHECK-NEXT:    ret
6321  %head = insertelement <8 x float> poison, float %b, i32 0
6322  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6323  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
6324  ret <8 x i1> %1
6325}
6326
6327define <8 x i1> @fcmp_ult_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6328; CHECK-LABEL: fcmp_ult_vv_v8f32:
6329; CHECK:       # %bb.0:
6330; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6331; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6332; CHECK-NEXT:    vmfeq.vv v13, v10, v10
6333; CHECK-NEXT:    vmand.mm v12, v13, v12
6334; CHECK-NEXT:    vmv1r.v v0, v12
6335; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
6336; CHECK-NEXT:    vmnot.m v0, v12
6337; CHECK-NEXT:    ret
6338  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
6339  ret <8 x i1> %1
6340}
6341
6342define <8 x i1> @fcmp_ult_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6343; CHECK-LABEL: fcmp_ult_vf_v8f32:
6344; CHECK:       # %bb.0:
6345; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6346; CHECK-NEXT:    vfmv.v.f v10, fa0
6347; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6348; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6349; CHECK-NEXT:    vmand.mm v10, v12, v10
6350; CHECK-NEXT:    vmv1r.v v0, v10
6351; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
6352; CHECK-NEXT:    vmnot.m v0, v10
6353; CHECK-NEXT:    ret
6354  %head = insertelement <8 x float> poison, float %b, i32 0
6355  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6356  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
6357  ret <8 x i1> %1
6358}
6359
6360define <8 x i1> @fcmp_ult_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6361; CHECK-LABEL: fcmp_ult_fv_v8f32:
6362; CHECK:       # %bb.0:
6363; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6364; CHECK-NEXT:    vfmv.v.f v10, fa0
6365; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6366; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6367; CHECK-NEXT:    vmand.mm v10, v10, v12
6368; CHECK-NEXT:    vmv1r.v v0, v10
6369; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
6370; CHECK-NEXT:    vmnot.m v0, v10
6371; CHECK-NEXT:    ret
6372  %head = insertelement <8 x float> poison, float %b, i32 0
6373  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6374  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
6375  ret <8 x i1> %1
6376}
6377
6378define <8 x i1> @fcmp_ule_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6379; CHECK-LABEL: fcmp_ule_vv_v8f32:
6380; CHECK:       # %bb.0:
6381; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6382; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6383; CHECK-NEXT:    vmfeq.vv v13, v10, v10
6384; CHECK-NEXT:    vmand.mm v12, v13, v12
6385; CHECK-NEXT:    vmv1r.v v0, v12
6386; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
6387; CHECK-NEXT:    vmnot.m v0, v12
6388; CHECK-NEXT:    ret
6389  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
6390  ret <8 x i1> %1
6391}
6392
6393define <8 x i1> @fcmp_ule_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6394; CHECK-LABEL: fcmp_ule_vf_v8f32:
6395; CHECK:       # %bb.0:
6396; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6397; CHECK-NEXT:    vfmv.v.f v10, fa0
6398; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6399; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6400; CHECK-NEXT:    vmand.mm v10, v12, v10
6401; CHECK-NEXT:    vmv1r.v v0, v10
6402; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
6403; CHECK-NEXT:    vmnot.m v0, v10
6404; CHECK-NEXT:    ret
6405  %head = insertelement <8 x float> poison, float %b, i32 0
6406  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6407  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
6408  ret <8 x i1> %1
6409}
6410
6411define <8 x i1> @fcmp_ule_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6412; CHECK-LABEL: fcmp_ule_fv_v8f32:
6413; CHECK:       # %bb.0:
6414; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6415; CHECK-NEXT:    vfmv.v.f v10, fa0
6416; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
6417; CHECK-NEXT:    vmfeq.vv v10, v8, v8
6418; CHECK-NEXT:    vmand.mm v10, v10, v12
6419; CHECK-NEXT:    vmv1r.v v0, v10
6420; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
6421; CHECK-NEXT:    vmnot.m v0, v10
6422; CHECK-NEXT:    ret
6423  %head = insertelement <8 x float> poison, float %b, i32 0
6424  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6425  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
6426  ret <8 x i1> %1
6427}
6428
6429define <8 x i1> @fcmp_une_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6430; CHECK-LABEL: fcmp_une_vv_v8f32:
6431; CHECK:       # %bb.0:
6432; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6433; CHECK-NEXT:    vmfne.vv v0, v8, v10
6434; CHECK-NEXT:    ret
6435  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
6436  ret <8 x i1> %1
6437}
6438
6439define <8 x i1> @fcmp_une_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6440; CHECK-LABEL: fcmp_une_vf_v8f32:
6441; CHECK:       # %bb.0:
6442; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6443; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6444; CHECK-NEXT:    ret
6445  %head = insertelement <8 x float> poison, float %b, i32 0
6446  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6447  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
6448  ret <8 x i1> %1
6449}
6450
6451define <8 x i1> @fcmp_une_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6452; CHECK-LABEL: fcmp_une_fv_v8f32:
6453; CHECK:       # %bb.0:
6454; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6455; CHECK-NEXT:    vmfne.vf v0, v8, fa0
6456; CHECK-NEXT:    ret
6457  %head = insertelement <8 x float> poison, float %b, i32 0
6458  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6459  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
6460  ret <8 x i1> %1
6461}
6462
6463define <8 x i1> @fcmp_uno_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp {
6464; CHECK-LABEL: fcmp_uno_vv_v8f32:
6465; CHECK:       # %bb.0:
6466; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6467; CHECK-NEXT:    vmfne.vv v12, v10, v10
6468; CHECK-NEXT:    vmfne.vv v10, v8, v8
6469; CHECK-NEXT:    vmor.mm v0, v10, v12
6470; CHECK-NEXT:    ret
6471  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
6472  ret <8 x i1> %1
6473}
6474
6475define <8 x i1> @fcmp_uno_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6476; CHECK-LABEL: fcmp_uno_vf_v8f32:
6477; CHECK:       # %bb.0:
6478; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6479; CHECK-NEXT:    vfmv.v.f v10, fa0
6480; CHECK-NEXT:    vmfne.vf v12, v10, fa0
6481; CHECK-NEXT:    vmfne.vv v10, v8, v8
6482; CHECK-NEXT:    vmor.mm v0, v10, v12
6483; CHECK-NEXT:    ret
6484  %head = insertelement <8 x float> poison, float %b, i32 0
6485  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6486  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
6487  ret <8 x i1> %1
6488}
6489
6490define <8 x i1> @fcmp_uno_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp {
6491; CHECK-LABEL: fcmp_uno_fv_v8f32:
6492; CHECK:       # %bb.0:
6493; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6494; CHECK-NEXT:    vfmv.v.f v10, fa0
6495; CHECK-NEXT:    vmfne.vf v12, v10, fa0
6496; CHECK-NEXT:    vmfne.vv v10, v8, v8
6497; CHECK-NEXT:    vmor.mm v0, v12, v10
6498; CHECK-NEXT:    ret
6499  %head = insertelement <8 x float> poison, float %b, i32 0
6500  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
6501  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
6502  ret <8 x i1> %1
6503}
6504
6505declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata)
6506define <16 x i1> @fcmp_oeq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6507; CHECK-LABEL: fcmp_oeq_vv_v16f32:
6508; CHECK:       # %bb.0:
6509; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6510; CHECK-NEXT:    vmfeq.vv v0, v8, v12
6511; CHECK-NEXT:    ret
6512  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6513  ret <16 x i1> %1
6514}
6515
6516define <16 x i1> @fcmp_oeq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6517; CHECK-LABEL: fcmp_oeq_vf_v16f32:
6518; CHECK:       # %bb.0:
6519; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6520; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6521; CHECK-NEXT:    ret
6522  %head = insertelement <16 x float> poison, float %b, i32 0
6523  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6524  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6525  ret <16 x i1> %1
6526}
6527
6528define <16 x i1> @fcmp_oeq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6529; CHECK-LABEL: fcmp_oeq_fv_v16f32:
6530; CHECK:       # %bb.0:
6531; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6532; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
6533; CHECK-NEXT:    ret
6534  %head = insertelement <16 x float> poison, float %b, i32 0
6535  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6536  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
6537  ret <16 x i1> %1
6538}
6539
6540define <16 x i1> @fcmp_ogt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6541; CHECK-LABEL: fcmp_ogt_vv_v16f32:
6542; CHECK:       # %bb.0:
6543; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6544; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6545; CHECK-NEXT:    vmfeq.vv v17, v12, v12
6546; CHECK-NEXT:    vmand.mm v16, v17, v16
6547; CHECK-NEXT:    vmv1r.v v0, v16
6548; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6549; CHECK-NEXT:    vmv1r.v v0, v16
6550; CHECK-NEXT:    ret
6551  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6552  ret <16 x i1> %1
6553}
6554
6555define <16 x i1> @fcmp_ogt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6556; CHECK-LABEL: fcmp_ogt_vf_v16f32:
6557; CHECK:       # %bb.0:
6558; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6559; CHECK-NEXT:    vfmv.v.f v12, fa0
6560; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6561; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6562; CHECK-NEXT:    vmand.mm v12, v16, v12
6563; CHECK-NEXT:    vmv1r.v v0, v12
6564; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6565; CHECK-NEXT:    vmv1r.v v0, v12
6566; CHECK-NEXT:    ret
6567  %head = insertelement <16 x float> poison, float %b, i32 0
6568  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6569  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6570  ret <16 x i1> %1
6571}
6572
6573define <16 x i1> @fcmp_ogt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6574; CHECK-LABEL: fcmp_ogt_fv_v16f32:
6575; CHECK:       # %bb.0:
6576; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6577; CHECK-NEXT:    vfmv.v.f v12, fa0
6578; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6579; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6580; CHECK-NEXT:    vmand.mm v12, v12, v16
6581; CHECK-NEXT:    vmv1r.v v0, v12
6582; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6583; CHECK-NEXT:    vmv1r.v v0, v12
6584; CHECK-NEXT:    ret
6585  %head = insertelement <16 x float> poison, float %b, i32 0
6586  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6587  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
6588  ret <16 x i1> %1
6589}
6590
6591define <16 x i1> @fcmp_oge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6592; CHECK-LABEL: fcmp_oge_vv_v16f32:
6593; CHECK:       # %bb.0:
6594; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6595; CHECK-NEXT:    vmfeq.vv v16, v8, v8
6596; CHECK-NEXT:    vmfeq.vv v17, v12, v12
6597; CHECK-NEXT:    vmand.mm v16, v17, v16
6598; CHECK-NEXT:    vmv1r.v v0, v16
6599; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
6600; CHECK-NEXT:    vmv1r.v v0, v16
6601; CHECK-NEXT:    ret
6602  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
6603  ret <16 x i1> %1
6604}
6605
6606define <16 x i1> @fcmp_oge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6607; CHECK-LABEL: fcmp_oge_vf_v16f32:
6608; CHECK:       # %bb.0:
6609; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6610; CHECK-NEXT:    vfmv.v.f v12, fa0
6611; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6612; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6613; CHECK-NEXT:    vmand.mm v12, v16, v12
6614; CHECK-NEXT:    vmv1r.v v0, v12
6615; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6616; CHECK-NEXT:    vmv1r.v v0, v12
6617; CHECK-NEXT:    ret
6618  %head = insertelement <16 x float> poison, float %b, i32 0
6619  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6620  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
6621  ret <16 x i1> %1
6622}
6623
6624define <16 x i1> @fcmp_oge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6625; CHECK-LABEL: fcmp_oge_fv_v16f32:
6626; CHECK:       # %bb.0:
6627; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6628; CHECK-NEXT:    vfmv.v.f v12, fa0
6629; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6630; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6631; CHECK-NEXT:    vmand.mm v12, v12, v16
6632; CHECK-NEXT:    vmv1r.v v0, v12
6633; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6634; CHECK-NEXT:    vmv1r.v v0, v12
6635; CHECK-NEXT:    ret
6636  %head = insertelement <16 x float> poison, float %b, i32 0
6637  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6638  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
6639  ret <16 x i1> %1
6640}
6641
6642define <16 x i1> @fcmp_olt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6643; CHECK-LABEL: fcmp_olt_vv_v16f32:
6644; CHECK:       # %bb.0:
6645; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6646; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6647; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6648; CHECK-NEXT:    vmand.mm v16, v17, v16
6649; CHECK-NEXT:    vmv1r.v v0, v16
6650; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
6651; CHECK-NEXT:    vmv1r.v v0, v16
6652; CHECK-NEXT:    ret
6653  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
6654  ret <16 x i1> %1
6655}
6656
6657define <16 x i1> @fcmp_olt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6658; CHECK-LABEL: fcmp_olt_vf_v16f32:
6659; CHECK:       # %bb.0:
6660; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6661; CHECK-NEXT:    vfmv.v.f v12, fa0
6662; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6663; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6664; CHECK-NEXT:    vmand.mm v12, v12, v16
6665; CHECK-NEXT:    vmv1r.v v0, v12
6666; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6667; CHECK-NEXT:    vmv1r.v v0, v12
6668; CHECK-NEXT:    ret
6669  %head = insertelement <16 x float> poison, float %b, i32 0
6670  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6671  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
6672  ret <16 x i1> %1
6673}
6674
6675define <16 x i1> @fcmp_olt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6676; CHECK-LABEL: fcmp_olt_fv_v16f32:
6677; CHECK:       # %bb.0:
6678; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6679; CHECK-NEXT:    vfmv.v.f v12, fa0
6680; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6681; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6682; CHECK-NEXT:    vmand.mm v12, v16, v12
6683; CHECK-NEXT:    vmv1r.v v0, v12
6684; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6685; CHECK-NEXT:    vmv1r.v v0, v12
6686; CHECK-NEXT:    ret
6687  %head = insertelement <16 x float> poison, float %b, i32 0
6688  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6689  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
6690  ret <16 x i1> %1
6691}
6692
6693define <16 x i1> @fcmp_ole_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6694; CHECK-LABEL: fcmp_ole_vv_v16f32:
6695; CHECK:       # %bb.0:
6696; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6697; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6698; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6699; CHECK-NEXT:    vmand.mm v16, v17, v16
6700; CHECK-NEXT:    vmv1r.v v0, v16
6701; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
6702; CHECK-NEXT:    vmv1r.v v0, v16
6703; CHECK-NEXT:    ret
6704  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
6705  ret <16 x i1> %1
6706}
6707
6708define <16 x i1> @fcmp_ole_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6709; CHECK-LABEL: fcmp_ole_vf_v16f32:
6710; CHECK:       # %bb.0:
6711; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6712; CHECK-NEXT:    vfmv.v.f v12, fa0
6713; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6714; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6715; CHECK-NEXT:    vmand.mm v12, v12, v16
6716; CHECK-NEXT:    vmv1r.v v0, v12
6717; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6718; CHECK-NEXT:    vmv1r.v v0, v12
6719; CHECK-NEXT:    ret
6720  %head = insertelement <16 x float> poison, float %b, i32 0
6721  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6722  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
6723  ret <16 x i1> %1
6724}
6725
6726define <16 x i1> @fcmp_ole_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6727; CHECK-LABEL: fcmp_ole_fv_v16f32:
6728; CHECK:       # %bb.0:
6729; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6730; CHECK-NEXT:    vfmv.v.f v12, fa0
6731; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6732; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6733; CHECK-NEXT:    vmand.mm v12, v16, v12
6734; CHECK-NEXT:    vmv1r.v v0, v12
6735; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6736; CHECK-NEXT:    vmv1r.v v0, v12
6737; CHECK-NEXT:    ret
6738  %head = insertelement <16 x float> poison, float %b, i32 0
6739  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6740  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
6741  ret <16 x i1> %1
6742}
6743
6744define <16 x i1> @fcmp_one_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6745; CHECK-LABEL: fcmp_one_vv_v16f32:
6746; CHECK:       # %bb.0:
6747; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6748; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6749; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6750; CHECK-NEXT:    vmand.mm v16, v17, v16
6751; CHECK-NEXT:    vmv1r.v v17, v16
6752; CHECK-NEXT:    vmv1r.v v0, v16
6753; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
6754; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6755; CHECK-NEXT:    vmor.mm v0, v16, v17
6756; CHECK-NEXT:    ret
6757  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
6758  ret <16 x i1> %1
6759}
6760
6761define <16 x i1> @fcmp_one_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6762; CHECK-LABEL: fcmp_one_vf_v16f32:
6763; CHECK:       # %bb.0:
6764; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6765; CHECK-NEXT:    vfmv.v.f v12, fa0
6766; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6767; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6768; CHECK-NEXT:    vmand.mm v12, v12, v16
6769; CHECK-NEXT:    vmv1r.v v13, v12
6770; CHECK-NEXT:    vmv1r.v v0, v12
6771; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
6772; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6773; CHECK-NEXT:    vmor.mm v0, v12, v13
6774; CHECK-NEXT:    ret
6775  %head = insertelement <16 x float> poison, float %b, i32 0
6776  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6777  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
6778  ret <16 x i1> %1
6779}
6780
6781define <16 x i1> @fcmp_one_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6782; CHECK-LABEL: fcmp_one_fv_v16f32:
6783; CHECK:       # %bb.0:
6784; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6785; CHECK-NEXT:    vfmv.v.f v12, fa0
6786; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6787; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6788; CHECK-NEXT:    vmand.mm v12, v16, v12
6789; CHECK-NEXT:    vmv1r.v v13, v12
6790; CHECK-NEXT:    vmv1r.v v0, v12
6791; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
6792; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6793; CHECK-NEXT:    vmor.mm v0, v12, v13
6794; CHECK-NEXT:    ret
6795  %head = insertelement <16 x float> poison, float %b, i32 0
6796  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6797  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
6798  ret <16 x i1> %1
6799}
6800
6801define <16 x i1> @fcmp_ord_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6802; CHECK-LABEL: fcmp_ord_vv_v16f32:
6803; CHECK:       # %bb.0:
6804; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6805; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6806; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6807; CHECK-NEXT:    vmand.mm v0, v12, v16
6808; CHECK-NEXT:    ret
6809  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
6810  ret <16 x i1> %1
6811}
6812
6813define <16 x i1> @fcmp_ord_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6814; CHECK-LABEL: fcmp_ord_vf_v16f32:
6815; CHECK:       # %bb.0:
6816; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6817; CHECK-NEXT:    vfmv.v.f v12, fa0
6818; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6819; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6820; CHECK-NEXT:    vmand.mm v0, v12, v16
6821; CHECK-NEXT:    ret
6822  %head = insertelement <16 x float> poison, float %b, i32 0
6823  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6824  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
6825  ret <16 x i1> %1
6826}
6827
6828define <16 x i1> @fcmp_ord_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6829; CHECK-LABEL: fcmp_ord_fv_v16f32:
6830; CHECK:       # %bb.0:
6831; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
6832; CHECK-NEXT:    vfmv.v.f v12, fa0
6833; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6834; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6835; CHECK-NEXT:    vmand.mm v0, v16, v12
6836; CHECK-NEXT:    ret
6837  %head = insertelement <16 x float> poison, float %b, i32 0
6838  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6839  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
6840  ret <16 x i1> %1
6841}
6842
6843define <16 x i1> @fcmp_ueq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6844; CHECK-LABEL: fcmp_ueq_vv_v16f32:
6845; CHECK:       # %bb.0:
6846; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6847; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6848; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6849; CHECK-NEXT:    vmand.mm v16, v17, v16
6850; CHECK-NEXT:    vmv1r.v v17, v16
6851; CHECK-NEXT:    vmv1r.v v0, v16
6852; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
6853; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
6854; CHECK-NEXT:    vmnor.mm v0, v16, v17
6855; CHECK-NEXT:    ret
6856  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6857  ret <16 x i1> %1
6858}
6859
6860define <16 x i1> @fcmp_ueq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6861; CHECK-LABEL: fcmp_ueq_vf_v16f32:
6862; CHECK:       # %bb.0:
6863; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6864; CHECK-NEXT:    vfmv.v.f v12, fa0
6865; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6866; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6867; CHECK-NEXT:    vmand.mm v12, v12, v16
6868; CHECK-NEXT:    vmv1r.v v13, v12
6869; CHECK-NEXT:    vmv1r.v v0, v12
6870; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
6871; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6872; CHECK-NEXT:    vmnor.mm v0, v12, v13
6873; CHECK-NEXT:    ret
6874  %head = insertelement <16 x float> poison, float %b, i32 0
6875  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6876  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6877  ret <16 x i1> %1
6878}
6879
6880define <16 x i1> @fcmp_ueq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6881; CHECK-LABEL: fcmp_ueq_fv_v16f32:
6882; CHECK:       # %bb.0:
6883; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6884; CHECK-NEXT:    vfmv.v.f v12, fa0
6885; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6886; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6887; CHECK-NEXT:    vmand.mm v12, v16, v12
6888; CHECK-NEXT:    vmv1r.v v13, v12
6889; CHECK-NEXT:    vmv1r.v v0, v12
6890; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
6891; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6892; CHECK-NEXT:    vmnor.mm v0, v12, v13
6893; CHECK-NEXT:    ret
6894  %head = insertelement <16 x float> poison, float %b, i32 0
6895  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6896  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
6897  ret <16 x i1> %1
6898}
6899
6900define <16 x i1> @fcmp_ugt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6901; CHECK-LABEL: fcmp_ugt_vv_v16f32:
6902; CHECK:       # %bb.0:
6903; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6904; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6905; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6906; CHECK-NEXT:    vmand.mm v16, v17, v16
6907; CHECK-NEXT:    vmv1r.v v0, v16
6908; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
6909; CHECK-NEXT:    vmnot.m v0, v16
6910; CHECK-NEXT:    ret
6911  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6912  ret <16 x i1> %1
6913}
6914
6915define <16 x i1> @fcmp_ugt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6916; CHECK-LABEL: fcmp_ugt_vf_v16f32:
6917; CHECK:       # %bb.0:
6918; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6919; CHECK-NEXT:    vfmv.v.f v12, fa0
6920; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6921; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6922; CHECK-NEXT:    vmand.mm v12, v12, v16
6923; CHECK-NEXT:    vmv1r.v v0, v12
6924; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
6925; CHECK-NEXT:    vmnot.m v0, v12
6926; CHECK-NEXT:    ret
6927  %head = insertelement <16 x float> poison, float %b, i32 0
6928  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6929  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6930  ret <16 x i1> %1
6931}
6932
6933define <16 x i1> @fcmp_ugt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6934; CHECK-LABEL: fcmp_ugt_fv_v16f32:
6935; CHECK:       # %bb.0:
6936; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6937; CHECK-NEXT:    vfmv.v.f v12, fa0
6938; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6939; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6940; CHECK-NEXT:    vmand.mm v12, v16, v12
6941; CHECK-NEXT:    vmv1r.v v0, v12
6942; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
6943; CHECK-NEXT:    vmnot.m v0, v12
6944; CHECK-NEXT:    ret
6945  %head = insertelement <16 x float> poison, float %b, i32 0
6946  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6947  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
6948  ret <16 x i1> %1
6949}
6950
6951define <16 x i1> @fcmp_uge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
6952; CHECK-LABEL: fcmp_uge_vv_v16f32:
6953; CHECK:       # %bb.0:
6954; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6955; CHECK-NEXT:    vmfeq.vv v16, v12, v12
6956; CHECK-NEXT:    vmfeq.vv v17, v8, v8
6957; CHECK-NEXT:    vmand.mm v16, v17, v16
6958; CHECK-NEXT:    vmv1r.v v0, v16
6959; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
6960; CHECK-NEXT:    vmnot.m v0, v16
6961; CHECK-NEXT:    ret
6962  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
6963  ret <16 x i1> %1
6964}
6965
6966define <16 x i1> @fcmp_uge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6967; CHECK-LABEL: fcmp_uge_vf_v16f32:
6968; CHECK:       # %bb.0:
6969; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6970; CHECK-NEXT:    vfmv.v.f v12, fa0
6971; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6972; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6973; CHECK-NEXT:    vmand.mm v12, v12, v16
6974; CHECK-NEXT:    vmv1r.v v0, v12
6975; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
6976; CHECK-NEXT:    vmnot.m v0, v12
6977; CHECK-NEXT:    ret
6978  %head = insertelement <16 x float> poison, float %b, i32 0
6979  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6980  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
6981  ret <16 x i1> %1
6982}
6983
6984define <16 x i1> @fcmp_uge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
6985; CHECK-LABEL: fcmp_uge_fv_v16f32:
6986; CHECK:       # %bb.0:
6987; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
6988; CHECK-NEXT:    vfmv.v.f v12, fa0
6989; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
6990; CHECK-NEXT:    vmfeq.vv v12, v8, v8
6991; CHECK-NEXT:    vmand.mm v12, v16, v12
6992; CHECK-NEXT:    vmv1r.v v0, v12
6993; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
6994; CHECK-NEXT:    vmnot.m v0, v12
6995; CHECK-NEXT:    ret
6996  %head = insertelement <16 x float> poison, float %b, i32 0
6997  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
6998  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
6999  ret <16 x i1> %1
7000}
7001
7002define <16 x i1> @fcmp_ult_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7003; CHECK-LABEL: fcmp_ult_vv_v16f32:
7004; CHECK:       # %bb.0:
7005; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7006; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7007; CHECK-NEXT:    vmfeq.vv v17, v12, v12
7008; CHECK-NEXT:    vmand.mm v16, v17, v16
7009; CHECK-NEXT:    vmv1r.v v0, v16
7010; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
7011; CHECK-NEXT:    vmnot.m v0, v16
7012; CHECK-NEXT:    ret
7013  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7014  ret <16 x i1> %1
7015}
7016
7017define <16 x i1> @fcmp_ult_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7018; CHECK-LABEL: fcmp_ult_vf_v16f32:
7019; CHECK:       # %bb.0:
7020; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7021; CHECK-NEXT:    vfmv.v.f v12, fa0
7022; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
7023; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7024; CHECK-NEXT:    vmand.mm v12, v16, v12
7025; CHECK-NEXT:    vmv1r.v v0, v12
7026; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
7027; CHECK-NEXT:    vmnot.m v0, v12
7028; CHECK-NEXT:    ret
7029  %head = insertelement <16 x float> poison, float %b, i32 0
7030  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7031  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7032  ret <16 x i1> %1
7033}
7034
7035define <16 x i1> @fcmp_ult_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7036; CHECK-LABEL: fcmp_ult_fv_v16f32:
7037; CHECK:       # %bb.0:
7038; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7039; CHECK-NEXT:    vfmv.v.f v12, fa0
7040; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
7041; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7042; CHECK-NEXT:    vmand.mm v12, v12, v16
7043; CHECK-NEXT:    vmv1r.v v0, v12
7044; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
7045; CHECK-NEXT:    vmnot.m v0, v12
7046; CHECK-NEXT:    ret
7047  %head = insertelement <16 x float> poison, float %b, i32 0
7048  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7049  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7050  ret <16 x i1> %1
7051}
7052
7053define <16 x i1> @fcmp_ule_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7054; CHECK-LABEL: fcmp_ule_vv_v16f32:
7055; CHECK:       # %bb.0:
7056; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7057; CHECK-NEXT:    vmfeq.vv v16, v8, v8
7058; CHECK-NEXT:    vmfeq.vv v17, v12, v12
7059; CHECK-NEXT:    vmand.mm v16, v17, v16
7060; CHECK-NEXT:    vmv1r.v v0, v16
7061; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
7062; CHECK-NEXT:    vmnot.m v0, v16
7063; CHECK-NEXT:    ret
7064  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7065  ret <16 x i1> %1
7066}
7067
7068define <16 x i1> @fcmp_ule_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7069; CHECK-LABEL: fcmp_ule_vf_v16f32:
7070; CHECK:       # %bb.0:
7071; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7072; CHECK-NEXT:    vfmv.v.f v12, fa0
7073; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
7074; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7075; CHECK-NEXT:    vmand.mm v12, v16, v12
7076; CHECK-NEXT:    vmv1r.v v0, v12
7077; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
7078; CHECK-NEXT:    vmnot.m v0, v12
7079; CHECK-NEXT:    ret
7080  %head = insertelement <16 x float> poison, float %b, i32 0
7081  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7082  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7083  ret <16 x i1> %1
7084}
7085
7086define <16 x i1> @fcmp_ule_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7087; CHECK-LABEL: fcmp_ule_fv_v16f32:
7088; CHECK:       # %bb.0:
7089; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
7090; CHECK-NEXT:    vfmv.v.f v12, fa0
7091; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
7092; CHECK-NEXT:    vmfeq.vv v12, v8, v8
7093; CHECK-NEXT:    vmand.mm v12, v12, v16
7094; CHECK-NEXT:    vmv1r.v v0, v12
7095; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
7096; CHECK-NEXT:    vmnot.m v0, v12
7097; CHECK-NEXT:    ret
7098  %head = insertelement <16 x float> poison, float %b, i32 0
7099  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7100  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7101  ret <16 x i1> %1
7102}
7103
7104define <16 x i1> @fcmp_une_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7105; CHECK-LABEL: fcmp_une_vv_v16f32:
7106; CHECK:       # %bb.0:
7107; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7108; CHECK-NEXT:    vmfne.vv v0, v8, v12
7109; CHECK-NEXT:    ret
7110  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7111  ret <16 x i1> %1
7112}
7113
7114define <16 x i1> @fcmp_une_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7115; CHECK-LABEL: fcmp_une_vf_v16f32:
7116; CHECK:       # %bb.0:
7117; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7118; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7119; CHECK-NEXT:    ret
7120  %head = insertelement <16 x float> poison, float %b, i32 0
7121  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7122  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7123  ret <16 x i1> %1
7124}
7125
7126define <16 x i1> @fcmp_une_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7127; CHECK-LABEL: fcmp_une_fv_v16f32:
7128; CHECK:       # %bb.0:
7129; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7130; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7131; CHECK-NEXT:    ret
7132  %head = insertelement <16 x float> poison, float %b, i32 0
7133  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7134  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7135  ret <16 x i1> %1
7136}
7137
7138define <16 x i1> @fcmp_uno_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp {
7139; CHECK-LABEL: fcmp_uno_vv_v16f32:
7140; CHECK:       # %bb.0:
7141; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7142; CHECK-NEXT:    vmfne.vv v16, v12, v12
7143; CHECK-NEXT:    vmfne.vv v12, v8, v8
7144; CHECK-NEXT:    vmor.mm v0, v12, v16
7145; CHECK-NEXT:    ret
7146  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7147  ret <16 x i1> %1
7148}
7149
7150define <16 x i1> @fcmp_uno_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7151; CHECK-LABEL: fcmp_uno_vf_v16f32:
7152; CHECK:       # %bb.0:
7153; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7154; CHECK-NEXT:    vfmv.v.f v12, fa0
7155; CHECK-NEXT:    vmfne.vf v16, v12, fa0
7156; CHECK-NEXT:    vmfne.vv v12, v8, v8
7157; CHECK-NEXT:    vmor.mm v0, v12, v16
7158; CHECK-NEXT:    ret
7159  %head = insertelement <16 x float> poison, float %b, i32 0
7160  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7161  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7162  ret <16 x i1> %1
7163}
7164
7165define <16 x i1> @fcmp_uno_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp {
7166; CHECK-LABEL: fcmp_uno_fv_v16f32:
7167; CHECK:       # %bb.0:
7168; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
7169; CHECK-NEXT:    vfmv.v.f v12, fa0
7170; CHECK-NEXT:    vmfne.vf v16, v12, fa0
7171; CHECK-NEXT:    vmfne.vv v12, v8, v8
7172; CHECK-NEXT:    vmor.mm v0, v16, v12
7173; CHECK-NEXT:    ret
7174  %head = insertelement <16 x float> poison, float %b, i32 0
7175  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
7176  %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7177  ret <16 x i1> %1
7178}
7179
7180declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double>, <1 x double>, metadata, metadata)
7181define <1 x i1> @fcmp_oeq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7182; CHECK-LABEL: fcmp_oeq_vv_v1f64:
7183; CHECK:       # %bb.0:
7184; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7185; CHECK-NEXT:    vmfeq.vv v0, v8, v9
7186; CHECK-NEXT:    ret
7187  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7188  ret <1 x i1> %1
7189}
7190
7191define <1 x i1> @fcmp_oeq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7192; CHECK-LABEL: fcmp_oeq_vf_v1f64:
7193; CHECK:       # %bb.0:
7194; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7195; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7196; CHECK-NEXT:    ret
7197  %head = insertelement <1 x double> poison, double %b, i32 0
7198  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7199  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7200  ret <1 x i1> %1
7201}
7202
7203define <1 x i1> @fcmp_oeq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7204; CHECK-LABEL: fcmp_oeq_fv_v1f64:
7205; CHECK:       # %bb.0:
7206; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7207; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7208; CHECK-NEXT:    ret
7209  %head = insertelement <1 x double> poison, double %b, i32 0
7210  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7211  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7212  ret <1 x i1> %1
7213}
7214
7215define <1 x i1> @fcmp_ogt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7216; CHECK-LABEL: fcmp_ogt_vv_v1f64:
7217; CHECK:       # %bb.0:
7218; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7219; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7220; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7221; CHECK-NEXT:    vmand.mm v0, v11, v10
7222; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7223; CHECK-NEXT:    ret
7224  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7225  ret <1 x i1> %1
7226}
7227
7228define <1 x i1> @fcmp_ogt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7229; CHECK-LABEL: fcmp_ogt_vf_v1f64:
7230; CHECK:       # %bb.0:
7231; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7232; CHECK-NEXT:    vfmv.s.f v9, fa0
7233; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7234; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7235; CHECK-NEXT:    vmand.mm v0, v9, v10
7236; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7237; CHECK-NEXT:    ret
7238  %head = insertelement <1 x double> poison, double %b, i32 0
7239  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7240  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7241  ret <1 x i1> %1
7242}
7243
7244define <1 x i1> @fcmp_ogt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7245; CHECK-LABEL: fcmp_ogt_fv_v1f64:
7246; CHECK:       # %bb.0:
7247; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7248; CHECK-NEXT:    vfmv.s.f v9, fa0
7249; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7250; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7251; CHECK-NEXT:    vmand.mm v0, v10, v9
7252; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7253; CHECK-NEXT:    ret
7254  %head = insertelement <1 x double> poison, double %b, i32 0
7255  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7256  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7257  ret <1 x i1> %1
7258}
7259
7260define <1 x i1> @fcmp_oge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7261; CHECK-LABEL: fcmp_oge_vv_v1f64:
7262; CHECK:       # %bb.0:
7263; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7264; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7265; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7266; CHECK-NEXT:    vmand.mm v0, v11, v10
7267; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
7268; CHECK-NEXT:    ret
7269  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7270  ret <1 x i1> %1
7271}
7272
7273define <1 x i1> @fcmp_oge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7274; CHECK-LABEL: fcmp_oge_vf_v1f64:
7275; CHECK:       # %bb.0:
7276; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7277; CHECK-NEXT:    vfmv.s.f v9, fa0
7278; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7279; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7280; CHECK-NEXT:    vmand.mm v0, v9, v10
7281; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7282; CHECK-NEXT:    ret
7283  %head = insertelement <1 x double> poison, double %b, i32 0
7284  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7285  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7286  ret <1 x i1> %1
7287}
7288
7289define <1 x i1> @fcmp_oge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7290; CHECK-LABEL: fcmp_oge_fv_v1f64:
7291; CHECK:       # %bb.0:
7292; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7293; CHECK-NEXT:    vfmv.s.f v9, fa0
7294; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7295; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7296; CHECK-NEXT:    vmand.mm v0, v10, v9
7297; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7298; CHECK-NEXT:    ret
7299  %head = insertelement <1 x double> poison, double %b, i32 0
7300  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7301  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7302  ret <1 x i1> %1
7303}
7304
7305define <1 x i1> @fcmp_olt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7306; CHECK-LABEL: fcmp_olt_vv_v1f64:
7307; CHECK:       # %bb.0:
7308; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7309; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7310; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7311; CHECK-NEXT:    vmand.mm v0, v11, v10
7312; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
7313; CHECK-NEXT:    ret
7314  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
7315  ret <1 x i1> %1
7316}
7317
7318define <1 x i1> @fcmp_olt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7319; CHECK-LABEL: fcmp_olt_vf_v1f64:
7320; CHECK:       # %bb.0:
7321; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7322; CHECK-NEXT:    vfmv.s.f v9, fa0
7323; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7324; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7325; CHECK-NEXT:    vmand.mm v0, v10, v9
7326; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7327; CHECK-NEXT:    ret
7328  %head = insertelement <1 x double> poison, double %b, i32 0
7329  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7330  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
7331  ret <1 x i1> %1
7332}
7333
7334define <1 x i1> @fcmp_olt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7335; CHECK-LABEL: fcmp_olt_fv_v1f64:
7336; CHECK:       # %bb.0:
7337; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7338; CHECK-NEXT:    vfmv.s.f v9, fa0
7339; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7340; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7341; CHECK-NEXT:    vmand.mm v0, v9, v10
7342; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7343; CHECK-NEXT:    ret
7344  %head = insertelement <1 x double> poison, double %b, i32 0
7345  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7346  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
7347  ret <1 x i1> %1
7348}
7349
7350define <1 x i1> @fcmp_ole_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7351; CHECK-LABEL: fcmp_ole_vv_v1f64:
7352; CHECK:       # %bb.0:
7353; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7354; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7355; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7356; CHECK-NEXT:    vmand.mm v0, v11, v10
7357; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
7358; CHECK-NEXT:    ret
7359  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
7360  ret <1 x i1> %1
7361}
7362
7363define <1 x i1> @fcmp_ole_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7364; CHECK-LABEL: fcmp_ole_vf_v1f64:
7365; CHECK:       # %bb.0:
7366; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7367; CHECK-NEXT:    vfmv.s.f v9, fa0
7368; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7369; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7370; CHECK-NEXT:    vmand.mm v0, v10, v9
7371; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7372; CHECK-NEXT:    ret
7373  %head = insertelement <1 x double> poison, double %b, i32 0
7374  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7375  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
7376  ret <1 x i1> %1
7377}
7378
7379define <1 x i1> @fcmp_ole_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7380; CHECK-LABEL: fcmp_ole_fv_v1f64:
7381; CHECK:       # %bb.0:
7382; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7383; CHECK-NEXT:    vfmv.s.f v9, fa0
7384; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7385; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7386; CHECK-NEXT:    vmand.mm v0, v9, v10
7387; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7388; CHECK-NEXT:    ret
7389  %head = insertelement <1 x double> poison, double %b, i32 0
7390  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7391  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
7392  ret <1 x i1> %1
7393}
7394
7395define <1 x i1> @fcmp_one_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7396; CHECK-LABEL: fcmp_one_vv_v1f64:
7397; CHECK:       # %bb.0:
7398; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7399; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7400; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7401; CHECK-NEXT:    vmand.mm v0, v11, v10
7402; CHECK-NEXT:    vmv.v.v v10, v0
7403; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
7404; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7405; CHECK-NEXT:    vmor.mm v0, v0, v10
7406; CHECK-NEXT:    ret
7407  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
7408  ret <1 x i1> %1
7409}
7410
7411define <1 x i1> @fcmp_one_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7412; CHECK-LABEL: fcmp_one_vf_v1f64:
7413; CHECK:       # %bb.0:
7414; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7415; CHECK-NEXT:    vfmv.s.f v9, fa0
7416; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7417; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7418; CHECK-NEXT:    vmand.mm v0, v10, v9
7419; CHECK-NEXT:    vmv.v.v v9, v0
7420; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
7421; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7422; CHECK-NEXT:    vmor.mm v0, v0, v9
7423; CHECK-NEXT:    ret
7424  %head = insertelement <1 x double> poison, double %b, i32 0
7425  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7426  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
7427  ret <1 x i1> %1
7428}
7429
7430define <1 x i1> @fcmp_one_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7431; CHECK-LABEL: fcmp_one_fv_v1f64:
7432; CHECK:       # %bb.0:
7433; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7434; CHECK-NEXT:    vfmv.s.f v9, fa0
7435; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7436; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7437; CHECK-NEXT:    vmand.mm v0, v9, v10
7438; CHECK-NEXT:    vmv.v.v v9, v0
7439; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
7440; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7441; CHECK-NEXT:    vmor.mm v0, v0, v9
7442; CHECK-NEXT:    ret
7443  %head = insertelement <1 x double> poison, double %b, i32 0
7444  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7445  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
7446  ret <1 x i1> %1
7447}
7448
7449define <1 x i1> @fcmp_ord_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7450; CHECK-LABEL: fcmp_ord_vv_v1f64:
7451; CHECK:       # %bb.0:
7452; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7453; CHECK-NEXT:    vmfeq.vv v9, v9, v9
7454; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7455; CHECK-NEXT:    vmand.mm v0, v8, v9
7456; CHECK-NEXT:    ret
7457  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
7458  ret <1 x i1> %1
7459}
7460
7461define <1 x i1> @fcmp_ord_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7462; CHECK-LABEL: fcmp_ord_vf_v1f64:
7463; CHECK:       # %bb.0:
7464; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7465; CHECK-NEXT:    vfmv.s.f v9, fa0
7466; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7467; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7468; CHECK-NEXT:    vmand.mm v0, v8, v9
7469; CHECK-NEXT:    ret
7470  %head = insertelement <1 x double> poison, double %b, i32 0
7471  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7472  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
7473  ret <1 x i1> %1
7474}
7475
7476define <1 x i1> @fcmp_ord_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7477; CHECK-LABEL: fcmp_ord_fv_v1f64:
7478; CHECK:       # %bb.0:
7479; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7480; CHECK-NEXT:    vfmv.s.f v9, fa0
7481; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7482; CHECK-NEXT:    vmfeq.vv v8, v8, v8
7483; CHECK-NEXT:    vmand.mm v0, v9, v8
7484; CHECK-NEXT:    ret
7485  %head = insertelement <1 x double> poison, double %b, i32 0
7486  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7487  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
7488  ret <1 x i1> %1
7489}
7490
7491define <1 x i1> @fcmp_ueq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7492; CHECK-LABEL: fcmp_ueq_vv_v1f64:
7493; CHECK:       # %bb.0:
7494; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7495; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7496; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7497; CHECK-NEXT:    vmand.mm v0, v11, v10
7498; CHECK-NEXT:    vmv.v.v v10, v0
7499; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
7500; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7501; CHECK-NEXT:    vmnor.mm v0, v0, v10
7502; CHECK-NEXT:    ret
7503  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7504  ret <1 x i1> %1
7505}
7506
7507define <1 x i1> @fcmp_ueq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7508; CHECK-LABEL: fcmp_ueq_vf_v1f64:
7509; CHECK:       # %bb.0:
7510; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7511; CHECK-NEXT:    vfmv.s.f v9, fa0
7512; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7513; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7514; CHECK-NEXT:    vmand.mm v0, v10, v9
7515; CHECK-NEXT:    vmv.v.v v9, v0
7516; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
7517; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7518; CHECK-NEXT:    vmnor.mm v0, v0, v9
7519; CHECK-NEXT:    ret
7520  %head = insertelement <1 x double> poison, double %b, i32 0
7521  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7522  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7523  ret <1 x i1> %1
7524}
7525
7526define <1 x i1> @fcmp_ueq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7527; CHECK-LABEL: fcmp_ueq_fv_v1f64:
7528; CHECK:       # %bb.0:
7529; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7530; CHECK-NEXT:    vfmv.s.f v9, fa0
7531; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7532; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7533; CHECK-NEXT:    vmand.mm v0, v9, v10
7534; CHECK-NEXT:    vmv.v.v v9, v0
7535; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
7536; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7537; CHECK-NEXT:    vmnor.mm v0, v0, v9
7538; CHECK-NEXT:    ret
7539  %head = insertelement <1 x double> poison, double %b, i32 0
7540  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7541  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
7542  ret <1 x i1> %1
7543}
7544
7545define <1 x i1> @fcmp_ugt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7546; CHECK-LABEL: fcmp_ugt_vv_v1f64:
7547; CHECK:       # %bb.0:
7548; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7549; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7550; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7551; CHECK-NEXT:    vmand.mm v0, v11, v10
7552; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
7553; CHECK-NEXT:    vmnot.m v0, v0
7554; CHECK-NEXT:    ret
7555  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7556  ret <1 x i1> %1
7557}
7558
7559define <1 x i1> @fcmp_ugt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7560; CHECK-LABEL: fcmp_ugt_vf_v1f64:
7561; CHECK:       # %bb.0:
7562; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7563; CHECK-NEXT:    vfmv.s.f v9, fa0
7564; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7565; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7566; CHECK-NEXT:    vmand.mm v0, v10, v9
7567; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7568; CHECK-NEXT:    vmnot.m v0, v0
7569; CHECK-NEXT:    ret
7570  %head = insertelement <1 x double> poison, double %b, i32 0
7571  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7572  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7573  ret <1 x i1> %1
7574}
7575
7576define <1 x i1> @fcmp_ugt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7577; CHECK-LABEL: fcmp_ugt_fv_v1f64:
7578; CHECK:       # %bb.0:
7579; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7580; CHECK-NEXT:    vfmv.s.f v9, fa0
7581; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7582; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7583; CHECK-NEXT:    vmand.mm v0, v9, v10
7584; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7585; CHECK-NEXT:    vmnot.m v0, v0
7586; CHECK-NEXT:    ret
7587  %head = insertelement <1 x double> poison, double %b, i32 0
7588  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7589  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
7590  ret <1 x i1> %1
7591}
7592
7593define <1 x i1> @fcmp_uge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7594; CHECK-LABEL: fcmp_uge_vv_v1f64:
7595; CHECK:       # %bb.0:
7596; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7597; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7598; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7599; CHECK-NEXT:    vmand.mm v0, v11, v10
7600; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
7601; CHECK-NEXT:    vmnot.m v0, v0
7602; CHECK-NEXT:    ret
7603  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
7604  ret <1 x i1> %1
7605}
7606
7607define <1 x i1> @fcmp_uge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7608; CHECK-LABEL: fcmp_uge_vf_v1f64:
7609; CHECK:       # %bb.0:
7610; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7611; CHECK-NEXT:    vfmv.s.f v9, fa0
7612; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7613; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7614; CHECK-NEXT:    vmand.mm v0, v10, v9
7615; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7616; CHECK-NEXT:    vmnot.m v0, v0
7617; CHECK-NEXT:    ret
7618  %head = insertelement <1 x double> poison, double %b, i32 0
7619  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7620  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
7621  ret <1 x i1> %1
7622}
7623
7624define <1 x i1> @fcmp_uge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7625; CHECK-LABEL: fcmp_uge_fv_v1f64:
7626; CHECK:       # %bb.0:
7627; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7628; CHECK-NEXT:    vfmv.s.f v9, fa0
7629; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7630; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7631; CHECK-NEXT:    vmand.mm v0, v9, v10
7632; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7633; CHECK-NEXT:    vmnot.m v0, v0
7634; CHECK-NEXT:    ret
7635  %head = insertelement <1 x double> poison, double %b, i32 0
7636  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7637  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
7638  ret <1 x i1> %1
7639}
7640
7641define <1 x i1> @fcmp_ult_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7642; CHECK-LABEL: fcmp_ult_vv_v1f64:
7643; CHECK:       # %bb.0:
7644; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7645; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7646; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7647; CHECK-NEXT:    vmand.mm v0, v11, v10
7648; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
7649; CHECK-NEXT:    vmnot.m v0, v0
7650; CHECK-NEXT:    ret
7651  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
7652  ret <1 x i1> %1
7653}
7654
7655define <1 x i1> @fcmp_ult_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7656; CHECK-LABEL: fcmp_ult_vf_v1f64:
7657; CHECK:       # %bb.0:
7658; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7659; CHECK-NEXT:    vfmv.s.f v9, fa0
7660; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7661; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7662; CHECK-NEXT:    vmand.mm v0, v9, v10
7663; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7664; CHECK-NEXT:    vmnot.m v0, v0
7665; CHECK-NEXT:    ret
7666  %head = insertelement <1 x double> poison, double %b, i32 0
7667  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7668  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
7669  ret <1 x i1> %1
7670}
7671
7672define <1 x i1> @fcmp_ult_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7673; CHECK-LABEL: fcmp_ult_fv_v1f64:
7674; CHECK:       # %bb.0:
7675; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7676; CHECK-NEXT:    vfmv.s.f v9, fa0
7677; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7678; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7679; CHECK-NEXT:    vmand.mm v0, v10, v9
7680; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7681; CHECK-NEXT:    vmnot.m v0, v0
7682; CHECK-NEXT:    ret
7683  %head = insertelement <1 x double> poison, double %b, i32 0
7684  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7685  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
7686  ret <1 x i1> %1
7687}
7688
7689define <1 x i1> @fcmp_ule_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7690; CHECK-LABEL: fcmp_ule_vv_v1f64:
7691; CHECK:       # %bb.0:
7692; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7693; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7694; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7695; CHECK-NEXT:    vmand.mm v0, v11, v10
7696; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7697; CHECK-NEXT:    vmnot.m v0, v0
7698; CHECK-NEXT:    ret
7699  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
7700  ret <1 x i1> %1
7701}
7702
7703define <1 x i1> @fcmp_ule_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7704; CHECK-LABEL: fcmp_ule_vf_v1f64:
7705; CHECK:       # %bb.0:
7706; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7707; CHECK-NEXT:    vfmv.s.f v9, fa0
7708; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7709; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7710; CHECK-NEXT:    vmand.mm v0, v9, v10
7711; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7712; CHECK-NEXT:    vmnot.m v0, v0
7713; CHECK-NEXT:    ret
7714  %head = insertelement <1 x double> poison, double %b, i32 0
7715  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7716  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
7717  ret <1 x i1> %1
7718}
7719
7720define <1 x i1> @fcmp_ule_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7721; CHECK-LABEL: fcmp_ule_fv_v1f64:
7722; CHECK:       # %bb.0:
7723; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
7724; CHECK-NEXT:    vfmv.s.f v9, fa0
7725; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7726; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7727; CHECK-NEXT:    vmand.mm v0, v10, v9
7728; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7729; CHECK-NEXT:    vmnot.m v0, v0
7730; CHECK-NEXT:    ret
7731  %head = insertelement <1 x double> poison, double %b, i32 0
7732  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7733  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
7734  ret <1 x i1> %1
7735}
7736
7737define <1 x i1> @fcmp_une_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7738; CHECK-LABEL: fcmp_une_vv_v1f64:
7739; CHECK:       # %bb.0:
7740; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7741; CHECK-NEXT:    vmfne.vv v0, v8, v9
7742; CHECK-NEXT:    ret
7743  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
7744  ret <1 x i1> %1
7745}
7746
7747define <1 x i1> @fcmp_une_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7748; CHECK-LABEL: fcmp_une_vf_v1f64:
7749; CHECK:       # %bb.0:
7750; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7751; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7752; CHECK-NEXT:    ret
7753  %head = insertelement <1 x double> poison, double %b, i32 0
7754  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7755  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
7756  ret <1 x i1> %1
7757}
7758
7759define <1 x i1> @fcmp_une_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7760; CHECK-LABEL: fcmp_une_fv_v1f64:
7761; CHECK:       # %bb.0:
7762; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7763; CHECK-NEXT:    vmfne.vf v0, v8, fa0
7764; CHECK-NEXT:    ret
7765  %head = insertelement <1 x double> poison, double %b, i32 0
7766  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7767  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
7768  ret <1 x i1> %1
7769}
7770
7771define <1 x i1> @fcmp_uno_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp {
7772; CHECK-LABEL: fcmp_uno_vv_v1f64:
7773; CHECK:       # %bb.0:
7774; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7775; CHECK-NEXT:    vmfne.vv v9, v9, v9
7776; CHECK-NEXT:    vmfne.vv v8, v8, v8
7777; CHECK-NEXT:    vmor.mm v0, v8, v9
7778; CHECK-NEXT:    ret
7779  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
7780  ret <1 x i1> %1
7781}
7782
7783define <1 x i1> @fcmp_uno_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7784; CHECK-LABEL: fcmp_uno_vf_v1f64:
7785; CHECK:       # %bb.0:
7786; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7787; CHECK-NEXT:    vfmv.s.f v9, fa0
7788; CHECK-NEXT:    vmfne.vf v9, v9, fa0
7789; CHECK-NEXT:    vmfne.vv v8, v8, v8
7790; CHECK-NEXT:    vmor.mm v0, v8, v9
7791; CHECK-NEXT:    ret
7792  %head = insertelement <1 x double> poison, double %b, i32 0
7793  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7794  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
7795  ret <1 x i1> %1
7796}
7797
7798define <1 x i1> @fcmp_uno_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp {
7799; CHECK-LABEL: fcmp_uno_fv_v1f64:
7800; CHECK:       # %bb.0:
7801; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
7802; CHECK-NEXT:    vfmv.s.f v9, fa0
7803; CHECK-NEXT:    vmfne.vf v9, v9, fa0
7804; CHECK-NEXT:    vmfne.vv v8, v8, v8
7805; CHECK-NEXT:    vmor.mm v0, v9, v8
7806; CHECK-NEXT:    ret
7807  %head = insertelement <1 x double> poison, double %b, i32 0
7808  %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
7809  %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
7810  ret <1 x i1> %1
7811}
7812
7813declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7814define <2 x i1> @fcmp_oeq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7815; CHECK-LABEL: fcmp_oeq_vv_v2f64:
7816; CHECK:       # %bb.0:
7817; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7818; CHECK-NEXT:    vmfeq.vv v0, v8, v9
7819; CHECK-NEXT:    ret
7820  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7821  ret <2 x i1> %1
7822}
7823
7824define <2 x i1> @fcmp_oeq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7825; CHECK-LABEL: fcmp_oeq_vf_v2f64:
7826; CHECK:       # %bb.0:
7827; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7828; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7829; CHECK-NEXT:    ret
7830  %head = insertelement <2 x double> poison, double %b, i32 0
7831  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7832  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7833  ret <2 x i1> %1
7834}
7835
7836define <2 x i1> @fcmp_oeq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7837; CHECK-LABEL: fcmp_oeq_fv_v2f64:
7838; CHECK:       # %bb.0:
7839; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
7840; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
7841; CHECK-NEXT:    ret
7842  %head = insertelement <2 x double> poison, double %b, i32 0
7843  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7844  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
7845  ret <2 x i1> %1
7846}
7847
7848define <2 x i1> @fcmp_ogt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7849; CHECK-LABEL: fcmp_ogt_vv_v2f64:
7850; CHECK:       # %bb.0:
7851; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7852; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7853; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7854; CHECK-NEXT:    vmand.mm v0, v11, v10
7855; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
7856; CHECK-NEXT:    ret
7857  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7858  ret <2 x i1> %1
7859}
7860
7861define <2 x i1> @fcmp_ogt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7862; CHECK-LABEL: fcmp_ogt_vf_v2f64:
7863; CHECK:       # %bb.0:
7864; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7865; CHECK-NEXT:    vfmv.v.f v9, fa0
7866; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7867; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7868; CHECK-NEXT:    vmand.mm v0, v9, v10
7869; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7870; CHECK-NEXT:    ret
7871  %head = insertelement <2 x double> poison, double %b, i32 0
7872  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7873  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7874  ret <2 x i1> %1
7875}
7876
7877define <2 x i1> @fcmp_ogt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7878; CHECK-LABEL: fcmp_ogt_fv_v2f64:
7879; CHECK:       # %bb.0:
7880; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7881; CHECK-NEXT:    vfmv.v.f v9, fa0
7882; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7883; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7884; CHECK-NEXT:    vmand.mm v0, v10, v9
7885; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7886; CHECK-NEXT:    ret
7887  %head = insertelement <2 x double> poison, double %b, i32 0
7888  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7889  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
7890  ret <2 x i1> %1
7891}
7892
7893define <2 x i1> @fcmp_oge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7894; CHECK-LABEL: fcmp_oge_vv_v2f64:
7895; CHECK:       # %bb.0:
7896; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7897; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7898; CHECK-NEXT:    vmfeq.vv v11, v9, v9
7899; CHECK-NEXT:    vmand.mm v0, v11, v10
7900; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
7901; CHECK-NEXT:    ret
7902  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
7903  ret <2 x i1> %1
7904}
7905
7906define <2 x i1> @fcmp_oge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7907; CHECK-LABEL: fcmp_oge_vf_v2f64:
7908; CHECK:       # %bb.0:
7909; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7910; CHECK-NEXT:    vfmv.v.f v9, fa0
7911; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7912; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7913; CHECK-NEXT:    vmand.mm v0, v9, v10
7914; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
7915; CHECK-NEXT:    ret
7916  %head = insertelement <2 x double> poison, double %b, i32 0
7917  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7918  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
7919  ret <2 x i1> %1
7920}
7921
7922define <2 x i1> @fcmp_oge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7923; CHECK-LABEL: fcmp_oge_fv_v2f64:
7924; CHECK:       # %bb.0:
7925; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7926; CHECK-NEXT:    vfmv.v.f v9, fa0
7927; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7928; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7929; CHECK-NEXT:    vmand.mm v0, v10, v9
7930; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
7931; CHECK-NEXT:    ret
7932  %head = insertelement <2 x double> poison, double %b, i32 0
7933  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7934  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
7935  ret <2 x i1> %1
7936}
7937
7938define <2 x i1> @fcmp_olt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7939; CHECK-LABEL: fcmp_olt_vv_v2f64:
7940; CHECK:       # %bb.0:
7941; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7942; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7943; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7944; CHECK-NEXT:    vmand.mm v0, v11, v10
7945; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
7946; CHECK-NEXT:    ret
7947  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
7948  ret <2 x i1> %1
7949}
7950
7951define <2 x i1> @fcmp_olt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7952; CHECK-LABEL: fcmp_olt_vf_v2f64:
7953; CHECK:       # %bb.0:
7954; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7955; CHECK-NEXT:    vfmv.v.f v9, fa0
7956; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7957; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7958; CHECK-NEXT:    vmand.mm v0, v10, v9
7959; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
7960; CHECK-NEXT:    ret
7961  %head = insertelement <2 x double> poison, double %b, i32 0
7962  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7963  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
7964  ret <2 x i1> %1
7965}
7966
7967define <2 x i1> @fcmp_olt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7968; CHECK-LABEL: fcmp_olt_fv_v2f64:
7969; CHECK:       # %bb.0:
7970; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7971; CHECK-NEXT:    vfmv.v.f v9, fa0
7972; CHECK-NEXT:    vmfeq.vv v10, v8, v8
7973; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
7974; CHECK-NEXT:    vmand.mm v0, v9, v10
7975; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
7976; CHECK-NEXT:    ret
7977  %head = insertelement <2 x double> poison, double %b, i32 0
7978  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
7979  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
7980  ret <2 x i1> %1
7981}
7982
7983define <2 x i1> @fcmp_ole_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
7984; CHECK-LABEL: fcmp_ole_vv_v2f64:
7985; CHECK:       # %bb.0:
7986; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7987; CHECK-NEXT:    vmfeq.vv v10, v9, v9
7988; CHECK-NEXT:    vmfeq.vv v11, v8, v8
7989; CHECK-NEXT:    vmand.mm v0, v11, v10
7990; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
7991; CHECK-NEXT:    ret
7992  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
7993  ret <2 x i1> %1
7994}
7995
7996define <2 x i1> @fcmp_ole_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
7997; CHECK-LABEL: fcmp_ole_vf_v2f64:
7998; CHECK:       # %bb.0:
7999; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8000; CHECK-NEXT:    vfmv.v.f v9, fa0
8001; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8002; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8003; CHECK-NEXT:    vmand.mm v0, v10, v9
8004; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
8005; CHECK-NEXT:    ret
8006  %head = insertelement <2 x double> poison, double %b, i32 0
8007  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8008  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8009  ret <2 x i1> %1
8010}
8011
8012define <2 x i1> @fcmp_ole_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8013; CHECK-LABEL: fcmp_ole_fv_v2f64:
8014; CHECK:       # %bb.0:
8015; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8016; CHECK-NEXT:    vfmv.v.f v9, fa0
8017; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8018; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8019; CHECK-NEXT:    vmand.mm v0, v9, v10
8020; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
8021; CHECK-NEXT:    ret
8022  %head = insertelement <2 x double> poison, double %b, i32 0
8023  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8024  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8025  ret <2 x i1> %1
8026}
8027
8028define <2 x i1> @fcmp_one_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8029; CHECK-LABEL: fcmp_one_vv_v2f64:
8030; CHECK:       # %bb.0:
8031; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8032; CHECK-NEXT:    vmfeq.vv v10, v9, v9
8033; CHECK-NEXT:    vmfeq.vv v11, v8, v8
8034; CHECK-NEXT:    vmand.mm v0, v11, v10
8035; CHECK-NEXT:    vmv.v.v v10, v0
8036; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
8037; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
8038; CHECK-NEXT:    vmor.mm v0, v0, v10
8039; CHECK-NEXT:    ret
8040  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8041  ret <2 x i1> %1
8042}
8043
8044define <2 x i1> @fcmp_one_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8045; CHECK-LABEL: fcmp_one_vf_v2f64:
8046; CHECK:       # %bb.0:
8047; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8048; CHECK-NEXT:    vfmv.v.f v9, fa0
8049; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8050; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8051; CHECK-NEXT:    vmand.mm v0, v10, v9
8052; CHECK-NEXT:    vmv.v.v v9, v0
8053; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
8054; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
8055; CHECK-NEXT:    vmor.mm v0, v0, v9
8056; CHECK-NEXT:    ret
8057  %head = insertelement <2 x double> poison, double %b, i32 0
8058  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8059  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8060  ret <2 x i1> %1
8061}
8062
8063define <2 x i1> @fcmp_one_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8064; CHECK-LABEL: fcmp_one_fv_v2f64:
8065; CHECK:       # %bb.0:
8066; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8067; CHECK-NEXT:    vfmv.v.f v9, fa0
8068; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8069; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8070; CHECK-NEXT:    vmand.mm v0, v9, v10
8071; CHECK-NEXT:    vmv.v.v v9, v0
8072; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
8073; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
8074; CHECK-NEXT:    vmor.mm v0, v0, v9
8075; CHECK-NEXT:    ret
8076  %head = insertelement <2 x double> poison, double %b, i32 0
8077  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8078  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8079  ret <2 x i1> %1
8080}
8081
8082define <2 x i1> @fcmp_ord_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8083; CHECK-LABEL: fcmp_ord_vv_v2f64:
8084; CHECK:       # %bb.0:
8085; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8086; CHECK-NEXT:    vmfeq.vv v9, v9, v9
8087; CHECK-NEXT:    vmfeq.vv v8, v8, v8
8088; CHECK-NEXT:    vmand.mm v0, v8, v9
8089; CHECK-NEXT:    ret
8090  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8091  ret <2 x i1> %1
8092}
8093
8094define <2 x i1> @fcmp_ord_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8095; CHECK-LABEL: fcmp_ord_vf_v2f64:
8096; CHECK:       # %bb.0:
8097; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8098; CHECK-NEXT:    vfmv.v.f v9, fa0
8099; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8100; CHECK-NEXT:    vmfeq.vv v8, v8, v8
8101; CHECK-NEXT:    vmand.mm v0, v8, v9
8102; CHECK-NEXT:    ret
8103  %head = insertelement <2 x double> poison, double %b, i32 0
8104  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8105  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8106  ret <2 x i1> %1
8107}
8108
8109define <2 x i1> @fcmp_ord_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8110; CHECK-LABEL: fcmp_ord_fv_v2f64:
8111; CHECK:       # %bb.0:
8112; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8113; CHECK-NEXT:    vfmv.v.f v9, fa0
8114; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8115; CHECK-NEXT:    vmfeq.vv v8, v8, v8
8116; CHECK-NEXT:    vmand.mm v0, v9, v8
8117; CHECK-NEXT:    ret
8118  %head = insertelement <2 x double> poison, double %b, i32 0
8119  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8120  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8121  ret <2 x i1> %1
8122}
8123
8124define <2 x i1> @fcmp_ueq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8125; CHECK-LABEL: fcmp_ueq_vv_v2f64:
8126; CHECK:       # %bb.0:
8127; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8128; CHECK-NEXT:    vmfeq.vv v10, v9, v9
8129; CHECK-NEXT:    vmfeq.vv v11, v8, v8
8130; CHECK-NEXT:    vmand.mm v0, v11, v10
8131; CHECK-NEXT:    vmv.v.v v10, v0
8132; CHECK-NEXT:    vmflt.vv v10, v8, v9, v0.t
8133; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
8134; CHECK-NEXT:    vmnor.mm v0, v0, v10
8135; CHECK-NEXT:    ret
8136  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8137  ret <2 x i1> %1
8138}
8139
8140define <2 x i1> @fcmp_ueq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8141; CHECK-LABEL: fcmp_ueq_vf_v2f64:
8142; CHECK:       # %bb.0:
8143; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8144; CHECK-NEXT:    vfmv.v.f v9, fa0
8145; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8146; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8147; CHECK-NEXT:    vmand.mm v0, v10, v9
8148; CHECK-NEXT:    vmv.v.v v9, v0
8149; CHECK-NEXT:    vmflt.vf v9, v8, fa0, v0.t
8150; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
8151; CHECK-NEXT:    vmnor.mm v0, v0, v9
8152; CHECK-NEXT:    ret
8153  %head = insertelement <2 x double> poison, double %b, i32 0
8154  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8155  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8156  ret <2 x i1> %1
8157}
8158
8159define <2 x i1> @fcmp_ueq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8160; CHECK-LABEL: fcmp_ueq_fv_v2f64:
8161; CHECK:       # %bb.0:
8162; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8163; CHECK-NEXT:    vfmv.v.f v9, fa0
8164; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8165; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8166; CHECK-NEXT:    vmand.mm v0, v9, v10
8167; CHECK-NEXT:    vmv.v.v v9, v0
8168; CHECK-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
8169; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
8170; CHECK-NEXT:    vmnor.mm v0, v0, v9
8171; CHECK-NEXT:    ret
8172  %head = insertelement <2 x double> poison, double %b, i32 0
8173  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8174  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8175  ret <2 x i1> %1
8176}
8177
8178define <2 x i1> @fcmp_ugt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8179; CHECK-LABEL: fcmp_ugt_vv_v2f64:
8180; CHECK:       # %bb.0:
8181; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8182; CHECK-NEXT:    vmfeq.vv v10, v9, v9
8183; CHECK-NEXT:    vmfeq.vv v11, v8, v8
8184; CHECK-NEXT:    vmand.mm v0, v11, v10
8185; CHECK-NEXT:    vmfle.vv v0, v8, v9, v0.t
8186; CHECK-NEXT:    vmnot.m v0, v0
8187; CHECK-NEXT:    ret
8188  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8189  ret <2 x i1> %1
8190}
8191
8192define <2 x i1> @fcmp_ugt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8193; CHECK-LABEL: fcmp_ugt_vf_v2f64:
8194; CHECK:       # %bb.0:
8195; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8196; CHECK-NEXT:    vfmv.v.f v9, fa0
8197; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8198; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8199; CHECK-NEXT:    vmand.mm v0, v10, v9
8200; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
8201; CHECK-NEXT:    vmnot.m v0, v0
8202; CHECK-NEXT:    ret
8203  %head = insertelement <2 x double> poison, double %b, i32 0
8204  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8205  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8206  ret <2 x i1> %1
8207}
8208
8209define <2 x i1> @fcmp_ugt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8210; CHECK-LABEL: fcmp_ugt_fv_v2f64:
8211; CHECK:       # %bb.0:
8212; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8213; CHECK-NEXT:    vfmv.v.f v9, fa0
8214; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8215; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8216; CHECK-NEXT:    vmand.mm v0, v9, v10
8217; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
8218; CHECK-NEXT:    vmnot.m v0, v0
8219; CHECK-NEXT:    ret
8220  %head = insertelement <2 x double> poison, double %b, i32 0
8221  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8222  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8223  ret <2 x i1> %1
8224}
8225
8226define <2 x i1> @fcmp_uge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8227; CHECK-LABEL: fcmp_uge_vv_v2f64:
8228; CHECK:       # %bb.0:
8229; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8230; CHECK-NEXT:    vmfeq.vv v10, v9, v9
8231; CHECK-NEXT:    vmfeq.vv v11, v8, v8
8232; CHECK-NEXT:    vmand.mm v0, v11, v10
8233; CHECK-NEXT:    vmflt.vv v0, v8, v9, v0.t
8234; CHECK-NEXT:    vmnot.m v0, v0
8235; CHECK-NEXT:    ret
8236  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8237  ret <2 x i1> %1
8238}
8239
8240define <2 x i1> @fcmp_uge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8241; CHECK-LABEL: fcmp_uge_vf_v2f64:
8242; CHECK:       # %bb.0:
8243; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8244; CHECK-NEXT:    vfmv.v.f v9, fa0
8245; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8246; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8247; CHECK-NEXT:    vmand.mm v0, v10, v9
8248; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
8249; CHECK-NEXT:    vmnot.m v0, v0
8250; CHECK-NEXT:    ret
8251  %head = insertelement <2 x double> poison, double %b, i32 0
8252  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8253  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
8254  ret <2 x i1> %1
8255}
8256
8257define <2 x i1> @fcmp_uge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8258; CHECK-LABEL: fcmp_uge_fv_v2f64:
8259; CHECK:       # %bb.0:
8260; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8261; CHECK-NEXT:    vfmv.v.f v9, fa0
8262; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8263; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8264; CHECK-NEXT:    vmand.mm v0, v9, v10
8265; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
8266; CHECK-NEXT:    vmnot.m v0, v0
8267; CHECK-NEXT:    ret
8268  %head = insertelement <2 x double> poison, double %b, i32 0
8269  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8270  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
8271  ret <2 x i1> %1
8272}
8273
8274define <2 x i1> @fcmp_ult_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8275; CHECK-LABEL: fcmp_ult_vv_v2f64:
8276; CHECK:       # %bb.0:
8277; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8278; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8279; CHECK-NEXT:    vmfeq.vv v11, v9, v9
8280; CHECK-NEXT:    vmand.mm v0, v11, v10
8281; CHECK-NEXT:    vmfle.vv v0, v9, v8, v0.t
8282; CHECK-NEXT:    vmnot.m v0, v0
8283; CHECK-NEXT:    ret
8284  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
8285  ret <2 x i1> %1
8286}
8287
8288define <2 x i1> @fcmp_ult_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8289; CHECK-LABEL: fcmp_ult_vf_v2f64:
8290; CHECK:       # %bb.0:
8291; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8292; CHECK-NEXT:    vfmv.v.f v9, fa0
8293; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8294; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8295; CHECK-NEXT:    vmand.mm v0, v9, v10
8296; CHECK-NEXT:    vmfge.vf v0, v8, fa0, v0.t
8297; CHECK-NEXT:    vmnot.m v0, v0
8298; CHECK-NEXT:    ret
8299  %head = insertelement <2 x double> poison, double %b, i32 0
8300  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8301  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
8302  ret <2 x i1> %1
8303}
8304
8305define <2 x i1> @fcmp_ult_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8306; CHECK-LABEL: fcmp_ult_fv_v2f64:
8307; CHECK:       # %bb.0:
8308; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8309; CHECK-NEXT:    vfmv.v.f v9, fa0
8310; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8311; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8312; CHECK-NEXT:    vmand.mm v0, v10, v9
8313; CHECK-NEXT:    vmfle.vf v0, v8, fa0, v0.t
8314; CHECK-NEXT:    vmnot.m v0, v0
8315; CHECK-NEXT:    ret
8316  %head = insertelement <2 x double> poison, double %b, i32 0
8317  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8318  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
8319  ret <2 x i1> %1
8320}
8321
8322define <2 x i1> @fcmp_ule_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8323; CHECK-LABEL: fcmp_ule_vv_v2f64:
8324; CHECK:       # %bb.0:
8325; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8326; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8327; CHECK-NEXT:    vmfeq.vv v11, v9, v9
8328; CHECK-NEXT:    vmand.mm v0, v11, v10
8329; CHECK-NEXT:    vmflt.vv v0, v9, v8, v0.t
8330; CHECK-NEXT:    vmnot.m v0, v0
8331; CHECK-NEXT:    ret
8332  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
8333  ret <2 x i1> %1
8334}
8335
8336define <2 x i1> @fcmp_ule_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8337; CHECK-LABEL: fcmp_ule_vf_v2f64:
8338; CHECK:       # %bb.0:
8339; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8340; CHECK-NEXT:    vfmv.v.f v9, fa0
8341; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8342; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8343; CHECK-NEXT:    vmand.mm v0, v9, v10
8344; CHECK-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
8345; CHECK-NEXT:    vmnot.m v0, v0
8346; CHECK-NEXT:    ret
8347  %head = insertelement <2 x double> poison, double %b, i32 0
8348  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8349  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
8350  ret <2 x i1> %1
8351}
8352
8353define <2 x i1> @fcmp_ule_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8354; CHECK-LABEL: fcmp_ule_fv_v2f64:
8355; CHECK:       # %bb.0:
8356; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8357; CHECK-NEXT:    vfmv.v.f v9, fa0
8358; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8359; CHECK-NEXT:    vmfeq.vf v9, v9, fa0
8360; CHECK-NEXT:    vmand.mm v0, v10, v9
8361; CHECK-NEXT:    vmflt.vf v0, v8, fa0, v0.t
8362; CHECK-NEXT:    vmnot.m v0, v0
8363; CHECK-NEXT:    ret
8364  %head = insertelement <2 x double> poison, double %b, i32 0
8365  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8366  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
8367  ret <2 x i1> %1
8368}
8369
8370define <2 x i1> @fcmp_une_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8371; CHECK-LABEL: fcmp_une_vv_v2f64:
8372; CHECK:       # %bb.0:
8373; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8374; CHECK-NEXT:    vmfne.vv v0, v8, v9
8375; CHECK-NEXT:    ret
8376  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
8377  ret <2 x i1> %1
8378}
8379
8380define <2 x i1> @fcmp_une_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8381; CHECK-LABEL: fcmp_une_vf_v2f64:
8382; CHECK:       # %bb.0:
8383; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8384; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8385; CHECK-NEXT:    ret
8386  %head = insertelement <2 x double> poison, double %b, i32 0
8387  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8388  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
8389  ret <2 x i1> %1
8390}
8391
8392define <2 x i1> @fcmp_une_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8393; CHECK-LABEL: fcmp_une_fv_v2f64:
8394; CHECK:       # %bb.0:
8395; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8396; CHECK-NEXT:    vmfne.vf v0, v8, fa0
8397; CHECK-NEXT:    ret
8398  %head = insertelement <2 x double> poison, double %b, i32 0
8399  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8400  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
8401  ret <2 x i1> %1
8402}
8403
8404define <2 x i1> @fcmp_uno_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp {
8405; CHECK-LABEL: fcmp_uno_vv_v2f64:
8406; CHECK:       # %bb.0:
8407; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8408; CHECK-NEXT:    vmfne.vv v9, v9, v9
8409; CHECK-NEXT:    vmfne.vv v8, v8, v8
8410; CHECK-NEXT:    vmor.mm v0, v8, v9
8411; CHECK-NEXT:    ret
8412  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
8413  ret <2 x i1> %1
8414}
8415
8416define <2 x i1> @fcmp_uno_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8417; CHECK-LABEL: fcmp_uno_vf_v2f64:
8418; CHECK:       # %bb.0:
8419; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8420; CHECK-NEXT:    vfmv.v.f v9, fa0
8421; CHECK-NEXT:    vmfne.vf v9, v9, fa0
8422; CHECK-NEXT:    vmfne.vv v8, v8, v8
8423; CHECK-NEXT:    vmor.mm v0, v8, v9
8424; CHECK-NEXT:    ret
8425  %head = insertelement <2 x double> poison, double %b, i32 0
8426  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8427  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
8428  ret <2 x i1> %1
8429}
8430
8431define <2 x i1> @fcmp_uno_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp {
8432; CHECK-LABEL: fcmp_uno_fv_v2f64:
8433; CHECK:       # %bb.0:
8434; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
8435; CHECK-NEXT:    vfmv.v.f v9, fa0
8436; CHECK-NEXT:    vmfne.vf v9, v9, fa0
8437; CHECK-NEXT:    vmfne.vv v8, v8, v8
8438; CHECK-NEXT:    vmor.mm v0, v9, v8
8439; CHECK-NEXT:    ret
8440  %head = insertelement <2 x double> poison, double %b, i32 0
8441  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
8442  %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
8443  ret <2 x i1> %1
8444}
8445
8446declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8447define <4 x i1> @fcmp_oeq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8448; CHECK-LABEL: fcmp_oeq_vv_v4f64:
8449; CHECK:       # %bb.0:
8450; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8451; CHECK-NEXT:    vmfeq.vv v0, v8, v10
8452; CHECK-NEXT:    ret
8453  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8454  ret <4 x i1> %1
8455}
8456
8457define <4 x i1> @fcmp_oeq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8458; CHECK-LABEL: fcmp_oeq_vf_v4f64:
8459; CHECK:       # %bb.0:
8460; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8461; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8462; CHECK-NEXT:    ret
8463  %head = insertelement <4 x double> poison, double %b, i32 0
8464  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8465  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8466  ret <4 x i1> %1
8467}
8468
8469define <4 x i1> @fcmp_oeq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8470; CHECK-LABEL: fcmp_oeq_fv_v4f64:
8471; CHECK:       # %bb.0:
8472; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8473; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
8474; CHECK-NEXT:    ret
8475  %head = insertelement <4 x double> poison, double %b, i32 0
8476  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8477  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
8478  ret <4 x i1> %1
8479}
8480
8481define <4 x i1> @fcmp_ogt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8482; CHECK-LABEL: fcmp_ogt_vv_v4f64:
8483; CHECK:       # %bb.0:
8484; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8485; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8486; CHECK-NEXT:    vmfeq.vv v13, v10, v10
8487; CHECK-NEXT:    vmand.mm v12, v13, v12
8488; CHECK-NEXT:    vmv1r.v v0, v12
8489; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8490; CHECK-NEXT:    vmv1r.v v0, v12
8491; CHECK-NEXT:    ret
8492  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8493  ret <4 x i1> %1
8494}
8495
8496define <4 x i1> @fcmp_ogt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8497; CHECK-LABEL: fcmp_ogt_vf_v4f64:
8498; CHECK:       # %bb.0:
8499; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8500; CHECK-NEXT:    vfmv.v.f v10, fa0
8501; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8502; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8503; CHECK-NEXT:    vmand.mm v10, v12, v10
8504; CHECK-NEXT:    vmv1r.v v0, v10
8505; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8506; CHECK-NEXT:    vmv1r.v v0, v10
8507; CHECK-NEXT:    ret
8508  %head = insertelement <4 x double> poison, double %b, i32 0
8509  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8510  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8511  ret <4 x i1> %1
8512}
8513
8514define <4 x i1> @fcmp_ogt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8515; CHECK-LABEL: fcmp_ogt_fv_v4f64:
8516; CHECK:       # %bb.0:
8517; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8518; CHECK-NEXT:    vfmv.v.f v10, fa0
8519; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8520; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8521; CHECK-NEXT:    vmand.mm v10, v10, v12
8522; CHECK-NEXT:    vmv1r.v v0, v10
8523; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8524; CHECK-NEXT:    vmv1r.v v0, v10
8525; CHECK-NEXT:    ret
8526  %head = insertelement <4 x double> poison, double %b, i32 0
8527  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8528  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
8529  ret <4 x i1> %1
8530}
8531
8532define <4 x i1> @fcmp_oge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8533; CHECK-LABEL: fcmp_oge_vv_v4f64:
8534; CHECK:       # %bb.0:
8535; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8536; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8537; CHECK-NEXT:    vmfeq.vv v13, v10, v10
8538; CHECK-NEXT:    vmand.mm v12, v13, v12
8539; CHECK-NEXT:    vmv1r.v v0, v12
8540; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
8541; CHECK-NEXT:    vmv1r.v v0, v12
8542; CHECK-NEXT:    ret
8543  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
8544  ret <4 x i1> %1
8545}
8546
8547define <4 x i1> @fcmp_oge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8548; CHECK-LABEL: fcmp_oge_vf_v4f64:
8549; CHECK:       # %bb.0:
8550; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8551; CHECK-NEXT:    vfmv.v.f v10, fa0
8552; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8553; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8554; CHECK-NEXT:    vmand.mm v10, v12, v10
8555; CHECK-NEXT:    vmv1r.v v0, v10
8556; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8557; CHECK-NEXT:    vmv1r.v v0, v10
8558; CHECK-NEXT:    ret
8559  %head = insertelement <4 x double> poison, double %b, i32 0
8560  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8561  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
8562  ret <4 x i1> %1
8563}
8564
8565define <4 x i1> @fcmp_oge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8566; CHECK-LABEL: fcmp_oge_fv_v4f64:
8567; CHECK:       # %bb.0:
8568; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8569; CHECK-NEXT:    vfmv.v.f v10, fa0
8570; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8571; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8572; CHECK-NEXT:    vmand.mm v10, v10, v12
8573; CHECK-NEXT:    vmv1r.v v0, v10
8574; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8575; CHECK-NEXT:    vmv1r.v v0, v10
8576; CHECK-NEXT:    ret
8577  %head = insertelement <4 x double> poison, double %b, i32 0
8578  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8579  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
8580  ret <4 x i1> %1
8581}
8582
8583define <4 x i1> @fcmp_olt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8584; CHECK-LABEL: fcmp_olt_vv_v4f64:
8585; CHECK:       # %bb.0:
8586; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8587; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8588; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8589; CHECK-NEXT:    vmand.mm v12, v13, v12
8590; CHECK-NEXT:    vmv1r.v v0, v12
8591; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
8592; CHECK-NEXT:    vmv1r.v v0, v12
8593; CHECK-NEXT:    ret
8594  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
8595  ret <4 x i1> %1
8596}
8597
8598define <4 x i1> @fcmp_olt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8599; CHECK-LABEL: fcmp_olt_vf_v4f64:
8600; CHECK:       # %bb.0:
8601; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8602; CHECK-NEXT:    vfmv.v.f v10, fa0
8603; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8604; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8605; CHECK-NEXT:    vmand.mm v10, v10, v12
8606; CHECK-NEXT:    vmv1r.v v0, v10
8607; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8608; CHECK-NEXT:    vmv1r.v v0, v10
8609; CHECK-NEXT:    ret
8610  %head = insertelement <4 x double> poison, double %b, i32 0
8611  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8612  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
8613  ret <4 x i1> %1
8614}
8615
8616define <4 x i1> @fcmp_olt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8617; CHECK-LABEL: fcmp_olt_fv_v4f64:
8618; CHECK:       # %bb.0:
8619; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8620; CHECK-NEXT:    vfmv.v.f v10, fa0
8621; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8622; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8623; CHECK-NEXT:    vmand.mm v10, v12, v10
8624; CHECK-NEXT:    vmv1r.v v0, v10
8625; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8626; CHECK-NEXT:    vmv1r.v v0, v10
8627; CHECK-NEXT:    ret
8628  %head = insertelement <4 x double> poison, double %b, i32 0
8629  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8630  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
8631  ret <4 x i1> %1
8632}
8633
8634define <4 x i1> @fcmp_ole_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8635; CHECK-LABEL: fcmp_ole_vv_v4f64:
8636; CHECK:       # %bb.0:
8637; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8638; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8639; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8640; CHECK-NEXT:    vmand.mm v12, v13, v12
8641; CHECK-NEXT:    vmv1r.v v0, v12
8642; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
8643; CHECK-NEXT:    vmv1r.v v0, v12
8644; CHECK-NEXT:    ret
8645  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
8646  ret <4 x i1> %1
8647}
8648
8649define <4 x i1> @fcmp_ole_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8650; CHECK-LABEL: fcmp_ole_vf_v4f64:
8651; CHECK:       # %bb.0:
8652; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8653; CHECK-NEXT:    vfmv.v.f v10, fa0
8654; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8655; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8656; CHECK-NEXT:    vmand.mm v10, v10, v12
8657; CHECK-NEXT:    vmv1r.v v0, v10
8658; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8659; CHECK-NEXT:    vmv1r.v v0, v10
8660; CHECK-NEXT:    ret
8661  %head = insertelement <4 x double> poison, double %b, i32 0
8662  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8663  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
8664  ret <4 x i1> %1
8665}
8666
8667define <4 x i1> @fcmp_ole_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8668; CHECK-LABEL: fcmp_ole_fv_v4f64:
8669; CHECK:       # %bb.0:
8670; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8671; CHECK-NEXT:    vfmv.v.f v10, fa0
8672; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8673; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8674; CHECK-NEXT:    vmand.mm v10, v12, v10
8675; CHECK-NEXT:    vmv1r.v v0, v10
8676; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8677; CHECK-NEXT:    vmv1r.v v0, v10
8678; CHECK-NEXT:    ret
8679  %head = insertelement <4 x double> poison, double %b, i32 0
8680  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8681  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
8682  ret <4 x i1> %1
8683}
8684
8685define <4 x i1> @fcmp_one_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8686; CHECK-LABEL: fcmp_one_vv_v4f64:
8687; CHECK:       # %bb.0:
8688; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8689; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8690; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8691; CHECK-NEXT:    vmand.mm v12, v13, v12
8692; CHECK-NEXT:    vmv1r.v v13, v12
8693; CHECK-NEXT:    vmv1r.v v0, v12
8694; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
8695; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8696; CHECK-NEXT:    vmor.mm v0, v12, v13
8697; CHECK-NEXT:    ret
8698  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
8699  ret <4 x i1> %1
8700}
8701
8702define <4 x i1> @fcmp_one_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8703; CHECK-LABEL: fcmp_one_vf_v4f64:
8704; CHECK:       # %bb.0:
8705; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8706; CHECK-NEXT:    vfmv.v.f v10, fa0
8707; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8708; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8709; CHECK-NEXT:    vmand.mm v10, v12, v13
8710; CHECK-NEXT:    vmv1r.v v11, v10
8711; CHECK-NEXT:    vmv1r.v v0, v10
8712; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
8713; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8714; CHECK-NEXT:    vmor.mm v0, v10, v11
8715; CHECK-NEXT:    ret
8716  %head = insertelement <4 x double> poison, double %b, i32 0
8717  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8718  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
8719  ret <4 x i1> %1
8720}
8721
8722define <4 x i1> @fcmp_one_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8723; CHECK-LABEL: fcmp_one_fv_v4f64:
8724; CHECK:       # %bb.0:
8725; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8726; CHECK-NEXT:    vfmv.v.f v10, fa0
8727; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8728; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8729; CHECK-NEXT:    vmand.mm v10, v13, v12
8730; CHECK-NEXT:    vmv1r.v v11, v10
8731; CHECK-NEXT:    vmv1r.v v0, v10
8732; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
8733; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8734; CHECK-NEXT:    vmor.mm v0, v10, v11
8735; CHECK-NEXT:    ret
8736  %head = insertelement <4 x double> poison, double %b, i32 0
8737  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8738  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
8739  ret <4 x i1> %1
8740}
8741
8742define <4 x i1> @fcmp_ord_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8743; CHECK-LABEL: fcmp_ord_vv_v4f64:
8744; CHECK:       # %bb.0:
8745; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8746; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8747; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8748; CHECK-NEXT:    vmand.mm v0, v10, v12
8749; CHECK-NEXT:    ret
8750  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
8751  ret <4 x i1> %1
8752}
8753
8754define <4 x i1> @fcmp_ord_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8755; CHECK-LABEL: fcmp_ord_vf_v4f64:
8756; CHECK:       # %bb.0:
8757; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8758; CHECK-NEXT:    vfmv.v.f v10, fa0
8759; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8760; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8761; CHECK-NEXT:    vmand.mm v0, v10, v12
8762; CHECK-NEXT:    ret
8763  %head = insertelement <4 x double> poison, double %b, i32 0
8764  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8765  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
8766  ret <4 x i1> %1
8767}
8768
8769define <4 x i1> @fcmp_ord_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8770; CHECK-LABEL: fcmp_ord_fv_v4f64:
8771; CHECK:       # %bb.0:
8772; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
8773; CHECK-NEXT:    vfmv.v.f v10, fa0
8774; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8775; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8776; CHECK-NEXT:    vmand.mm v0, v12, v10
8777; CHECK-NEXT:    ret
8778  %head = insertelement <4 x double> poison, double %b, i32 0
8779  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8780  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
8781  ret <4 x i1> %1
8782}
8783
8784define <4 x i1> @fcmp_ueq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8785; CHECK-LABEL: fcmp_ueq_vv_v4f64:
8786; CHECK:       # %bb.0:
8787; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8788; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8789; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8790; CHECK-NEXT:    vmand.mm v12, v13, v12
8791; CHECK-NEXT:    vmv1r.v v13, v12
8792; CHECK-NEXT:    vmv1r.v v0, v12
8793; CHECK-NEXT:    vmflt.vv v13, v8, v10, v0.t
8794; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
8795; CHECK-NEXT:    vmnor.mm v0, v12, v13
8796; CHECK-NEXT:    ret
8797  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8798  ret <4 x i1> %1
8799}
8800
8801define <4 x i1> @fcmp_ueq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8802; CHECK-LABEL: fcmp_ueq_vf_v4f64:
8803; CHECK:       # %bb.0:
8804; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8805; CHECK-NEXT:    vfmv.v.f v10, fa0
8806; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8807; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8808; CHECK-NEXT:    vmand.mm v10, v12, v13
8809; CHECK-NEXT:    vmv1r.v v11, v10
8810; CHECK-NEXT:    vmv1r.v v0, v10
8811; CHECK-NEXT:    vmflt.vf v11, v8, fa0, v0.t
8812; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8813; CHECK-NEXT:    vmnor.mm v0, v10, v11
8814; CHECK-NEXT:    ret
8815  %head = insertelement <4 x double> poison, double %b, i32 0
8816  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8817  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8818  ret <4 x i1> %1
8819}
8820
8821define <4 x i1> @fcmp_ueq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8822; CHECK-LABEL: fcmp_ueq_fv_v4f64:
8823; CHECK:       # %bb.0:
8824; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8825; CHECK-NEXT:    vfmv.v.f v10, fa0
8826; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8827; CHECK-NEXT:    vmfeq.vf v13, v10, fa0
8828; CHECK-NEXT:    vmand.mm v10, v13, v12
8829; CHECK-NEXT:    vmv1r.v v11, v10
8830; CHECK-NEXT:    vmv1r.v v0, v10
8831; CHECK-NEXT:    vmfgt.vf v11, v8, fa0, v0.t
8832; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8833; CHECK-NEXT:    vmnor.mm v0, v10, v11
8834; CHECK-NEXT:    ret
8835  %head = insertelement <4 x double> poison, double %b, i32 0
8836  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8837  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
8838  ret <4 x i1> %1
8839}
8840
8841define <4 x i1> @fcmp_ugt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8842; CHECK-LABEL: fcmp_ugt_vv_v4f64:
8843; CHECK:       # %bb.0:
8844; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8845; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8846; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8847; CHECK-NEXT:    vmand.mm v12, v13, v12
8848; CHECK-NEXT:    vmv1r.v v0, v12
8849; CHECK-NEXT:    vmfle.vv v12, v8, v10, v0.t
8850; CHECK-NEXT:    vmnot.m v0, v12
8851; CHECK-NEXT:    ret
8852  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8853  ret <4 x i1> %1
8854}
8855
8856define <4 x i1> @fcmp_ugt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8857; CHECK-LABEL: fcmp_ugt_vf_v4f64:
8858; CHECK:       # %bb.0:
8859; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8860; CHECK-NEXT:    vfmv.v.f v10, fa0
8861; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8862; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8863; CHECK-NEXT:    vmand.mm v10, v10, v12
8864; CHECK-NEXT:    vmv1r.v v0, v10
8865; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8866; CHECK-NEXT:    vmnot.m v0, v10
8867; CHECK-NEXT:    ret
8868  %head = insertelement <4 x double> poison, double %b, i32 0
8869  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8870  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8871  ret <4 x i1> %1
8872}
8873
8874define <4 x i1> @fcmp_ugt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8875; CHECK-LABEL: fcmp_ugt_fv_v4f64:
8876; CHECK:       # %bb.0:
8877; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8878; CHECK-NEXT:    vfmv.v.f v10, fa0
8879; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8880; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8881; CHECK-NEXT:    vmand.mm v10, v12, v10
8882; CHECK-NEXT:    vmv1r.v v0, v10
8883; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8884; CHECK-NEXT:    vmnot.m v0, v10
8885; CHECK-NEXT:    ret
8886  %head = insertelement <4 x double> poison, double %b, i32 0
8887  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8888  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
8889  ret <4 x i1> %1
8890}
8891
8892define <4 x i1> @fcmp_uge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8893; CHECK-LABEL: fcmp_uge_vv_v4f64:
8894; CHECK:       # %bb.0:
8895; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8896; CHECK-NEXT:    vmfeq.vv v12, v10, v10
8897; CHECK-NEXT:    vmfeq.vv v13, v8, v8
8898; CHECK-NEXT:    vmand.mm v12, v13, v12
8899; CHECK-NEXT:    vmv1r.v v0, v12
8900; CHECK-NEXT:    vmflt.vv v12, v8, v10, v0.t
8901; CHECK-NEXT:    vmnot.m v0, v12
8902; CHECK-NEXT:    ret
8903  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
8904  ret <4 x i1> %1
8905}
8906
8907define <4 x i1> @fcmp_uge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8908; CHECK-LABEL: fcmp_uge_vf_v4f64:
8909; CHECK:       # %bb.0:
8910; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8911; CHECK-NEXT:    vfmv.v.f v10, fa0
8912; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8913; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8914; CHECK-NEXT:    vmand.mm v10, v10, v12
8915; CHECK-NEXT:    vmv1r.v v0, v10
8916; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
8917; CHECK-NEXT:    vmnot.m v0, v10
8918; CHECK-NEXT:    ret
8919  %head = insertelement <4 x double> poison, double %b, i32 0
8920  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8921  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
8922  ret <4 x i1> %1
8923}
8924
8925define <4 x i1> @fcmp_uge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8926; CHECK-LABEL: fcmp_uge_fv_v4f64:
8927; CHECK:       # %bb.0:
8928; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8929; CHECK-NEXT:    vfmv.v.f v10, fa0
8930; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8931; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8932; CHECK-NEXT:    vmand.mm v10, v12, v10
8933; CHECK-NEXT:    vmv1r.v v0, v10
8934; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
8935; CHECK-NEXT:    vmnot.m v0, v10
8936; CHECK-NEXT:    ret
8937  %head = insertelement <4 x double> poison, double %b, i32 0
8938  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8939  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
8940  ret <4 x i1> %1
8941}
8942
8943define <4 x i1> @fcmp_ult_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8944; CHECK-LABEL: fcmp_ult_vv_v4f64:
8945; CHECK:       # %bb.0:
8946; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8947; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8948; CHECK-NEXT:    vmfeq.vv v13, v10, v10
8949; CHECK-NEXT:    vmand.mm v12, v13, v12
8950; CHECK-NEXT:    vmv1r.v v0, v12
8951; CHECK-NEXT:    vmfle.vv v12, v10, v8, v0.t
8952; CHECK-NEXT:    vmnot.m v0, v12
8953; CHECK-NEXT:    ret
8954  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
8955  ret <4 x i1> %1
8956}
8957
8958define <4 x i1> @fcmp_ult_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8959; CHECK-LABEL: fcmp_ult_vf_v4f64:
8960; CHECK:       # %bb.0:
8961; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8962; CHECK-NEXT:    vfmv.v.f v10, fa0
8963; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8964; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8965; CHECK-NEXT:    vmand.mm v10, v12, v10
8966; CHECK-NEXT:    vmv1r.v v0, v10
8967; CHECK-NEXT:    vmfge.vf v10, v8, fa0, v0.t
8968; CHECK-NEXT:    vmnot.m v0, v10
8969; CHECK-NEXT:    ret
8970  %head = insertelement <4 x double> poison, double %b, i32 0
8971  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8972  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
8973  ret <4 x i1> %1
8974}
8975
8976define <4 x i1> @fcmp_ult_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
8977; CHECK-LABEL: fcmp_ult_fv_v4f64:
8978; CHECK:       # %bb.0:
8979; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8980; CHECK-NEXT:    vfmv.v.f v10, fa0
8981; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
8982; CHECK-NEXT:    vmfeq.vv v10, v8, v8
8983; CHECK-NEXT:    vmand.mm v10, v10, v12
8984; CHECK-NEXT:    vmv1r.v v0, v10
8985; CHECK-NEXT:    vmfle.vf v10, v8, fa0, v0.t
8986; CHECK-NEXT:    vmnot.m v0, v10
8987; CHECK-NEXT:    ret
8988  %head = insertelement <4 x double> poison, double %b, i32 0
8989  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
8990  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
8991  ret <4 x i1> %1
8992}
8993
8994define <4 x i1> @fcmp_ule_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
8995; CHECK-LABEL: fcmp_ule_vv_v4f64:
8996; CHECK:       # %bb.0:
8997; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
8998; CHECK-NEXT:    vmfeq.vv v12, v8, v8
8999; CHECK-NEXT:    vmfeq.vv v13, v10, v10
9000; CHECK-NEXT:    vmand.mm v12, v13, v12
9001; CHECK-NEXT:    vmv1r.v v0, v12
9002; CHECK-NEXT:    vmflt.vv v12, v10, v8, v0.t
9003; CHECK-NEXT:    vmnot.m v0, v12
9004; CHECK-NEXT:    ret
9005  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9006  ret <4 x i1> %1
9007}
9008
9009define <4 x i1> @fcmp_ule_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9010; CHECK-LABEL: fcmp_ule_vf_v4f64:
9011; CHECK:       # %bb.0:
9012; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
9013; CHECK-NEXT:    vfmv.v.f v10, fa0
9014; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
9015; CHECK-NEXT:    vmfeq.vv v10, v8, v8
9016; CHECK-NEXT:    vmand.mm v10, v12, v10
9017; CHECK-NEXT:    vmv1r.v v0, v10
9018; CHECK-NEXT:    vmfgt.vf v10, v8, fa0, v0.t
9019; CHECK-NEXT:    vmnot.m v0, v10
9020; CHECK-NEXT:    ret
9021  %head = insertelement <4 x double> poison, double %b, i32 0
9022  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9023  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9024  ret <4 x i1> %1
9025}
9026
9027define <4 x i1> @fcmp_ule_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9028; CHECK-LABEL: fcmp_ule_fv_v4f64:
9029; CHECK:       # %bb.0:
9030; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
9031; CHECK-NEXT:    vfmv.v.f v10, fa0
9032; CHECK-NEXT:    vmfeq.vf v12, v10, fa0
9033; CHECK-NEXT:    vmfeq.vv v10, v8, v8
9034; CHECK-NEXT:    vmand.mm v10, v10, v12
9035; CHECK-NEXT:    vmv1r.v v0, v10
9036; CHECK-NEXT:    vmflt.vf v10, v8, fa0, v0.t
9037; CHECK-NEXT:    vmnot.m v0, v10
9038; CHECK-NEXT:    ret
9039  %head = insertelement <4 x double> poison, double %b, i32 0
9040  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9041  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9042  ret <4 x i1> %1
9043}
9044
9045define <4 x i1> @fcmp_une_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
9046; CHECK-LABEL: fcmp_une_vv_v4f64:
9047; CHECK:       # %bb.0:
9048; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9049; CHECK-NEXT:    vmfne.vv v0, v8, v10
9050; CHECK-NEXT:    ret
9051  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9052  ret <4 x i1> %1
9053}
9054
9055define <4 x i1> @fcmp_une_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9056; CHECK-LABEL: fcmp_une_vf_v4f64:
9057; CHECK:       # %bb.0:
9058; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9059; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9060; CHECK-NEXT:    ret
9061  %head = insertelement <4 x double> poison, double %b, i32 0
9062  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9063  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9064  ret <4 x i1> %1
9065}
9066
9067define <4 x i1> @fcmp_une_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9068; CHECK-LABEL: fcmp_une_fv_v4f64:
9069; CHECK:       # %bb.0:
9070; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9071; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9072; CHECK-NEXT:    ret
9073  %head = insertelement <4 x double> poison, double %b, i32 0
9074  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9075  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9076  ret <4 x i1> %1
9077}
9078
9079define <4 x i1> @fcmp_uno_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp {
9080; CHECK-LABEL: fcmp_uno_vv_v4f64:
9081; CHECK:       # %bb.0:
9082; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9083; CHECK-NEXT:    vmfne.vv v12, v10, v10
9084; CHECK-NEXT:    vmfne.vv v10, v8, v8
9085; CHECK-NEXT:    vmor.mm v0, v10, v12
9086; CHECK-NEXT:    ret
9087  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9088  ret <4 x i1> %1
9089}
9090
9091define <4 x i1> @fcmp_uno_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9092; CHECK-LABEL: fcmp_uno_vf_v4f64:
9093; CHECK:       # %bb.0:
9094; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9095; CHECK-NEXT:    vfmv.v.f v10, fa0
9096; CHECK-NEXT:    vmfne.vf v12, v10, fa0
9097; CHECK-NEXT:    vmfne.vv v10, v8, v8
9098; CHECK-NEXT:    vmor.mm v0, v10, v12
9099; CHECK-NEXT:    ret
9100  %head = insertelement <4 x double> poison, double %b, i32 0
9101  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9102  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9103  ret <4 x i1> %1
9104}
9105
9106define <4 x i1> @fcmp_uno_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp {
9107; CHECK-LABEL: fcmp_uno_fv_v4f64:
9108; CHECK:       # %bb.0:
9109; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9110; CHECK-NEXT:    vfmv.v.f v10, fa0
9111; CHECK-NEXT:    vmfne.vf v12, v10, fa0
9112; CHECK-NEXT:    vmfne.vv v10, v8, v8
9113; CHECK-NEXT:    vmor.mm v0, v12, v10
9114; CHECK-NEXT:    ret
9115  %head = insertelement <4 x double> poison, double %b, i32 0
9116  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
9117  %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
9118  ret <4 x i1> %1
9119}
9120
9121declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata)
9122define <8 x i1> @fcmp_oeq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9123; CHECK-LABEL: fcmp_oeq_vv_v8f64:
9124; CHECK:       # %bb.0:
9125; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9126; CHECK-NEXT:    vmfeq.vv v0, v8, v12
9127; CHECK-NEXT:    ret
9128  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9129  ret <8 x i1> %1
9130}
9131
9132define <8 x i1> @fcmp_oeq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9133; CHECK-LABEL: fcmp_oeq_vf_v8f64:
9134; CHECK:       # %bb.0:
9135; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9136; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9137; CHECK-NEXT:    ret
9138  %head = insertelement <8 x double> poison, double %b, i32 0
9139  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9140  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9141  ret <8 x i1> %1
9142}
9143
9144define <8 x i1> @fcmp_oeq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9145; CHECK-LABEL: fcmp_oeq_fv_v8f64:
9146; CHECK:       # %bb.0:
9147; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9148; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
9149; CHECK-NEXT:    ret
9150  %head = insertelement <8 x double> poison, double %b, i32 0
9151  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9152  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp
9153  ret <8 x i1> %1
9154}
9155
9156define <8 x i1> @fcmp_ogt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9157; CHECK-LABEL: fcmp_ogt_vv_v8f64:
9158; CHECK:       # %bb.0:
9159; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9160; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9161; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9162; CHECK-NEXT:    vmand.mm v16, v17, v16
9163; CHECK-NEXT:    vmv1r.v v0, v16
9164; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
9165; CHECK-NEXT:    vmv1r.v v0, v16
9166; CHECK-NEXT:    ret
9167  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9168  ret <8 x i1> %1
9169}
9170
9171define <8 x i1> @fcmp_ogt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9172; CHECK-LABEL: fcmp_ogt_vf_v8f64:
9173; CHECK:       # %bb.0:
9174; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9175; CHECK-NEXT:    vfmv.v.f v12, fa0
9176; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9177; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9178; CHECK-NEXT:    vmand.mm v12, v16, v12
9179; CHECK-NEXT:    vmv1r.v v0, v12
9180; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9181; CHECK-NEXT:    vmv1r.v v0, v12
9182; CHECK-NEXT:    ret
9183  %head = insertelement <8 x double> poison, double %b, i32 0
9184  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9185  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9186  ret <8 x i1> %1
9187}
9188
9189define <8 x i1> @fcmp_ogt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9190; CHECK-LABEL: fcmp_ogt_fv_v8f64:
9191; CHECK:       # %bb.0:
9192; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9193; CHECK-NEXT:    vfmv.v.f v12, fa0
9194; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9195; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9196; CHECK-NEXT:    vmand.mm v12, v12, v16
9197; CHECK-NEXT:    vmv1r.v v0, v12
9198; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9199; CHECK-NEXT:    vmv1r.v v0, v12
9200; CHECK-NEXT:    ret
9201  %head = insertelement <8 x double> poison, double %b, i32 0
9202  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9203  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp
9204  ret <8 x i1> %1
9205}
9206
9207define <8 x i1> @fcmp_oge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9208; CHECK-LABEL: fcmp_oge_vv_v8f64:
9209; CHECK:       # %bb.0:
9210; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9211; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9212; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9213; CHECK-NEXT:    vmand.mm v16, v17, v16
9214; CHECK-NEXT:    vmv1r.v v0, v16
9215; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
9216; CHECK-NEXT:    vmv1r.v v0, v16
9217; CHECK-NEXT:    ret
9218  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp
9219  ret <8 x i1> %1
9220}
9221
9222define <8 x i1> @fcmp_oge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9223; CHECK-LABEL: fcmp_oge_vf_v8f64:
9224; CHECK:       # %bb.0:
9225; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9226; CHECK-NEXT:    vfmv.v.f v12, fa0
9227; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9228; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9229; CHECK-NEXT:    vmand.mm v12, v16, v12
9230; CHECK-NEXT:    vmv1r.v v0, v12
9231; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
9232; CHECK-NEXT:    vmv1r.v v0, v12
9233; CHECK-NEXT:    ret
9234  %head = insertelement <8 x double> poison, double %b, i32 0
9235  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9236  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp
9237  ret <8 x i1> %1
9238}
9239
9240define <8 x i1> @fcmp_oge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9241; CHECK-LABEL: fcmp_oge_fv_v8f64:
9242; CHECK:       # %bb.0:
9243; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9244; CHECK-NEXT:    vfmv.v.f v12, fa0
9245; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9246; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9247; CHECK-NEXT:    vmand.mm v12, v12, v16
9248; CHECK-NEXT:    vmv1r.v v0, v12
9249; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
9250; CHECK-NEXT:    vmv1r.v v0, v12
9251; CHECK-NEXT:    ret
9252  %head = insertelement <8 x double> poison, double %b, i32 0
9253  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9254  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp
9255  ret <8 x i1> %1
9256}
9257
9258define <8 x i1> @fcmp_olt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9259; CHECK-LABEL: fcmp_olt_vv_v8f64:
9260; CHECK:       # %bb.0:
9261; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9262; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9263; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9264; CHECK-NEXT:    vmand.mm v16, v17, v16
9265; CHECK-NEXT:    vmv1r.v v0, v16
9266; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
9267; CHECK-NEXT:    vmv1r.v v0, v16
9268; CHECK-NEXT:    ret
9269  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp
9270  ret <8 x i1> %1
9271}
9272
9273define <8 x i1> @fcmp_olt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9274; CHECK-LABEL: fcmp_olt_vf_v8f64:
9275; CHECK:       # %bb.0:
9276; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9277; CHECK-NEXT:    vfmv.v.f v12, fa0
9278; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9279; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9280; CHECK-NEXT:    vmand.mm v12, v12, v16
9281; CHECK-NEXT:    vmv1r.v v0, v12
9282; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9283; CHECK-NEXT:    vmv1r.v v0, v12
9284; CHECK-NEXT:    ret
9285  %head = insertelement <8 x double> poison, double %b, i32 0
9286  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9287  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp
9288  ret <8 x i1> %1
9289}
9290
9291define <8 x i1> @fcmp_olt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9292; CHECK-LABEL: fcmp_olt_fv_v8f64:
9293; CHECK:       # %bb.0:
9294; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9295; CHECK-NEXT:    vfmv.v.f v12, fa0
9296; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9297; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9298; CHECK-NEXT:    vmand.mm v12, v16, v12
9299; CHECK-NEXT:    vmv1r.v v0, v12
9300; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9301; CHECK-NEXT:    vmv1r.v v0, v12
9302; CHECK-NEXT:    ret
9303  %head = insertelement <8 x double> poison, double %b, i32 0
9304  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9305  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp
9306  ret <8 x i1> %1
9307}
9308
9309define <8 x i1> @fcmp_ole_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9310; CHECK-LABEL: fcmp_ole_vv_v8f64:
9311; CHECK:       # %bb.0:
9312; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9313; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9314; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9315; CHECK-NEXT:    vmand.mm v16, v17, v16
9316; CHECK-NEXT:    vmv1r.v v0, v16
9317; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
9318; CHECK-NEXT:    vmv1r.v v0, v16
9319; CHECK-NEXT:    ret
9320  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp
9321  ret <8 x i1> %1
9322}
9323
9324define <8 x i1> @fcmp_ole_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9325; CHECK-LABEL: fcmp_ole_vf_v8f64:
9326; CHECK:       # %bb.0:
9327; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9328; CHECK-NEXT:    vfmv.v.f v12, fa0
9329; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9330; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9331; CHECK-NEXT:    vmand.mm v12, v12, v16
9332; CHECK-NEXT:    vmv1r.v v0, v12
9333; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
9334; CHECK-NEXT:    vmv1r.v v0, v12
9335; CHECK-NEXT:    ret
9336  %head = insertelement <8 x double> poison, double %b, i32 0
9337  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9338  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp
9339  ret <8 x i1> %1
9340}
9341
9342define <8 x i1> @fcmp_ole_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9343; CHECK-LABEL: fcmp_ole_fv_v8f64:
9344; CHECK:       # %bb.0:
9345; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9346; CHECK-NEXT:    vfmv.v.f v12, fa0
9347; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9348; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9349; CHECK-NEXT:    vmand.mm v12, v16, v12
9350; CHECK-NEXT:    vmv1r.v v0, v12
9351; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
9352; CHECK-NEXT:    vmv1r.v v0, v12
9353; CHECK-NEXT:    ret
9354  %head = insertelement <8 x double> poison, double %b, i32 0
9355  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9356  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp
9357  ret <8 x i1> %1
9358}
9359
9360define <8 x i1> @fcmp_one_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9361; CHECK-LABEL: fcmp_one_vv_v8f64:
9362; CHECK:       # %bb.0:
9363; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9364; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9365; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9366; CHECK-NEXT:    vmand.mm v16, v17, v16
9367; CHECK-NEXT:    vmv1r.v v17, v16
9368; CHECK-NEXT:    vmv1r.v v0, v16
9369; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
9370; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
9371; CHECK-NEXT:    vmor.mm v0, v16, v17
9372; CHECK-NEXT:    ret
9373  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp
9374  ret <8 x i1> %1
9375}
9376
9377define <8 x i1> @fcmp_one_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9378; CHECK-LABEL: fcmp_one_vf_v8f64:
9379; CHECK:       # %bb.0:
9380; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9381; CHECK-NEXT:    vfmv.v.f v12, fa0
9382; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9383; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9384; CHECK-NEXT:    vmand.mm v12, v12, v16
9385; CHECK-NEXT:    vmv1r.v v13, v12
9386; CHECK-NEXT:    vmv1r.v v0, v12
9387; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
9388; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9389; CHECK-NEXT:    vmor.mm v0, v12, v13
9390; CHECK-NEXT:    ret
9391  %head = insertelement <8 x double> poison, double %b, i32 0
9392  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9393  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp
9394  ret <8 x i1> %1
9395}
9396
9397define <8 x i1> @fcmp_one_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9398; CHECK-LABEL: fcmp_one_fv_v8f64:
9399; CHECK:       # %bb.0:
9400; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9401; CHECK-NEXT:    vfmv.v.f v12, fa0
9402; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9403; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9404; CHECK-NEXT:    vmand.mm v12, v16, v12
9405; CHECK-NEXT:    vmv1r.v v13, v12
9406; CHECK-NEXT:    vmv1r.v v0, v12
9407; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
9408; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9409; CHECK-NEXT:    vmor.mm v0, v12, v13
9410; CHECK-NEXT:    ret
9411  %head = insertelement <8 x double> poison, double %b, i32 0
9412  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9413  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp
9414  ret <8 x i1> %1
9415}
9416
9417define <8 x i1> @fcmp_ord_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9418; CHECK-LABEL: fcmp_ord_vv_v8f64:
9419; CHECK:       # %bb.0:
9420; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9421; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9422; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9423; CHECK-NEXT:    vmand.mm v0, v12, v16
9424; CHECK-NEXT:    ret
9425  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp
9426  ret <8 x i1> %1
9427}
9428
9429define <8 x i1> @fcmp_ord_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9430; CHECK-LABEL: fcmp_ord_vf_v8f64:
9431; CHECK:       # %bb.0:
9432; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9433; CHECK-NEXT:    vfmv.v.f v12, fa0
9434; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9435; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9436; CHECK-NEXT:    vmand.mm v0, v12, v16
9437; CHECK-NEXT:    ret
9438  %head = insertelement <8 x double> poison, double %b, i32 0
9439  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9440  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp
9441  ret <8 x i1> %1
9442}
9443
9444define <8 x i1> @fcmp_ord_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9445; CHECK-LABEL: fcmp_ord_fv_v8f64:
9446; CHECK:       # %bb.0:
9447; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9448; CHECK-NEXT:    vfmv.v.f v12, fa0
9449; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9450; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9451; CHECK-NEXT:    vmand.mm v0, v16, v12
9452; CHECK-NEXT:    ret
9453  %head = insertelement <8 x double> poison, double %b, i32 0
9454  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9455  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp
9456  ret <8 x i1> %1
9457}
9458
9459define <8 x i1> @fcmp_ueq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9460; CHECK-LABEL: fcmp_ueq_vv_v8f64:
9461; CHECK:       # %bb.0:
9462; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9463; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9464; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9465; CHECK-NEXT:    vmand.mm v16, v17, v16
9466; CHECK-NEXT:    vmv1r.v v17, v16
9467; CHECK-NEXT:    vmv1r.v v0, v16
9468; CHECK-NEXT:    vmflt.vv v17, v8, v12, v0.t
9469; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
9470; CHECK-NEXT:    vmnor.mm v0, v16, v17
9471; CHECK-NEXT:    ret
9472  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9473  ret <8 x i1> %1
9474}
9475
9476define <8 x i1> @fcmp_ueq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9477; CHECK-LABEL: fcmp_ueq_vf_v8f64:
9478; CHECK:       # %bb.0:
9479; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9480; CHECK-NEXT:    vfmv.v.f v12, fa0
9481; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9482; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9483; CHECK-NEXT:    vmand.mm v12, v12, v16
9484; CHECK-NEXT:    vmv1r.v v13, v12
9485; CHECK-NEXT:    vmv1r.v v0, v12
9486; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
9487; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9488; CHECK-NEXT:    vmnor.mm v0, v12, v13
9489; CHECK-NEXT:    ret
9490  %head = insertelement <8 x double> poison, double %b, i32 0
9491  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9492  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9493  ret <8 x i1> %1
9494}
9495
9496define <8 x i1> @fcmp_ueq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9497; CHECK-LABEL: fcmp_ueq_fv_v8f64:
9498; CHECK:       # %bb.0:
9499; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9500; CHECK-NEXT:    vfmv.v.f v12, fa0
9501; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9502; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9503; CHECK-NEXT:    vmand.mm v12, v16, v12
9504; CHECK-NEXT:    vmv1r.v v13, v12
9505; CHECK-NEXT:    vmv1r.v v0, v12
9506; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
9507; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9508; CHECK-NEXT:    vmnor.mm v0, v12, v13
9509; CHECK-NEXT:    ret
9510  %head = insertelement <8 x double> poison, double %b, i32 0
9511  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9512  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp
9513  ret <8 x i1> %1
9514}
9515
9516define <8 x i1> @fcmp_ugt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9517; CHECK-LABEL: fcmp_ugt_vv_v8f64:
9518; CHECK:       # %bb.0:
9519; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9520; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9521; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9522; CHECK-NEXT:    vmand.mm v16, v17, v16
9523; CHECK-NEXT:    vmv1r.v v0, v16
9524; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
9525; CHECK-NEXT:    vmnot.m v0, v16
9526; CHECK-NEXT:    ret
9527  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9528  ret <8 x i1> %1
9529}
9530
9531define <8 x i1> @fcmp_ugt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9532; CHECK-LABEL: fcmp_ugt_vf_v8f64:
9533; CHECK:       # %bb.0:
9534; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9535; CHECK-NEXT:    vfmv.v.f v12, fa0
9536; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9537; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9538; CHECK-NEXT:    vmand.mm v12, v12, v16
9539; CHECK-NEXT:    vmv1r.v v0, v12
9540; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
9541; CHECK-NEXT:    vmnot.m v0, v12
9542; CHECK-NEXT:    ret
9543  %head = insertelement <8 x double> poison, double %b, i32 0
9544  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9545  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9546  ret <8 x i1> %1
9547}
9548
9549define <8 x i1> @fcmp_ugt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9550; CHECK-LABEL: fcmp_ugt_fv_v8f64:
9551; CHECK:       # %bb.0:
9552; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9553; CHECK-NEXT:    vfmv.v.f v12, fa0
9554; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9555; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9556; CHECK-NEXT:    vmand.mm v12, v16, v12
9557; CHECK-NEXT:    vmv1r.v v0, v12
9558; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
9559; CHECK-NEXT:    vmnot.m v0, v12
9560; CHECK-NEXT:    ret
9561  %head = insertelement <8 x double> poison, double %b, i32 0
9562  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9563  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp
9564  ret <8 x i1> %1
9565}
9566
9567define <8 x i1> @fcmp_uge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9568; CHECK-LABEL: fcmp_uge_vv_v8f64:
9569; CHECK:       # %bb.0:
9570; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9571; CHECK-NEXT:    vmfeq.vv v16, v12, v12
9572; CHECK-NEXT:    vmfeq.vv v17, v8, v8
9573; CHECK-NEXT:    vmand.mm v16, v17, v16
9574; CHECK-NEXT:    vmv1r.v v0, v16
9575; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
9576; CHECK-NEXT:    vmnot.m v0, v16
9577; CHECK-NEXT:    ret
9578  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp
9579  ret <8 x i1> %1
9580}
9581
9582define <8 x i1> @fcmp_uge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9583; CHECK-LABEL: fcmp_uge_vf_v8f64:
9584; CHECK:       # %bb.0:
9585; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9586; CHECK-NEXT:    vfmv.v.f v12, fa0
9587; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9588; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9589; CHECK-NEXT:    vmand.mm v12, v12, v16
9590; CHECK-NEXT:    vmv1r.v v0, v12
9591; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9592; CHECK-NEXT:    vmnot.m v0, v12
9593; CHECK-NEXT:    ret
9594  %head = insertelement <8 x double> poison, double %b, i32 0
9595  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9596  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp
9597  ret <8 x i1> %1
9598}
9599
9600define <8 x i1> @fcmp_uge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9601; CHECK-LABEL: fcmp_uge_fv_v8f64:
9602; CHECK:       # %bb.0:
9603; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9604; CHECK-NEXT:    vfmv.v.f v12, fa0
9605; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9606; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9607; CHECK-NEXT:    vmand.mm v12, v16, v12
9608; CHECK-NEXT:    vmv1r.v v0, v12
9609; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9610; CHECK-NEXT:    vmnot.m v0, v12
9611; CHECK-NEXT:    ret
9612  %head = insertelement <8 x double> poison, double %b, i32 0
9613  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9614  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp
9615  ret <8 x i1> %1
9616}
9617
9618define <8 x i1> @fcmp_ult_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9619; CHECK-LABEL: fcmp_ult_vv_v8f64:
9620; CHECK:       # %bb.0:
9621; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9622; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9623; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9624; CHECK-NEXT:    vmand.mm v16, v17, v16
9625; CHECK-NEXT:    vmv1r.v v0, v16
9626; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
9627; CHECK-NEXT:    vmnot.m v0, v16
9628; CHECK-NEXT:    ret
9629  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp
9630  ret <8 x i1> %1
9631}
9632
9633define <8 x i1> @fcmp_ult_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9634; CHECK-LABEL: fcmp_ult_vf_v8f64:
9635; CHECK:       # %bb.0:
9636; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9637; CHECK-NEXT:    vfmv.v.f v12, fa0
9638; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9639; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9640; CHECK-NEXT:    vmand.mm v12, v16, v12
9641; CHECK-NEXT:    vmv1r.v v0, v12
9642; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
9643; CHECK-NEXT:    vmnot.m v0, v12
9644; CHECK-NEXT:    ret
9645  %head = insertelement <8 x double> poison, double %b, i32 0
9646  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9647  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp
9648  ret <8 x i1> %1
9649}
9650
9651define <8 x i1> @fcmp_ult_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9652; CHECK-LABEL: fcmp_ult_fv_v8f64:
9653; CHECK:       # %bb.0:
9654; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9655; CHECK-NEXT:    vfmv.v.f v12, fa0
9656; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9657; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9658; CHECK-NEXT:    vmand.mm v12, v12, v16
9659; CHECK-NEXT:    vmv1r.v v0, v12
9660; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
9661; CHECK-NEXT:    vmnot.m v0, v12
9662; CHECK-NEXT:    ret
9663  %head = insertelement <8 x double> poison, double %b, i32 0
9664  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9665  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp
9666  ret <8 x i1> %1
9667}
9668
9669define <8 x i1> @fcmp_ule_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9670; CHECK-LABEL: fcmp_ule_vv_v8f64:
9671; CHECK:       # %bb.0:
9672; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9673; CHECK-NEXT:    vmfeq.vv v16, v8, v8
9674; CHECK-NEXT:    vmfeq.vv v17, v12, v12
9675; CHECK-NEXT:    vmand.mm v16, v17, v16
9676; CHECK-NEXT:    vmv1r.v v0, v16
9677; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
9678; CHECK-NEXT:    vmnot.m v0, v16
9679; CHECK-NEXT:    ret
9680  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp
9681  ret <8 x i1> %1
9682}
9683
9684define <8 x i1> @fcmp_ule_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9685; CHECK-LABEL: fcmp_ule_vf_v8f64:
9686; CHECK:       # %bb.0:
9687; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9688; CHECK-NEXT:    vfmv.v.f v12, fa0
9689; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9690; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9691; CHECK-NEXT:    vmand.mm v12, v16, v12
9692; CHECK-NEXT:    vmv1r.v v0, v12
9693; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
9694; CHECK-NEXT:    vmnot.m v0, v12
9695; CHECK-NEXT:    ret
9696  %head = insertelement <8 x double> poison, double %b, i32 0
9697  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9698  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp
9699  ret <8 x i1> %1
9700}
9701
9702define <8 x i1> @fcmp_ule_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9703; CHECK-LABEL: fcmp_ule_fv_v8f64:
9704; CHECK:       # %bb.0:
9705; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9706; CHECK-NEXT:    vfmv.v.f v12, fa0
9707; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
9708; CHECK-NEXT:    vmfeq.vv v12, v8, v8
9709; CHECK-NEXT:    vmand.mm v12, v12, v16
9710; CHECK-NEXT:    vmv1r.v v0, v12
9711; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
9712; CHECK-NEXT:    vmnot.m v0, v12
9713; CHECK-NEXT:    ret
9714  %head = insertelement <8 x double> poison, double %b, i32 0
9715  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9716  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp
9717  ret <8 x i1> %1
9718}
9719
9720define <8 x i1> @fcmp_une_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9721; CHECK-LABEL: fcmp_une_vv_v8f64:
9722; CHECK:       # %bb.0:
9723; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9724; CHECK-NEXT:    vmfne.vv v0, v8, v12
9725; CHECK-NEXT:    ret
9726  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp
9727  ret <8 x i1> %1
9728}
9729
9730define <8 x i1> @fcmp_une_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9731; CHECK-LABEL: fcmp_une_vf_v8f64:
9732; CHECK:       # %bb.0:
9733; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9734; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9735; CHECK-NEXT:    ret
9736  %head = insertelement <8 x double> poison, double %b, i32 0
9737  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9738  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp
9739  ret <8 x i1> %1
9740}
9741
9742define <8 x i1> @fcmp_une_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9743; CHECK-LABEL: fcmp_une_fv_v8f64:
9744; CHECK:       # %bb.0:
9745; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9746; CHECK-NEXT:    vmfne.vf v0, v8, fa0
9747; CHECK-NEXT:    ret
9748  %head = insertelement <8 x double> poison, double %b, i32 0
9749  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9750  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp
9751  ret <8 x i1> %1
9752}
9753
9754define <8 x i1> @fcmp_uno_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp {
9755; CHECK-LABEL: fcmp_uno_vv_v8f64:
9756; CHECK:       # %bb.0:
9757; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9758; CHECK-NEXT:    vmfne.vv v16, v12, v12
9759; CHECK-NEXT:    vmfne.vv v12, v8, v8
9760; CHECK-NEXT:    vmor.mm v0, v12, v16
9761; CHECK-NEXT:    ret
9762  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp
9763  ret <8 x i1> %1
9764}
9765
9766define <8 x i1> @fcmp_uno_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9767; CHECK-LABEL: fcmp_uno_vf_v8f64:
9768; CHECK:       # %bb.0:
9769; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9770; CHECK-NEXT:    vfmv.v.f v12, fa0
9771; CHECK-NEXT:    vmfne.vf v16, v12, fa0
9772; CHECK-NEXT:    vmfne.vv v12, v8, v8
9773; CHECK-NEXT:    vmor.mm v0, v12, v16
9774; CHECK-NEXT:    ret
9775  %head = insertelement <8 x double> poison, double %b, i32 0
9776  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9777  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp
9778  ret <8 x i1> %1
9779}
9780
9781define <8 x i1> @fcmp_uno_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp {
9782; CHECK-LABEL: fcmp_uno_fv_v8f64:
9783; CHECK:       # %bb.0:
9784; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9785; CHECK-NEXT:    vfmv.v.f v12, fa0
9786; CHECK-NEXT:    vmfne.vf v16, v12, fa0
9787; CHECK-NEXT:    vmfne.vv v12, v8, v8
9788; CHECK-NEXT:    vmor.mm v0, v16, v12
9789; CHECK-NEXT:    ret
9790  %head = insertelement <8 x double> poison, double %b, i32 0
9791  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
9792  %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp
9793  ret <8 x i1> %1
9794}
9795