1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata) 8define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 9; CHECK-LABEL: fcmp_oeq_vv_nxv1f16: 10; CHECK: # %bb.0: 11; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 12; CHECK-NEXT: vmfeq.vv v0, v8, v9 13; CHECK-NEXT: ret 14 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 15 ret <vscale x 1 x i1> %1 16} 17 18define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 19; CHECK-LABEL: fcmp_oeq_vf_nxv1f16: 20; CHECK: # %bb.0: 21; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 22; CHECK-NEXT: vmfeq.vf v0, v8, fa0 23; CHECK-NEXT: ret 24 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 25 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 26 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 27 ret <vscale x 1 x i1> %1 28} 29 30define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 31; CHECK-LABEL: fcmp_oeq_fv_nxv1f16: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 34; CHECK-NEXT: vmfeq.vf v0, v8, fa0 35; CHECK-NEXT: ret 36 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 37 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 38 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 39 ret <vscale x 1 x i1> %1 40} 41 42define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 43; CHECK-LABEL: fcmp_ogt_vv_nxv1f16: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 46; CHECK-NEXT: vmfeq.vv v10, v8, v8 47; CHECK-NEXT: vmfeq.vv v11, v9, v9 48; CHECK-NEXT: vmand.mm v0, v11, v10 49; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 50; CHECK-NEXT: ret 51 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 52 ret <vscale x 1 x i1> %1 53} 54 55define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 56; CHECK-LABEL: fcmp_ogt_vf_nxv1f16: 57; CHECK: # %bb.0: 58; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 59; CHECK-NEXT: vfmv.v.f v9, fa0 60; CHECK-NEXT: vmfeq.vv v10, v8, v8 61; CHECK-NEXT: vmfeq.vf v9, v9, fa0 62; CHECK-NEXT: vmand.mm v0, v9, v10 63; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 64; CHECK-NEXT: ret 65 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 66 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 67 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 68 ret <vscale x 1 x i1> %1 69} 70 71define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 72; CHECK-LABEL: fcmp_ogt_fv_nxv1f16: 73; CHECK: # %bb.0: 74; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 75; CHECK-NEXT: vfmv.v.f v9, fa0 76; CHECK-NEXT: vmfeq.vv v10, v8, v8 77; CHECK-NEXT: vmfeq.vf v9, v9, fa0 78; CHECK-NEXT: vmand.mm v0, v10, v9 79; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 80; CHECK-NEXT: ret 81 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 82 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 83 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 84 ret <vscale x 1 x i1> %1 85} 86 87define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 88; CHECK-LABEL: fcmp_oge_vv_nxv1f16: 89; CHECK: # %bb.0: 90; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 91; CHECK-NEXT: vmfeq.vv v10, v8, v8 92; CHECK-NEXT: vmfeq.vv v11, v9, v9 93; CHECK-NEXT: vmand.mm v0, v11, v10 94; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 95; CHECK-NEXT: ret 96 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 97 ret <vscale x 1 x i1> %1 98} 99 100define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 101; CHECK-LABEL: fcmp_oge_vf_nxv1f16: 102; CHECK: # %bb.0: 103; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 104; CHECK-NEXT: vfmv.v.f v9, fa0 105; CHECK-NEXT: vmfeq.vv v10, v8, v8 106; CHECK-NEXT: vmfeq.vf v9, v9, fa0 107; CHECK-NEXT: vmand.mm v0, v9, v10 108; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 109; CHECK-NEXT: ret 110 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 111 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 112 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 113 ret <vscale x 1 x i1> %1 114} 115 116define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 117; CHECK-LABEL: fcmp_oge_fv_nxv1f16: 118; CHECK: # %bb.0: 119; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 120; CHECK-NEXT: vfmv.v.f v9, fa0 121; CHECK-NEXT: vmfeq.vv v10, v8, v8 122; CHECK-NEXT: vmfeq.vf v9, v9, fa0 123; CHECK-NEXT: vmand.mm v0, v10, v9 124; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 125; CHECK-NEXT: ret 126 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 127 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 128 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 129 ret <vscale x 1 x i1> %1 130} 131 132define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 133; CHECK-LABEL: fcmp_olt_vv_nxv1f16: 134; CHECK: # %bb.0: 135; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 136; CHECK-NEXT: vmfeq.vv v10, v9, v9 137; CHECK-NEXT: vmfeq.vv v11, v8, v8 138; CHECK-NEXT: vmand.mm v0, v11, v10 139; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 140; CHECK-NEXT: ret 141 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 142 ret <vscale x 1 x i1> %1 143} 144 145define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 146; CHECK-LABEL: fcmp_olt_vf_nxv1f16: 147; CHECK: # %bb.0: 148; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 149; CHECK-NEXT: vfmv.v.f v9, fa0 150; CHECK-NEXT: vmfeq.vv v10, v8, v8 151; CHECK-NEXT: vmfeq.vf v9, v9, fa0 152; CHECK-NEXT: vmand.mm v0, v10, v9 153; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 154; CHECK-NEXT: ret 155 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 156 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 157 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 158 ret <vscale x 1 x i1> %1 159} 160 161define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 162; CHECK-LABEL: fcmp_olt_fv_nxv1f16: 163; CHECK: # %bb.0: 164; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 165; CHECK-NEXT: vfmv.v.f v9, fa0 166; CHECK-NEXT: vmfeq.vv v10, v8, v8 167; CHECK-NEXT: vmfeq.vf v9, v9, fa0 168; CHECK-NEXT: vmand.mm v0, v9, v10 169; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 170; CHECK-NEXT: ret 171 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 172 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 173 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 174 ret <vscale x 1 x i1> %1 175} 176 177define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 178; CHECK-LABEL: fcmp_ole_vv_nxv1f16: 179; CHECK: # %bb.0: 180; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 181; CHECK-NEXT: vmfeq.vv v10, v9, v9 182; CHECK-NEXT: vmfeq.vv v11, v8, v8 183; CHECK-NEXT: vmand.mm v0, v11, v10 184; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 185; CHECK-NEXT: ret 186 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 187 ret <vscale x 1 x i1> %1 188} 189 190define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 191; CHECK-LABEL: fcmp_ole_vf_nxv1f16: 192; CHECK: # %bb.0: 193; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 194; CHECK-NEXT: vfmv.v.f v9, fa0 195; CHECK-NEXT: vmfeq.vv v10, v8, v8 196; CHECK-NEXT: vmfeq.vf v9, v9, fa0 197; CHECK-NEXT: vmand.mm v0, v10, v9 198; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 199; CHECK-NEXT: ret 200 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 201 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 202 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 203 ret <vscale x 1 x i1> %1 204} 205 206define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 207; CHECK-LABEL: fcmp_ole_fv_nxv1f16: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 210; CHECK-NEXT: vfmv.v.f v9, fa0 211; CHECK-NEXT: vmfeq.vv v10, v8, v8 212; CHECK-NEXT: vmfeq.vf v9, v9, fa0 213; CHECK-NEXT: vmand.mm v0, v9, v10 214; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 215; CHECK-NEXT: ret 216 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 217 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 218 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 219 ret <vscale x 1 x i1> %1 220} 221 222define <vscale x 1 x i1> @fcmp_one_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 223; CHECK-LABEL: fcmp_one_vv_nxv1f16: 224; CHECK: # %bb.0: 225; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 226; CHECK-NEXT: vmfeq.vv v10, v9, v9 227; CHECK-NEXT: vmfeq.vv v11, v8, v8 228; CHECK-NEXT: vmand.mm v0, v11, v10 229; CHECK-NEXT: vmv1r.v v10, v0 230; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 231; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 232; CHECK-NEXT: vmor.mm v0, v0, v10 233; CHECK-NEXT: ret 234 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 235 ret <vscale x 1 x i1> %1 236} 237 238define <vscale x 1 x i1> @fcmp_one_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 239; CHECK-LABEL: fcmp_one_vf_nxv1f16: 240; CHECK: # %bb.0: 241; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 242; CHECK-NEXT: vfmv.v.f v9, fa0 243; CHECK-NEXT: vmfeq.vv v10, v8, v8 244; CHECK-NEXT: vmfeq.vf v9, v9, fa0 245; CHECK-NEXT: vmand.mm v0, v10, v9 246; CHECK-NEXT: vmv1r.v v9, v0 247; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 248; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 249; CHECK-NEXT: vmor.mm v0, v0, v9 250; CHECK-NEXT: ret 251 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 252 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 253 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 254 ret <vscale x 1 x i1> %1 255} 256 257define <vscale x 1 x i1> @fcmp_one_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 258; CHECK-LABEL: fcmp_one_fv_nxv1f16: 259; CHECK: # %bb.0: 260; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 261; CHECK-NEXT: vfmv.v.f v9, fa0 262; CHECK-NEXT: vmfeq.vv v10, v8, v8 263; CHECK-NEXT: vmfeq.vf v9, v9, fa0 264; CHECK-NEXT: vmand.mm v0, v9, v10 265; CHECK-NEXT: vmv1r.v v9, v0 266; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 267; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 268; CHECK-NEXT: vmor.mm v0, v0, v9 269; CHECK-NEXT: ret 270 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 271 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 272 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 273 ret <vscale x 1 x i1> %1 274} 275 276define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 277; CHECK-LABEL: fcmp_ord_vv_nxv1f16: 278; CHECK: # %bb.0: 279; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 280; CHECK-NEXT: vmfeq.vv v9, v9, v9 281; CHECK-NEXT: vmfeq.vv v8, v8, v8 282; CHECK-NEXT: vmand.mm v0, v8, v9 283; CHECK-NEXT: ret 284 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 285 ret <vscale x 1 x i1> %1 286} 287 288define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 289; CHECK-LABEL: fcmp_ord_vf_nxv1f16: 290; CHECK: # %bb.0: 291; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 292; CHECK-NEXT: vfmv.v.f v9, fa0 293; CHECK-NEXT: vmfeq.vf v9, v9, fa0 294; CHECK-NEXT: vmfeq.vv v8, v8, v8 295; CHECK-NEXT: vmand.mm v0, v8, v9 296; CHECK-NEXT: ret 297 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 298 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 299 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 300 ret <vscale x 1 x i1> %1 301} 302 303define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 304; CHECK-LABEL: fcmp_ord_fv_nxv1f16: 305; CHECK: # %bb.0: 306; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 307; CHECK-NEXT: vfmv.v.f v9, fa0 308; CHECK-NEXT: vmfeq.vf v9, v9, fa0 309; CHECK-NEXT: vmfeq.vv v8, v8, v8 310; CHECK-NEXT: vmand.mm v0, v9, v8 311; CHECK-NEXT: ret 312 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 313 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 314 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 315 ret <vscale x 1 x i1> %1 316} 317 318define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 319; CHECK-LABEL: fcmp_ueq_vv_nxv1f16: 320; CHECK: # %bb.0: 321; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 322; CHECK-NEXT: vmfeq.vv v10, v9, v9 323; CHECK-NEXT: vmfeq.vv v11, v8, v8 324; CHECK-NEXT: vmand.mm v0, v11, v10 325; CHECK-NEXT: vmv1r.v v10, v0 326; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 327; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 328; CHECK-NEXT: vmnor.mm v0, v0, v10 329; CHECK-NEXT: ret 330 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 331 ret <vscale x 1 x i1> %1 332} 333 334define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 335; CHECK-LABEL: fcmp_ueq_vf_nxv1f16: 336; CHECK: # %bb.0: 337; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 338; CHECK-NEXT: vfmv.v.f v9, fa0 339; CHECK-NEXT: vmfeq.vv v10, v8, v8 340; CHECK-NEXT: vmfeq.vf v9, v9, fa0 341; CHECK-NEXT: vmand.mm v0, v10, v9 342; CHECK-NEXT: vmv1r.v v9, v0 343; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 344; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 345; CHECK-NEXT: vmnor.mm v0, v0, v9 346; CHECK-NEXT: ret 347 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 348 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 349 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 350 ret <vscale x 1 x i1> %1 351} 352 353define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 354; CHECK-LABEL: fcmp_ueq_fv_nxv1f16: 355; CHECK: # %bb.0: 356; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 357; CHECK-NEXT: vfmv.v.f v9, fa0 358; CHECK-NEXT: vmfeq.vv v10, v8, v8 359; CHECK-NEXT: vmfeq.vf v9, v9, fa0 360; CHECK-NEXT: vmand.mm v0, v9, v10 361; CHECK-NEXT: vmv1r.v v9, v0 362; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 363; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 364; CHECK-NEXT: vmnor.mm v0, v0, v9 365; CHECK-NEXT: ret 366 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 367 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 368 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 369 ret <vscale x 1 x i1> %1 370} 371 372define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 373; CHECK-LABEL: fcmp_ugt_vv_nxv1f16: 374; CHECK: # %bb.0: 375; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 376; CHECK-NEXT: vmfeq.vv v10, v9, v9 377; CHECK-NEXT: vmfeq.vv v11, v8, v8 378; CHECK-NEXT: vmand.mm v0, v11, v10 379; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 380; CHECK-NEXT: vmnot.m v0, v0 381; CHECK-NEXT: ret 382 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 383 ret <vscale x 1 x i1> %1 384} 385 386define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 387; CHECK-LABEL: fcmp_ugt_vf_nxv1f16: 388; CHECK: # %bb.0: 389; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 390; CHECK-NEXT: vfmv.v.f v9, fa0 391; CHECK-NEXT: vmfeq.vv v10, v8, v8 392; CHECK-NEXT: vmfeq.vf v9, v9, fa0 393; CHECK-NEXT: vmand.mm v0, v10, v9 394; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 395; CHECK-NEXT: vmnot.m v0, v0 396; CHECK-NEXT: ret 397 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 398 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 399 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 400 ret <vscale x 1 x i1> %1 401} 402 403define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 404; CHECK-LABEL: fcmp_ugt_fv_nxv1f16: 405; CHECK: # %bb.0: 406; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 407; CHECK-NEXT: vfmv.v.f v9, fa0 408; CHECK-NEXT: vmfeq.vv v10, v8, v8 409; CHECK-NEXT: vmfeq.vf v9, v9, fa0 410; CHECK-NEXT: vmand.mm v0, v9, v10 411; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 412; CHECK-NEXT: vmnot.m v0, v0 413; CHECK-NEXT: ret 414 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 415 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 416 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 417 ret <vscale x 1 x i1> %1 418} 419 420define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 421; CHECK-LABEL: fcmp_uge_vv_nxv1f16: 422; CHECK: # %bb.0: 423; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 424; CHECK-NEXT: vmfeq.vv v10, v9, v9 425; CHECK-NEXT: vmfeq.vv v11, v8, v8 426; CHECK-NEXT: vmand.mm v0, v11, v10 427; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 428; CHECK-NEXT: vmnot.m v0, v0 429; CHECK-NEXT: ret 430 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 431 ret <vscale x 1 x i1> %1 432} 433 434define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 435; CHECK-LABEL: fcmp_uge_vf_nxv1f16: 436; CHECK: # %bb.0: 437; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 438; CHECK-NEXT: vfmv.v.f v9, fa0 439; CHECK-NEXT: vmfeq.vv v10, v8, v8 440; CHECK-NEXT: vmfeq.vf v9, v9, fa0 441; CHECK-NEXT: vmand.mm v0, v10, v9 442; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 443; CHECK-NEXT: vmnot.m v0, v0 444; CHECK-NEXT: ret 445 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 446 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 447 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 448 ret <vscale x 1 x i1> %1 449} 450 451define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 452; CHECK-LABEL: fcmp_uge_fv_nxv1f16: 453; CHECK: # %bb.0: 454; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 455; CHECK-NEXT: vfmv.v.f v9, fa0 456; CHECK-NEXT: vmfeq.vv v10, v8, v8 457; CHECK-NEXT: vmfeq.vf v9, v9, fa0 458; CHECK-NEXT: vmand.mm v0, v9, v10 459; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 460; CHECK-NEXT: vmnot.m v0, v0 461; CHECK-NEXT: ret 462 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 463 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 464 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 465 ret <vscale x 1 x i1> %1 466} 467 468define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 469; CHECK-LABEL: fcmp_ult_vv_nxv1f16: 470; CHECK: # %bb.0: 471; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 472; CHECK-NEXT: vmfeq.vv v10, v8, v8 473; CHECK-NEXT: vmfeq.vv v11, v9, v9 474; CHECK-NEXT: vmand.mm v0, v11, v10 475; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 476; CHECK-NEXT: vmnot.m v0, v0 477; CHECK-NEXT: ret 478 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 479 ret <vscale x 1 x i1> %1 480} 481 482define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 483; CHECK-LABEL: fcmp_ult_vf_nxv1f16: 484; CHECK: # %bb.0: 485; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 486; CHECK-NEXT: vfmv.v.f v9, fa0 487; CHECK-NEXT: vmfeq.vv v10, v8, v8 488; CHECK-NEXT: vmfeq.vf v9, v9, fa0 489; CHECK-NEXT: vmand.mm v0, v9, v10 490; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 491; CHECK-NEXT: vmnot.m v0, v0 492; CHECK-NEXT: ret 493 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 494 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 495 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 496 ret <vscale x 1 x i1> %1 497} 498 499define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 500; CHECK-LABEL: fcmp_ult_fv_nxv1f16: 501; CHECK: # %bb.0: 502; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 503; CHECK-NEXT: vfmv.v.f v9, fa0 504; CHECK-NEXT: vmfeq.vv v10, v8, v8 505; CHECK-NEXT: vmfeq.vf v9, v9, fa0 506; CHECK-NEXT: vmand.mm v0, v10, v9 507; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 508; CHECK-NEXT: vmnot.m v0, v0 509; CHECK-NEXT: ret 510 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 511 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 512 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 513 ret <vscale x 1 x i1> %1 514} 515 516define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 517; CHECK-LABEL: fcmp_ule_vv_nxv1f16: 518; CHECK: # %bb.0: 519; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 520; CHECK-NEXT: vmfeq.vv v10, v8, v8 521; CHECK-NEXT: vmfeq.vv v11, v9, v9 522; CHECK-NEXT: vmand.mm v0, v11, v10 523; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 524; CHECK-NEXT: vmnot.m v0, v0 525; CHECK-NEXT: ret 526 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 527 ret <vscale x 1 x i1> %1 528} 529 530define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 531; CHECK-LABEL: fcmp_ule_vf_nxv1f16: 532; CHECK: # %bb.0: 533; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 534; CHECK-NEXT: vfmv.v.f v9, fa0 535; CHECK-NEXT: vmfeq.vv v10, v8, v8 536; CHECK-NEXT: vmfeq.vf v9, v9, fa0 537; CHECK-NEXT: vmand.mm v0, v9, v10 538; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 539; CHECK-NEXT: vmnot.m v0, v0 540; CHECK-NEXT: ret 541 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 542 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 543 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 544 ret <vscale x 1 x i1> %1 545} 546 547define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 548; CHECK-LABEL: fcmp_ule_fv_nxv1f16: 549; CHECK: # %bb.0: 550; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 551; CHECK-NEXT: vfmv.v.f v9, fa0 552; CHECK-NEXT: vmfeq.vv v10, v8, v8 553; CHECK-NEXT: vmfeq.vf v9, v9, fa0 554; CHECK-NEXT: vmand.mm v0, v10, v9 555; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 556; CHECK-NEXT: vmnot.m v0, v0 557; CHECK-NEXT: ret 558 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 559 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 560 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 561 ret <vscale x 1 x i1> %1 562} 563 564define <vscale x 1 x i1> @fcmp_une_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 565; CHECK-LABEL: fcmp_une_vv_nxv1f16: 566; CHECK: # %bb.0: 567; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 568; CHECK-NEXT: vmfne.vv v0, v8, v9 569; CHECK-NEXT: ret 570 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 571 ret <vscale x 1 x i1> %1 572} 573 574define <vscale x 1 x i1> @fcmp_une_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 575; CHECK-LABEL: fcmp_une_vf_nxv1f16: 576; CHECK: # %bb.0: 577; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 578; CHECK-NEXT: vmfne.vf v0, v8, fa0 579; CHECK-NEXT: ret 580 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 581 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 582 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 583 ret <vscale x 1 x i1> %1 584} 585 586define <vscale x 1 x i1> @fcmp_une_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 587; CHECK-LABEL: fcmp_une_fv_nxv1f16: 588; CHECK: # %bb.0: 589; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 590; CHECK-NEXT: vmfne.vf v0, v8, fa0 591; CHECK-NEXT: ret 592 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 593 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 594 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 595 ret <vscale x 1 x i1> %1 596} 597 598define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) nounwind strictfp { 599; CHECK-LABEL: fcmp_uno_vv_nxv1f16: 600; CHECK: # %bb.0: 601; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 602; CHECK-NEXT: vmfne.vv v9, v9, v9 603; CHECK-NEXT: vmfne.vv v8, v8, v8 604; CHECK-NEXT: vmor.mm v0, v8, v9 605; CHECK-NEXT: ret 606 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 607 ret <vscale x 1 x i1> %1 608} 609 610define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 611; CHECK-LABEL: fcmp_uno_vf_nxv1f16: 612; CHECK: # %bb.0: 613; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 614; CHECK-NEXT: vfmv.v.f v9, fa0 615; CHECK-NEXT: vmfne.vf v9, v9, fa0 616; CHECK-NEXT: vmfne.vv v8, v8, v8 617; CHECK-NEXT: vmor.mm v0, v8, v9 618; CHECK-NEXT: ret 619 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 620 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 621 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 622 ret <vscale x 1 x i1> %1 623} 624 625define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f16(<vscale x 1 x half> %va, half %b) nounwind strictfp { 626; CHECK-LABEL: fcmp_uno_fv_nxv1f16: 627; CHECK: # %bb.0: 628; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 629; CHECK-NEXT: vfmv.v.f v9, fa0 630; CHECK-NEXT: vmfne.vf v9, v9, fa0 631; CHECK-NEXT: vmfne.vv v8, v8, v8 632; CHECK-NEXT: vmor.mm v0, v9, v8 633; CHECK-NEXT: ret 634 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0 635 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 636 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f16(<vscale x 1 x half> %splat, <vscale x 1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 637 ret <vscale x 1 x i1> %1 638} 639 640declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata) 641define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 642; CHECK-LABEL: fcmp_oeq_vv_nxv2f16: 643; CHECK: # %bb.0: 644; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 645; CHECK-NEXT: vmfeq.vv v0, v8, v9 646; CHECK-NEXT: ret 647 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 648 ret <vscale x 2 x i1> %1 649} 650 651define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 652; CHECK-LABEL: fcmp_oeq_vf_nxv2f16: 653; CHECK: # %bb.0: 654; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 655; CHECK-NEXT: vmfeq.vf v0, v8, fa0 656; CHECK-NEXT: ret 657 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 658 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 659 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 660 ret <vscale x 2 x i1> %1 661} 662 663define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 664; CHECK-LABEL: fcmp_oeq_fv_nxv2f16: 665; CHECK: # %bb.0: 666; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 667; CHECK-NEXT: vmfeq.vf v0, v8, fa0 668; CHECK-NEXT: ret 669 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 670 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 671 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 672 ret <vscale x 2 x i1> %1 673} 674 675define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 676; CHECK-LABEL: fcmp_ogt_vv_nxv2f16: 677; CHECK: # %bb.0: 678; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 679; CHECK-NEXT: vmfeq.vv v10, v8, v8 680; CHECK-NEXT: vmfeq.vv v11, v9, v9 681; CHECK-NEXT: vmand.mm v0, v11, v10 682; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 683; CHECK-NEXT: ret 684 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 685 ret <vscale x 2 x i1> %1 686} 687 688define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 689; CHECK-LABEL: fcmp_ogt_vf_nxv2f16: 690; CHECK: # %bb.0: 691; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 692; CHECK-NEXT: vfmv.v.f v9, fa0 693; CHECK-NEXT: vmfeq.vv v10, v8, v8 694; CHECK-NEXT: vmfeq.vf v9, v9, fa0 695; CHECK-NEXT: vmand.mm v0, v9, v10 696; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 697; CHECK-NEXT: ret 698 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 699 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 700 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 701 ret <vscale x 2 x i1> %1 702} 703 704define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 705; CHECK-LABEL: fcmp_ogt_fv_nxv2f16: 706; CHECK: # %bb.0: 707; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 708; CHECK-NEXT: vfmv.v.f v9, fa0 709; CHECK-NEXT: vmfeq.vv v10, v8, v8 710; CHECK-NEXT: vmfeq.vf v9, v9, fa0 711; CHECK-NEXT: vmand.mm v0, v10, v9 712; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 713; CHECK-NEXT: ret 714 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 715 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 716 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 717 ret <vscale x 2 x i1> %1 718} 719 720define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 721; CHECK-LABEL: fcmp_oge_vv_nxv2f16: 722; CHECK: # %bb.0: 723; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 724; CHECK-NEXT: vmfeq.vv v10, v8, v8 725; CHECK-NEXT: vmfeq.vv v11, v9, v9 726; CHECK-NEXT: vmand.mm v0, v11, v10 727; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 728; CHECK-NEXT: ret 729 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 730 ret <vscale x 2 x i1> %1 731} 732 733define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 734; CHECK-LABEL: fcmp_oge_vf_nxv2f16: 735; CHECK: # %bb.0: 736; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 737; CHECK-NEXT: vfmv.v.f v9, fa0 738; CHECK-NEXT: vmfeq.vv v10, v8, v8 739; CHECK-NEXT: vmfeq.vf v9, v9, fa0 740; CHECK-NEXT: vmand.mm v0, v9, v10 741; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 742; CHECK-NEXT: ret 743 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 744 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 745 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 746 ret <vscale x 2 x i1> %1 747} 748 749define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 750; CHECK-LABEL: fcmp_oge_fv_nxv2f16: 751; CHECK: # %bb.0: 752; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 753; CHECK-NEXT: vfmv.v.f v9, fa0 754; CHECK-NEXT: vmfeq.vv v10, v8, v8 755; CHECK-NEXT: vmfeq.vf v9, v9, fa0 756; CHECK-NEXT: vmand.mm v0, v10, v9 757; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 758; CHECK-NEXT: ret 759 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 760 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 761 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 762 ret <vscale x 2 x i1> %1 763} 764 765define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 766; CHECK-LABEL: fcmp_olt_vv_nxv2f16: 767; CHECK: # %bb.0: 768; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 769; CHECK-NEXT: vmfeq.vv v10, v9, v9 770; CHECK-NEXT: vmfeq.vv v11, v8, v8 771; CHECK-NEXT: vmand.mm v0, v11, v10 772; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 773; CHECK-NEXT: ret 774 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 775 ret <vscale x 2 x i1> %1 776} 777 778define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 779; CHECK-LABEL: fcmp_olt_vf_nxv2f16: 780; CHECK: # %bb.0: 781; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 782; CHECK-NEXT: vfmv.v.f v9, fa0 783; CHECK-NEXT: vmfeq.vv v10, v8, v8 784; CHECK-NEXT: vmfeq.vf v9, v9, fa0 785; CHECK-NEXT: vmand.mm v0, v10, v9 786; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 787; CHECK-NEXT: ret 788 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 789 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 790 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 791 ret <vscale x 2 x i1> %1 792} 793 794define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 795; CHECK-LABEL: fcmp_olt_fv_nxv2f16: 796; CHECK: # %bb.0: 797; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 798; CHECK-NEXT: vfmv.v.f v9, fa0 799; CHECK-NEXT: vmfeq.vv v10, v8, v8 800; CHECK-NEXT: vmfeq.vf v9, v9, fa0 801; CHECK-NEXT: vmand.mm v0, v9, v10 802; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 803; CHECK-NEXT: ret 804 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 805 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 806 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 807 ret <vscale x 2 x i1> %1 808} 809 810define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 811; CHECK-LABEL: fcmp_ole_vv_nxv2f16: 812; CHECK: # %bb.0: 813; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 814; CHECK-NEXT: vmfeq.vv v10, v9, v9 815; CHECK-NEXT: vmfeq.vv v11, v8, v8 816; CHECK-NEXT: vmand.mm v0, v11, v10 817; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 818; CHECK-NEXT: ret 819 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 820 ret <vscale x 2 x i1> %1 821} 822 823define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 824; CHECK-LABEL: fcmp_ole_vf_nxv2f16: 825; CHECK: # %bb.0: 826; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 827; CHECK-NEXT: vfmv.v.f v9, fa0 828; CHECK-NEXT: vmfeq.vv v10, v8, v8 829; CHECK-NEXT: vmfeq.vf v9, v9, fa0 830; CHECK-NEXT: vmand.mm v0, v10, v9 831; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 832; CHECK-NEXT: ret 833 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 834 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 835 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 836 ret <vscale x 2 x i1> %1 837} 838 839define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 840; CHECK-LABEL: fcmp_ole_fv_nxv2f16: 841; CHECK: # %bb.0: 842; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 843; CHECK-NEXT: vfmv.v.f v9, fa0 844; CHECK-NEXT: vmfeq.vv v10, v8, v8 845; CHECK-NEXT: vmfeq.vf v9, v9, fa0 846; CHECK-NEXT: vmand.mm v0, v9, v10 847; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 848; CHECK-NEXT: ret 849 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 850 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 851 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 852 ret <vscale x 2 x i1> %1 853} 854 855define <vscale x 2 x i1> @fcmp_one_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 856; CHECK-LABEL: fcmp_one_vv_nxv2f16: 857; CHECK: # %bb.0: 858; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 859; CHECK-NEXT: vmfeq.vv v10, v9, v9 860; CHECK-NEXT: vmfeq.vv v11, v8, v8 861; CHECK-NEXT: vmand.mm v0, v11, v10 862; CHECK-NEXT: vmv1r.v v10, v0 863; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 864; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 865; CHECK-NEXT: vmor.mm v0, v0, v10 866; CHECK-NEXT: ret 867 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 868 ret <vscale x 2 x i1> %1 869} 870 871define <vscale x 2 x i1> @fcmp_one_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 872; CHECK-LABEL: fcmp_one_vf_nxv2f16: 873; CHECK: # %bb.0: 874; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 875; CHECK-NEXT: vfmv.v.f v9, fa0 876; CHECK-NEXT: vmfeq.vv v10, v8, v8 877; CHECK-NEXT: vmfeq.vf v9, v9, fa0 878; CHECK-NEXT: vmand.mm v0, v10, v9 879; CHECK-NEXT: vmv1r.v v9, v0 880; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 881; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 882; CHECK-NEXT: vmor.mm v0, v0, v9 883; CHECK-NEXT: ret 884 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 885 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 886 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 887 ret <vscale x 2 x i1> %1 888} 889 890define <vscale x 2 x i1> @fcmp_one_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 891; CHECK-LABEL: fcmp_one_fv_nxv2f16: 892; CHECK: # %bb.0: 893; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 894; CHECK-NEXT: vfmv.v.f v9, fa0 895; CHECK-NEXT: vmfeq.vv v10, v8, v8 896; CHECK-NEXT: vmfeq.vf v9, v9, fa0 897; CHECK-NEXT: vmand.mm v0, v9, v10 898; CHECK-NEXT: vmv1r.v v9, v0 899; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 900; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 901; CHECK-NEXT: vmor.mm v0, v0, v9 902; CHECK-NEXT: ret 903 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 904 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 905 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 906 ret <vscale x 2 x i1> %1 907} 908 909define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 910; CHECK-LABEL: fcmp_ord_vv_nxv2f16: 911; CHECK: # %bb.0: 912; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 913; CHECK-NEXT: vmfeq.vv v9, v9, v9 914; CHECK-NEXT: vmfeq.vv v8, v8, v8 915; CHECK-NEXT: vmand.mm v0, v8, v9 916; CHECK-NEXT: ret 917 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 918 ret <vscale x 2 x i1> %1 919} 920 921define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 922; CHECK-LABEL: fcmp_ord_vf_nxv2f16: 923; CHECK: # %bb.0: 924; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 925; CHECK-NEXT: vfmv.v.f v9, fa0 926; CHECK-NEXT: vmfeq.vf v9, v9, fa0 927; CHECK-NEXT: vmfeq.vv v8, v8, v8 928; CHECK-NEXT: vmand.mm v0, v8, v9 929; CHECK-NEXT: ret 930 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 931 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 932 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 933 ret <vscale x 2 x i1> %1 934} 935 936define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 937; CHECK-LABEL: fcmp_ord_fv_nxv2f16: 938; CHECK: # %bb.0: 939; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 940; CHECK-NEXT: vfmv.v.f v9, fa0 941; CHECK-NEXT: vmfeq.vf v9, v9, fa0 942; CHECK-NEXT: vmfeq.vv v8, v8, v8 943; CHECK-NEXT: vmand.mm v0, v9, v8 944; CHECK-NEXT: ret 945 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 946 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 947 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 948 ret <vscale x 2 x i1> %1 949} 950 951define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 952; CHECK-LABEL: fcmp_ueq_vv_nxv2f16: 953; CHECK: # %bb.0: 954; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 955; CHECK-NEXT: vmfeq.vv v10, v9, v9 956; CHECK-NEXT: vmfeq.vv v11, v8, v8 957; CHECK-NEXT: vmand.mm v0, v11, v10 958; CHECK-NEXT: vmv1r.v v10, v0 959; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 960; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 961; CHECK-NEXT: vmnor.mm v0, v0, v10 962; CHECK-NEXT: ret 963 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 964 ret <vscale x 2 x i1> %1 965} 966 967define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 968; CHECK-LABEL: fcmp_ueq_vf_nxv2f16: 969; CHECK: # %bb.0: 970; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 971; CHECK-NEXT: vfmv.v.f v9, fa0 972; CHECK-NEXT: vmfeq.vv v10, v8, v8 973; CHECK-NEXT: vmfeq.vf v9, v9, fa0 974; CHECK-NEXT: vmand.mm v0, v10, v9 975; CHECK-NEXT: vmv1r.v v9, v0 976; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 977; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 978; CHECK-NEXT: vmnor.mm v0, v0, v9 979; CHECK-NEXT: ret 980 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 981 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 982 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 983 ret <vscale x 2 x i1> %1 984} 985 986define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 987; CHECK-LABEL: fcmp_ueq_fv_nxv2f16: 988; CHECK: # %bb.0: 989; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 990; CHECK-NEXT: vfmv.v.f v9, fa0 991; CHECK-NEXT: vmfeq.vv v10, v8, v8 992; CHECK-NEXT: vmfeq.vf v9, v9, fa0 993; CHECK-NEXT: vmand.mm v0, v9, v10 994; CHECK-NEXT: vmv1r.v v9, v0 995; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 996; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 997; CHECK-NEXT: vmnor.mm v0, v0, v9 998; CHECK-NEXT: ret 999 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1000 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1001 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1002 ret <vscale x 2 x i1> %1 1003} 1004 1005define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1006; CHECK-LABEL: fcmp_ugt_vv_nxv2f16: 1007; CHECK: # %bb.0: 1008; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1009; CHECK-NEXT: vmfeq.vv v10, v9, v9 1010; CHECK-NEXT: vmfeq.vv v11, v8, v8 1011; CHECK-NEXT: vmand.mm v0, v11, v10 1012; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1013; CHECK-NEXT: vmnot.m v0, v0 1014; CHECK-NEXT: ret 1015 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1016 ret <vscale x 2 x i1> %1 1017} 1018 1019define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1020; CHECK-LABEL: fcmp_ugt_vf_nxv2f16: 1021; CHECK: # %bb.0: 1022; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1023; CHECK-NEXT: vfmv.v.f v9, fa0 1024; CHECK-NEXT: vmfeq.vv v10, v8, v8 1025; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1026; CHECK-NEXT: vmand.mm v0, v10, v9 1027; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1028; CHECK-NEXT: vmnot.m v0, v0 1029; CHECK-NEXT: ret 1030 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1031 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1032 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1033 ret <vscale x 2 x i1> %1 1034} 1035 1036define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1037; CHECK-LABEL: fcmp_ugt_fv_nxv2f16: 1038; CHECK: # %bb.0: 1039; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1040; CHECK-NEXT: vfmv.v.f v9, fa0 1041; CHECK-NEXT: vmfeq.vv v10, v8, v8 1042; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1043; CHECK-NEXT: vmand.mm v0, v9, v10 1044; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1045; CHECK-NEXT: vmnot.m v0, v0 1046; CHECK-NEXT: ret 1047 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1048 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1049 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1050 ret <vscale x 2 x i1> %1 1051} 1052 1053define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1054; CHECK-LABEL: fcmp_uge_vv_nxv2f16: 1055; CHECK: # %bb.0: 1056; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1057; CHECK-NEXT: vmfeq.vv v10, v9, v9 1058; CHECK-NEXT: vmfeq.vv v11, v8, v8 1059; CHECK-NEXT: vmand.mm v0, v11, v10 1060; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1061; CHECK-NEXT: vmnot.m v0, v0 1062; CHECK-NEXT: ret 1063 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1064 ret <vscale x 2 x i1> %1 1065} 1066 1067define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1068; CHECK-LABEL: fcmp_uge_vf_nxv2f16: 1069; CHECK: # %bb.0: 1070; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1071; CHECK-NEXT: vfmv.v.f v9, fa0 1072; CHECK-NEXT: vmfeq.vv v10, v8, v8 1073; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1074; CHECK-NEXT: vmand.mm v0, v10, v9 1075; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1076; CHECK-NEXT: vmnot.m v0, v0 1077; CHECK-NEXT: ret 1078 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1079 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1080 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1081 ret <vscale x 2 x i1> %1 1082} 1083 1084define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1085; CHECK-LABEL: fcmp_uge_fv_nxv2f16: 1086; CHECK: # %bb.0: 1087; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1088; CHECK-NEXT: vfmv.v.f v9, fa0 1089; CHECK-NEXT: vmfeq.vv v10, v8, v8 1090; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1091; CHECK-NEXT: vmand.mm v0, v9, v10 1092; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1093; CHECK-NEXT: vmnot.m v0, v0 1094; CHECK-NEXT: ret 1095 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1096 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1097 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1098 ret <vscale x 2 x i1> %1 1099} 1100 1101define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1102; CHECK-LABEL: fcmp_ult_vv_nxv2f16: 1103; CHECK: # %bb.0: 1104; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1105; CHECK-NEXT: vmfeq.vv v10, v8, v8 1106; CHECK-NEXT: vmfeq.vv v11, v9, v9 1107; CHECK-NEXT: vmand.mm v0, v11, v10 1108; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1109; CHECK-NEXT: vmnot.m v0, v0 1110; CHECK-NEXT: ret 1111 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1112 ret <vscale x 2 x i1> %1 1113} 1114 1115define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1116; CHECK-LABEL: fcmp_ult_vf_nxv2f16: 1117; CHECK: # %bb.0: 1118; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1119; CHECK-NEXT: vfmv.v.f v9, fa0 1120; CHECK-NEXT: vmfeq.vv v10, v8, v8 1121; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1122; CHECK-NEXT: vmand.mm v0, v9, v10 1123; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1124; CHECK-NEXT: vmnot.m v0, v0 1125; CHECK-NEXT: ret 1126 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1127 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1128 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1129 ret <vscale x 2 x i1> %1 1130} 1131 1132define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1133; CHECK-LABEL: fcmp_ult_fv_nxv2f16: 1134; CHECK: # %bb.0: 1135; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1136; CHECK-NEXT: vfmv.v.f v9, fa0 1137; CHECK-NEXT: vmfeq.vv v10, v8, v8 1138; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1139; CHECK-NEXT: vmand.mm v0, v10, v9 1140; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1141; CHECK-NEXT: vmnot.m v0, v0 1142; CHECK-NEXT: ret 1143 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1144 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1145 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 1146 ret <vscale x 2 x i1> %1 1147} 1148 1149define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1150; CHECK-LABEL: fcmp_ule_vv_nxv2f16: 1151; CHECK: # %bb.0: 1152; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1153; CHECK-NEXT: vmfeq.vv v10, v8, v8 1154; CHECK-NEXT: vmfeq.vv v11, v9, v9 1155; CHECK-NEXT: vmand.mm v0, v11, v10 1156; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1157; CHECK-NEXT: vmnot.m v0, v0 1158; CHECK-NEXT: ret 1159 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 1160 ret <vscale x 2 x i1> %1 1161} 1162 1163define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1164; CHECK-LABEL: fcmp_ule_vf_nxv2f16: 1165; CHECK: # %bb.0: 1166; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1167; CHECK-NEXT: vfmv.v.f v9, fa0 1168; CHECK-NEXT: vmfeq.vv v10, v8, v8 1169; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1170; CHECK-NEXT: vmand.mm v0, v9, v10 1171; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1172; CHECK-NEXT: vmnot.m v0, v0 1173; CHECK-NEXT: ret 1174 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1175 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1176 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 1177 ret <vscale x 2 x i1> %1 1178} 1179 1180define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1181; CHECK-LABEL: fcmp_ule_fv_nxv2f16: 1182; CHECK: # %bb.0: 1183; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1184; CHECK-NEXT: vfmv.v.f v9, fa0 1185; CHECK-NEXT: vmfeq.vv v10, v8, v8 1186; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1187; CHECK-NEXT: vmand.mm v0, v10, v9 1188; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1189; CHECK-NEXT: vmnot.m v0, v0 1190; CHECK-NEXT: ret 1191 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1192 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1193 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 1194 ret <vscale x 2 x i1> %1 1195} 1196 1197define <vscale x 2 x i1> @fcmp_une_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1198; CHECK-LABEL: fcmp_une_vv_nxv2f16: 1199; CHECK: # %bb.0: 1200; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1201; CHECK-NEXT: vmfne.vv v0, v8, v9 1202; CHECK-NEXT: ret 1203 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 1204 ret <vscale x 2 x i1> %1 1205} 1206 1207define <vscale x 2 x i1> @fcmp_une_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1208; CHECK-LABEL: fcmp_une_vf_nxv2f16: 1209; CHECK: # %bb.0: 1210; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1211; CHECK-NEXT: vmfne.vf v0, v8, fa0 1212; CHECK-NEXT: ret 1213 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1214 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1215 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1216 ret <vscale x 2 x i1> %1 1217} 1218 1219define <vscale x 2 x i1> @fcmp_une_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1220; CHECK-LABEL: fcmp_une_fv_nxv2f16: 1221; CHECK: # %bb.0: 1222; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1223; CHECK-NEXT: vmfne.vf v0, v8, fa0 1224; CHECK-NEXT: ret 1225 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1226 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1227 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1228 ret <vscale x 2 x i1> %1 1229} 1230 1231define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) nounwind strictfp { 1232; CHECK-LABEL: fcmp_uno_vv_nxv2f16: 1233; CHECK: # %bb.0: 1234; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1235; CHECK-NEXT: vmfne.vv v9, v9, v9 1236; CHECK-NEXT: vmfne.vv v8, v8, v8 1237; CHECK-NEXT: vmor.mm v0, v8, v9 1238; CHECK-NEXT: ret 1239 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1240 ret <vscale x 2 x i1> %1 1241} 1242 1243define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1244; CHECK-LABEL: fcmp_uno_vf_nxv2f16: 1245; CHECK: # %bb.0: 1246; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1247; CHECK-NEXT: vfmv.v.f v9, fa0 1248; CHECK-NEXT: vmfne.vf v9, v9, fa0 1249; CHECK-NEXT: vmfne.vv v8, v8, v8 1250; CHECK-NEXT: vmor.mm v0, v8, v9 1251; CHECK-NEXT: ret 1252 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1253 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1254 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1255 ret <vscale x 2 x i1> %1 1256} 1257 1258define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f16(<vscale x 2 x half> %va, half %b) nounwind strictfp { 1259; CHECK-LABEL: fcmp_uno_fv_nxv2f16: 1260; CHECK: # %bb.0: 1261; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 1262; CHECK-NEXT: vfmv.v.f v9, fa0 1263; CHECK-NEXT: vmfne.vf v9, v9, fa0 1264; CHECK-NEXT: vmfne.vv v8, v8, v8 1265; CHECK-NEXT: vmor.mm v0, v9, v8 1266; CHECK-NEXT: ret 1267 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1268 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1269 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1270 ret <vscale x 2 x i1> %1 1271} 1272 1273declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata) 1274define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1275; CHECK-LABEL: fcmp_oeq_vv_nxv4f16: 1276; CHECK: # %bb.0: 1277; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1278; CHECK-NEXT: vmfeq.vv v0, v8, v9 1279; CHECK-NEXT: ret 1280 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1281 ret <vscale x 4 x i1> %1 1282} 1283 1284define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1285; CHECK-LABEL: fcmp_oeq_vf_nxv4f16: 1286; CHECK: # %bb.0: 1287; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1288; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1289; CHECK-NEXT: ret 1290 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1291 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1292 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1293 ret <vscale x 4 x i1> %1 1294} 1295 1296define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1297; CHECK-LABEL: fcmp_oeq_fv_nxv4f16: 1298; CHECK: # %bb.0: 1299; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1300; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1301; CHECK-NEXT: ret 1302 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1303 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1304 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1305 ret <vscale x 4 x i1> %1 1306} 1307 1308define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1309; CHECK-LABEL: fcmp_ogt_vv_nxv4f16: 1310; CHECK: # %bb.0: 1311; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1312; CHECK-NEXT: vmfeq.vv v10, v8, v8 1313; CHECK-NEXT: vmfeq.vv v11, v9, v9 1314; CHECK-NEXT: vmand.mm v0, v11, v10 1315; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1316; CHECK-NEXT: ret 1317 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1318 ret <vscale x 4 x i1> %1 1319} 1320 1321define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1322; CHECK-LABEL: fcmp_ogt_vf_nxv4f16: 1323; CHECK: # %bb.0: 1324; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1325; CHECK-NEXT: vfmv.v.f v9, fa0 1326; CHECK-NEXT: vmfeq.vv v10, v8, v8 1327; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1328; CHECK-NEXT: vmand.mm v0, v9, v10 1329; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1330; CHECK-NEXT: ret 1331 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1332 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1333 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1334 ret <vscale x 4 x i1> %1 1335} 1336 1337define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1338; CHECK-LABEL: fcmp_ogt_fv_nxv4f16: 1339; CHECK: # %bb.0: 1340; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1341; CHECK-NEXT: vfmv.v.f v9, fa0 1342; CHECK-NEXT: vmfeq.vv v10, v8, v8 1343; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1344; CHECK-NEXT: vmand.mm v0, v10, v9 1345; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1346; CHECK-NEXT: ret 1347 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1348 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1349 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1350 ret <vscale x 4 x i1> %1 1351} 1352 1353define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1354; CHECK-LABEL: fcmp_oge_vv_nxv4f16: 1355; CHECK: # %bb.0: 1356; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1357; CHECK-NEXT: vmfeq.vv v10, v8, v8 1358; CHECK-NEXT: vmfeq.vv v11, v9, v9 1359; CHECK-NEXT: vmand.mm v0, v11, v10 1360; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1361; CHECK-NEXT: ret 1362 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 1363 ret <vscale x 4 x i1> %1 1364} 1365 1366define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1367; CHECK-LABEL: fcmp_oge_vf_nxv4f16: 1368; CHECK: # %bb.0: 1369; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1370; CHECK-NEXT: vfmv.v.f v9, fa0 1371; CHECK-NEXT: vmfeq.vv v10, v8, v8 1372; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1373; CHECK-NEXT: vmand.mm v0, v9, v10 1374; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1375; CHECK-NEXT: ret 1376 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1377 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1378 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 1379 ret <vscale x 4 x i1> %1 1380} 1381 1382define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1383; CHECK-LABEL: fcmp_oge_fv_nxv4f16: 1384; CHECK: # %bb.0: 1385; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1386; CHECK-NEXT: vfmv.v.f v9, fa0 1387; CHECK-NEXT: vmfeq.vv v10, v8, v8 1388; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1389; CHECK-NEXT: vmand.mm v0, v10, v9 1390; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1391; CHECK-NEXT: ret 1392 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1393 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1394 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 1395 ret <vscale x 4 x i1> %1 1396} 1397 1398define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1399; CHECK-LABEL: fcmp_olt_vv_nxv4f16: 1400; CHECK: # %bb.0: 1401; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1402; CHECK-NEXT: vmfeq.vv v10, v9, v9 1403; CHECK-NEXT: vmfeq.vv v11, v8, v8 1404; CHECK-NEXT: vmand.mm v0, v11, v10 1405; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1406; CHECK-NEXT: ret 1407 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 1408 ret <vscale x 4 x i1> %1 1409} 1410 1411define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1412; CHECK-LABEL: fcmp_olt_vf_nxv4f16: 1413; CHECK: # %bb.0: 1414; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1415; CHECK-NEXT: vfmv.v.f v9, fa0 1416; CHECK-NEXT: vmfeq.vv v10, v8, v8 1417; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1418; CHECK-NEXT: vmand.mm v0, v10, v9 1419; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1420; CHECK-NEXT: ret 1421 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1422 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1423 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 1424 ret <vscale x 4 x i1> %1 1425} 1426 1427define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1428; CHECK-LABEL: fcmp_olt_fv_nxv4f16: 1429; CHECK: # %bb.0: 1430; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1431; CHECK-NEXT: vfmv.v.f v9, fa0 1432; CHECK-NEXT: vmfeq.vv v10, v8, v8 1433; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1434; CHECK-NEXT: vmand.mm v0, v9, v10 1435; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1436; CHECK-NEXT: ret 1437 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1438 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1439 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 1440 ret <vscale x 4 x i1> %1 1441} 1442 1443define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1444; CHECK-LABEL: fcmp_ole_vv_nxv4f16: 1445; CHECK: # %bb.0: 1446; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1447; CHECK-NEXT: vmfeq.vv v10, v9, v9 1448; CHECK-NEXT: vmfeq.vv v11, v8, v8 1449; CHECK-NEXT: vmand.mm v0, v11, v10 1450; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1451; CHECK-NEXT: ret 1452 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 1453 ret <vscale x 4 x i1> %1 1454} 1455 1456define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1457; CHECK-LABEL: fcmp_ole_vf_nxv4f16: 1458; CHECK: # %bb.0: 1459; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1460; CHECK-NEXT: vfmv.v.f v9, fa0 1461; CHECK-NEXT: vmfeq.vv v10, v8, v8 1462; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1463; CHECK-NEXT: vmand.mm v0, v10, v9 1464; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1465; CHECK-NEXT: ret 1466 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1467 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1468 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 1469 ret <vscale x 4 x i1> %1 1470} 1471 1472define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1473; CHECK-LABEL: fcmp_ole_fv_nxv4f16: 1474; CHECK: # %bb.0: 1475; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1476; CHECK-NEXT: vfmv.v.f v9, fa0 1477; CHECK-NEXT: vmfeq.vv v10, v8, v8 1478; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1479; CHECK-NEXT: vmand.mm v0, v9, v10 1480; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1481; CHECK-NEXT: ret 1482 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1483 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1484 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 1485 ret <vscale x 4 x i1> %1 1486} 1487 1488define <vscale x 4 x i1> @fcmp_one_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1489; CHECK-LABEL: fcmp_one_vv_nxv4f16: 1490; CHECK: # %bb.0: 1491; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1492; CHECK-NEXT: vmfeq.vv v10, v9, v9 1493; CHECK-NEXT: vmfeq.vv v11, v8, v8 1494; CHECK-NEXT: vmand.mm v0, v11, v10 1495; CHECK-NEXT: vmv.v.v v10, v0 1496; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 1497; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1498; CHECK-NEXT: vmor.mm v0, v0, v10 1499; CHECK-NEXT: ret 1500 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 1501 ret <vscale x 4 x i1> %1 1502} 1503 1504define <vscale x 4 x i1> @fcmp_one_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1505; CHECK-LABEL: fcmp_one_vf_nxv4f16: 1506; CHECK: # %bb.0: 1507; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1508; CHECK-NEXT: vfmv.v.f v9, fa0 1509; CHECK-NEXT: vmfeq.vv v10, v8, v8 1510; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1511; CHECK-NEXT: vmand.mm v0, v10, v9 1512; CHECK-NEXT: vmv.v.v v9, v0 1513; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 1514; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1515; CHECK-NEXT: vmor.mm v0, v0, v9 1516; CHECK-NEXT: ret 1517 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1518 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1519 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 1520 ret <vscale x 4 x i1> %1 1521} 1522 1523define <vscale x 4 x i1> @fcmp_one_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1524; CHECK-LABEL: fcmp_one_fv_nxv4f16: 1525; CHECK: # %bb.0: 1526; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1527; CHECK-NEXT: vfmv.v.f v9, fa0 1528; CHECK-NEXT: vmfeq.vv v10, v8, v8 1529; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1530; CHECK-NEXT: vmand.mm v0, v9, v10 1531; CHECK-NEXT: vmv.v.v v9, v0 1532; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 1533; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1534; CHECK-NEXT: vmor.mm v0, v0, v9 1535; CHECK-NEXT: ret 1536 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1537 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1538 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 1539 ret <vscale x 4 x i1> %1 1540} 1541 1542define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1543; CHECK-LABEL: fcmp_ord_vv_nxv4f16: 1544; CHECK: # %bb.0: 1545; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1546; CHECK-NEXT: vmfeq.vv v9, v9, v9 1547; CHECK-NEXT: vmfeq.vv v8, v8, v8 1548; CHECK-NEXT: vmand.mm v0, v8, v9 1549; CHECK-NEXT: ret 1550 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 1551 ret <vscale x 4 x i1> %1 1552} 1553 1554define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1555; CHECK-LABEL: fcmp_ord_vf_nxv4f16: 1556; CHECK: # %bb.0: 1557; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1558; CHECK-NEXT: vfmv.v.f v9, fa0 1559; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1560; CHECK-NEXT: vmfeq.vv v8, v8, v8 1561; CHECK-NEXT: vmand.mm v0, v8, v9 1562; CHECK-NEXT: ret 1563 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1564 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1565 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 1566 ret <vscale x 4 x i1> %1 1567} 1568 1569define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1570; CHECK-LABEL: fcmp_ord_fv_nxv4f16: 1571; CHECK: # %bb.0: 1572; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1573; CHECK-NEXT: vfmv.v.f v9, fa0 1574; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1575; CHECK-NEXT: vmfeq.vv v8, v8, v8 1576; CHECK-NEXT: vmand.mm v0, v9, v8 1577; CHECK-NEXT: ret 1578 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1579 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1580 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 1581 ret <vscale x 4 x i1> %1 1582} 1583 1584define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1585; CHECK-LABEL: fcmp_ueq_vv_nxv4f16: 1586; CHECK: # %bb.0: 1587; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1588; CHECK-NEXT: vmfeq.vv v10, v9, v9 1589; CHECK-NEXT: vmfeq.vv v11, v8, v8 1590; CHECK-NEXT: vmand.mm v0, v11, v10 1591; CHECK-NEXT: vmv.v.v v10, v0 1592; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 1593; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1594; CHECK-NEXT: vmnor.mm v0, v0, v10 1595; CHECK-NEXT: ret 1596 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1597 ret <vscale x 4 x i1> %1 1598} 1599 1600define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1601; CHECK-LABEL: fcmp_ueq_vf_nxv4f16: 1602; CHECK: # %bb.0: 1603; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1604; CHECK-NEXT: vfmv.v.f v9, fa0 1605; CHECK-NEXT: vmfeq.vv v10, v8, v8 1606; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1607; CHECK-NEXT: vmand.mm v0, v10, v9 1608; CHECK-NEXT: vmv.v.v v9, v0 1609; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 1610; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1611; CHECK-NEXT: vmnor.mm v0, v0, v9 1612; CHECK-NEXT: ret 1613 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1614 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1615 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1616 ret <vscale x 4 x i1> %1 1617} 1618 1619define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1620; CHECK-LABEL: fcmp_ueq_fv_nxv4f16: 1621; CHECK: # %bb.0: 1622; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1623; CHECK-NEXT: vfmv.v.f v9, fa0 1624; CHECK-NEXT: vmfeq.vv v10, v8, v8 1625; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1626; CHECK-NEXT: vmand.mm v0, v9, v10 1627; CHECK-NEXT: vmv.v.v v9, v0 1628; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 1629; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1630; CHECK-NEXT: vmnor.mm v0, v0, v9 1631; CHECK-NEXT: ret 1632 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1633 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1634 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1635 ret <vscale x 4 x i1> %1 1636} 1637 1638define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1639; CHECK-LABEL: fcmp_ugt_vv_nxv4f16: 1640; CHECK: # %bb.0: 1641; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1642; CHECK-NEXT: vmfeq.vv v10, v9, v9 1643; CHECK-NEXT: vmfeq.vv v11, v8, v8 1644; CHECK-NEXT: vmand.mm v0, v11, v10 1645; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1646; CHECK-NEXT: vmnot.m v0, v0 1647; CHECK-NEXT: ret 1648 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1649 ret <vscale x 4 x i1> %1 1650} 1651 1652define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1653; CHECK-LABEL: fcmp_ugt_vf_nxv4f16: 1654; CHECK: # %bb.0: 1655; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1656; CHECK-NEXT: vfmv.v.f v9, fa0 1657; CHECK-NEXT: vmfeq.vv v10, v8, v8 1658; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1659; CHECK-NEXT: vmand.mm v0, v10, v9 1660; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1661; CHECK-NEXT: vmnot.m v0, v0 1662; CHECK-NEXT: ret 1663 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1664 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1665 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1666 ret <vscale x 4 x i1> %1 1667} 1668 1669define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1670; CHECK-LABEL: fcmp_ugt_fv_nxv4f16: 1671; CHECK: # %bb.0: 1672; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1673; CHECK-NEXT: vfmv.v.f v9, fa0 1674; CHECK-NEXT: vmfeq.vv v10, v8, v8 1675; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1676; CHECK-NEXT: vmand.mm v0, v9, v10 1677; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1678; CHECK-NEXT: vmnot.m v0, v0 1679; CHECK-NEXT: ret 1680 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1681 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1682 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1683 ret <vscale x 4 x i1> %1 1684} 1685 1686define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1687; CHECK-LABEL: fcmp_uge_vv_nxv4f16: 1688; CHECK: # %bb.0: 1689; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1690; CHECK-NEXT: vmfeq.vv v10, v9, v9 1691; CHECK-NEXT: vmfeq.vv v11, v8, v8 1692; CHECK-NEXT: vmand.mm v0, v11, v10 1693; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1694; CHECK-NEXT: vmnot.m v0, v0 1695; CHECK-NEXT: ret 1696 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1697 ret <vscale x 4 x i1> %1 1698} 1699 1700define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1701; CHECK-LABEL: fcmp_uge_vf_nxv4f16: 1702; CHECK: # %bb.0: 1703; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1704; CHECK-NEXT: vfmv.v.f v9, fa0 1705; CHECK-NEXT: vmfeq.vv v10, v8, v8 1706; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1707; CHECK-NEXT: vmand.mm v0, v10, v9 1708; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1709; CHECK-NEXT: vmnot.m v0, v0 1710; CHECK-NEXT: ret 1711 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1712 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1713 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1714 ret <vscale x 4 x i1> %1 1715} 1716 1717define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1718; CHECK-LABEL: fcmp_uge_fv_nxv4f16: 1719; CHECK: # %bb.0: 1720; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1721; CHECK-NEXT: vfmv.v.f v9, fa0 1722; CHECK-NEXT: vmfeq.vv v10, v8, v8 1723; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1724; CHECK-NEXT: vmand.mm v0, v9, v10 1725; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1726; CHECK-NEXT: vmnot.m v0, v0 1727; CHECK-NEXT: ret 1728 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1729 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1730 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1731 ret <vscale x 4 x i1> %1 1732} 1733 1734define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1735; CHECK-LABEL: fcmp_ult_vv_nxv4f16: 1736; CHECK: # %bb.0: 1737; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1738; CHECK-NEXT: vmfeq.vv v10, v8, v8 1739; CHECK-NEXT: vmfeq.vv v11, v9, v9 1740; CHECK-NEXT: vmand.mm v0, v11, v10 1741; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1742; CHECK-NEXT: vmnot.m v0, v0 1743; CHECK-NEXT: ret 1744 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1745 ret <vscale x 4 x i1> %1 1746} 1747 1748define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1749; CHECK-LABEL: fcmp_ult_vf_nxv4f16: 1750; CHECK: # %bb.0: 1751; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1752; CHECK-NEXT: vfmv.v.f v9, fa0 1753; CHECK-NEXT: vmfeq.vv v10, v8, v8 1754; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1755; CHECK-NEXT: vmand.mm v0, v9, v10 1756; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1757; CHECK-NEXT: vmnot.m v0, v0 1758; CHECK-NEXT: ret 1759 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1760 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1761 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1762 ret <vscale x 4 x i1> %1 1763} 1764 1765define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1766; CHECK-LABEL: fcmp_ult_fv_nxv4f16: 1767; CHECK: # %bb.0: 1768; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1769; CHECK-NEXT: vfmv.v.f v9, fa0 1770; CHECK-NEXT: vmfeq.vv v10, v8, v8 1771; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1772; CHECK-NEXT: vmand.mm v0, v10, v9 1773; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1774; CHECK-NEXT: vmnot.m v0, v0 1775; CHECK-NEXT: ret 1776 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1777 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1778 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 1779 ret <vscale x 4 x i1> %1 1780} 1781 1782define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1783; CHECK-LABEL: fcmp_ule_vv_nxv4f16: 1784; CHECK: # %bb.0: 1785; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1786; CHECK-NEXT: vmfeq.vv v10, v8, v8 1787; CHECK-NEXT: vmfeq.vv v11, v9, v9 1788; CHECK-NEXT: vmand.mm v0, v11, v10 1789; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1790; CHECK-NEXT: vmnot.m v0, v0 1791; CHECK-NEXT: ret 1792 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 1793 ret <vscale x 4 x i1> %1 1794} 1795 1796define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1797; CHECK-LABEL: fcmp_ule_vf_nxv4f16: 1798; CHECK: # %bb.0: 1799; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1800; CHECK-NEXT: vfmv.v.f v9, fa0 1801; CHECK-NEXT: vmfeq.vv v10, v8, v8 1802; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1803; CHECK-NEXT: vmand.mm v0, v9, v10 1804; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1805; CHECK-NEXT: vmnot.m v0, v0 1806; CHECK-NEXT: ret 1807 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1808 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1809 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 1810 ret <vscale x 4 x i1> %1 1811} 1812 1813define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1814; CHECK-LABEL: fcmp_ule_fv_nxv4f16: 1815; CHECK: # %bb.0: 1816; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1817; CHECK-NEXT: vfmv.v.f v9, fa0 1818; CHECK-NEXT: vmfeq.vv v10, v8, v8 1819; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1820; CHECK-NEXT: vmand.mm v0, v10, v9 1821; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1822; CHECK-NEXT: vmnot.m v0, v0 1823; CHECK-NEXT: ret 1824 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1825 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1826 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 1827 ret <vscale x 4 x i1> %1 1828} 1829 1830define <vscale x 4 x i1> @fcmp_une_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1831; CHECK-LABEL: fcmp_une_vv_nxv4f16: 1832; CHECK: # %bb.0: 1833; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1834; CHECK-NEXT: vmfne.vv v0, v8, v9 1835; CHECK-NEXT: ret 1836 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 1837 ret <vscale x 4 x i1> %1 1838} 1839 1840define <vscale x 4 x i1> @fcmp_une_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1841; CHECK-LABEL: fcmp_une_vf_nxv4f16: 1842; CHECK: # %bb.0: 1843; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1844; CHECK-NEXT: vmfne.vf v0, v8, fa0 1845; CHECK-NEXT: ret 1846 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1847 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1848 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1849 ret <vscale x 4 x i1> %1 1850} 1851 1852define <vscale x 4 x i1> @fcmp_une_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1853; CHECK-LABEL: fcmp_une_fv_nxv4f16: 1854; CHECK: # %bb.0: 1855; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1856; CHECK-NEXT: vmfne.vf v0, v8, fa0 1857; CHECK-NEXT: ret 1858 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1859 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1860 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1861 ret <vscale x 4 x i1> %1 1862} 1863 1864define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) nounwind strictfp { 1865; CHECK-LABEL: fcmp_uno_vv_nxv4f16: 1866; CHECK: # %bb.0: 1867; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1868; CHECK-NEXT: vmfne.vv v9, v9, v9 1869; CHECK-NEXT: vmfne.vv v8, v8, v8 1870; CHECK-NEXT: vmor.mm v0, v8, v9 1871; CHECK-NEXT: ret 1872 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1873 ret <vscale x 4 x i1> %1 1874} 1875 1876define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1877; CHECK-LABEL: fcmp_uno_vf_nxv4f16: 1878; CHECK: # %bb.0: 1879; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1880; CHECK-NEXT: vfmv.v.f v9, fa0 1881; CHECK-NEXT: vmfne.vf v9, v9, fa0 1882; CHECK-NEXT: vmfne.vv v8, v8, v8 1883; CHECK-NEXT: vmor.mm v0, v8, v9 1884; CHECK-NEXT: ret 1885 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1886 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1887 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1888 ret <vscale x 4 x i1> %1 1889} 1890 1891define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f16(<vscale x 4 x half> %va, half %b) nounwind strictfp { 1892; CHECK-LABEL: fcmp_uno_fv_nxv4f16: 1893; CHECK: # %bb.0: 1894; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 1895; CHECK-NEXT: vfmv.v.f v9, fa0 1896; CHECK-NEXT: vmfne.vf v9, v9, fa0 1897; CHECK-NEXT: vmfne.vv v8, v8, v8 1898; CHECK-NEXT: vmor.mm v0, v9, v8 1899; CHECK-NEXT: ret 1900 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0 1901 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 1902 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f16(<vscale x 4 x half> %splat, <vscale x 4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1903 ret <vscale x 4 x i1> %1 1904} 1905 1906declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata) 1907define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 1908; CHECK-LABEL: fcmp_oeq_vv_nxv8f16: 1909; CHECK: # %bb.0: 1910; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 1911; CHECK-NEXT: vmfeq.vv v0, v8, v10 1912; CHECK-NEXT: ret 1913 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1914 ret <vscale x 8 x i1> %1 1915} 1916 1917define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 1918; CHECK-LABEL: fcmp_oeq_vf_nxv8f16: 1919; CHECK: # %bb.0: 1920; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 1921; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1922; CHECK-NEXT: ret 1923 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 1924 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 1925 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1926 ret <vscale x 8 x i1> %1 1927} 1928 1929define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 1930; CHECK-LABEL: fcmp_oeq_fv_nxv8f16: 1931; CHECK: # %bb.0: 1932; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 1933; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1934; CHECK-NEXT: ret 1935 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 1936 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 1937 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1938 ret <vscale x 8 x i1> %1 1939} 1940 1941define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 1942; CHECK-LABEL: fcmp_ogt_vv_nxv8f16: 1943; CHECK: # %bb.0: 1944; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1945; CHECK-NEXT: vmfeq.vv v12, v8, v8 1946; CHECK-NEXT: vmfeq.vv v13, v10, v10 1947; CHECK-NEXT: vmand.mm v12, v13, v12 1948; CHECK-NEXT: vmv1r.v v0, v12 1949; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 1950; CHECK-NEXT: vmv1r.v v0, v12 1951; CHECK-NEXT: ret 1952 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1953 ret <vscale x 8 x i1> %1 1954} 1955 1956define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 1957; CHECK-LABEL: fcmp_ogt_vf_nxv8f16: 1958; CHECK: # %bb.0: 1959; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1960; CHECK-NEXT: vfmv.v.f v10, fa0 1961; CHECK-NEXT: vmfeq.vf v12, v10, fa0 1962; CHECK-NEXT: vmfeq.vv v10, v8, v8 1963; CHECK-NEXT: vmand.mm v10, v12, v10 1964; CHECK-NEXT: vmv1r.v v0, v10 1965; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 1966; CHECK-NEXT: vmv1r.v v0, v10 1967; CHECK-NEXT: ret 1968 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 1969 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 1970 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1971 ret <vscale x 8 x i1> %1 1972} 1973 1974define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 1975; CHECK-LABEL: fcmp_ogt_fv_nxv8f16: 1976; CHECK: # %bb.0: 1977; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1978; CHECK-NEXT: vfmv.v.f v10, fa0 1979; CHECK-NEXT: vmfeq.vf v12, v10, fa0 1980; CHECK-NEXT: vmfeq.vv v10, v8, v8 1981; CHECK-NEXT: vmand.mm v10, v10, v12 1982; CHECK-NEXT: vmv1r.v v0, v10 1983; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 1984; CHECK-NEXT: vmv1r.v v0, v10 1985; CHECK-NEXT: ret 1986 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 1987 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 1988 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1989 ret <vscale x 8 x i1> %1 1990} 1991 1992define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 1993; CHECK-LABEL: fcmp_oge_vv_nxv8f16: 1994; CHECK: # %bb.0: 1995; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1996; CHECK-NEXT: vmfeq.vv v12, v8, v8 1997; CHECK-NEXT: vmfeq.vv v13, v10, v10 1998; CHECK-NEXT: vmand.mm v12, v13, v12 1999; CHECK-NEXT: vmv1r.v v0, v12 2000; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 2001; CHECK-NEXT: vmv1r.v v0, v12 2002; CHECK-NEXT: ret 2003 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 2004 ret <vscale x 8 x i1> %1 2005} 2006 2007define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2008; CHECK-LABEL: fcmp_oge_vf_nxv8f16: 2009; CHECK: # %bb.0: 2010; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2011; CHECK-NEXT: vfmv.v.f v10, fa0 2012; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2013; CHECK-NEXT: vmfeq.vv v10, v8, v8 2014; CHECK-NEXT: vmand.mm v10, v12, v10 2015; CHECK-NEXT: vmv1r.v v0, v10 2016; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2017; CHECK-NEXT: vmv1r.v v0, v10 2018; CHECK-NEXT: ret 2019 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2020 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2021 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2022 ret <vscale x 8 x i1> %1 2023} 2024 2025define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2026; CHECK-LABEL: fcmp_oge_fv_nxv8f16: 2027; CHECK: # %bb.0: 2028; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2029; CHECK-NEXT: vfmv.v.f v10, fa0 2030; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2031; CHECK-NEXT: vmfeq.vv v10, v8, v8 2032; CHECK-NEXT: vmand.mm v10, v10, v12 2033; CHECK-NEXT: vmv1r.v v0, v10 2034; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2035; CHECK-NEXT: vmv1r.v v0, v10 2036; CHECK-NEXT: ret 2037 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2038 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2039 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2040 ret <vscale x 8 x i1> %1 2041} 2042 2043define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2044; CHECK-LABEL: fcmp_olt_vv_nxv8f16: 2045; CHECK: # %bb.0: 2046; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2047; CHECK-NEXT: vmfeq.vv v12, v10, v10 2048; CHECK-NEXT: vmfeq.vv v13, v8, v8 2049; CHECK-NEXT: vmand.mm v12, v13, v12 2050; CHECK-NEXT: vmv1r.v v0, v12 2051; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 2052; CHECK-NEXT: vmv1r.v v0, v12 2053; CHECK-NEXT: ret 2054 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2055 ret <vscale x 8 x i1> %1 2056} 2057 2058define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2059; CHECK-LABEL: fcmp_olt_vf_nxv8f16: 2060; CHECK: # %bb.0: 2061; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2062; CHECK-NEXT: vfmv.v.f v10, fa0 2063; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2064; CHECK-NEXT: vmfeq.vv v10, v8, v8 2065; CHECK-NEXT: vmand.mm v10, v10, v12 2066; CHECK-NEXT: vmv1r.v v0, v10 2067; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2068; CHECK-NEXT: vmv1r.v v0, v10 2069; CHECK-NEXT: ret 2070 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2071 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2072 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2073 ret <vscale x 8 x i1> %1 2074} 2075 2076define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2077; CHECK-LABEL: fcmp_olt_fv_nxv8f16: 2078; CHECK: # %bb.0: 2079; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2080; CHECK-NEXT: vfmv.v.f v10, fa0 2081; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2082; CHECK-NEXT: vmfeq.vv v10, v8, v8 2083; CHECK-NEXT: vmand.mm v10, v12, v10 2084; CHECK-NEXT: vmv1r.v v0, v10 2085; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2086; CHECK-NEXT: vmv1r.v v0, v10 2087; CHECK-NEXT: ret 2088 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2089 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2090 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2091 ret <vscale x 8 x i1> %1 2092} 2093 2094define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2095; CHECK-LABEL: fcmp_ole_vv_nxv8f16: 2096; CHECK: # %bb.0: 2097; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2098; CHECK-NEXT: vmfeq.vv v12, v10, v10 2099; CHECK-NEXT: vmfeq.vv v13, v8, v8 2100; CHECK-NEXT: vmand.mm v12, v13, v12 2101; CHECK-NEXT: vmv1r.v v0, v12 2102; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 2103; CHECK-NEXT: vmv1r.v v0, v12 2104; CHECK-NEXT: ret 2105 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2106 ret <vscale x 8 x i1> %1 2107} 2108 2109define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2110; CHECK-LABEL: fcmp_ole_vf_nxv8f16: 2111; CHECK: # %bb.0: 2112; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2113; CHECK-NEXT: vfmv.v.f v10, fa0 2114; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2115; CHECK-NEXT: vmfeq.vv v10, v8, v8 2116; CHECK-NEXT: vmand.mm v10, v10, v12 2117; CHECK-NEXT: vmv1r.v v0, v10 2118; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2119; CHECK-NEXT: vmv1r.v v0, v10 2120; CHECK-NEXT: ret 2121 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2122 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2123 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2124 ret <vscale x 8 x i1> %1 2125} 2126 2127define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2128; CHECK-LABEL: fcmp_ole_fv_nxv8f16: 2129; CHECK: # %bb.0: 2130; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2131; CHECK-NEXT: vfmv.v.f v10, fa0 2132; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2133; CHECK-NEXT: vmfeq.vv v10, v8, v8 2134; CHECK-NEXT: vmand.mm v10, v12, v10 2135; CHECK-NEXT: vmv1r.v v0, v10 2136; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2137; CHECK-NEXT: vmv1r.v v0, v10 2138; CHECK-NEXT: ret 2139 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2140 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2141 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2142 ret <vscale x 8 x i1> %1 2143} 2144 2145define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2146; CHECK-LABEL: fcmp_one_vv_nxv8f16: 2147; CHECK: # %bb.0: 2148; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2149; CHECK-NEXT: vmfeq.vv v12, v10, v10 2150; CHECK-NEXT: vmfeq.vv v13, v8, v8 2151; CHECK-NEXT: vmand.mm v12, v13, v12 2152; CHECK-NEXT: vmv1r.v v13, v12 2153; CHECK-NEXT: vmv1r.v v0, v12 2154; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 2155; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2156; CHECK-NEXT: vmor.mm v0, v12, v13 2157; CHECK-NEXT: ret 2158 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2159 ret <vscale x 8 x i1> %1 2160} 2161 2162define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2163; CHECK-LABEL: fcmp_one_vf_nxv8f16: 2164; CHECK: # %bb.0: 2165; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2166; CHECK-NEXT: vfmv.v.f v10, fa0 2167; CHECK-NEXT: vmfeq.vv v12, v8, v8 2168; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2169; CHECK-NEXT: vmand.mm v10, v12, v13 2170; CHECK-NEXT: vmv1r.v v11, v10 2171; CHECK-NEXT: vmv1r.v v0, v10 2172; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 2173; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2174; CHECK-NEXT: vmor.mm v0, v10, v11 2175; CHECK-NEXT: ret 2176 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2177 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2178 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2179 ret <vscale x 8 x i1> %1 2180} 2181 2182define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2183; CHECK-LABEL: fcmp_one_fv_nxv8f16: 2184; CHECK: # %bb.0: 2185; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2186; CHECK-NEXT: vfmv.v.f v10, fa0 2187; CHECK-NEXT: vmfeq.vv v12, v8, v8 2188; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2189; CHECK-NEXT: vmand.mm v10, v13, v12 2190; CHECK-NEXT: vmv1r.v v11, v10 2191; CHECK-NEXT: vmv1r.v v0, v10 2192; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 2193; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2194; CHECK-NEXT: vmor.mm v0, v10, v11 2195; CHECK-NEXT: ret 2196 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2197 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2198 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2199 ret <vscale x 8 x i1> %1 2200} 2201 2202define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2203; CHECK-LABEL: fcmp_ord_vv_nxv8f16: 2204; CHECK: # %bb.0: 2205; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2206; CHECK-NEXT: vmfeq.vv v12, v10, v10 2207; CHECK-NEXT: vmfeq.vv v10, v8, v8 2208; CHECK-NEXT: vmand.mm v0, v10, v12 2209; CHECK-NEXT: ret 2210 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2211 ret <vscale x 8 x i1> %1 2212} 2213 2214define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2215; CHECK-LABEL: fcmp_ord_vf_nxv8f16: 2216; CHECK: # %bb.0: 2217; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2218; CHECK-NEXT: vfmv.v.f v10, fa0 2219; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2220; CHECK-NEXT: vmfeq.vv v10, v8, v8 2221; CHECK-NEXT: vmand.mm v0, v10, v12 2222; CHECK-NEXT: ret 2223 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2224 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2225 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2226 ret <vscale x 8 x i1> %1 2227} 2228 2229define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2230; CHECK-LABEL: fcmp_ord_fv_nxv8f16: 2231; CHECK: # %bb.0: 2232; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2233; CHECK-NEXT: vfmv.v.f v10, fa0 2234; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2235; CHECK-NEXT: vmfeq.vv v10, v8, v8 2236; CHECK-NEXT: vmand.mm v0, v12, v10 2237; CHECK-NEXT: ret 2238 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2239 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2240 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2241 ret <vscale x 8 x i1> %1 2242} 2243 2244define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2245; CHECK-LABEL: fcmp_ueq_vv_nxv8f16: 2246; CHECK: # %bb.0: 2247; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2248; CHECK-NEXT: vmfeq.vv v12, v10, v10 2249; CHECK-NEXT: vmfeq.vv v13, v8, v8 2250; CHECK-NEXT: vmand.mm v12, v13, v12 2251; CHECK-NEXT: vmv1r.v v13, v12 2252; CHECK-NEXT: vmv1r.v v0, v12 2253; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 2254; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2255; CHECK-NEXT: vmnor.mm v0, v12, v13 2256; CHECK-NEXT: ret 2257 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2258 ret <vscale x 8 x i1> %1 2259} 2260 2261define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2262; CHECK-LABEL: fcmp_ueq_vf_nxv8f16: 2263; CHECK: # %bb.0: 2264; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2265; CHECK-NEXT: vfmv.v.f v10, fa0 2266; CHECK-NEXT: vmfeq.vv v12, v8, v8 2267; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2268; CHECK-NEXT: vmand.mm v10, v12, v13 2269; CHECK-NEXT: vmv1r.v v11, v10 2270; CHECK-NEXT: vmv1r.v v0, v10 2271; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 2272; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2273; CHECK-NEXT: vmnor.mm v0, v10, v11 2274; CHECK-NEXT: ret 2275 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2276 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2277 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2278 ret <vscale x 8 x i1> %1 2279} 2280 2281define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2282; CHECK-LABEL: fcmp_ueq_fv_nxv8f16: 2283; CHECK: # %bb.0: 2284; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2285; CHECK-NEXT: vfmv.v.f v10, fa0 2286; CHECK-NEXT: vmfeq.vv v12, v8, v8 2287; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2288; CHECK-NEXT: vmand.mm v10, v13, v12 2289; CHECK-NEXT: vmv1r.v v11, v10 2290; CHECK-NEXT: vmv1r.v v0, v10 2291; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 2292; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2293; CHECK-NEXT: vmnor.mm v0, v10, v11 2294; CHECK-NEXT: ret 2295 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2296 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2297 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2298 ret <vscale x 8 x i1> %1 2299} 2300 2301define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2302; CHECK-LABEL: fcmp_ugt_vv_nxv8f16: 2303; CHECK: # %bb.0: 2304; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2305; CHECK-NEXT: vmfeq.vv v12, v10, v10 2306; CHECK-NEXT: vmfeq.vv v13, v8, v8 2307; CHECK-NEXT: vmand.mm v12, v13, v12 2308; CHECK-NEXT: vmv1r.v v0, v12 2309; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 2310; CHECK-NEXT: vmnot.m v0, v12 2311; CHECK-NEXT: ret 2312 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2313 ret <vscale x 8 x i1> %1 2314} 2315 2316define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2317; CHECK-LABEL: fcmp_ugt_vf_nxv8f16: 2318; CHECK: # %bb.0: 2319; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2320; CHECK-NEXT: vfmv.v.f v10, fa0 2321; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2322; CHECK-NEXT: vmfeq.vv v10, v8, v8 2323; CHECK-NEXT: vmand.mm v10, v10, v12 2324; CHECK-NEXT: vmv1r.v v0, v10 2325; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2326; CHECK-NEXT: vmnot.m v0, v10 2327; CHECK-NEXT: ret 2328 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2329 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2330 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2331 ret <vscale x 8 x i1> %1 2332} 2333 2334define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2335; CHECK-LABEL: fcmp_ugt_fv_nxv8f16: 2336; CHECK: # %bb.0: 2337; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2338; CHECK-NEXT: vfmv.v.f v10, fa0 2339; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2340; CHECK-NEXT: vmfeq.vv v10, v8, v8 2341; CHECK-NEXT: vmand.mm v10, v12, v10 2342; CHECK-NEXT: vmv1r.v v0, v10 2343; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2344; CHECK-NEXT: vmnot.m v0, v10 2345; CHECK-NEXT: ret 2346 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2347 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2348 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2349 ret <vscale x 8 x i1> %1 2350} 2351 2352define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2353; CHECK-LABEL: fcmp_uge_vv_nxv8f16: 2354; CHECK: # %bb.0: 2355; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2356; CHECK-NEXT: vmfeq.vv v12, v10, v10 2357; CHECK-NEXT: vmfeq.vv v13, v8, v8 2358; CHECK-NEXT: vmand.mm v12, v13, v12 2359; CHECK-NEXT: vmv1r.v v0, v12 2360; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 2361; CHECK-NEXT: vmnot.m v0, v12 2362; CHECK-NEXT: ret 2363 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 2364 ret <vscale x 8 x i1> %1 2365} 2366 2367define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2368; CHECK-LABEL: fcmp_uge_vf_nxv8f16: 2369; CHECK: # %bb.0: 2370; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2371; CHECK-NEXT: vfmv.v.f v10, fa0 2372; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2373; CHECK-NEXT: vmfeq.vv v10, v8, v8 2374; CHECK-NEXT: vmand.mm v10, v10, v12 2375; CHECK-NEXT: vmv1r.v v0, v10 2376; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2377; CHECK-NEXT: vmnot.m v0, v10 2378; CHECK-NEXT: ret 2379 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2380 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2381 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 2382 ret <vscale x 8 x i1> %1 2383} 2384 2385define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2386; CHECK-LABEL: fcmp_uge_fv_nxv8f16: 2387; CHECK: # %bb.0: 2388; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2389; CHECK-NEXT: vfmv.v.f v10, fa0 2390; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2391; CHECK-NEXT: vmfeq.vv v10, v8, v8 2392; CHECK-NEXT: vmand.mm v10, v12, v10 2393; CHECK-NEXT: vmv1r.v v0, v10 2394; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2395; CHECK-NEXT: vmnot.m v0, v10 2396; CHECK-NEXT: ret 2397 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2398 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2399 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 2400 ret <vscale x 8 x i1> %1 2401} 2402 2403define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2404; CHECK-LABEL: fcmp_ult_vv_nxv8f16: 2405; CHECK: # %bb.0: 2406; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2407; CHECK-NEXT: vmfeq.vv v12, v8, v8 2408; CHECK-NEXT: vmfeq.vv v13, v10, v10 2409; CHECK-NEXT: vmand.mm v12, v13, v12 2410; CHECK-NEXT: vmv1r.v v0, v12 2411; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 2412; CHECK-NEXT: vmnot.m v0, v12 2413; CHECK-NEXT: ret 2414 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 2415 ret <vscale x 8 x i1> %1 2416} 2417 2418define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2419; CHECK-LABEL: fcmp_ult_vf_nxv8f16: 2420; CHECK: # %bb.0: 2421; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2422; CHECK-NEXT: vfmv.v.f v10, fa0 2423; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2424; CHECK-NEXT: vmfeq.vv v10, v8, v8 2425; CHECK-NEXT: vmand.mm v10, v12, v10 2426; CHECK-NEXT: vmv1r.v v0, v10 2427; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2428; CHECK-NEXT: vmnot.m v0, v10 2429; CHECK-NEXT: ret 2430 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2431 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2432 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 2433 ret <vscale x 8 x i1> %1 2434} 2435 2436define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2437; CHECK-LABEL: fcmp_ult_fv_nxv8f16: 2438; CHECK: # %bb.0: 2439; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2440; CHECK-NEXT: vfmv.v.f v10, fa0 2441; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2442; CHECK-NEXT: vmfeq.vv v10, v8, v8 2443; CHECK-NEXT: vmand.mm v10, v10, v12 2444; CHECK-NEXT: vmv1r.v v0, v10 2445; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2446; CHECK-NEXT: vmnot.m v0, v10 2447; CHECK-NEXT: ret 2448 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2449 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2450 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 2451 ret <vscale x 8 x i1> %1 2452} 2453 2454define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2455; CHECK-LABEL: fcmp_ule_vv_nxv8f16: 2456; CHECK: # %bb.0: 2457; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2458; CHECK-NEXT: vmfeq.vv v12, v8, v8 2459; CHECK-NEXT: vmfeq.vv v13, v10, v10 2460; CHECK-NEXT: vmand.mm v12, v13, v12 2461; CHECK-NEXT: vmv1r.v v0, v12 2462; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2463; CHECK-NEXT: vmnot.m v0, v12 2464; CHECK-NEXT: ret 2465 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 2466 ret <vscale x 8 x i1> %1 2467} 2468 2469define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2470; CHECK-LABEL: fcmp_ule_vf_nxv8f16: 2471; CHECK: # %bb.0: 2472; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2473; CHECK-NEXT: vfmv.v.f v10, fa0 2474; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2475; CHECK-NEXT: vmfeq.vv v10, v8, v8 2476; CHECK-NEXT: vmand.mm v10, v12, v10 2477; CHECK-NEXT: vmv1r.v v0, v10 2478; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2479; CHECK-NEXT: vmnot.m v0, v10 2480; CHECK-NEXT: ret 2481 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2482 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2483 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 2484 ret <vscale x 8 x i1> %1 2485} 2486 2487define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2488; CHECK-LABEL: fcmp_ule_fv_nxv8f16: 2489; CHECK: # %bb.0: 2490; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 2491; CHECK-NEXT: vfmv.v.f v10, fa0 2492; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2493; CHECK-NEXT: vmfeq.vv v10, v8, v8 2494; CHECK-NEXT: vmand.mm v10, v10, v12 2495; CHECK-NEXT: vmv1r.v v0, v10 2496; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2497; CHECK-NEXT: vmnot.m v0, v10 2498; CHECK-NEXT: ret 2499 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2500 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2501 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 2502 ret <vscale x 8 x i1> %1 2503} 2504 2505define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2506; CHECK-LABEL: fcmp_une_vv_nxv8f16: 2507; CHECK: # %bb.0: 2508; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2509; CHECK-NEXT: vmfne.vv v0, v8, v10 2510; CHECK-NEXT: ret 2511 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 2512 ret <vscale x 8 x i1> %1 2513} 2514 2515define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2516; CHECK-LABEL: fcmp_une_vf_nxv8f16: 2517; CHECK: # %bb.0: 2518; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2519; CHECK-NEXT: vmfne.vf v0, v8, fa0 2520; CHECK-NEXT: ret 2521 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2522 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2523 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 2524 ret <vscale x 8 x i1> %1 2525} 2526 2527define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2528; CHECK-LABEL: fcmp_une_fv_nxv8f16: 2529; CHECK: # %bb.0: 2530; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2531; CHECK-NEXT: vmfne.vf v0, v8, fa0 2532; CHECK-NEXT: ret 2533 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2534 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2535 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 2536 ret <vscale x 8 x i1> %1 2537} 2538 2539define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) nounwind strictfp { 2540; CHECK-LABEL: fcmp_uno_vv_nxv8f16: 2541; CHECK: # %bb.0: 2542; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2543; CHECK-NEXT: vmfne.vv v12, v10, v10 2544; CHECK-NEXT: vmfne.vv v10, v8, v8 2545; CHECK-NEXT: vmor.mm v0, v10, v12 2546; CHECK-NEXT: ret 2547 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 2548 ret <vscale x 8 x i1> %1 2549} 2550 2551define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2552; CHECK-LABEL: fcmp_uno_vf_nxv8f16: 2553; CHECK: # %bb.0: 2554; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2555; CHECK-NEXT: vfmv.v.f v10, fa0 2556; CHECK-NEXT: vmfne.vf v12, v10, fa0 2557; CHECK-NEXT: vmfne.vv v10, v8, v8 2558; CHECK-NEXT: vmor.mm v0, v10, v12 2559; CHECK-NEXT: ret 2560 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2561 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2562 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 2563 ret <vscale x 8 x i1> %1 2564} 2565 2566define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) nounwind strictfp { 2567; CHECK-LABEL: fcmp_uno_fv_nxv8f16: 2568; CHECK: # %bb.0: 2569; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 2570; CHECK-NEXT: vfmv.v.f v10, fa0 2571; CHECK-NEXT: vmfne.vf v12, v10, fa0 2572; CHECK-NEXT: vmfne.vv v10, v8, v8 2573; CHECK-NEXT: vmor.mm v0, v12, v10 2574; CHECK-NEXT: ret 2575 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2576 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2577 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 2578 ret <vscale x 8 x i1> %1 2579} 2580 2581declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata) 2582define <vscale x 16 x i1> @fcmp_oeq_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2583; CHECK-LABEL: fcmp_oeq_vv_nxv16f16: 2584; CHECK: # %bb.0: 2585; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2586; CHECK-NEXT: vmfeq.vv v0, v8, v12 2587; CHECK-NEXT: ret 2588 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2589 ret <vscale x 16 x i1> %1 2590} 2591 2592define <vscale x 16 x i1> @fcmp_oeq_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2593; CHECK-LABEL: fcmp_oeq_vf_nxv16f16: 2594; CHECK: # %bb.0: 2595; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2596; CHECK-NEXT: vmfeq.vf v0, v8, fa0 2597; CHECK-NEXT: ret 2598 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2599 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2600 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2601 ret <vscale x 16 x i1> %1 2602} 2603 2604define <vscale x 16 x i1> @fcmp_oeq_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2605; CHECK-LABEL: fcmp_oeq_fv_nxv16f16: 2606; CHECK: # %bb.0: 2607; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2608; CHECK-NEXT: vmfeq.vf v0, v8, fa0 2609; CHECK-NEXT: ret 2610 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2611 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2612 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2613 ret <vscale x 16 x i1> %1 2614} 2615 2616define <vscale x 16 x i1> @fcmp_ogt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2617; CHECK-LABEL: fcmp_ogt_vv_nxv16f16: 2618; CHECK: # %bb.0: 2619; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2620; CHECK-NEXT: vmfeq.vv v16, v8, v8 2621; CHECK-NEXT: vmfeq.vv v17, v12, v12 2622; CHECK-NEXT: vmand.mm v16, v17, v16 2623; CHECK-NEXT: vmv1r.v v0, v16 2624; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 2625; CHECK-NEXT: vmv1r.v v0, v16 2626; CHECK-NEXT: ret 2627 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2628 ret <vscale x 16 x i1> %1 2629} 2630 2631define <vscale x 16 x i1> @fcmp_ogt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2632; CHECK-LABEL: fcmp_ogt_vf_nxv16f16: 2633; CHECK: # %bb.0: 2634; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2635; CHECK-NEXT: vfmv.v.f v12, fa0 2636; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2637; CHECK-NEXT: vmfeq.vv v12, v8, v8 2638; CHECK-NEXT: vmand.mm v12, v16, v12 2639; CHECK-NEXT: vmv1r.v v0, v12 2640; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 2641; CHECK-NEXT: vmv1r.v v0, v12 2642; CHECK-NEXT: ret 2643 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2644 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2645 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2646 ret <vscale x 16 x i1> %1 2647} 2648 2649define <vscale x 16 x i1> @fcmp_ogt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2650; CHECK-LABEL: fcmp_ogt_fv_nxv16f16: 2651; CHECK: # %bb.0: 2652; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2653; CHECK-NEXT: vfmv.v.f v12, fa0 2654; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2655; CHECK-NEXT: vmfeq.vv v12, v8, v8 2656; CHECK-NEXT: vmand.mm v12, v12, v16 2657; CHECK-NEXT: vmv1r.v v0, v12 2658; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 2659; CHECK-NEXT: vmv1r.v v0, v12 2660; CHECK-NEXT: ret 2661 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2662 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2663 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2664 ret <vscale x 16 x i1> %1 2665} 2666 2667define <vscale x 16 x i1> @fcmp_oge_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2668; CHECK-LABEL: fcmp_oge_vv_nxv16f16: 2669; CHECK: # %bb.0: 2670; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2671; CHECK-NEXT: vmfeq.vv v16, v8, v8 2672; CHECK-NEXT: vmfeq.vv v17, v12, v12 2673; CHECK-NEXT: vmand.mm v16, v17, v16 2674; CHECK-NEXT: vmv1r.v v0, v16 2675; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 2676; CHECK-NEXT: vmv1r.v v0, v16 2677; CHECK-NEXT: ret 2678 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 2679 ret <vscale x 16 x i1> %1 2680} 2681 2682define <vscale x 16 x i1> @fcmp_oge_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2683; CHECK-LABEL: fcmp_oge_vf_nxv16f16: 2684; CHECK: # %bb.0: 2685; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2686; CHECK-NEXT: vfmv.v.f v12, fa0 2687; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2688; CHECK-NEXT: vmfeq.vv v12, v8, v8 2689; CHECK-NEXT: vmand.mm v12, v16, v12 2690; CHECK-NEXT: vmv1r.v v0, v12 2691; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 2692; CHECK-NEXT: vmv1r.v v0, v12 2693; CHECK-NEXT: ret 2694 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2695 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2696 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2697 ret <vscale x 16 x i1> %1 2698} 2699 2700define <vscale x 16 x i1> @fcmp_oge_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2701; CHECK-LABEL: fcmp_oge_fv_nxv16f16: 2702; CHECK: # %bb.0: 2703; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2704; CHECK-NEXT: vfmv.v.f v12, fa0 2705; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2706; CHECK-NEXT: vmfeq.vv v12, v8, v8 2707; CHECK-NEXT: vmand.mm v12, v12, v16 2708; CHECK-NEXT: vmv1r.v v0, v12 2709; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 2710; CHECK-NEXT: vmv1r.v v0, v12 2711; CHECK-NEXT: ret 2712 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2713 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2714 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2715 ret <vscale x 16 x i1> %1 2716} 2717 2718define <vscale x 16 x i1> @fcmp_olt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2719; CHECK-LABEL: fcmp_olt_vv_nxv16f16: 2720; CHECK: # %bb.0: 2721; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2722; CHECK-NEXT: vmfeq.vv v16, v12, v12 2723; CHECK-NEXT: vmfeq.vv v17, v8, v8 2724; CHECK-NEXT: vmand.mm v16, v17, v16 2725; CHECK-NEXT: vmv1r.v v0, v16 2726; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 2727; CHECK-NEXT: vmv1r.v v0, v16 2728; CHECK-NEXT: ret 2729 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2730 ret <vscale x 16 x i1> %1 2731} 2732 2733define <vscale x 16 x i1> @fcmp_olt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2734; CHECK-LABEL: fcmp_olt_vf_nxv16f16: 2735; CHECK: # %bb.0: 2736; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2737; CHECK-NEXT: vfmv.v.f v12, fa0 2738; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2739; CHECK-NEXT: vmfeq.vv v12, v8, v8 2740; CHECK-NEXT: vmand.mm v12, v12, v16 2741; CHECK-NEXT: vmv1r.v v0, v12 2742; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 2743; CHECK-NEXT: vmv1r.v v0, v12 2744; CHECK-NEXT: ret 2745 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2746 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2747 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2748 ret <vscale x 16 x i1> %1 2749} 2750 2751define <vscale x 16 x i1> @fcmp_olt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2752; CHECK-LABEL: fcmp_olt_fv_nxv16f16: 2753; CHECK: # %bb.0: 2754; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2755; CHECK-NEXT: vfmv.v.f v12, fa0 2756; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2757; CHECK-NEXT: vmfeq.vv v12, v8, v8 2758; CHECK-NEXT: vmand.mm v12, v16, v12 2759; CHECK-NEXT: vmv1r.v v0, v12 2760; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 2761; CHECK-NEXT: vmv1r.v v0, v12 2762; CHECK-NEXT: ret 2763 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2764 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2765 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2766 ret <vscale x 16 x i1> %1 2767} 2768 2769define <vscale x 16 x i1> @fcmp_ole_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2770; CHECK-LABEL: fcmp_ole_vv_nxv16f16: 2771; CHECK: # %bb.0: 2772; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2773; CHECK-NEXT: vmfeq.vv v16, v12, v12 2774; CHECK-NEXT: vmfeq.vv v17, v8, v8 2775; CHECK-NEXT: vmand.mm v16, v17, v16 2776; CHECK-NEXT: vmv1r.v v0, v16 2777; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 2778; CHECK-NEXT: vmv1r.v v0, v16 2779; CHECK-NEXT: ret 2780 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2781 ret <vscale x 16 x i1> %1 2782} 2783 2784define <vscale x 16 x i1> @fcmp_ole_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2785; CHECK-LABEL: fcmp_ole_vf_nxv16f16: 2786; CHECK: # %bb.0: 2787; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2788; CHECK-NEXT: vfmv.v.f v12, fa0 2789; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2790; CHECK-NEXT: vmfeq.vv v12, v8, v8 2791; CHECK-NEXT: vmand.mm v12, v12, v16 2792; CHECK-NEXT: vmv1r.v v0, v12 2793; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 2794; CHECK-NEXT: vmv1r.v v0, v12 2795; CHECK-NEXT: ret 2796 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2797 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2798 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2799 ret <vscale x 16 x i1> %1 2800} 2801 2802define <vscale x 16 x i1> @fcmp_ole_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2803; CHECK-LABEL: fcmp_ole_fv_nxv16f16: 2804; CHECK: # %bb.0: 2805; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2806; CHECK-NEXT: vfmv.v.f v12, fa0 2807; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2808; CHECK-NEXT: vmfeq.vv v12, v8, v8 2809; CHECK-NEXT: vmand.mm v12, v16, v12 2810; CHECK-NEXT: vmv1r.v v0, v12 2811; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 2812; CHECK-NEXT: vmv1r.v v0, v12 2813; CHECK-NEXT: ret 2814 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2815 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2816 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2817 ret <vscale x 16 x i1> %1 2818} 2819 2820define <vscale x 16 x i1> @fcmp_one_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2821; CHECK-LABEL: fcmp_one_vv_nxv16f16: 2822; CHECK: # %bb.0: 2823; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2824; CHECK-NEXT: vmfeq.vv v16, v12, v12 2825; CHECK-NEXT: vmfeq.vv v17, v8, v8 2826; CHECK-NEXT: vmand.mm v16, v17, v16 2827; CHECK-NEXT: vmv1r.v v17, v16 2828; CHECK-NEXT: vmv1r.v v0, v16 2829; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 2830; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 2831; CHECK-NEXT: vmor.mm v0, v16, v17 2832; CHECK-NEXT: ret 2833 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2834 ret <vscale x 16 x i1> %1 2835} 2836 2837define <vscale x 16 x i1> @fcmp_one_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2838; CHECK-LABEL: fcmp_one_vf_nxv16f16: 2839; CHECK: # %bb.0: 2840; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2841; CHECK-NEXT: vfmv.v.f v12, fa0 2842; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2843; CHECK-NEXT: vmfeq.vv v12, v8, v8 2844; CHECK-NEXT: vmand.mm v12, v12, v16 2845; CHECK-NEXT: vmv1r.v v13, v12 2846; CHECK-NEXT: vmv1r.v v0, v12 2847; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 2848; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 2849; CHECK-NEXT: vmor.mm v0, v12, v13 2850; CHECK-NEXT: ret 2851 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2852 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2853 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2854 ret <vscale x 16 x i1> %1 2855} 2856 2857define <vscale x 16 x i1> @fcmp_one_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2858; CHECK-LABEL: fcmp_one_fv_nxv16f16: 2859; CHECK: # %bb.0: 2860; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2861; CHECK-NEXT: vfmv.v.f v12, fa0 2862; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2863; CHECK-NEXT: vmfeq.vv v12, v8, v8 2864; CHECK-NEXT: vmand.mm v12, v16, v12 2865; CHECK-NEXT: vmv1r.v v13, v12 2866; CHECK-NEXT: vmv1r.v v0, v12 2867; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 2868; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 2869; CHECK-NEXT: vmor.mm v0, v12, v13 2870; CHECK-NEXT: ret 2871 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2872 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2873 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2874 ret <vscale x 16 x i1> %1 2875} 2876 2877define <vscale x 16 x i1> @fcmp_ord_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2878; CHECK-LABEL: fcmp_ord_vv_nxv16f16: 2879; CHECK: # %bb.0: 2880; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2881; CHECK-NEXT: vmfeq.vv v16, v12, v12 2882; CHECK-NEXT: vmfeq.vv v12, v8, v8 2883; CHECK-NEXT: vmand.mm v0, v12, v16 2884; CHECK-NEXT: ret 2885 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2886 ret <vscale x 16 x i1> %1 2887} 2888 2889define <vscale x 16 x i1> @fcmp_ord_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2890; CHECK-LABEL: fcmp_ord_vf_nxv16f16: 2891; CHECK: # %bb.0: 2892; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2893; CHECK-NEXT: vfmv.v.f v12, fa0 2894; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2895; CHECK-NEXT: vmfeq.vv v12, v8, v8 2896; CHECK-NEXT: vmand.mm v0, v12, v16 2897; CHECK-NEXT: ret 2898 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2899 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2900 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2901 ret <vscale x 16 x i1> %1 2902} 2903 2904define <vscale x 16 x i1> @fcmp_ord_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2905; CHECK-LABEL: fcmp_ord_fv_nxv16f16: 2906; CHECK: # %bb.0: 2907; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 2908; CHECK-NEXT: vfmv.v.f v12, fa0 2909; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2910; CHECK-NEXT: vmfeq.vv v12, v8, v8 2911; CHECK-NEXT: vmand.mm v0, v16, v12 2912; CHECK-NEXT: ret 2913 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2914 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2915 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2916 ret <vscale x 16 x i1> %1 2917} 2918 2919define <vscale x 16 x i1> @fcmp_ueq_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2920; CHECK-LABEL: fcmp_ueq_vv_nxv16f16: 2921; CHECK: # %bb.0: 2922; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2923; CHECK-NEXT: vmfeq.vv v16, v12, v12 2924; CHECK-NEXT: vmfeq.vv v17, v8, v8 2925; CHECK-NEXT: vmand.mm v16, v17, v16 2926; CHECK-NEXT: vmv1r.v v17, v16 2927; CHECK-NEXT: vmv1r.v v0, v16 2928; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 2929; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 2930; CHECK-NEXT: vmnor.mm v0, v16, v17 2931; CHECK-NEXT: ret 2932 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2933 ret <vscale x 16 x i1> %1 2934} 2935 2936define <vscale x 16 x i1> @fcmp_ueq_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2937; CHECK-LABEL: fcmp_ueq_vf_nxv16f16: 2938; CHECK: # %bb.0: 2939; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2940; CHECK-NEXT: vfmv.v.f v12, fa0 2941; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2942; CHECK-NEXT: vmfeq.vv v12, v8, v8 2943; CHECK-NEXT: vmand.mm v12, v12, v16 2944; CHECK-NEXT: vmv1r.v v13, v12 2945; CHECK-NEXT: vmv1r.v v0, v12 2946; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 2947; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 2948; CHECK-NEXT: vmnor.mm v0, v12, v13 2949; CHECK-NEXT: ret 2950 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2951 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2952 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2953 ret <vscale x 16 x i1> %1 2954} 2955 2956define <vscale x 16 x i1> @fcmp_ueq_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2957; CHECK-LABEL: fcmp_ueq_fv_nxv16f16: 2958; CHECK: # %bb.0: 2959; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2960; CHECK-NEXT: vfmv.v.f v12, fa0 2961; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2962; CHECK-NEXT: vmfeq.vv v12, v8, v8 2963; CHECK-NEXT: vmand.mm v12, v16, v12 2964; CHECK-NEXT: vmv1r.v v13, v12 2965; CHECK-NEXT: vmv1r.v v0, v12 2966; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 2967; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 2968; CHECK-NEXT: vmnor.mm v0, v12, v13 2969; CHECK-NEXT: ret 2970 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2971 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2972 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2973 ret <vscale x 16 x i1> %1 2974} 2975 2976define <vscale x 16 x i1> @fcmp_ugt_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 2977; CHECK-LABEL: fcmp_ugt_vv_nxv16f16: 2978; CHECK: # %bb.0: 2979; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2980; CHECK-NEXT: vmfeq.vv v16, v12, v12 2981; CHECK-NEXT: vmfeq.vv v17, v8, v8 2982; CHECK-NEXT: vmand.mm v16, v17, v16 2983; CHECK-NEXT: vmv1r.v v0, v16 2984; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 2985; CHECK-NEXT: vmnot.m v0, v16 2986; CHECK-NEXT: ret 2987 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2988 ret <vscale x 16 x i1> %1 2989} 2990 2991define <vscale x 16 x i1> @fcmp_ugt_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 2992; CHECK-LABEL: fcmp_ugt_vf_nxv16f16: 2993; CHECK: # %bb.0: 2994; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 2995; CHECK-NEXT: vfmv.v.f v12, fa0 2996; CHECK-NEXT: vmfeq.vf v16, v12, fa0 2997; CHECK-NEXT: vmfeq.vv v12, v8, v8 2998; CHECK-NEXT: vmand.mm v12, v12, v16 2999; CHECK-NEXT: vmv1r.v v0, v12 3000; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3001; CHECK-NEXT: vmnot.m v0, v12 3002; CHECK-NEXT: ret 3003 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3004 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3005 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3006 ret <vscale x 16 x i1> %1 3007} 3008 3009define <vscale x 16 x i1> @fcmp_ugt_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3010; CHECK-LABEL: fcmp_ugt_fv_nxv16f16: 3011; CHECK: # %bb.0: 3012; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3013; CHECK-NEXT: vfmv.v.f v12, fa0 3014; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3015; CHECK-NEXT: vmfeq.vv v12, v8, v8 3016; CHECK-NEXT: vmand.mm v12, v16, v12 3017; CHECK-NEXT: vmv1r.v v0, v12 3018; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3019; CHECK-NEXT: vmnot.m v0, v12 3020; CHECK-NEXT: ret 3021 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3022 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3023 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3024 ret <vscale x 16 x i1> %1 3025} 3026 3027define <vscale x 16 x i1> @fcmp_uge_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 3028; CHECK-LABEL: fcmp_uge_vv_nxv16f16: 3029; CHECK: # %bb.0: 3030; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3031; CHECK-NEXT: vmfeq.vv v16, v12, v12 3032; CHECK-NEXT: vmfeq.vv v17, v8, v8 3033; CHECK-NEXT: vmand.mm v16, v17, v16 3034; CHECK-NEXT: vmv1r.v v0, v16 3035; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 3036; CHECK-NEXT: vmnot.m v0, v16 3037; CHECK-NEXT: ret 3038 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 3039 ret <vscale x 16 x i1> %1 3040} 3041 3042define <vscale x 16 x i1> @fcmp_uge_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3043; CHECK-LABEL: fcmp_uge_vf_nxv16f16: 3044; CHECK: # %bb.0: 3045; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3046; CHECK-NEXT: vfmv.v.f v12, fa0 3047; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3048; CHECK-NEXT: vmfeq.vv v12, v8, v8 3049; CHECK-NEXT: vmand.mm v12, v12, v16 3050; CHECK-NEXT: vmv1r.v v0, v12 3051; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3052; CHECK-NEXT: vmnot.m v0, v12 3053; CHECK-NEXT: ret 3054 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3055 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3056 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3057 ret <vscale x 16 x i1> %1 3058} 3059 3060define <vscale x 16 x i1> @fcmp_uge_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3061; CHECK-LABEL: fcmp_uge_fv_nxv16f16: 3062; CHECK: # %bb.0: 3063; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3064; CHECK-NEXT: vfmv.v.f v12, fa0 3065; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3066; CHECK-NEXT: vmfeq.vv v12, v8, v8 3067; CHECK-NEXT: vmand.mm v12, v16, v12 3068; CHECK-NEXT: vmv1r.v v0, v12 3069; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3070; CHECK-NEXT: vmnot.m v0, v12 3071; CHECK-NEXT: ret 3072 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3073 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3074 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3075 ret <vscale x 16 x i1> %1 3076} 3077 3078define <vscale x 16 x i1> @fcmp_ult_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 3079; CHECK-LABEL: fcmp_ult_vv_nxv16f16: 3080; CHECK: # %bb.0: 3081; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3082; CHECK-NEXT: vmfeq.vv v16, v8, v8 3083; CHECK-NEXT: vmfeq.vv v17, v12, v12 3084; CHECK-NEXT: vmand.mm v16, v17, v16 3085; CHECK-NEXT: vmv1r.v v0, v16 3086; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 3087; CHECK-NEXT: vmnot.m v0, v16 3088; CHECK-NEXT: ret 3089 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3090 ret <vscale x 16 x i1> %1 3091} 3092 3093define <vscale x 16 x i1> @fcmp_ult_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3094; CHECK-LABEL: fcmp_ult_vf_nxv16f16: 3095; CHECK: # %bb.0: 3096; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3097; CHECK-NEXT: vfmv.v.f v12, fa0 3098; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3099; CHECK-NEXT: vmfeq.vv v12, v8, v8 3100; CHECK-NEXT: vmand.mm v12, v16, v12 3101; CHECK-NEXT: vmv1r.v v0, v12 3102; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3103; CHECK-NEXT: vmnot.m v0, v12 3104; CHECK-NEXT: ret 3105 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3106 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3107 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3108 ret <vscale x 16 x i1> %1 3109} 3110 3111define <vscale x 16 x i1> @fcmp_ult_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3112; CHECK-LABEL: fcmp_ult_fv_nxv16f16: 3113; CHECK: # %bb.0: 3114; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3115; CHECK-NEXT: vfmv.v.f v12, fa0 3116; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3117; CHECK-NEXT: vmfeq.vv v12, v8, v8 3118; CHECK-NEXT: vmand.mm v12, v12, v16 3119; CHECK-NEXT: vmv1r.v v0, v12 3120; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3121; CHECK-NEXT: vmnot.m v0, v12 3122; CHECK-NEXT: ret 3123 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3124 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3125 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3126 ret <vscale x 16 x i1> %1 3127} 3128 3129define <vscale x 16 x i1> @fcmp_ule_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 3130; CHECK-LABEL: fcmp_ule_vv_nxv16f16: 3131; CHECK: # %bb.0: 3132; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3133; CHECK-NEXT: vmfeq.vv v16, v8, v8 3134; CHECK-NEXT: vmfeq.vv v17, v12, v12 3135; CHECK-NEXT: vmand.mm v16, v17, v16 3136; CHECK-NEXT: vmv1r.v v0, v16 3137; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 3138; CHECK-NEXT: vmnot.m v0, v16 3139; CHECK-NEXT: ret 3140 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3141 ret <vscale x 16 x i1> %1 3142} 3143 3144define <vscale x 16 x i1> @fcmp_ule_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3145; CHECK-LABEL: fcmp_ule_vf_nxv16f16: 3146; CHECK: # %bb.0: 3147; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3148; CHECK-NEXT: vfmv.v.f v12, fa0 3149; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3150; CHECK-NEXT: vmfeq.vv v12, v8, v8 3151; CHECK-NEXT: vmand.mm v12, v16, v12 3152; CHECK-NEXT: vmv1r.v v0, v12 3153; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3154; CHECK-NEXT: vmnot.m v0, v12 3155; CHECK-NEXT: ret 3156 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3157 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3158 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3159 ret <vscale x 16 x i1> %1 3160} 3161 3162define <vscale x 16 x i1> @fcmp_ule_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3163; CHECK-LABEL: fcmp_ule_fv_nxv16f16: 3164; CHECK: # %bb.0: 3165; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 3166; CHECK-NEXT: vfmv.v.f v12, fa0 3167; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3168; CHECK-NEXT: vmfeq.vv v12, v8, v8 3169; CHECK-NEXT: vmand.mm v12, v12, v16 3170; CHECK-NEXT: vmv1r.v v0, v12 3171; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3172; CHECK-NEXT: vmnot.m v0, v12 3173; CHECK-NEXT: ret 3174 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3175 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3176 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3177 ret <vscale x 16 x i1> %1 3178} 3179 3180define <vscale x 16 x i1> @fcmp_une_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 3181; CHECK-LABEL: fcmp_une_vv_nxv16f16: 3182; CHECK: # %bb.0: 3183; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3184; CHECK-NEXT: vmfne.vv v0, v8, v12 3185; CHECK-NEXT: ret 3186 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3187 ret <vscale x 16 x i1> %1 3188} 3189 3190define <vscale x 16 x i1> @fcmp_une_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3191; CHECK-LABEL: fcmp_une_vf_nxv16f16: 3192; CHECK: # %bb.0: 3193; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3194; CHECK-NEXT: vmfne.vf v0, v8, fa0 3195; CHECK-NEXT: ret 3196 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3197 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3198 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3199 ret <vscale x 16 x i1> %1 3200} 3201 3202define <vscale x 16 x i1> @fcmp_une_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3203; CHECK-LABEL: fcmp_une_fv_nxv16f16: 3204; CHECK: # %bb.0: 3205; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3206; CHECK-NEXT: vmfne.vf v0, v8, fa0 3207; CHECK-NEXT: ret 3208 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3209 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3210 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3211 ret <vscale x 16 x i1> %1 3212} 3213 3214define <vscale x 16 x i1> @fcmp_uno_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) nounwind strictfp { 3215; CHECK-LABEL: fcmp_uno_vv_nxv16f16: 3216; CHECK: # %bb.0: 3217; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3218; CHECK-NEXT: vmfne.vv v16, v12, v12 3219; CHECK-NEXT: vmfne.vv v12, v8, v8 3220; CHECK-NEXT: vmor.mm v0, v12, v16 3221; CHECK-NEXT: ret 3222 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3223 ret <vscale x 16 x i1> %1 3224} 3225 3226define <vscale x 16 x i1> @fcmp_uno_vf_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3227; CHECK-LABEL: fcmp_uno_vf_nxv16f16: 3228; CHECK: # %bb.0: 3229; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3230; CHECK-NEXT: vfmv.v.f v12, fa0 3231; CHECK-NEXT: vmfne.vf v16, v12, fa0 3232; CHECK-NEXT: vmfne.vv v12, v8, v8 3233; CHECK-NEXT: vmor.mm v0, v12, v16 3234; CHECK-NEXT: ret 3235 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3236 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3237 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3238 ret <vscale x 16 x i1> %1 3239} 3240 3241define <vscale x 16 x i1> @fcmp_uno_fv_nxv16f16(<vscale x 16 x half> %va, half %b) nounwind strictfp { 3242; CHECK-LABEL: fcmp_uno_fv_nxv16f16: 3243; CHECK: # %bb.0: 3244; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 3245; CHECK-NEXT: vfmv.v.f v12, fa0 3246; CHECK-NEXT: vmfne.vf v16, v12, fa0 3247; CHECK-NEXT: vmfne.vv v12, v8, v8 3248; CHECK-NEXT: vmor.mm v0, v16, v12 3249; CHECK-NEXT: ret 3250 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3251 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3252 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f16(<vscale x 16 x half> %splat, <vscale x 16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3253 ret <vscale x 16 x i1> %1 3254} 3255 3256declare <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata) 3257define <vscale x 32 x i1> @fcmp_oeq_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3258; CHECK-LABEL: fcmp_oeq_vv_nxv32f16: 3259; CHECK: # %bb.0: 3260; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3261; CHECK-NEXT: vmfeq.vv v0, v8, v16 3262; CHECK-NEXT: ret 3263 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3264 ret <vscale x 32 x i1> %1 3265} 3266 3267define <vscale x 32 x i1> @fcmp_oeq_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3268; CHECK-LABEL: fcmp_oeq_vf_nxv32f16: 3269; CHECK: # %bb.0: 3270; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3271; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3272; CHECK-NEXT: ret 3273 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3274 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3275 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3276 ret <vscale x 32 x i1> %1 3277} 3278 3279define <vscale x 32 x i1> @fcmp_oeq_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3280; CHECK-LABEL: fcmp_oeq_fv_nxv32f16: 3281; CHECK: # %bb.0: 3282; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3283; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3284; CHECK-NEXT: ret 3285 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3286 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3287 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3288 ret <vscale x 32 x i1> %1 3289} 3290 3291define <vscale x 32 x i1> @fcmp_ogt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3292; CHECK-LABEL: fcmp_ogt_vv_nxv32f16: 3293; CHECK: # %bb.0: 3294; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3295; CHECK-NEXT: vmfeq.vv v24, v8, v8 3296; CHECK-NEXT: vmfeq.vv v25, v16, v16 3297; CHECK-NEXT: vmand.mm v24, v25, v24 3298; CHECK-NEXT: vmv1r.v v0, v24 3299; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 3300; CHECK-NEXT: vmv1r.v v0, v24 3301; CHECK-NEXT: ret 3302 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3303 ret <vscale x 32 x i1> %1 3304} 3305 3306define <vscale x 32 x i1> @fcmp_ogt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3307; CHECK-LABEL: fcmp_ogt_vf_nxv32f16: 3308; CHECK: # %bb.0: 3309; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3310; CHECK-NEXT: vfmv.v.f v16, fa0 3311; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3312; CHECK-NEXT: vmfeq.vv v16, v8, v8 3313; CHECK-NEXT: vmand.mm v16, v24, v16 3314; CHECK-NEXT: vmv1r.v v0, v16 3315; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3316; CHECK-NEXT: vmv1r.v v0, v16 3317; CHECK-NEXT: ret 3318 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3319 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3320 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3321 ret <vscale x 32 x i1> %1 3322} 3323 3324define <vscale x 32 x i1> @fcmp_ogt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3325; CHECK-LABEL: fcmp_ogt_fv_nxv32f16: 3326; CHECK: # %bb.0: 3327; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3328; CHECK-NEXT: vfmv.v.f v16, fa0 3329; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3330; CHECK-NEXT: vmfeq.vv v16, v8, v8 3331; CHECK-NEXT: vmand.mm v16, v16, v24 3332; CHECK-NEXT: vmv1r.v v0, v16 3333; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3334; CHECK-NEXT: vmv1r.v v0, v16 3335; CHECK-NEXT: ret 3336 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3337 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3338 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3339 ret <vscale x 32 x i1> %1 3340} 3341 3342define <vscale x 32 x i1> @fcmp_oge_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3343; CHECK-LABEL: fcmp_oge_vv_nxv32f16: 3344; CHECK: # %bb.0: 3345; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3346; CHECK-NEXT: vmfeq.vv v24, v8, v8 3347; CHECK-NEXT: vmfeq.vv v25, v16, v16 3348; CHECK-NEXT: vmand.mm v24, v25, v24 3349; CHECK-NEXT: vmv1r.v v0, v24 3350; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 3351; CHECK-NEXT: vmv1r.v v0, v24 3352; CHECK-NEXT: ret 3353 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 3354 ret <vscale x 32 x i1> %1 3355} 3356 3357define <vscale x 32 x i1> @fcmp_oge_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3358; CHECK-LABEL: fcmp_oge_vf_nxv32f16: 3359; CHECK: # %bb.0: 3360; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3361; CHECK-NEXT: vfmv.v.f v16, fa0 3362; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3363; CHECK-NEXT: vmfeq.vv v16, v8, v8 3364; CHECK-NEXT: vmand.mm v16, v24, v16 3365; CHECK-NEXT: vmv1r.v v0, v16 3366; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 3367; CHECK-NEXT: vmv1r.v v0, v16 3368; CHECK-NEXT: ret 3369 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3370 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3371 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 3372 ret <vscale x 32 x i1> %1 3373} 3374 3375define <vscale x 32 x i1> @fcmp_oge_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3376; CHECK-LABEL: fcmp_oge_fv_nxv32f16: 3377; CHECK: # %bb.0: 3378; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3379; CHECK-NEXT: vfmv.v.f v16, fa0 3380; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3381; CHECK-NEXT: vmfeq.vv v16, v8, v8 3382; CHECK-NEXT: vmand.mm v16, v16, v24 3383; CHECK-NEXT: vmv1r.v v0, v16 3384; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 3385; CHECK-NEXT: vmv1r.v v0, v16 3386; CHECK-NEXT: ret 3387 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3388 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3389 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 3390 ret <vscale x 32 x i1> %1 3391} 3392 3393define <vscale x 32 x i1> @fcmp_olt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3394; CHECK-LABEL: fcmp_olt_vv_nxv32f16: 3395; CHECK: # %bb.0: 3396; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3397; CHECK-NEXT: vmfeq.vv v24, v16, v16 3398; CHECK-NEXT: vmfeq.vv v25, v8, v8 3399; CHECK-NEXT: vmand.mm v24, v25, v24 3400; CHECK-NEXT: vmv1r.v v0, v24 3401; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 3402; CHECK-NEXT: vmv1r.v v0, v24 3403; CHECK-NEXT: ret 3404 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 3405 ret <vscale x 32 x i1> %1 3406} 3407 3408define <vscale x 32 x i1> @fcmp_olt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3409; CHECK-LABEL: fcmp_olt_vf_nxv32f16: 3410; CHECK: # %bb.0: 3411; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3412; CHECK-NEXT: vfmv.v.f v16, fa0 3413; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3414; CHECK-NEXT: vmfeq.vv v16, v8, v8 3415; CHECK-NEXT: vmand.mm v16, v16, v24 3416; CHECK-NEXT: vmv1r.v v0, v16 3417; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3418; CHECK-NEXT: vmv1r.v v0, v16 3419; CHECK-NEXT: ret 3420 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3421 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3422 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 3423 ret <vscale x 32 x i1> %1 3424} 3425 3426define <vscale x 32 x i1> @fcmp_olt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3427; CHECK-LABEL: fcmp_olt_fv_nxv32f16: 3428; CHECK: # %bb.0: 3429; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3430; CHECK-NEXT: vfmv.v.f v16, fa0 3431; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3432; CHECK-NEXT: vmfeq.vv v16, v8, v8 3433; CHECK-NEXT: vmand.mm v16, v24, v16 3434; CHECK-NEXT: vmv1r.v v0, v16 3435; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3436; CHECK-NEXT: vmv1r.v v0, v16 3437; CHECK-NEXT: ret 3438 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3439 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3440 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 3441 ret <vscale x 32 x i1> %1 3442} 3443 3444define <vscale x 32 x i1> @fcmp_ole_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3445; CHECK-LABEL: fcmp_ole_vv_nxv32f16: 3446; CHECK: # %bb.0: 3447; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3448; CHECK-NEXT: vmfeq.vv v24, v16, v16 3449; CHECK-NEXT: vmfeq.vv v25, v8, v8 3450; CHECK-NEXT: vmand.mm v24, v25, v24 3451; CHECK-NEXT: vmv1r.v v0, v24 3452; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 3453; CHECK-NEXT: vmv1r.v v0, v24 3454; CHECK-NEXT: ret 3455 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 3456 ret <vscale x 32 x i1> %1 3457} 3458 3459define <vscale x 32 x i1> @fcmp_ole_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3460; CHECK-LABEL: fcmp_ole_vf_nxv32f16: 3461; CHECK: # %bb.0: 3462; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3463; CHECK-NEXT: vfmv.v.f v16, fa0 3464; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3465; CHECK-NEXT: vmfeq.vv v16, v8, v8 3466; CHECK-NEXT: vmand.mm v16, v16, v24 3467; CHECK-NEXT: vmv1r.v v0, v16 3468; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 3469; CHECK-NEXT: vmv1r.v v0, v16 3470; CHECK-NEXT: ret 3471 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3472 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3473 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 3474 ret <vscale x 32 x i1> %1 3475} 3476 3477define <vscale x 32 x i1> @fcmp_ole_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3478; CHECK-LABEL: fcmp_ole_fv_nxv32f16: 3479; CHECK: # %bb.0: 3480; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3481; CHECK-NEXT: vfmv.v.f v16, fa0 3482; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3483; CHECK-NEXT: vmfeq.vv v16, v8, v8 3484; CHECK-NEXT: vmand.mm v16, v24, v16 3485; CHECK-NEXT: vmv1r.v v0, v16 3486; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 3487; CHECK-NEXT: vmv1r.v v0, v16 3488; CHECK-NEXT: ret 3489 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3490 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3491 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 3492 ret <vscale x 32 x i1> %1 3493} 3494 3495define <vscale x 32 x i1> @fcmp_one_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3496; CHECK-LABEL: fcmp_one_vv_nxv32f16: 3497; CHECK: # %bb.0: 3498; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3499; CHECK-NEXT: vmfeq.vv v24, v16, v16 3500; CHECK-NEXT: vmfeq.vv v25, v8, v8 3501; CHECK-NEXT: vmand.mm v24, v25, v24 3502; CHECK-NEXT: vmv1r.v v25, v24 3503; CHECK-NEXT: vmv1r.v v0, v24 3504; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 3505; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 3506; CHECK-NEXT: vmor.mm v0, v24, v25 3507; CHECK-NEXT: ret 3508 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 3509 ret <vscale x 32 x i1> %1 3510} 3511 3512define <vscale x 32 x i1> @fcmp_one_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3513; CHECK-LABEL: fcmp_one_vf_nxv32f16: 3514; CHECK: # %bb.0: 3515; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3516; CHECK-NEXT: vfmv.v.f v16, fa0 3517; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3518; CHECK-NEXT: vmfeq.vv v16, v8, v8 3519; CHECK-NEXT: vmand.mm v16, v16, v24 3520; CHECK-NEXT: vmv1r.v v17, v16 3521; CHECK-NEXT: vmv1r.v v0, v16 3522; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 3523; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3524; CHECK-NEXT: vmor.mm v0, v16, v17 3525; CHECK-NEXT: ret 3526 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3527 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3528 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 3529 ret <vscale x 32 x i1> %1 3530} 3531 3532define <vscale x 32 x i1> @fcmp_one_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3533; CHECK-LABEL: fcmp_one_fv_nxv32f16: 3534; CHECK: # %bb.0: 3535; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3536; CHECK-NEXT: vfmv.v.f v16, fa0 3537; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3538; CHECK-NEXT: vmfeq.vv v16, v8, v8 3539; CHECK-NEXT: vmand.mm v16, v24, v16 3540; CHECK-NEXT: vmv1r.v v17, v16 3541; CHECK-NEXT: vmv1r.v v0, v16 3542; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 3543; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3544; CHECK-NEXT: vmor.mm v0, v16, v17 3545; CHECK-NEXT: ret 3546 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3547 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3548 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 3549 ret <vscale x 32 x i1> %1 3550} 3551 3552define <vscale x 32 x i1> @fcmp_ord_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3553; CHECK-LABEL: fcmp_ord_vv_nxv32f16: 3554; CHECK: # %bb.0: 3555; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3556; CHECK-NEXT: vmfeq.vv v24, v16, v16 3557; CHECK-NEXT: vmfeq.vv v16, v8, v8 3558; CHECK-NEXT: vmand.mm v0, v16, v24 3559; CHECK-NEXT: ret 3560 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 3561 ret <vscale x 32 x i1> %1 3562} 3563 3564define <vscale x 32 x i1> @fcmp_ord_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3565; CHECK-LABEL: fcmp_ord_vf_nxv32f16: 3566; CHECK: # %bb.0: 3567; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3568; CHECK-NEXT: vfmv.v.f v16, fa0 3569; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3570; CHECK-NEXT: vmfeq.vv v16, v8, v8 3571; CHECK-NEXT: vmand.mm v0, v16, v24 3572; CHECK-NEXT: ret 3573 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3574 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3575 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 3576 ret <vscale x 32 x i1> %1 3577} 3578 3579define <vscale x 32 x i1> @fcmp_ord_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3580; CHECK-LABEL: fcmp_ord_fv_nxv32f16: 3581; CHECK: # %bb.0: 3582; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3583; CHECK-NEXT: vfmv.v.f v16, fa0 3584; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3585; CHECK-NEXT: vmfeq.vv v16, v8, v8 3586; CHECK-NEXT: vmand.mm v0, v24, v16 3587; CHECK-NEXT: ret 3588 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3589 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3590 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 3591 ret <vscale x 32 x i1> %1 3592} 3593 3594define <vscale x 32 x i1> @fcmp_ueq_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3595; CHECK-LABEL: fcmp_ueq_vv_nxv32f16: 3596; CHECK: # %bb.0: 3597; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3598; CHECK-NEXT: vmfeq.vv v24, v16, v16 3599; CHECK-NEXT: vmfeq.vv v25, v8, v8 3600; CHECK-NEXT: vmand.mm v24, v25, v24 3601; CHECK-NEXT: vmv1r.v v25, v24 3602; CHECK-NEXT: vmv1r.v v0, v24 3603; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 3604; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 3605; CHECK-NEXT: vmnor.mm v0, v24, v25 3606; CHECK-NEXT: ret 3607 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3608 ret <vscale x 32 x i1> %1 3609} 3610 3611define <vscale x 32 x i1> @fcmp_ueq_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3612; CHECK-LABEL: fcmp_ueq_vf_nxv32f16: 3613; CHECK: # %bb.0: 3614; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3615; CHECK-NEXT: vfmv.v.f v16, fa0 3616; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3617; CHECK-NEXT: vmfeq.vv v16, v8, v8 3618; CHECK-NEXT: vmand.mm v16, v16, v24 3619; CHECK-NEXT: vmv1r.v v17, v16 3620; CHECK-NEXT: vmv1r.v v0, v16 3621; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 3622; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3623; CHECK-NEXT: vmnor.mm v0, v16, v17 3624; CHECK-NEXT: ret 3625 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3626 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3627 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3628 ret <vscale x 32 x i1> %1 3629} 3630 3631define <vscale x 32 x i1> @fcmp_ueq_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3632; CHECK-LABEL: fcmp_ueq_fv_nxv32f16: 3633; CHECK: # %bb.0: 3634; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3635; CHECK-NEXT: vfmv.v.f v16, fa0 3636; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3637; CHECK-NEXT: vmfeq.vv v16, v8, v8 3638; CHECK-NEXT: vmand.mm v16, v24, v16 3639; CHECK-NEXT: vmv1r.v v17, v16 3640; CHECK-NEXT: vmv1r.v v0, v16 3641; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 3642; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3643; CHECK-NEXT: vmnor.mm v0, v16, v17 3644; CHECK-NEXT: ret 3645 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3646 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3647 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3648 ret <vscale x 32 x i1> %1 3649} 3650 3651define <vscale x 32 x i1> @fcmp_ugt_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3652; CHECK-LABEL: fcmp_ugt_vv_nxv32f16: 3653; CHECK: # %bb.0: 3654; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3655; CHECK-NEXT: vmfeq.vv v24, v16, v16 3656; CHECK-NEXT: vmfeq.vv v25, v8, v8 3657; CHECK-NEXT: vmand.mm v24, v25, v24 3658; CHECK-NEXT: vmv1r.v v0, v24 3659; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 3660; CHECK-NEXT: vmnot.m v0, v24 3661; CHECK-NEXT: ret 3662 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3663 ret <vscale x 32 x i1> %1 3664} 3665 3666define <vscale x 32 x i1> @fcmp_ugt_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3667; CHECK-LABEL: fcmp_ugt_vf_nxv32f16: 3668; CHECK: # %bb.0: 3669; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3670; CHECK-NEXT: vfmv.v.f v16, fa0 3671; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3672; CHECK-NEXT: vmfeq.vv v16, v8, v8 3673; CHECK-NEXT: vmand.mm v16, v16, v24 3674; CHECK-NEXT: vmv1r.v v0, v16 3675; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 3676; CHECK-NEXT: vmnot.m v0, v16 3677; CHECK-NEXT: ret 3678 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3679 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3680 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3681 ret <vscale x 32 x i1> %1 3682} 3683 3684define <vscale x 32 x i1> @fcmp_ugt_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3685; CHECK-LABEL: fcmp_ugt_fv_nxv32f16: 3686; CHECK: # %bb.0: 3687; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3688; CHECK-NEXT: vfmv.v.f v16, fa0 3689; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3690; CHECK-NEXT: vmfeq.vv v16, v8, v8 3691; CHECK-NEXT: vmand.mm v16, v24, v16 3692; CHECK-NEXT: vmv1r.v v0, v16 3693; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 3694; CHECK-NEXT: vmnot.m v0, v16 3695; CHECK-NEXT: ret 3696 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3697 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3698 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3699 ret <vscale x 32 x i1> %1 3700} 3701 3702define <vscale x 32 x i1> @fcmp_uge_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3703; CHECK-LABEL: fcmp_uge_vv_nxv32f16: 3704; CHECK: # %bb.0: 3705; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3706; CHECK-NEXT: vmfeq.vv v24, v16, v16 3707; CHECK-NEXT: vmfeq.vv v25, v8, v8 3708; CHECK-NEXT: vmand.mm v24, v25, v24 3709; CHECK-NEXT: vmv1r.v v0, v24 3710; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 3711; CHECK-NEXT: vmnot.m v0, v24 3712; CHECK-NEXT: ret 3713 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 3714 ret <vscale x 32 x i1> %1 3715} 3716 3717define <vscale x 32 x i1> @fcmp_uge_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3718; CHECK-LABEL: fcmp_uge_vf_nxv32f16: 3719; CHECK: # %bb.0: 3720; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3721; CHECK-NEXT: vfmv.v.f v16, fa0 3722; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3723; CHECK-NEXT: vmfeq.vv v16, v8, v8 3724; CHECK-NEXT: vmand.mm v16, v16, v24 3725; CHECK-NEXT: vmv1r.v v0, v16 3726; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3727; CHECK-NEXT: vmnot.m v0, v16 3728; CHECK-NEXT: ret 3729 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3730 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3731 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3732 ret <vscale x 32 x i1> %1 3733} 3734 3735define <vscale x 32 x i1> @fcmp_uge_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3736; CHECK-LABEL: fcmp_uge_fv_nxv32f16: 3737; CHECK: # %bb.0: 3738; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3739; CHECK-NEXT: vfmv.v.f v16, fa0 3740; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3741; CHECK-NEXT: vmfeq.vv v16, v8, v8 3742; CHECK-NEXT: vmand.mm v16, v24, v16 3743; CHECK-NEXT: vmv1r.v v0, v16 3744; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3745; CHECK-NEXT: vmnot.m v0, v16 3746; CHECK-NEXT: ret 3747 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3748 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3749 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3750 ret <vscale x 32 x i1> %1 3751} 3752 3753define <vscale x 32 x i1> @fcmp_ult_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3754; CHECK-LABEL: fcmp_ult_vv_nxv32f16: 3755; CHECK: # %bb.0: 3756; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3757; CHECK-NEXT: vmfeq.vv v24, v8, v8 3758; CHECK-NEXT: vmfeq.vv v25, v16, v16 3759; CHECK-NEXT: vmand.mm v24, v25, v24 3760; CHECK-NEXT: vmv1r.v v0, v24 3761; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 3762; CHECK-NEXT: vmnot.m v0, v24 3763; CHECK-NEXT: ret 3764 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3765 ret <vscale x 32 x i1> %1 3766} 3767 3768define <vscale x 32 x i1> @fcmp_ult_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3769; CHECK-LABEL: fcmp_ult_vf_nxv32f16: 3770; CHECK: # %bb.0: 3771; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3772; CHECK-NEXT: vfmv.v.f v16, fa0 3773; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3774; CHECK-NEXT: vmfeq.vv v16, v8, v8 3775; CHECK-NEXT: vmand.mm v16, v24, v16 3776; CHECK-NEXT: vmv1r.v v0, v16 3777; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 3778; CHECK-NEXT: vmnot.m v0, v16 3779; CHECK-NEXT: ret 3780 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3781 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3782 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3783 ret <vscale x 32 x i1> %1 3784} 3785 3786define <vscale x 32 x i1> @fcmp_ult_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3787; CHECK-LABEL: fcmp_ult_fv_nxv32f16: 3788; CHECK: # %bb.0: 3789; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3790; CHECK-NEXT: vfmv.v.f v16, fa0 3791; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3792; CHECK-NEXT: vmfeq.vv v16, v8, v8 3793; CHECK-NEXT: vmand.mm v16, v16, v24 3794; CHECK-NEXT: vmv1r.v v0, v16 3795; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 3796; CHECK-NEXT: vmnot.m v0, v16 3797; CHECK-NEXT: ret 3798 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3799 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3800 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3801 ret <vscale x 32 x i1> %1 3802} 3803 3804define <vscale x 32 x i1> @fcmp_ule_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3805; CHECK-LABEL: fcmp_ule_vv_nxv32f16: 3806; CHECK: # %bb.0: 3807; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3808; CHECK-NEXT: vmfeq.vv v24, v8, v8 3809; CHECK-NEXT: vmfeq.vv v25, v16, v16 3810; CHECK-NEXT: vmand.mm v24, v25, v24 3811; CHECK-NEXT: vmv1r.v v0, v24 3812; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 3813; CHECK-NEXT: vmnot.m v0, v24 3814; CHECK-NEXT: ret 3815 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3816 ret <vscale x 32 x i1> %1 3817} 3818 3819define <vscale x 32 x i1> @fcmp_ule_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3820; CHECK-LABEL: fcmp_ule_vf_nxv32f16: 3821; CHECK: # %bb.0: 3822; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3823; CHECK-NEXT: vfmv.v.f v16, fa0 3824; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3825; CHECK-NEXT: vmfeq.vv v16, v8, v8 3826; CHECK-NEXT: vmand.mm v16, v24, v16 3827; CHECK-NEXT: vmv1r.v v0, v16 3828; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 3829; CHECK-NEXT: vmnot.m v0, v16 3830; CHECK-NEXT: ret 3831 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3832 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3833 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3834 ret <vscale x 32 x i1> %1 3835} 3836 3837define <vscale x 32 x i1> @fcmp_ule_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3838; CHECK-LABEL: fcmp_ule_fv_nxv32f16: 3839; CHECK: # %bb.0: 3840; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 3841; CHECK-NEXT: vfmv.v.f v16, fa0 3842; CHECK-NEXT: vmfeq.vf v24, v16, fa0 3843; CHECK-NEXT: vmfeq.vv v16, v8, v8 3844; CHECK-NEXT: vmand.mm v16, v16, v24 3845; CHECK-NEXT: vmv1r.v v0, v16 3846; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 3847; CHECK-NEXT: vmnot.m v0, v16 3848; CHECK-NEXT: ret 3849 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3850 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3851 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3852 ret <vscale x 32 x i1> %1 3853} 3854 3855define <vscale x 32 x i1> @fcmp_une_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3856; CHECK-LABEL: fcmp_une_vv_nxv32f16: 3857; CHECK: # %bb.0: 3858; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3859; CHECK-NEXT: vmfne.vv v0, v8, v16 3860; CHECK-NEXT: ret 3861 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3862 ret <vscale x 32 x i1> %1 3863} 3864 3865define <vscale x 32 x i1> @fcmp_une_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3866; CHECK-LABEL: fcmp_une_vf_nxv32f16: 3867; CHECK: # %bb.0: 3868; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3869; CHECK-NEXT: vmfne.vf v0, v8, fa0 3870; CHECK-NEXT: ret 3871 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3872 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3873 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3874 ret <vscale x 32 x i1> %1 3875} 3876 3877define <vscale x 32 x i1> @fcmp_une_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3878; CHECK-LABEL: fcmp_une_fv_nxv32f16: 3879; CHECK: # %bb.0: 3880; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3881; CHECK-NEXT: vmfne.vf v0, v8, fa0 3882; CHECK-NEXT: ret 3883 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3884 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3885 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3886 ret <vscale x 32 x i1> %1 3887} 3888 3889define <vscale x 32 x i1> @fcmp_uno_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) nounwind strictfp { 3890; CHECK-LABEL: fcmp_uno_vv_nxv32f16: 3891; CHECK: # %bb.0: 3892; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3893; CHECK-NEXT: vmfne.vv v24, v16, v16 3894; CHECK-NEXT: vmfne.vv v16, v8, v8 3895; CHECK-NEXT: vmor.mm v0, v16, v24 3896; CHECK-NEXT: ret 3897 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3898 ret <vscale x 32 x i1> %1 3899} 3900 3901define <vscale x 32 x i1> @fcmp_uno_vf_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3902; CHECK-LABEL: fcmp_uno_vf_nxv32f16: 3903; CHECK: # %bb.0: 3904; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3905; CHECK-NEXT: vfmv.v.f v16, fa0 3906; CHECK-NEXT: vmfne.vf v24, v16, fa0 3907; CHECK-NEXT: vmfne.vv v16, v8, v8 3908; CHECK-NEXT: vmor.mm v0, v16, v24 3909; CHECK-NEXT: ret 3910 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3911 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3912 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3913 ret <vscale x 32 x i1> %1 3914} 3915 3916define <vscale x 32 x i1> @fcmp_uno_fv_nxv32f16(<vscale x 32 x half> %va, half %b) nounwind strictfp { 3917; CHECK-LABEL: fcmp_uno_fv_nxv32f16: 3918; CHECK: # %bb.0: 3919; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 3920; CHECK-NEXT: vfmv.v.f v16, fa0 3921; CHECK-NEXT: vmfne.vf v24, v16, fa0 3922; CHECK-NEXT: vmfne.vv v16, v8, v8 3923; CHECK-NEXT: vmor.mm v0, v24, v16 3924; CHECK-NEXT: ret 3925 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3926 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3927 %1 = call <vscale x 32 x i1> @llvm.experimental.constrained.fcmp.nxv32f16(<vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3928 ret <vscale x 32 x i1> %1 3929} 3930 3931declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata) 3932define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 3933; CHECK-LABEL: fcmp_oeq_vv_nxv1f32: 3934; CHECK: # %bb.0: 3935; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 3936; CHECK-NEXT: vmfeq.vv v0, v8, v9 3937; CHECK-NEXT: ret 3938 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3939 ret <vscale x 1 x i1> %1 3940} 3941 3942define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 3943; CHECK-LABEL: fcmp_oeq_vf_nxv1f32: 3944; CHECK: # %bb.0: 3945; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 3946; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3947; CHECK-NEXT: ret 3948 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3949 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3950 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3951 ret <vscale x 1 x i1> %1 3952} 3953 3954define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 3955; CHECK-LABEL: fcmp_oeq_fv_nxv1f32: 3956; CHECK: # %bb.0: 3957; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 3958; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3959; CHECK-NEXT: ret 3960 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3961 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3962 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3963 ret <vscale x 1 x i1> %1 3964} 3965 3966define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 3967; CHECK-LABEL: fcmp_ogt_vv_nxv1f32: 3968; CHECK: # %bb.0: 3969; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 3970; CHECK-NEXT: vmfeq.vv v10, v8, v8 3971; CHECK-NEXT: vmfeq.vv v11, v9, v9 3972; CHECK-NEXT: vmand.mm v0, v11, v10 3973; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 3974; CHECK-NEXT: ret 3975 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3976 ret <vscale x 1 x i1> %1 3977} 3978 3979define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 3980; CHECK-LABEL: fcmp_ogt_vf_nxv1f32: 3981; CHECK: # %bb.0: 3982; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 3983; CHECK-NEXT: vfmv.v.f v9, fa0 3984; CHECK-NEXT: vmfeq.vv v10, v8, v8 3985; CHECK-NEXT: vmfeq.vf v9, v9, fa0 3986; CHECK-NEXT: vmand.mm v0, v9, v10 3987; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 3988; CHECK-NEXT: ret 3989 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3990 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3991 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3992 ret <vscale x 1 x i1> %1 3993} 3994 3995define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 3996; CHECK-LABEL: fcmp_ogt_fv_nxv1f32: 3997; CHECK: # %bb.0: 3998; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 3999; CHECK-NEXT: vfmv.v.f v9, fa0 4000; CHECK-NEXT: vmfeq.vv v10, v8, v8 4001; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4002; CHECK-NEXT: vmand.mm v0, v10, v9 4003; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4004; CHECK-NEXT: ret 4005 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4006 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4007 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4008 ret <vscale x 1 x i1> %1 4009} 4010 4011define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4012; CHECK-LABEL: fcmp_oge_vv_nxv1f32: 4013; CHECK: # %bb.0: 4014; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4015; CHECK-NEXT: vmfeq.vv v10, v8, v8 4016; CHECK-NEXT: vmfeq.vv v11, v9, v9 4017; CHECK-NEXT: vmand.mm v0, v11, v10 4018; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4019; CHECK-NEXT: ret 4020 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4021 ret <vscale x 1 x i1> %1 4022} 4023 4024define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4025; CHECK-LABEL: fcmp_oge_vf_nxv1f32: 4026; CHECK: # %bb.0: 4027; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4028; CHECK-NEXT: vfmv.v.f v9, fa0 4029; CHECK-NEXT: vmfeq.vv v10, v8, v8 4030; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4031; CHECK-NEXT: vmand.mm v0, v9, v10 4032; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4033; CHECK-NEXT: ret 4034 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4035 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4036 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4037 ret <vscale x 1 x i1> %1 4038} 4039 4040define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4041; CHECK-LABEL: fcmp_oge_fv_nxv1f32: 4042; CHECK: # %bb.0: 4043; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4044; CHECK-NEXT: vfmv.v.f v9, fa0 4045; CHECK-NEXT: vmfeq.vv v10, v8, v8 4046; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4047; CHECK-NEXT: vmand.mm v0, v10, v9 4048; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4049; CHECK-NEXT: ret 4050 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4051 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4052 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4053 ret <vscale x 1 x i1> %1 4054} 4055 4056define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4057; CHECK-LABEL: fcmp_olt_vv_nxv1f32: 4058; CHECK: # %bb.0: 4059; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4060; CHECK-NEXT: vmfeq.vv v10, v9, v9 4061; CHECK-NEXT: vmfeq.vv v11, v8, v8 4062; CHECK-NEXT: vmand.mm v0, v11, v10 4063; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4064; CHECK-NEXT: ret 4065 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4066 ret <vscale x 1 x i1> %1 4067} 4068 4069define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4070; CHECK-LABEL: fcmp_olt_vf_nxv1f32: 4071; CHECK: # %bb.0: 4072; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4073; CHECK-NEXT: vfmv.v.f v9, fa0 4074; CHECK-NEXT: vmfeq.vv v10, v8, v8 4075; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4076; CHECK-NEXT: vmand.mm v0, v10, v9 4077; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4078; CHECK-NEXT: ret 4079 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4080 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4081 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4082 ret <vscale x 1 x i1> %1 4083} 4084 4085define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4086; CHECK-LABEL: fcmp_olt_fv_nxv1f32: 4087; CHECK: # %bb.0: 4088; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4089; CHECK-NEXT: vfmv.v.f v9, fa0 4090; CHECK-NEXT: vmfeq.vv v10, v8, v8 4091; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4092; CHECK-NEXT: vmand.mm v0, v9, v10 4093; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4094; CHECK-NEXT: ret 4095 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4096 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4097 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4098 ret <vscale x 1 x i1> %1 4099} 4100 4101define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4102; CHECK-LABEL: fcmp_ole_vv_nxv1f32: 4103; CHECK: # %bb.0: 4104; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4105; CHECK-NEXT: vmfeq.vv v10, v9, v9 4106; CHECK-NEXT: vmfeq.vv v11, v8, v8 4107; CHECK-NEXT: vmand.mm v0, v11, v10 4108; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4109; CHECK-NEXT: ret 4110 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4111 ret <vscale x 1 x i1> %1 4112} 4113 4114define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4115; CHECK-LABEL: fcmp_ole_vf_nxv1f32: 4116; CHECK: # %bb.0: 4117; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4118; CHECK-NEXT: vfmv.v.f v9, fa0 4119; CHECK-NEXT: vmfeq.vv v10, v8, v8 4120; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4121; CHECK-NEXT: vmand.mm v0, v10, v9 4122; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4123; CHECK-NEXT: ret 4124 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4125 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4126 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4127 ret <vscale x 1 x i1> %1 4128} 4129 4130define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4131; CHECK-LABEL: fcmp_ole_fv_nxv1f32: 4132; CHECK: # %bb.0: 4133; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4134; CHECK-NEXT: vfmv.v.f v9, fa0 4135; CHECK-NEXT: vmfeq.vv v10, v8, v8 4136; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4137; CHECK-NEXT: vmand.mm v0, v9, v10 4138; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4139; CHECK-NEXT: ret 4140 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4141 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4142 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 4143 ret <vscale x 1 x i1> %1 4144} 4145 4146define <vscale x 1 x i1> @fcmp_one_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4147; CHECK-LABEL: fcmp_one_vv_nxv1f32: 4148; CHECK: # %bb.0: 4149; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4150; CHECK-NEXT: vmfeq.vv v10, v9, v9 4151; CHECK-NEXT: vmfeq.vv v11, v8, v8 4152; CHECK-NEXT: vmand.mm v0, v11, v10 4153; CHECK-NEXT: vmv1r.v v10, v0 4154; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4155; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4156; CHECK-NEXT: vmor.mm v0, v0, v10 4157; CHECK-NEXT: ret 4158 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 4159 ret <vscale x 1 x i1> %1 4160} 4161 4162define <vscale x 1 x i1> @fcmp_one_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4163; CHECK-LABEL: fcmp_one_vf_nxv1f32: 4164; CHECK: # %bb.0: 4165; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4166; CHECK-NEXT: vfmv.v.f v9, fa0 4167; CHECK-NEXT: vmfeq.vv v10, v8, v8 4168; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4169; CHECK-NEXT: vmand.mm v0, v10, v9 4170; CHECK-NEXT: vmv1r.v v9, v0 4171; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4172; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4173; CHECK-NEXT: vmor.mm v0, v0, v9 4174; CHECK-NEXT: ret 4175 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4176 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4177 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 4178 ret <vscale x 1 x i1> %1 4179} 4180 4181define <vscale x 1 x i1> @fcmp_one_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4182; CHECK-LABEL: fcmp_one_fv_nxv1f32: 4183; CHECK: # %bb.0: 4184; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4185; CHECK-NEXT: vfmv.v.f v9, fa0 4186; CHECK-NEXT: vmfeq.vv v10, v8, v8 4187; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4188; CHECK-NEXT: vmand.mm v0, v9, v10 4189; CHECK-NEXT: vmv1r.v v9, v0 4190; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4191; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4192; CHECK-NEXT: vmor.mm v0, v0, v9 4193; CHECK-NEXT: ret 4194 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4195 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4196 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 4197 ret <vscale x 1 x i1> %1 4198} 4199 4200define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4201; CHECK-LABEL: fcmp_ord_vv_nxv1f32: 4202; CHECK: # %bb.0: 4203; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4204; CHECK-NEXT: vmfeq.vv v9, v9, v9 4205; CHECK-NEXT: vmfeq.vv v8, v8, v8 4206; CHECK-NEXT: vmand.mm v0, v8, v9 4207; CHECK-NEXT: ret 4208 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 4209 ret <vscale x 1 x i1> %1 4210} 4211 4212define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4213; CHECK-LABEL: fcmp_ord_vf_nxv1f32: 4214; CHECK: # %bb.0: 4215; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4216; CHECK-NEXT: vfmv.v.f v9, fa0 4217; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4218; CHECK-NEXT: vmfeq.vv v8, v8, v8 4219; CHECK-NEXT: vmand.mm v0, v8, v9 4220; CHECK-NEXT: ret 4221 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4222 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4223 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4224 ret <vscale x 1 x i1> %1 4225} 4226 4227define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4228; CHECK-LABEL: fcmp_ord_fv_nxv1f32: 4229; CHECK: # %bb.0: 4230; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4231; CHECK-NEXT: vfmv.v.f v9, fa0 4232; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4233; CHECK-NEXT: vmfeq.vv v8, v8, v8 4234; CHECK-NEXT: vmand.mm v0, v9, v8 4235; CHECK-NEXT: ret 4236 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4237 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4238 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4239 ret <vscale x 1 x i1> %1 4240} 4241 4242define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4243; CHECK-LABEL: fcmp_ueq_vv_nxv1f32: 4244; CHECK: # %bb.0: 4245; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4246; CHECK-NEXT: vmfeq.vv v10, v9, v9 4247; CHECK-NEXT: vmfeq.vv v11, v8, v8 4248; CHECK-NEXT: vmand.mm v0, v11, v10 4249; CHECK-NEXT: vmv1r.v v10, v0 4250; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4251; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4252; CHECK-NEXT: vmnor.mm v0, v0, v10 4253; CHECK-NEXT: ret 4254 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4255 ret <vscale x 1 x i1> %1 4256} 4257 4258define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4259; CHECK-LABEL: fcmp_ueq_vf_nxv1f32: 4260; CHECK: # %bb.0: 4261; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4262; CHECK-NEXT: vfmv.v.f v9, fa0 4263; CHECK-NEXT: vmfeq.vv v10, v8, v8 4264; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4265; CHECK-NEXT: vmand.mm v0, v10, v9 4266; CHECK-NEXT: vmv1r.v v9, v0 4267; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4268; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4269; CHECK-NEXT: vmnor.mm v0, v0, v9 4270; CHECK-NEXT: ret 4271 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4272 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4273 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4274 ret <vscale x 1 x i1> %1 4275} 4276 4277define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4278; CHECK-LABEL: fcmp_ueq_fv_nxv1f32: 4279; CHECK: # %bb.0: 4280; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4281; CHECK-NEXT: vfmv.v.f v9, fa0 4282; CHECK-NEXT: vmfeq.vv v10, v8, v8 4283; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4284; CHECK-NEXT: vmand.mm v0, v9, v10 4285; CHECK-NEXT: vmv1r.v v9, v0 4286; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4287; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4288; CHECK-NEXT: vmnor.mm v0, v0, v9 4289; CHECK-NEXT: ret 4290 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4291 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4292 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4293 ret <vscale x 1 x i1> %1 4294} 4295 4296define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4297; CHECK-LABEL: fcmp_ugt_vv_nxv1f32: 4298; CHECK: # %bb.0: 4299; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4300; CHECK-NEXT: vmfeq.vv v10, v9, v9 4301; CHECK-NEXT: vmfeq.vv v11, v8, v8 4302; CHECK-NEXT: vmand.mm v0, v11, v10 4303; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4304; CHECK-NEXT: vmnot.m v0, v0 4305; CHECK-NEXT: ret 4306 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4307 ret <vscale x 1 x i1> %1 4308} 4309 4310define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4311; CHECK-LABEL: fcmp_ugt_vf_nxv1f32: 4312; CHECK: # %bb.0: 4313; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4314; CHECK-NEXT: vfmv.v.f v9, fa0 4315; CHECK-NEXT: vmfeq.vv v10, v8, v8 4316; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4317; CHECK-NEXT: vmand.mm v0, v10, v9 4318; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4319; CHECK-NEXT: vmnot.m v0, v0 4320; CHECK-NEXT: ret 4321 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4322 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4323 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4324 ret <vscale x 1 x i1> %1 4325} 4326 4327define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4328; CHECK-LABEL: fcmp_ugt_fv_nxv1f32: 4329; CHECK: # %bb.0: 4330; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4331; CHECK-NEXT: vfmv.v.f v9, fa0 4332; CHECK-NEXT: vmfeq.vv v10, v8, v8 4333; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4334; CHECK-NEXT: vmand.mm v0, v9, v10 4335; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4336; CHECK-NEXT: vmnot.m v0, v0 4337; CHECK-NEXT: ret 4338 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4339 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4340 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4341 ret <vscale x 1 x i1> %1 4342} 4343 4344define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4345; CHECK-LABEL: fcmp_uge_vv_nxv1f32: 4346; CHECK: # %bb.0: 4347; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4348; CHECK-NEXT: vmfeq.vv v10, v9, v9 4349; CHECK-NEXT: vmfeq.vv v11, v8, v8 4350; CHECK-NEXT: vmand.mm v0, v11, v10 4351; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4352; CHECK-NEXT: vmnot.m v0, v0 4353; CHECK-NEXT: ret 4354 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4355 ret <vscale x 1 x i1> %1 4356} 4357 4358define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4359; CHECK-LABEL: fcmp_uge_vf_nxv1f32: 4360; CHECK: # %bb.0: 4361; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4362; CHECK-NEXT: vfmv.v.f v9, fa0 4363; CHECK-NEXT: vmfeq.vv v10, v8, v8 4364; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4365; CHECK-NEXT: vmand.mm v0, v10, v9 4366; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4367; CHECK-NEXT: vmnot.m v0, v0 4368; CHECK-NEXT: ret 4369 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4370 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4371 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 4372 ret <vscale x 1 x i1> %1 4373} 4374 4375define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4376; CHECK-LABEL: fcmp_uge_fv_nxv1f32: 4377; CHECK: # %bb.0: 4378; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4379; CHECK-NEXT: vfmv.v.f v9, fa0 4380; CHECK-NEXT: vmfeq.vv v10, v8, v8 4381; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4382; CHECK-NEXT: vmand.mm v0, v9, v10 4383; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4384; CHECK-NEXT: vmnot.m v0, v0 4385; CHECK-NEXT: ret 4386 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4387 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4388 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 4389 ret <vscale x 1 x i1> %1 4390} 4391 4392define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4393; CHECK-LABEL: fcmp_ult_vv_nxv1f32: 4394; CHECK: # %bb.0: 4395; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4396; CHECK-NEXT: vmfeq.vv v10, v8, v8 4397; CHECK-NEXT: vmfeq.vv v11, v9, v9 4398; CHECK-NEXT: vmand.mm v0, v11, v10 4399; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4400; CHECK-NEXT: vmnot.m v0, v0 4401; CHECK-NEXT: ret 4402 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 4403 ret <vscale x 1 x i1> %1 4404} 4405 4406define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4407; CHECK-LABEL: fcmp_ult_vf_nxv1f32: 4408; CHECK: # %bb.0: 4409; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4410; CHECK-NEXT: vfmv.v.f v9, fa0 4411; CHECK-NEXT: vmfeq.vv v10, v8, v8 4412; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4413; CHECK-NEXT: vmand.mm v0, v9, v10 4414; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4415; CHECK-NEXT: vmnot.m v0, v0 4416; CHECK-NEXT: ret 4417 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4418 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4419 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 4420 ret <vscale x 1 x i1> %1 4421} 4422 4423define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4424; CHECK-LABEL: fcmp_ult_fv_nxv1f32: 4425; CHECK: # %bb.0: 4426; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4427; CHECK-NEXT: vfmv.v.f v9, fa0 4428; CHECK-NEXT: vmfeq.vv v10, v8, v8 4429; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4430; CHECK-NEXT: vmand.mm v0, v10, v9 4431; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4432; CHECK-NEXT: vmnot.m v0, v0 4433; CHECK-NEXT: ret 4434 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4435 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4436 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 4437 ret <vscale x 1 x i1> %1 4438} 4439 4440define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4441; CHECK-LABEL: fcmp_ule_vv_nxv1f32: 4442; CHECK: # %bb.0: 4443; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4444; CHECK-NEXT: vmfeq.vv v10, v8, v8 4445; CHECK-NEXT: vmfeq.vv v11, v9, v9 4446; CHECK-NEXT: vmand.mm v0, v11, v10 4447; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4448; CHECK-NEXT: vmnot.m v0, v0 4449; CHECK-NEXT: ret 4450 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 4451 ret <vscale x 1 x i1> %1 4452} 4453 4454define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4455; CHECK-LABEL: fcmp_ule_vf_nxv1f32: 4456; CHECK: # %bb.0: 4457; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4458; CHECK-NEXT: vfmv.v.f v9, fa0 4459; CHECK-NEXT: vmfeq.vv v10, v8, v8 4460; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4461; CHECK-NEXT: vmand.mm v0, v9, v10 4462; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4463; CHECK-NEXT: vmnot.m v0, v0 4464; CHECK-NEXT: ret 4465 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4466 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4467 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 4468 ret <vscale x 1 x i1> %1 4469} 4470 4471define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4472; CHECK-LABEL: fcmp_ule_fv_nxv1f32: 4473; CHECK: # %bb.0: 4474; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 4475; CHECK-NEXT: vfmv.v.f v9, fa0 4476; CHECK-NEXT: vmfeq.vv v10, v8, v8 4477; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4478; CHECK-NEXT: vmand.mm v0, v10, v9 4479; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4480; CHECK-NEXT: vmnot.m v0, v0 4481; CHECK-NEXT: ret 4482 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4483 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4484 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 4485 ret <vscale x 1 x i1> %1 4486} 4487 4488define <vscale x 1 x i1> @fcmp_une_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4489; CHECK-LABEL: fcmp_une_vv_nxv1f32: 4490; CHECK: # %bb.0: 4491; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4492; CHECK-NEXT: vmfne.vv v0, v8, v9 4493; CHECK-NEXT: ret 4494 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 4495 ret <vscale x 1 x i1> %1 4496} 4497 4498define <vscale x 1 x i1> @fcmp_une_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4499; CHECK-LABEL: fcmp_une_vf_nxv1f32: 4500; CHECK: # %bb.0: 4501; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4502; CHECK-NEXT: vmfne.vf v0, v8, fa0 4503; CHECK-NEXT: ret 4504 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4505 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4506 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 4507 ret <vscale x 1 x i1> %1 4508} 4509 4510define <vscale x 1 x i1> @fcmp_une_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4511; CHECK-LABEL: fcmp_une_fv_nxv1f32: 4512; CHECK: # %bb.0: 4513; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4514; CHECK-NEXT: vmfne.vf v0, v8, fa0 4515; CHECK-NEXT: ret 4516 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4517 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4518 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 4519 ret <vscale x 1 x i1> %1 4520} 4521 4522define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) nounwind strictfp { 4523; CHECK-LABEL: fcmp_uno_vv_nxv1f32: 4524; CHECK: # %bb.0: 4525; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4526; CHECK-NEXT: vmfne.vv v9, v9, v9 4527; CHECK-NEXT: vmfne.vv v8, v8, v8 4528; CHECK-NEXT: vmor.mm v0, v8, v9 4529; CHECK-NEXT: ret 4530 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 4531 ret <vscale x 1 x i1> %1 4532} 4533 4534define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4535; CHECK-LABEL: fcmp_uno_vf_nxv1f32: 4536; CHECK: # %bb.0: 4537; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4538; CHECK-NEXT: vfmv.v.f v9, fa0 4539; CHECK-NEXT: vmfne.vf v9, v9, fa0 4540; CHECK-NEXT: vmfne.vv v8, v8, v8 4541; CHECK-NEXT: vmor.mm v0, v8, v9 4542; CHECK-NEXT: ret 4543 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4544 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4545 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 4546 ret <vscale x 1 x i1> %1 4547} 4548 4549define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f32(<vscale x 1 x float> %va, float %b) nounwind strictfp { 4550; CHECK-LABEL: fcmp_uno_fv_nxv1f32: 4551; CHECK: # %bb.0: 4552; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 4553; CHECK-NEXT: vfmv.v.f v9, fa0 4554; CHECK-NEXT: vmfne.vf v9, v9, fa0 4555; CHECK-NEXT: vmfne.vv v8, v8, v8 4556; CHECK-NEXT: vmor.mm v0, v9, v8 4557; CHECK-NEXT: ret 4558 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4559 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4560 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f32(<vscale x 1 x float> %splat, <vscale x 1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 4561 ret <vscale x 1 x i1> %1 4562} 4563 4564declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata) 4565define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4566; CHECK-LABEL: fcmp_oeq_vv_nxv2f32: 4567; CHECK: # %bb.0: 4568; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4569; CHECK-NEXT: vmfeq.vv v0, v8, v9 4570; CHECK-NEXT: ret 4571 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4572 ret <vscale x 2 x i1> %1 4573} 4574 4575define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4576; CHECK-LABEL: fcmp_oeq_vf_nxv2f32: 4577; CHECK: # %bb.0: 4578; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4579; CHECK-NEXT: vmfeq.vf v0, v8, fa0 4580; CHECK-NEXT: ret 4581 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4582 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4583 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4584 ret <vscale x 2 x i1> %1 4585} 4586 4587define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4588; CHECK-LABEL: fcmp_oeq_fv_nxv2f32: 4589; CHECK: # %bb.0: 4590; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4591; CHECK-NEXT: vmfeq.vf v0, v8, fa0 4592; CHECK-NEXT: ret 4593 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4594 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4595 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4596 ret <vscale x 2 x i1> %1 4597} 4598 4599define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4600; CHECK-LABEL: fcmp_ogt_vv_nxv2f32: 4601; CHECK: # %bb.0: 4602; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4603; CHECK-NEXT: vmfeq.vv v10, v8, v8 4604; CHECK-NEXT: vmfeq.vv v11, v9, v9 4605; CHECK-NEXT: vmand.mm v0, v11, v10 4606; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4607; CHECK-NEXT: ret 4608 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4609 ret <vscale x 2 x i1> %1 4610} 4611 4612define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4613; CHECK-LABEL: fcmp_ogt_vf_nxv2f32: 4614; CHECK: # %bb.0: 4615; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4616; CHECK-NEXT: vfmv.v.f v9, fa0 4617; CHECK-NEXT: vmfeq.vv v10, v8, v8 4618; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4619; CHECK-NEXT: vmand.mm v0, v9, v10 4620; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4621; CHECK-NEXT: ret 4622 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4623 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4624 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4625 ret <vscale x 2 x i1> %1 4626} 4627 4628define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4629; CHECK-LABEL: fcmp_ogt_fv_nxv2f32: 4630; CHECK: # %bb.0: 4631; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4632; CHECK-NEXT: vfmv.v.f v9, fa0 4633; CHECK-NEXT: vmfeq.vv v10, v8, v8 4634; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4635; CHECK-NEXT: vmand.mm v0, v10, v9 4636; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4637; CHECK-NEXT: ret 4638 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4639 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4640 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4641 ret <vscale x 2 x i1> %1 4642} 4643 4644define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4645; CHECK-LABEL: fcmp_oge_vv_nxv2f32: 4646; CHECK: # %bb.0: 4647; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4648; CHECK-NEXT: vmfeq.vv v10, v8, v8 4649; CHECK-NEXT: vmfeq.vv v11, v9, v9 4650; CHECK-NEXT: vmand.mm v0, v11, v10 4651; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4652; CHECK-NEXT: ret 4653 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4654 ret <vscale x 2 x i1> %1 4655} 4656 4657define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4658; CHECK-LABEL: fcmp_oge_vf_nxv2f32: 4659; CHECK: # %bb.0: 4660; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4661; CHECK-NEXT: vfmv.v.f v9, fa0 4662; CHECK-NEXT: vmfeq.vv v10, v8, v8 4663; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4664; CHECK-NEXT: vmand.mm v0, v9, v10 4665; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4666; CHECK-NEXT: ret 4667 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4668 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4669 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4670 ret <vscale x 2 x i1> %1 4671} 4672 4673define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4674; CHECK-LABEL: fcmp_oge_fv_nxv2f32: 4675; CHECK: # %bb.0: 4676; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4677; CHECK-NEXT: vfmv.v.f v9, fa0 4678; CHECK-NEXT: vmfeq.vv v10, v8, v8 4679; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4680; CHECK-NEXT: vmand.mm v0, v10, v9 4681; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4682; CHECK-NEXT: ret 4683 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4684 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4685 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4686 ret <vscale x 2 x i1> %1 4687} 4688 4689define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4690; CHECK-LABEL: fcmp_olt_vv_nxv2f32: 4691; CHECK: # %bb.0: 4692; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4693; CHECK-NEXT: vmfeq.vv v10, v9, v9 4694; CHECK-NEXT: vmfeq.vv v11, v8, v8 4695; CHECK-NEXT: vmand.mm v0, v11, v10 4696; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4697; CHECK-NEXT: ret 4698 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4699 ret <vscale x 2 x i1> %1 4700} 4701 4702define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4703; CHECK-LABEL: fcmp_olt_vf_nxv2f32: 4704; CHECK: # %bb.0: 4705; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4706; CHECK-NEXT: vfmv.v.f v9, fa0 4707; CHECK-NEXT: vmfeq.vv v10, v8, v8 4708; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4709; CHECK-NEXT: vmand.mm v0, v10, v9 4710; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4711; CHECK-NEXT: ret 4712 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4713 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4714 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4715 ret <vscale x 2 x i1> %1 4716} 4717 4718define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4719; CHECK-LABEL: fcmp_olt_fv_nxv2f32: 4720; CHECK: # %bb.0: 4721; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4722; CHECK-NEXT: vfmv.v.f v9, fa0 4723; CHECK-NEXT: vmfeq.vv v10, v8, v8 4724; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4725; CHECK-NEXT: vmand.mm v0, v9, v10 4726; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4727; CHECK-NEXT: ret 4728 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4729 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4730 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4731 ret <vscale x 2 x i1> %1 4732} 4733 4734define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4735; CHECK-LABEL: fcmp_ole_vv_nxv2f32: 4736; CHECK: # %bb.0: 4737; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4738; CHECK-NEXT: vmfeq.vv v10, v9, v9 4739; CHECK-NEXT: vmfeq.vv v11, v8, v8 4740; CHECK-NEXT: vmand.mm v0, v11, v10 4741; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4742; CHECK-NEXT: ret 4743 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4744 ret <vscale x 2 x i1> %1 4745} 4746 4747define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4748; CHECK-LABEL: fcmp_ole_vf_nxv2f32: 4749; CHECK: # %bb.0: 4750; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4751; CHECK-NEXT: vfmv.v.f v9, fa0 4752; CHECK-NEXT: vmfeq.vv v10, v8, v8 4753; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4754; CHECK-NEXT: vmand.mm v0, v10, v9 4755; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4756; CHECK-NEXT: ret 4757 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4758 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4759 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4760 ret <vscale x 2 x i1> %1 4761} 4762 4763define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4764; CHECK-LABEL: fcmp_ole_fv_nxv2f32: 4765; CHECK: # %bb.0: 4766; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4767; CHECK-NEXT: vfmv.v.f v9, fa0 4768; CHECK-NEXT: vmfeq.vv v10, v8, v8 4769; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4770; CHECK-NEXT: vmand.mm v0, v9, v10 4771; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4772; CHECK-NEXT: ret 4773 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4774 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4775 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 4776 ret <vscale x 2 x i1> %1 4777} 4778 4779define <vscale x 2 x i1> @fcmp_one_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4780; CHECK-LABEL: fcmp_one_vv_nxv2f32: 4781; CHECK: # %bb.0: 4782; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4783; CHECK-NEXT: vmfeq.vv v10, v9, v9 4784; CHECK-NEXT: vmfeq.vv v11, v8, v8 4785; CHECK-NEXT: vmand.mm v0, v11, v10 4786; CHECK-NEXT: vmv.v.v v10, v0 4787; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4788; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4789; CHECK-NEXT: vmor.mm v0, v0, v10 4790; CHECK-NEXT: ret 4791 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 4792 ret <vscale x 2 x i1> %1 4793} 4794 4795define <vscale x 2 x i1> @fcmp_one_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4796; CHECK-LABEL: fcmp_one_vf_nxv2f32: 4797; CHECK: # %bb.0: 4798; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4799; CHECK-NEXT: vfmv.v.f v9, fa0 4800; CHECK-NEXT: vmfeq.vv v10, v8, v8 4801; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4802; CHECK-NEXT: vmand.mm v0, v10, v9 4803; CHECK-NEXT: vmv.v.v v9, v0 4804; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4805; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4806; CHECK-NEXT: vmor.mm v0, v0, v9 4807; CHECK-NEXT: ret 4808 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4809 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4810 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 4811 ret <vscale x 2 x i1> %1 4812} 4813 4814define <vscale x 2 x i1> @fcmp_one_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4815; CHECK-LABEL: fcmp_one_fv_nxv2f32: 4816; CHECK: # %bb.0: 4817; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4818; CHECK-NEXT: vfmv.v.f v9, fa0 4819; CHECK-NEXT: vmfeq.vv v10, v8, v8 4820; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4821; CHECK-NEXT: vmand.mm v0, v9, v10 4822; CHECK-NEXT: vmv.v.v v9, v0 4823; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4824; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4825; CHECK-NEXT: vmor.mm v0, v0, v9 4826; CHECK-NEXT: ret 4827 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4828 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4829 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 4830 ret <vscale x 2 x i1> %1 4831} 4832 4833define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4834; CHECK-LABEL: fcmp_ord_vv_nxv2f32: 4835; CHECK: # %bb.0: 4836; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4837; CHECK-NEXT: vmfeq.vv v9, v9, v9 4838; CHECK-NEXT: vmfeq.vv v8, v8, v8 4839; CHECK-NEXT: vmand.mm v0, v8, v9 4840; CHECK-NEXT: ret 4841 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 4842 ret <vscale x 2 x i1> %1 4843} 4844 4845define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4846; CHECK-LABEL: fcmp_ord_vf_nxv2f32: 4847; CHECK: # %bb.0: 4848; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4849; CHECK-NEXT: vfmv.v.f v9, fa0 4850; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4851; CHECK-NEXT: vmfeq.vv v8, v8, v8 4852; CHECK-NEXT: vmand.mm v0, v8, v9 4853; CHECK-NEXT: ret 4854 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4855 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4856 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4857 ret <vscale x 2 x i1> %1 4858} 4859 4860define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4861; CHECK-LABEL: fcmp_ord_fv_nxv2f32: 4862; CHECK: # %bb.0: 4863; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 4864; CHECK-NEXT: vfmv.v.f v9, fa0 4865; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4866; CHECK-NEXT: vmfeq.vv v8, v8, v8 4867; CHECK-NEXT: vmand.mm v0, v9, v8 4868; CHECK-NEXT: ret 4869 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4870 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4871 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4872 ret <vscale x 2 x i1> %1 4873} 4874 4875define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4876; CHECK-LABEL: fcmp_ueq_vv_nxv2f32: 4877; CHECK: # %bb.0: 4878; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4879; CHECK-NEXT: vmfeq.vv v10, v9, v9 4880; CHECK-NEXT: vmfeq.vv v11, v8, v8 4881; CHECK-NEXT: vmand.mm v0, v11, v10 4882; CHECK-NEXT: vmv.v.v v10, v0 4883; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4884; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4885; CHECK-NEXT: vmnor.mm v0, v0, v10 4886; CHECK-NEXT: ret 4887 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4888 ret <vscale x 2 x i1> %1 4889} 4890 4891define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4892; CHECK-LABEL: fcmp_ueq_vf_nxv2f32: 4893; CHECK: # %bb.0: 4894; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4895; CHECK-NEXT: vfmv.v.f v9, fa0 4896; CHECK-NEXT: vmfeq.vv v10, v8, v8 4897; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4898; CHECK-NEXT: vmand.mm v0, v10, v9 4899; CHECK-NEXT: vmv.v.v v9, v0 4900; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4901; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4902; CHECK-NEXT: vmnor.mm v0, v0, v9 4903; CHECK-NEXT: ret 4904 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4905 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4906 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4907 ret <vscale x 2 x i1> %1 4908} 4909 4910define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4911; CHECK-LABEL: fcmp_ueq_fv_nxv2f32: 4912; CHECK: # %bb.0: 4913; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4914; CHECK-NEXT: vfmv.v.f v9, fa0 4915; CHECK-NEXT: vmfeq.vv v10, v8, v8 4916; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4917; CHECK-NEXT: vmand.mm v0, v9, v10 4918; CHECK-NEXT: vmv.v.v v9, v0 4919; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4920; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4921; CHECK-NEXT: vmnor.mm v0, v0, v9 4922; CHECK-NEXT: ret 4923 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4924 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4925 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4926 ret <vscale x 2 x i1> %1 4927} 4928 4929define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4930; CHECK-LABEL: fcmp_ugt_vv_nxv2f32: 4931; CHECK: # %bb.0: 4932; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4933; CHECK-NEXT: vmfeq.vv v10, v9, v9 4934; CHECK-NEXT: vmfeq.vv v11, v8, v8 4935; CHECK-NEXT: vmand.mm v0, v11, v10 4936; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4937; CHECK-NEXT: vmnot.m v0, v0 4938; CHECK-NEXT: ret 4939 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4940 ret <vscale x 2 x i1> %1 4941} 4942 4943define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4944; CHECK-LABEL: fcmp_ugt_vf_nxv2f32: 4945; CHECK: # %bb.0: 4946; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4947; CHECK-NEXT: vfmv.v.f v9, fa0 4948; CHECK-NEXT: vmfeq.vv v10, v8, v8 4949; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4950; CHECK-NEXT: vmand.mm v0, v10, v9 4951; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4952; CHECK-NEXT: vmnot.m v0, v0 4953; CHECK-NEXT: ret 4954 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4955 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4956 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4957 ret <vscale x 2 x i1> %1 4958} 4959 4960define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4961; CHECK-LABEL: fcmp_ugt_fv_nxv2f32: 4962; CHECK: # %bb.0: 4963; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4964; CHECK-NEXT: vfmv.v.f v9, fa0 4965; CHECK-NEXT: vmfeq.vv v10, v8, v8 4966; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4967; CHECK-NEXT: vmand.mm v0, v9, v10 4968; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4969; CHECK-NEXT: vmnot.m v0, v0 4970; CHECK-NEXT: ret 4971 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4972 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4973 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4974 ret <vscale x 2 x i1> %1 4975} 4976 4977define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 4978; CHECK-LABEL: fcmp_uge_vv_nxv2f32: 4979; CHECK: # %bb.0: 4980; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4981; CHECK-NEXT: vmfeq.vv v10, v9, v9 4982; CHECK-NEXT: vmfeq.vv v11, v8, v8 4983; CHECK-NEXT: vmand.mm v0, v11, v10 4984; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4985; CHECK-NEXT: vmnot.m v0, v0 4986; CHECK-NEXT: ret 4987 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4988 ret <vscale x 2 x i1> %1 4989} 4990 4991define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 4992; CHECK-LABEL: fcmp_uge_vf_nxv2f32: 4993; CHECK: # %bb.0: 4994; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 4995; CHECK-NEXT: vfmv.v.f v9, fa0 4996; CHECK-NEXT: vmfeq.vv v10, v8, v8 4997; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4998; CHECK-NEXT: vmand.mm v0, v10, v9 4999; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5000; CHECK-NEXT: vmnot.m v0, v0 5001; CHECK-NEXT: ret 5002 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5003 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5004 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5005 ret <vscale x 2 x i1> %1 5006} 5007 5008define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5009; CHECK-LABEL: fcmp_uge_fv_nxv2f32: 5010; CHECK: # %bb.0: 5011; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5012; CHECK-NEXT: vfmv.v.f v9, fa0 5013; CHECK-NEXT: vmfeq.vv v10, v8, v8 5014; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5015; CHECK-NEXT: vmand.mm v0, v9, v10 5016; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5017; CHECK-NEXT: vmnot.m v0, v0 5018; CHECK-NEXT: ret 5019 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5020 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5021 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5022 ret <vscale x 2 x i1> %1 5023} 5024 5025define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 5026; CHECK-LABEL: fcmp_ult_vv_nxv2f32: 5027; CHECK: # %bb.0: 5028; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5029; CHECK-NEXT: vmfeq.vv v10, v8, v8 5030; CHECK-NEXT: vmfeq.vv v11, v9, v9 5031; CHECK-NEXT: vmand.mm v0, v11, v10 5032; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 5033; CHECK-NEXT: vmnot.m v0, v0 5034; CHECK-NEXT: ret 5035 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5036 ret <vscale x 2 x i1> %1 5037} 5038 5039define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5040; CHECK-LABEL: fcmp_ult_vf_nxv2f32: 5041; CHECK: # %bb.0: 5042; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5043; CHECK-NEXT: vfmv.v.f v9, fa0 5044; CHECK-NEXT: vmfeq.vv v10, v8, v8 5045; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5046; CHECK-NEXT: vmand.mm v0, v9, v10 5047; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5048; CHECK-NEXT: vmnot.m v0, v0 5049; CHECK-NEXT: ret 5050 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5051 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5052 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5053 ret <vscale x 2 x i1> %1 5054} 5055 5056define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5057; CHECK-LABEL: fcmp_ult_fv_nxv2f32: 5058; CHECK: # %bb.0: 5059; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5060; CHECK-NEXT: vfmv.v.f v9, fa0 5061; CHECK-NEXT: vmfeq.vv v10, v8, v8 5062; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5063; CHECK-NEXT: vmand.mm v0, v10, v9 5064; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5065; CHECK-NEXT: vmnot.m v0, v0 5066; CHECK-NEXT: ret 5067 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5068 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5069 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5070 ret <vscale x 2 x i1> %1 5071} 5072 5073define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 5074; CHECK-LABEL: fcmp_ule_vv_nxv2f32: 5075; CHECK: # %bb.0: 5076; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5077; CHECK-NEXT: vmfeq.vv v10, v8, v8 5078; CHECK-NEXT: vmfeq.vv v11, v9, v9 5079; CHECK-NEXT: vmand.mm v0, v11, v10 5080; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5081; CHECK-NEXT: vmnot.m v0, v0 5082; CHECK-NEXT: ret 5083 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5084 ret <vscale x 2 x i1> %1 5085} 5086 5087define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5088; CHECK-LABEL: fcmp_ule_vf_nxv2f32: 5089; CHECK: # %bb.0: 5090; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5091; CHECK-NEXT: vfmv.v.f v9, fa0 5092; CHECK-NEXT: vmfeq.vv v10, v8, v8 5093; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5094; CHECK-NEXT: vmand.mm v0, v9, v10 5095; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5096; CHECK-NEXT: vmnot.m v0, v0 5097; CHECK-NEXT: ret 5098 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5099 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5100 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5101 ret <vscale x 2 x i1> %1 5102} 5103 5104define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5105; CHECK-LABEL: fcmp_ule_fv_nxv2f32: 5106; CHECK: # %bb.0: 5107; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 5108; CHECK-NEXT: vfmv.v.f v9, fa0 5109; CHECK-NEXT: vmfeq.vv v10, v8, v8 5110; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5111; CHECK-NEXT: vmand.mm v0, v10, v9 5112; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5113; CHECK-NEXT: vmnot.m v0, v0 5114; CHECK-NEXT: ret 5115 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5116 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5117 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5118 ret <vscale x 2 x i1> %1 5119} 5120 5121define <vscale x 2 x i1> @fcmp_une_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 5122; CHECK-LABEL: fcmp_une_vv_nxv2f32: 5123; CHECK: # %bb.0: 5124; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5125; CHECK-NEXT: vmfne.vv v0, v8, v9 5126; CHECK-NEXT: ret 5127 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5128 ret <vscale x 2 x i1> %1 5129} 5130 5131define <vscale x 2 x i1> @fcmp_une_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5132; CHECK-LABEL: fcmp_une_vf_nxv2f32: 5133; CHECK: # %bb.0: 5134; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5135; CHECK-NEXT: vmfne.vf v0, v8, fa0 5136; CHECK-NEXT: ret 5137 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5138 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5139 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5140 ret <vscale x 2 x i1> %1 5141} 5142 5143define <vscale x 2 x i1> @fcmp_une_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5144; CHECK-LABEL: fcmp_une_fv_nxv2f32: 5145; CHECK: # %bb.0: 5146; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5147; CHECK-NEXT: vmfne.vf v0, v8, fa0 5148; CHECK-NEXT: ret 5149 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5150 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5151 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5152 ret <vscale x 2 x i1> %1 5153} 5154 5155define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) nounwind strictfp { 5156; CHECK-LABEL: fcmp_uno_vv_nxv2f32: 5157; CHECK: # %bb.0: 5158; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5159; CHECK-NEXT: vmfne.vv v9, v9, v9 5160; CHECK-NEXT: vmfne.vv v8, v8, v8 5161; CHECK-NEXT: vmor.mm v0, v8, v9 5162; CHECK-NEXT: ret 5163 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5164 ret <vscale x 2 x i1> %1 5165} 5166 5167define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5168; CHECK-LABEL: fcmp_uno_vf_nxv2f32: 5169; CHECK: # %bb.0: 5170; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5171; CHECK-NEXT: vfmv.v.f v9, fa0 5172; CHECK-NEXT: vmfne.vf v9, v9, fa0 5173; CHECK-NEXT: vmfne.vv v8, v8, v8 5174; CHECK-NEXT: vmor.mm v0, v8, v9 5175; CHECK-NEXT: ret 5176 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5177 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5178 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5179 ret <vscale x 2 x i1> %1 5180} 5181 5182define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f32(<vscale x 2 x float> %va, float %b) nounwind strictfp { 5183; CHECK-LABEL: fcmp_uno_fv_nxv2f32: 5184; CHECK: # %bb.0: 5185; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 5186; CHECK-NEXT: vfmv.v.f v9, fa0 5187; CHECK-NEXT: vmfne.vf v9, v9, fa0 5188; CHECK-NEXT: vmfne.vv v8, v8, v8 5189; CHECK-NEXT: vmor.mm v0, v9, v8 5190; CHECK-NEXT: ret 5191 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0 5192 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 5193 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5194 ret <vscale x 2 x i1> %1 5195} 5196 5197declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata) 5198define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5199; CHECK-LABEL: fcmp_oeq_vv_nxv4f32: 5200; CHECK: # %bb.0: 5201; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5202; CHECK-NEXT: vmfeq.vv v0, v8, v10 5203; CHECK-NEXT: ret 5204 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5205 ret <vscale x 4 x i1> %1 5206} 5207 5208define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5209; CHECK-LABEL: fcmp_oeq_vf_nxv4f32: 5210; CHECK: # %bb.0: 5211; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5212; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5213; CHECK-NEXT: ret 5214 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5215 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5216 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5217 ret <vscale x 4 x i1> %1 5218} 5219 5220define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5221; CHECK-LABEL: fcmp_oeq_fv_nxv4f32: 5222; CHECK: # %bb.0: 5223; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5224; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5225; CHECK-NEXT: ret 5226 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5227 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5228 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5229 ret <vscale x 4 x i1> %1 5230} 5231 5232define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5233; CHECK-LABEL: fcmp_ogt_vv_nxv4f32: 5234; CHECK: # %bb.0: 5235; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5236; CHECK-NEXT: vmfeq.vv v12, v8, v8 5237; CHECK-NEXT: vmfeq.vv v13, v10, v10 5238; CHECK-NEXT: vmand.mm v12, v13, v12 5239; CHECK-NEXT: vmv1r.v v0, v12 5240; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 5241; CHECK-NEXT: vmv1r.v v0, v12 5242; CHECK-NEXT: ret 5243 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5244 ret <vscale x 4 x i1> %1 5245} 5246 5247define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5248; CHECK-LABEL: fcmp_ogt_vf_nxv4f32: 5249; CHECK: # %bb.0: 5250; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5251; CHECK-NEXT: vfmv.v.f v10, fa0 5252; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5253; CHECK-NEXT: vmfeq.vv v10, v8, v8 5254; CHECK-NEXT: vmand.mm v10, v12, v10 5255; CHECK-NEXT: vmv1r.v v0, v10 5256; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5257; CHECK-NEXT: vmv1r.v v0, v10 5258; CHECK-NEXT: ret 5259 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5260 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5261 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5262 ret <vscale x 4 x i1> %1 5263} 5264 5265define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5266; CHECK-LABEL: fcmp_ogt_fv_nxv4f32: 5267; CHECK: # %bb.0: 5268; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5269; CHECK-NEXT: vfmv.v.f v10, fa0 5270; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5271; CHECK-NEXT: vmfeq.vv v10, v8, v8 5272; CHECK-NEXT: vmand.mm v10, v10, v12 5273; CHECK-NEXT: vmv1r.v v0, v10 5274; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5275; CHECK-NEXT: vmv1r.v v0, v10 5276; CHECK-NEXT: ret 5277 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5278 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5279 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5280 ret <vscale x 4 x i1> %1 5281} 5282 5283define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5284; CHECK-LABEL: fcmp_oge_vv_nxv4f32: 5285; CHECK: # %bb.0: 5286; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5287; CHECK-NEXT: vmfeq.vv v12, v8, v8 5288; CHECK-NEXT: vmfeq.vv v13, v10, v10 5289; CHECK-NEXT: vmand.mm v12, v13, v12 5290; CHECK-NEXT: vmv1r.v v0, v12 5291; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 5292; CHECK-NEXT: vmv1r.v v0, v12 5293; CHECK-NEXT: ret 5294 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5295 ret <vscale x 4 x i1> %1 5296} 5297 5298define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5299; CHECK-LABEL: fcmp_oge_vf_nxv4f32: 5300; CHECK: # %bb.0: 5301; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5302; CHECK-NEXT: vfmv.v.f v10, fa0 5303; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5304; CHECK-NEXT: vmfeq.vv v10, v8, v8 5305; CHECK-NEXT: vmand.mm v10, v12, v10 5306; CHECK-NEXT: vmv1r.v v0, v10 5307; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 5308; CHECK-NEXT: vmv1r.v v0, v10 5309; CHECK-NEXT: ret 5310 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5311 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5312 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5313 ret <vscale x 4 x i1> %1 5314} 5315 5316define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5317; CHECK-LABEL: fcmp_oge_fv_nxv4f32: 5318; CHECK: # %bb.0: 5319; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5320; CHECK-NEXT: vfmv.v.f v10, fa0 5321; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5322; CHECK-NEXT: vmfeq.vv v10, v8, v8 5323; CHECK-NEXT: vmand.mm v10, v10, v12 5324; CHECK-NEXT: vmv1r.v v0, v10 5325; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 5326; CHECK-NEXT: vmv1r.v v0, v10 5327; CHECK-NEXT: ret 5328 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5329 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5330 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 5331 ret <vscale x 4 x i1> %1 5332} 5333 5334define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5335; CHECK-LABEL: fcmp_olt_vv_nxv4f32: 5336; CHECK: # %bb.0: 5337; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5338; CHECK-NEXT: vmfeq.vv v12, v10, v10 5339; CHECK-NEXT: vmfeq.vv v13, v8, v8 5340; CHECK-NEXT: vmand.mm v12, v13, v12 5341; CHECK-NEXT: vmv1r.v v0, v12 5342; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 5343; CHECK-NEXT: vmv1r.v v0, v12 5344; CHECK-NEXT: ret 5345 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 5346 ret <vscale x 4 x i1> %1 5347} 5348 5349define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5350; CHECK-LABEL: fcmp_olt_vf_nxv4f32: 5351; CHECK: # %bb.0: 5352; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5353; CHECK-NEXT: vfmv.v.f v10, fa0 5354; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5355; CHECK-NEXT: vmfeq.vv v10, v8, v8 5356; CHECK-NEXT: vmand.mm v10, v10, v12 5357; CHECK-NEXT: vmv1r.v v0, v10 5358; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5359; CHECK-NEXT: vmv1r.v v0, v10 5360; CHECK-NEXT: ret 5361 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5362 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5363 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 5364 ret <vscale x 4 x i1> %1 5365} 5366 5367define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5368; CHECK-LABEL: fcmp_olt_fv_nxv4f32: 5369; CHECK: # %bb.0: 5370; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5371; CHECK-NEXT: vfmv.v.f v10, fa0 5372; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5373; CHECK-NEXT: vmfeq.vv v10, v8, v8 5374; CHECK-NEXT: vmand.mm v10, v12, v10 5375; CHECK-NEXT: vmv1r.v v0, v10 5376; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5377; CHECK-NEXT: vmv1r.v v0, v10 5378; CHECK-NEXT: ret 5379 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5380 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5381 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 5382 ret <vscale x 4 x i1> %1 5383} 5384 5385define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5386; CHECK-LABEL: fcmp_ole_vv_nxv4f32: 5387; CHECK: # %bb.0: 5388; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5389; CHECK-NEXT: vmfeq.vv v12, v10, v10 5390; CHECK-NEXT: vmfeq.vv v13, v8, v8 5391; CHECK-NEXT: vmand.mm v12, v13, v12 5392; CHECK-NEXT: vmv1r.v v0, v12 5393; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 5394; CHECK-NEXT: vmv1r.v v0, v12 5395; CHECK-NEXT: ret 5396 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 5397 ret <vscale x 4 x i1> %1 5398} 5399 5400define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5401; CHECK-LABEL: fcmp_ole_vf_nxv4f32: 5402; CHECK: # %bb.0: 5403; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5404; CHECK-NEXT: vfmv.v.f v10, fa0 5405; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5406; CHECK-NEXT: vmfeq.vv v10, v8, v8 5407; CHECK-NEXT: vmand.mm v10, v10, v12 5408; CHECK-NEXT: vmv1r.v v0, v10 5409; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 5410; CHECK-NEXT: vmv1r.v v0, v10 5411; CHECK-NEXT: ret 5412 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5413 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5414 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 5415 ret <vscale x 4 x i1> %1 5416} 5417 5418define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5419; CHECK-LABEL: fcmp_ole_fv_nxv4f32: 5420; CHECK: # %bb.0: 5421; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5422; CHECK-NEXT: vfmv.v.f v10, fa0 5423; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5424; CHECK-NEXT: vmfeq.vv v10, v8, v8 5425; CHECK-NEXT: vmand.mm v10, v12, v10 5426; CHECK-NEXT: vmv1r.v v0, v10 5427; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 5428; CHECK-NEXT: vmv1r.v v0, v10 5429; CHECK-NEXT: ret 5430 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5431 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5432 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 5433 ret <vscale x 4 x i1> %1 5434} 5435 5436define <vscale x 4 x i1> @fcmp_one_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5437; CHECK-LABEL: fcmp_one_vv_nxv4f32: 5438; CHECK: # %bb.0: 5439; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5440; CHECK-NEXT: vmfeq.vv v12, v10, v10 5441; CHECK-NEXT: vmfeq.vv v13, v8, v8 5442; CHECK-NEXT: vmand.mm v12, v13, v12 5443; CHECK-NEXT: vmv1r.v v13, v12 5444; CHECK-NEXT: vmv1r.v v0, v12 5445; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 5446; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 5447; CHECK-NEXT: vmor.mm v0, v12, v13 5448; CHECK-NEXT: ret 5449 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 5450 ret <vscale x 4 x i1> %1 5451} 5452 5453define <vscale x 4 x i1> @fcmp_one_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5454; CHECK-LABEL: fcmp_one_vf_nxv4f32: 5455; CHECK: # %bb.0: 5456; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5457; CHECK-NEXT: vfmv.v.f v10, fa0 5458; CHECK-NEXT: vmfeq.vv v12, v8, v8 5459; CHECK-NEXT: vmfeq.vf v13, v10, fa0 5460; CHECK-NEXT: vmand.mm v10, v12, v13 5461; CHECK-NEXT: vmv1r.v v11, v10 5462; CHECK-NEXT: vmv1r.v v0, v10 5463; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 5464; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5465; CHECK-NEXT: vmor.mm v0, v10, v11 5466; CHECK-NEXT: ret 5467 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5468 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5469 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 5470 ret <vscale x 4 x i1> %1 5471} 5472 5473define <vscale x 4 x i1> @fcmp_one_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5474; CHECK-LABEL: fcmp_one_fv_nxv4f32: 5475; CHECK: # %bb.0: 5476; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5477; CHECK-NEXT: vfmv.v.f v10, fa0 5478; CHECK-NEXT: vmfeq.vv v12, v8, v8 5479; CHECK-NEXT: vmfeq.vf v13, v10, fa0 5480; CHECK-NEXT: vmand.mm v10, v13, v12 5481; CHECK-NEXT: vmv1r.v v11, v10 5482; CHECK-NEXT: vmv1r.v v0, v10 5483; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 5484; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5485; CHECK-NEXT: vmor.mm v0, v10, v11 5486; CHECK-NEXT: ret 5487 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5488 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5489 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 5490 ret <vscale x 4 x i1> %1 5491} 5492 5493define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5494; CHECK-LABEL: fcmp_ord_vv_nxv4f32: 5495; CHECK: # %bb.0: 5496; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5497; CHECK-NEXT: vmfeq.vv v12, v10, v10 5498; CHECK-NEXT: vmfeq.vv v10, v8, v8 5499; CHECK-NEXT: vmand.mm v0, v10, v12 5500; CHECK-NEXT: ret 5501 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 5502 ret <vscale x 4 x i1> %1 5503} 5504 5505define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5506; CHECK-LABEL: fcmp_ord_vf_nxv4f32: 5507; CHECK: # %bb.0: 5508; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5509; CHECK-NEXT: vfmv.v.f v10, fa0 5510; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5511; CHECK-NEXT: vmfeq.vv v10, v8, v8 5512; CHECK-NEXT: vmand.mm v0, v10, v12 5513; CHECK-NEXT: ret 5514 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5515 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5516 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 5517 ret <vscale x 4 x i1> %1 5518} 5519 5520define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5521; CHECK-LABEL: fcmp_ord_fv_nxv4f32: 5522; CHECK: # %bb.0: 5523; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5524; CHECK-NEXT: vfmv.v.f v10, fa0 5525; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5526; CHECK-NEXT: vmfeq.vv v10, v8, v8 5527; CHECK-NEXT: vmand.mm v0, v12, v10 5528; CHECK-NEXT: ret 5529 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5530 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5531 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 5532 ret <vscale x 4 x i1> %1 5533} 5534 5535define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5536; CHECK-LABEL: fcmp_ueq_vv_nxv4f32: 5537; CHECK: # %bb.0: 5538; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5539; CHECK-NEXT: vmfeq.vv v12, v10, v10 5540; CHECK-NEXT: vmfeq.vv v13, v8, v8 5541; CHECK-NEXT: vmand.mm v12, v13, v12 5542; CHECK-NEXT: vmv1r.v v13, v12 5543; CHECK-NEXT: vmv1r.v v0, v12 5544; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 5545; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 5546; CHECK-NEXT: vmnor.mm v0, v12, v13 5547; CHECK-NEXT: ret 5548 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5549 ret <vscale x 4 x i1> %1 5550} 5551 5552define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5553; CHECK-LABEL: fcmp_ueq_vf_nxv4f32: 5554; CHECK: # %bb.0: 5555; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5556; CHECK-NEXT: vfmv.v.f v10, fa0 5557; CHECK-NEXT: vmfeq.vv v12, v8, v8 5558; CHECK-NEXT: vmfeq.vf v13, v10, fa0 5559; CHECK-NEXT: vmand.mm v10, v12, v13 5560; CHECK-NEXT: vmv1r.v v11, v10 5561; CHECK-NEXT: vmv1r.v v0, v10 5562; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 5563; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5564; CHECK-NEXT: vmnor.mm v0, v10, v11 5565; CHECK-NEXT: ret 5566 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5567 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5568 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5569 ret <vscale x 4 x i1> %1 5570} 5571 5572define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5573; CHECK-LABEL: fcmp_ueq_fv_nxv4f32: 5574; CHECK: # %bb.0: 5575; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5576; CHECK-NEXT: vfmv.v.f v10, fa0 5577; CHECK-NEXT: vmfeq.vv v12, v8, v8 5578; CHECK-NEXT: vmfeq.vf v13, v10, fa0 5579; CHECK-NEXT: vmand.mm v10, v13, v12 5580; CHECK-NEXT: vmv1r.v v11, v10 5581; CHECK-NEXT: vmv1r.v v0, v10 5582; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 5583; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5584; CHECK-NEXT: vmnor.mm v0, v10, v11 5585; CHECK-NEXT: ret 5586 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5587 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5588 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5589 ret <vscale x 4 x i1> %1 5590} 5591 5592define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5593; CHECK-LABEL: fcmp_ugt_vv_nxv4f32: 5594; CHECK: # %bb.0: 5595; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5596; CHECK-NEXT: vmfeq.vv v12, v10, v10 5597; CHECK-NEXT: vmfeq.vv v13, v8, v8 5598; CHECK-NEXT: vmand.mm v12, v13, v12 5599; CHECK-NEXT: vmv1r.v v0, v12 5600; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 5601; CHECK-NEXT: vmnot.m v0, v12 5602; CHECK-NEXT: ret 5603 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5604 ret <vscale x 4 x i1> %1 5605} 5606 5607define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5608; CHECK-LABEL: fcmp_ugt_vf_nxv4f32: 5609; CHECK: # %bb.0: 5610; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5611; CHECK-NEXT: vfmv.v.f v10, fa0 5612; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5613; CHECK-NEXT: vmfeq.vv v10, v8, v8 5614; CHECK-NEXT: vmand.mm v10, v10, v12 5615; CHECK-NEXT: vmv1r.v v0, v10 5616; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 5617; CHECK-NEXT: vmnot.m v0, v10 5618; CHECK-NEXT: ret 5619 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5620 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5621 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5622 ret <vscale x 4 x i1> %1 5623} 5624 5625define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5626; CHECK-LABEL: fcmp_ugt_fv_nxv4f32: 5627; CHECK: # %bb.0: 5628; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5629; CHECK-NEXT: vfmv.v.f v10, fa0 5630; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5631; CHECK-NEXT: vmfeq.vv v10, v8, v8 5632; CHECK-NEXT: vmand.mm v10, v12, v10 5633; CHECK-NEXT: vmv1r.v v0, v10 5634; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 5635; CHECK-NEXT: vmnot.m v0, v10 5636; CHECK-NEXT: ret 5637 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5638 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5639 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5640 ret <vscale x 4 x i1> %1 5641} 5642 5643define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5644; CHECK-LABEL: fcmp_uge_vv_nxv4f32: 5645; CHECK: # %bb.0: 5646; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5647; CHECK-NEXT: vmfeq.vv v12, v10, v10 5648; CHECK-NEXT: vmfeq.vv v13, v8, v8 5649; CHECK-NEXT: vmand.mm v12, v13, v12 5650; CHECK-NEXT: vmv1r.v v0, v12 5651; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 5652; CHECK-NEXT: vmnot.m v0, v12 5653; CHECK-NEXT: ret 5654 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 5655 ret <vscale x 4 x i1> %1 5656} 5657 5658define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5659; CHECK-LABEL: fcmp_uge_vf_nxv4f32: 5660; CHECK: # %bb.0: 5661; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5662; CHECK-NEXT: vfmv.v.f v10, fa0 5663; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5664; CHECK-NEXT: vmfeq.vv v10, v8, v8 5665; CHECK-NEXT: vmand.mm v10, v10, v12 5666; CHECK-NEXT: vmv1r.v v0, v10 5667; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5668; CHECK-NEXT: vmnot.m v0, v10 5669; CHECK-NEXT: ret 5670 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5671 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5672 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5673 ret <vscale x 4 x i1> %1 5674} 5675 5676define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5677; CHECK-LABEL: fcmp_uge_fv_nxv4f32: 5678; CHECK: # %bb.0: 5679; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5680; CHECK-NEXT: vfmv.v.f v10, fa0 5681; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5682; CHECK-NEXT: vmfeq.vv v10, v8, v8 5683; CHECK-NEXT: vmand.mm v10, v12, v10 5684; CHECK-NEXT: vmv1r.v v0, v10 5685; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5686; CHECK-NEXT: vmnot.m v0, v10 5687; CHECK-NEXT: ret 5688 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5689 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5690 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5691 ret <vscale x 4 x i1> %1 5692} 5693 5694define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5695; CHECK-LABEL: fcmp_ult_vv_nxv4f32: 5696; CHECK: # %bb.0: 5697; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5698; CHECK-NEXT: vmfeq.vv v12, v8, v8 5699; CHECK-NEXT: vmfeq.vv v13, v10, v10 5700; CHECK-NEXT: vmand.mm v12, v13, v12 5701; CHECK-NEXT: vmv1r.v v0, v12 5702; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 5703; CHECK-NEXT: vmnot.m v0, v12 5704; CHECK-NEXT: ret 5705 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5706 ret <vscale x 4 x i1> %1 5707} 5708 5709define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5710; CHECK-LABEL: fcmp_ult_vf_nxv4f32: 5711; CHECK: # %bb.0: 5712; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5713; CHECK-NEXT: vfmv.v.f v10, fa0 5714; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5715; CHECK-NEXT: vmfeq.vv v10, v8, v8 5716; CHECK-NEXT: vmand.mm v10, v12, v10 5717; CHECK-NEXT: vmv1r.v v0, v10 5718; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 5719; CHECK-NEXT: vmnot.m v0, v10 5720; CHECK-NEXT: ret 5721 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5722 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5723 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5724 ret <vscale x 4 x i1> %1 5725} 5726 5727define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5728; CHECK-LABEL: fcmp_ult_fv_nxv4f32: 5729; CHECK: # %bb.0: 5730; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5731; CHECK-NEXT: vfmv.v.f v10, fa0 5732; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5733; CHECK-NEXT: vmfeq.vv v10, v8, v8 5734; CHECK-NEXT: vmand.mm v10, v10, v12 5735; CHECK-NEXT: vmv1r.v v0, v10 5736; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 5737; CHECK-NEXT: vmnot.m v0, v10 5738; CHECK-NEXT: ret 5739 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5740 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5741 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5742 ret <vscale x 4 x i1> %1 5743} 5744 5745define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5746; CHECK-LABEL: fcmp_ule_vv_nxv4f32: 5747; CHECK: # %bb.0: 5748; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5749; CHECK-NEXT: vmfeq.vv v12, v8, v8 5750; CHECK-NEXT: vmfeq.vv v13, v10, v10 5751; CHECK-NEXT: vmand.mm v12, v13, v12 5752; CHECK-NEXT: vmv1r.v v0, v12 5753; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 5754; CHECK-NEXT: vmnot.m v0, v12 5755; CHECK-NEXT: ret 5756 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5757 ret <vscale x 4 x i1> %1 5758} 5759 5760define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5761; CHECK-LABEL: fcmp_ule_vf_nxv4f32: 5762; CHECK: # %bb.0: 5763; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5764; CHECK-NEXT: vfmv.v.f v10, fa0 5765; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5766; CHECK-NEXT: vmfeq.vv v10, v8, v8 5767; CHECK-NEXT: vmand.mm v10, v12, v10 5768; CHECK-NEXT: vmv1r.v v0, v10 5769; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5770; CHECK-NEXT: vmnot.m v0, v10 5771; CHECK-NEXT: ret 5772 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5773 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5774 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5775 ret <vscale x 4 x i1> %1 5776} 5777 5778define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5779; CHECK-LABEL: fcmp_ule_fv_nxv4f32: 5780; CHECK: # %bb.0: 5781; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 5782; CHECK-NEXT: vfmv.v.f v10, fa0 5783; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5784; CHECK-NEXT: vmfeq.vv v10, v8, v8 5785; CHECK-NEXT: vmand.mm v10, v10, v12 5786; CHECK-NEXT: vmv1r.v v0, v10 5787; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5788; CHECK-NEXT: vmnot.m v0, v10 5789; CHECK-NEXT: ret 5790 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5791 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5792 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5793 ret <vscale x 4 x i1> %1 5794} 5795 5796define <vscale x 4 x i1> @fcmp_une_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5797; CHECK-LABEL: fcmp_une_vv_nxv4f32: 5798; CHECK: # %bb.0: 5799; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5800; CHECK-NEXT: vmfne.vv v0, v8, v10 5801; CHECK-NEXT: ret 5802 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5803 ret <vscale x 4 x i1> %1 5804} 5805 5806define <vscale x 4 x i1> @fcmp_une_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5807; CHECK-LABEL: fcmp_une_vf_nxv4f32: 5808; CHECK: # %bb.0: 5809; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5810; CHECK-NEXT: vmfne.vf v0, v8, fa0 5811; CHECK-NEXT: ret 5812 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5813 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5814 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5815 ret <vscale x 4 x i1> %1 5816} 5817 5818define <vscale x 4 x i1> @fcmp_une_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5819; CHECK-LABEL: fcmp_une_fv_nxv4f32: 5820; CHECK: # %bb.0: 5821; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5822; CHECK-NEXT: vmfne.vf v0, v8, fa0 5823; CHECK-NEXT: ret 5824 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5825 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5826 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5827 ret <vscale x 4 x i1> %1 5828} 5829 5830define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) nounwind strictfp { 5831; CHECK-LABEL: fcmp_uno_vv_nxv4f32: 5832; CHECK: # %bb.0: 5833; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5834; CHECK-NEXT: vmfne.vv v12, v10, v10 5835; CHECK-NEXT: vmfne.vv v10, v8, v8 5836; CHECK-NEXT: vmor.mm v0, v10, v12 5837; CHECK-NEXT: ret 5838 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5839 ret <vscale x 4 x i1> %1 5840} 5841 5842define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5843; CHECK-LABEL: fcmp_uno_vf_nxv4f32: 5844; CHECK: # %bb.0: 5845; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5846; CHECK-NEXT: vfmv.v.f v10, fa0 5847; CHECK-NEXT: vmfne.vf v12, v10, fa0 5848; CHECK-NEXT: vmfne.vv v10, v8, v8 5849; CHECK-NEXT: vmor.mm v0, v10, v12 5850; CHECK-NEXT: ret 5851 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5852 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5853 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5854 ret <vscale x 4 x i1> %1 5855} 5856 5857define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f32(<vscale x 4 x float> %va, float %b) nounwind strictfp { 5858; CHECK-LABEL: fcmp_uno_fv_nxv4f32: 5859; CHECK: # %bb.0: 5860; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 5861; CHECK-NEXT: vfmv.v.f v10, fa0 5862; CHECK-NEXT: vmfne.vf v12, v10, fa0 5863; CHECK-NEXT: vmfne.vv v10, v8, v8 5864; CHECK-NEXT: vmor.mm v0, v12, v10 5865; CHECK-NEXT: ret 5866 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0 5867 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 5868 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f32(<vscale x 4 x float> %splat, <vscale x 4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5869 ret <vscale x 4 x i1> %1 5870} 5871 5872declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata) 5873define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 5874; CHECK-LABEL: fcmp_oeq_vv_nxv8f32: 5875; CHECK: # %bb.0: 5876; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 5877; CHECK-NEXT: vmfeq.vv v0, v8, v12 5878; CHECK-NEXT: ret 5879 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5880 ret <vscale x 8 x i1> %1 5881} 5882 5883define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5884; CHECK-LABEL: fcmp_oeq_vf_nxv8f32: 5885; CHECK: # %bb.0: 5886; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 5887; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5888; CHECK-NEXT: ret 5889 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5890 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5891 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5892 ret <vscale x 8 x i1> %1 5893} 5894 5895define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5896; CHECK-LABEL: fcmp_oeq_fv_nxv8f32: 5897; CHECK: # %bb.0: 5898; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 5899; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5900; CHECK-NEXT: ret 5901 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5902 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5903 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5904 ret <vscale x 8 x i1> %1 5905} 5906 5907define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 5908; CHECK-LABEL: fcmp_ogt_vv_nxv8f32: 5909; CHECK: # %bb.0: 5910; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5911; CHECK-NEXT: vmfeq.vv v16, v8, v8 5912; CHECK-NEXT: vmfeq.vv v17, v12, v12 5913; CHECK-NEXT: vmand.mm v16, v17, v16 5914; CHECK-NEXT: vmv1r.v v0, v16 5915; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 5916; CHECK-NEXT: vmv1r.v v0, v16 5917; CHECK-NEXT: ret 5918 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5919 ret <vscale x 8 x i1> %1 5920} 5921 5922define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5923; CHECK-LABEL: fcmp_ogt_vf_nxv8f32: 5924; CHECK: # %bb.0: 5925; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5926; CHECK-NEXT: vfmv.v.f v12, fa0 5927; CHECK-NEXT: vmfeq.vf v16, v12, fa0 5928; CHECK-NEXT: vmfeq.vv v12, v8, v8 5929; CHECK-NEXT: vmand.mm v12, v16, v12 5930; CHECK-NEXT: vmv1r.v v0, v12 5931; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 5932; CHECK-NEXT: vmv1r.v v0, v12 5933; CHECK-NEXT: ret 5934 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5935 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5936 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5937 ret <vscale x 8 x i1> %1 5938} 5939 5940define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5941; CHECK-LABEL: fcmp_ogt_fv_nxv8f32: 5942; CHECK: # %bb.0: 5943; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5944; CHECK-NEXT: vfmv.v.f v12, fa0 5945; CHECK-NEXT: vmfeq.vf v16, v12, fa0 5946; CHECK-NEXT: vmfeq.vv v12, v8, v8 5947; CHECK-NEXT: vmand.mm v12, v12, v16 5948; CHECK-NEXT: vmv1r.v v0, v12 5949; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 5950; CHECK-NEXT: vmv1r.v v0, v12 5951; CHECK-NEXT: ret 5952 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5953 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5954 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5955 ret <vscale x 8 x i1> %1 5956} 5957 5958define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 5959; CHECK-LABEL: fcmp_oge_vv_nxv8f32: 5960; CHECK: # %bb.0: 5961; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5962; CHECK-NEXT: vmfeq.vv v16, v8, v8 5963; CHECK-NEXT: vmfeq.vv v17, v12, v12 5964; CHECK-NEXT: vmand.mm v16, v17, v16 5965; CHECK-NEXT: vmv1r.v v0, v16 5966; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 5967; CHECK-NEXT: vmv1r.v v0, v16 5968; CHECK-NEXT: ret 5969 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5970 ret <vscale x 8 x i1> %1 5971} 5972 5973define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5974; CHECK-LABEL: fcmp_oge_vf_nxv8f32: 5975; CHECK: # %bb.0: 5976; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5977; CHECK-NEXT: vfmv.v.f v12, fa0 5978; CHECK-NEXT: vmfeq.vf v16, v12, fa0 5979; CHECK-NEXT: vmfeq.vv v12, v8, v8 5980; CHECK-NEXT: vmand.mm v12, v16, v12 5981; CHECK-NEXT: vmv1r.v v0, v12 5982; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 5983; CHECK-NEXT: vmv1r.v v0, v12 5984; CHECK-NEXT: ret 5985 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5986 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5987 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5988 ret <vscale x 8 x i1> %1 5989} 5990 5991define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 5992; CHECK-LABEL: fcmp_oge_fv_nxv8f32: 5993; CHECK: # %bb.0: 5994; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 5995; CHECK-NEXT: vfmv.v.f v12, fa0 5996; CHECK-NEXT: vmfeq.vf v16, v12, fa0 5997; CHECK-NEXT: vmfeq.vv v12, v8, v8 5998; CHECK-NEXT: vmand.mm v12, v12, v16 5999; CHECK-NEXT: vmv1r.v v0, v12 6000; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6001; CHECK-NEXT: vmv1r.v v0, v12 6002; CHECK-NEXT: ret 6003 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6004 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6005 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 6006 ret <vscale x 8 x i1> %1 6007} 6008 6009define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6010; CHECK-LABEL: fcmp_olt_vv_nxv8f32: 6011; CHECK: # %bb.0: 6012; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6013; CHECK-NEXT: vmfeq.vv v16, v12, v12 6014; CHECK-NEXT: vmfeq.vv v17, v8, v8 6015; CHECK-NEXT: vmand.mm v16, v17, v16 6016; CHECK-NEXT: vmv1r.v v0, v16 6017; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 6018; CHECK-NEXT: vmv1r.v v0, v16 6019; CHECK-NEXT: ret 6020 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 6021 ret <vscale x 8 x i1> %1 6022} 6023 6024define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6025; CHECK-LABEL: fcmp_olt_vf_nxv8f32: 6026; CHECK: # %bb.0: 6027; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6028; CHECK-NEXT: vfmv.v.f v12, fa0 6029; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6030; CHECK-NEXT: vmfeq.vv v12, v8, v8 6031; CHECK-NEXT: vmand.mm v12, v12, v16 6032; CHECK-NEXT: vmv1r.v v0, v12 6033; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6034; CHECK-NEXT: vmv1r.v v0, v12 6035; CHECK-NEXT: ret 6036 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6037 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6038 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 6039 ret <vscale x 8 x i1> %1 6040} 6041 6042define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6043; CHECK-LABEL: fcmp_olt_fv_nxv8f32: 6044; CHECK: # %bb.0: 6045; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6046; CHECK-NEXT: vfmv.v.f v12, fa0 6047; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6048; CHECK-NEXT: vmfeq.vv v12, v8, v8 6049; CHECK-NEXT: vmand.mm v12, v16, v12 6050; CHECK-NEXT: vmv1r.v v0, v12 6051; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6052; CHECK-NEXT: vmv1r.v v0, v12 6053; CHECK-NEXT: ret 6054 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6055 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6056 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6057 ret <vscale x 8 x i1> %1 6058} 6059 6060define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6061; CHECK-LABEL: fcmp_ole_vv_nxv8f32: 6062; CHECK: # %bb.0: 6063; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6064; CHECK-NEXT: vmfeq.vv v16, v12, v12 6065; CHECK-NEXT: vmfeq.vv v17, v8, v8 6066; CHECK-NEXT: vmand.mm v16, v17, v16 6067; CHECK-NEXT: vmv1r.v v0, v16 6068; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 6069; CHECK-NEXT: vmv1r.v v0, v16 6070; CHECK-NEXT: ret 6071 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6072 ret <vscale x 8 x i1> %1 6073} 6074 6075define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6076; CHECK-LABEL: fcmp_ole_vf_nxv8f32: 6077; CHECK: # %bb.0: 6078; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6079; CHECK-NEXT: vfmv.v.f v12, fa0 6080; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6081; CHECK-NEXT: vmfeq.vv v12, v8, v8 6082; CHECK-NEXT: vmand.mm v12, v12, v16 6083; CHECK-NEXT: vmv1r.v v0, v12 6084; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6085; CHECK-NEXT: vmv1r.v v0, v12 6086; CHECK-NEXT: ret 6087 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6088 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6089 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6090 ret <vscale x 8 x i1> %1 6091} 6092 6093define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6094; CHECK-LABEL: fcmp_ole_fv_nxv8f32: 6095; CHECK: # %bb.0: 6096; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6097; CHECK-NEXT: vfmv.v.f v12, fa0 6098; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6099; CHECK-NEXT: vmfeq.vv v12, v8, v8 6100; CHECK-NEXT: vmand.mm v12, v16, v12 6101; CHECK-NEXT: vmv1r.v v0, v12 6102; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6103; CHECK-NEXT: vmv1r.v v0, v12 6104; CHECK-NEXT: ret 6105 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6106 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6107 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6108 ret <vscale x 8 x i1> %1 6109} 6110 6111define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6112; CHECK-LABEL: fcmp_one_vv_nxv8f32: 6113; CHECK: # %bb.0: 6114; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6115; CHECK-NEXT: vmfeq.vv v16, v12, v12 6116; CHECK-NEXT: vmfeq.vv v17, v8, v8 6117; CHECK-NEXT: vmand.mm v16, v17, v16 6118; CHECK-NEXT: vmv1r.v v17, v16 6119; CHECK-NEXT: vmv1r.v v0, v16 6120; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 6121; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6122; CHECK-NEXT: vmor.mm v0, v16, v17 6123; CHECK-NEXT: ret 6124 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6125 ret <vscale x 8 x i1> %1 6126} 6127 6128define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6129; CHECK-LABEL: fcmp_one_vf_nxv8f32: 6130; CHECK: # %bb.0: 6131; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6132; CHECK-NEXT: vfmv.v.f v12, fa0 6133; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6134; CHECK-NEXT: vmfeq.vv v12, v8, v8 6135; CHECK-NEXT: vmand.mm v12, v12, v16 6136; CHECK-NEXT: vmv1r.v v13, v12 6137; CHECK-NEXT: vmv1r.v v0, v12 6138; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 6139; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6140; CHECK-NEXT: vmor.mm v0, v12, v13 6141; CHECK-NEXT: ret 6142 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6143 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6144 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6145 ret <vscale x 8 x i1> %1 6146} 6147 6148define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6149; CHECK-LABEL: fcmp_one_fv_nxv8f32: 6150; CHECK: # %bb.0: 6151; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6152; CHECK-NEXT: vfmv.v.f v12, fa0 6153; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6154; CHECK-NEXT: vmfeq.vv v12, v8, v8 6155; CHECK-NEXT: vmand.mm v12, v16, v12 6156; CHECK-NEXT: vmv1r.v v13, v12 6157; CHECK-NEXT: vmv1r.v v0, v12 6158; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 6159; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6160; CHECK-NEXT: vmor.mm v0, v12, v13 6161; CHECK-NEXT: ret 6162 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6163 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6164 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6165 ret <vscale x 8 x i1> %1 6166} 6167 6168define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6169; CHECK-LABEL: fcmp_ord_vv_nxv8f32: 6170; CHECK: # %bb.0: 6171; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6172; CHECK-NEXT: vmfeq.vv v16, v12, v12 6173; CHECK-NEXT: vmfeq.vv v12, v8, v8 6174; CHECK-NEXT: vmand.mm v0, v12, v16 6175; CHECK-NEXT: ret 6176 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6177 ret <vscale x 8 x i1> %1 6178} 6179 6180define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6181; CHECK-LABEL: fcmp_ord_vf_nxv8f32: 6182; CHECK: # %bb.0: 6183; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6184; CHECK-NEXT: vfmv.v.f v12, fa0 6185; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6186; CHECK-NEXT: vmfeq.vv v12, v8, v8 6187; CHECK-NEXT: vmand.mm v0, v12, v16 6188; CHECK-NEXT: ret 6189 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6190 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6191 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6192 ret <vscale x 8 x i1> %1 6193} 6194 6195define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6196; CHECK-LABEL: fcmp_ord_fv_nxv8f32: 6197; CHECK: # %bb.0: 6198; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6199; CHECK-NEXT: vfmv.v.f v12, fa0 6200; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6201; CHECK-NEXT: vmfeq.vv v12, v8, v8 6202; CHECK-NEXT: vmand.mm v0, v16, v12 6203; CHECK-NEXT: ret 6204 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6205 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6206 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6207 ret <vscale x 8 x i1> %1 6208} 6209 6210define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6211; CHECK-LABEL: fcmp_ueq_vv_nxv8f32: 6212; CHECK: # %bb.0: 6213; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6214; CHECK-NEXT: vmfeq.vv v16, v12, v12 6215; CHECK-NEXT: vmfeq.vv v17, v8, v8 6216; CHECK-NEXT: vmand.mm v16, v17, v16 6217; CHECK-NEXT: vmv1r.v v17, v16 6218; CHECK-NEXT: vmv1r.v v0, v16 6219; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 6220; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6221; CHECK-NEXT: vmnor.mm v0, v16, v17 6222; CHECK-NEXT: ret 6223 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6224 ret <vscale x 8 x i1> %1 6225} 6226 6227define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6228; CHECK-LABEL: fcmp_ueq_vf_nxv8f32: 6229; CHECK: # %bb.0: 6230; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6231; CHECK-NEXT: vfmv.v.f v12, fa0 6232; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6233; CHECK-NEXT: vmfeq.vv v12, v8, v8 6234; CHECK-NEXT: vmand.mm v12, v12, v16 6235; CHECK-NEXT: vmv1r.v v13, v12 6236; CHECK-NEXT: vmv1r.v v0, v12 6237; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 6238; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6239; CHECK-NEXT: vmnor.mm v0, v12, v13 6240; CHECK-NEXT: ret 6241 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6242 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6243 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6244 ret <vscale x 8 x i1> %1 6245} 6246 6247define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6248; CHECK-LABEL: fcmp_ueq_fv_nxv8f32: 6249; CHECK: # %bb.0: 6250; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6251; CHECK-NEXT: vfmv.v.f v12, fa0 6252; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6253; CHECK-NEXT: vmfeq.vv v12, v8, v8 6254; CHECK-NEXT: vmand.mm v12, v16, v12 6255; CHECK-NEXT: vmv1r.v v13, v12 6256; CHECK-NEXT: vmv1r.v v0, v12 6257; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 6258; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6259; CHECK-NEXT: vmnor.mm v0, v12, v13 6260; CHECK-NEXT: ret 6261 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6262 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6263 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6264 ret <vscale x 8 x i1> %1 6265} 6266 6267define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6268; CHECK-LABEL: fcmp_ugt_vv_nxv8f32: 6269; CHECK: # %bb.0: 6270; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6271; CHECK-NEXT: vmfeq.vv v16, v12, v12 6272; CHECK-NEXT: vmfeq.vv v17, v8, v8 6273; CHECK-NEXT: vmand.mm v16, v17, v16 6274; CHECK-NEXT: vmv1r.v v0, v16 6275; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 6276; CHECK-NEXT: vmnot.m v0, v16 6277; CHECK-NEXT: ret 6278 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6279 ret <vscale x 8 x i1> %1 6280} 6281 6282define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6283; CHECK-LABEL: fcmp_ugt_vf_nxv8f32: 6284; CHECK: # %bb.0: 6285; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6286; CHECK-NEXT: vfmv.v.f v12, fa0 6287; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6288; CHECK-NEXT: vmfeq.vv v12, v8, v8 6289; CHECK-NEXT: vmand.mm v12, v12, v16 6290; CHECK-NEXT: vmv1r.v v0, v12 6291; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6292; CHECK-NEXT: vmnot.m v0, v12 6293; CHECK-NEXT: ret 6294 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6295 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6296 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6297 ret <vscale x 8 x i1> %1 6298} 6299 6300define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6301; CHECK-LABEL: fcmp_ugt_fv_nxv8f32: 6302; CHECK: # %bb.0: 6303; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6304; CHECK-NEXT: vfmv.v.f v12, fa0 6305; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6306; CHECK-NEXT: vmfeq.vv v12, v8, v8 6307; CHECK-NEXT: vmand.mm v12, v16, v12 6308; CHECK-NEXT: vmv1r.v v0, v12 6309; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6310; CHECK-NEXT: vmnot.m v0, v12 6311; CHECK-NEXT: ret 6312 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6313 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6314 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6315 ret <vscale x 8 x i1> %1 6316} 6317 6318define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6319; CHECK-LABEL: fcmp_uge_vv_nxv8f32: 6320; CHECK: # %bb.0: 6321; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6322; CHECK-NEXT: vmfeq.vv v16, v12, v12 6323; CHECK-NEXT: vmfeq.vv v17, v8, v8 6324; CHECK-NEXT: vmand.mm v16, v17, v16 6325; CHECK-NEXT: vmv1r.v v0, v16 6326; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 6327; CHECK-NEXT: vmnot.m v0, v16 6328; CHECK-NEXT: ret 6329 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 6330 ret <vscale x 8 x i1> %1 6331} 6332 6333define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6334; CHECK-LABEL: fcmp_uge_vf_nxv8f32: 6335; CHECK: # %bb.0: 6336; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6337; CHECK-NEXT: vfmv.v.f v12, fa0 6338; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6339; CHECK-NEXT: vmfeq.vv v12, v8, v8 6340; CHECK-NEXT: vmand.mm v12, v12, v16 6341; CHECK-NEXT: vmv1r.v v0, v12 6342; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6343; CHECK-NEXT: vmnot.m v0, v12 6344; CHECK-NEXT: ret 6345 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6346 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6347 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 6348 ret <vscale x 8 x i1> %1 6349} 6350 6351define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6352; CHECK-LABEL: fcmp_uge_fv_nxv8f32: 6353; CHECK: # %bb.0: 6354; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6355; CHECK-NEXT: vfmv.v.f v12, fa0 6356; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6357; CHECK-NEXT: vmfeq.vv v12, v8, v8 6358; CHECK-NEXT: vmand.mm v12, v16, v12 6359; CHECK-NEXT: vmv1r.v v0, v12 6360; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6361; CHECK-NEXT: vmnot.m v0, v12 6362; CHECK-NEXT: ret 6363 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6364 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6365 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 6366 ret <vscale x 8 x i1> %1 6367} 6368 6369define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6370; CHECK-LABEL: fcmp_ult_vv_nxv8f32: 6371; CHECK: # %bb.0: 6372; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6373; CHECK-NEXT: vmfeq.vv v16, v8, v8 6374; CHECK-NEXT: vmfeq.vv v17, v12, v12 6375; CHECK-NEXT: vmand.mm v16, v17, v16 6376; CHECK-NEXT: vmv1r.v v0, v16 6377; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 6378; CHECK-NEXT: vmnot.m v0, v16 6379; CHECK-NEXT: ret 6380 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 6381 ret <vscale x 8 x i1> %1 6382} 6383 6384define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6385; CHECK-LABEL: fcmp_ult_vf_nxv8f32: 6386; CHECK: # %bb.0: 6387; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6388; CHECK-NEXT: vfmv.v.f v12, fa0 6389; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6390; CHECK-NEXT: vmfeq.vv v12, v8, v8 6391; CHECK-NEXT: vmand.mm v12, v16, v12 6392; CHECK-NEXT: vmv1r.v v0, v12 6393; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6394; CHECK-NEXT: vmnot.m v0, v12 6395; CHECK-NEXT: ret 6396 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6397 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6398 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 6399 ret <vscale x 8 x i1> %1 6400} 6401 6402define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6403; CHECK-LABEL: fcmp_ult_fv_nxv8f32: 6404; CHECK: # %bb.0: 6405; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6406; CHECK-NEXT: vfmv.v.f v12, fa0 6407; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6408; CHECK-NEXT: vmfeq.vv v12, v8, v8 6409; CHECK-NEXT: vmand.mm v12, v12, v16 6410; CHECK-NEXT: vmv1r.v v0, v12 6411; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6412; CHECK-NEXT: vmnot.m v0, v12 6413; CHECK-NEXT: ret 6414 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6415 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6416 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 6417 ret <vscale x 8 x i1> %1 6418} 6419 6420define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6421; CHECK-LABEL: fcmp_ule_vv_nxv8f32: 6422; CHECK: # %bb.0: 6423; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6424; CHECK-NEXT: vmfeq.vv v16, v8, v8 6425; CHECK-NEXT: vmfeq.vv v17, v12, v12 6426; CHECK-NEXT: vmand.mm v16, v17, v16 6427; CHECK-NEXT: vmv1r.v v0, v16 6428; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6429; CHECK-NEXT: vmnot.m v0, v16 6430; CHECK-NEXT: ret 6431 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 6432 ret <vscale x 8 x i1> %1 6433} 6434 6435define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6436; CHECK-LABEL: fcmp_ule_vf_nxv8f32: 6437; CHECK: # %bb.0: 6438; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6439; CHECK-NEXT: vfmv.v.f v12, fa0 6440; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6441; CHECK-NEXT: vmfeq.vv v12, v8, v8 6442; CHECK-NEXT: vmand.mm v12, v16, v12 6443; CHECK-NEXT: vmv1r.v v0, v12 6444; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6445; CHECK-NEXT: vmnot.m v0, v12 6446; CHECK-NEXT: ret 6447 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6448 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6449 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 6450 ret <vscale x 8 x i1> %1 6451} 6452 6453define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6454; CHECK-LABEL: fcmp_ule_fv_nxv8f32: 6455; CHECK: # %bb.0: 6456; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 6457; CHECK-NEXT: vfmv.v.f v12, fa0 6458; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6459; CHECK-NEXT: vmfeq.vv v12, v8, v8 6460; CHECK-NEXT: vmand.mm v12, v12, v16 6461; CHECK-NEXT: vmv1r.v v0, v12 6462; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6463; CHECK-NEXT: vmnot.m v0, v12 6464; CHECK-NEXT: ret 6465 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6466 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6467 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 6468 ret <vscale x 8 x i1> %1 6469} 6470 6471define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6472; CHECK-LABEL: fcmp_une_vv_nxv8f32: 6473; CHECK: # %bb.0: 6474; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6475; CHECK-NEXT: vmfne.vv v0, v8, v12 6476; CHECK-NEXT: ret 6477 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 6478 ret <vscale x 8 x i1> %1 6479} 6480 6481define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6482; CHECK-LABEL: fcmp_une_vf_nxv8f32: 6483; CHECK: # %bb.0: 6484; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6485; CHECK-NEXT: vmfne.vf v0, v8, fa0 6486; CHECK-NEXT: ret 6487 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6488 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6489 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 6490 ret <vscale x 8 x i1> %1 6491} 6492 6493define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6494; CHECK-LABEL: fcmp_une_fv_nxv8f32: 6495; CHECK: # %bb.0: 6496; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6497; CHECK-NEXT: vmfne.vf v0, v8, fa0 6498; CHECK-NEXT: ret 6499 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6500 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6501 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 6502 ret <vscale x 8 x i1> %1 6503} 6504 6505define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) nounwind strictfp { 6506; CHECK-LABEL: fcmp_uno_vv_nxv8f32: 6507; CHECK: # %bb.0: 6508; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6509; CHECK-NEXT: vmfne.vv v16, v12, v12 6510; CHECK-NEXT: vmfne.vv v12, v8, v8 6511; CHECK-NEXT: vmor.mm v0, v12, v16 6512; CHECK-NEXT: ret 6513 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 6514 ret <vscale x 8 x i1> %1 6515} 6516 6517define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6518; CHECK-LABEL: fcmp_uno_vf_nxv8f32: 6519; CHECK: # %bb.0: 6520; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6521; CHECK-NEXT: vfmv.v.f v12, fa0 6522; CHECK-NEXT: vmfne.vf v16, v12, fa0 6523; CHECK-NEXT: vmfne.vv v12, v8, v8 6524; CHECK-NEXT: vmor.mm v0, v12, v16 6525; CHECK-NEXT: ret 6526 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6527 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6528 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 6529 ret <vscale x 8 x i1> %1 6530} 6531 6532define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) nounwind strictfp { 6533; CHECK-LABEL: fcmp_uno_fv_nxv8f32: 6534; CHECK: # %bb.0: 6535; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 6536; CHECK-NEXT: vfmv.v.f v12, fa0 6537; CHECK-NEXT: vmfne.vf v16, v12, fa0 6538; CHECK-NEXT: vmfne.vv v12, v8, v8 6539; CHECK-NEXT: vmor.mm v0, v16, v12 6540; CHECK-NEXT: ret 6541 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0 6542 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 6543 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 6544 ret <vscale x 8 x i1> %1 6545} 6546 6547declare <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata) 6548define <vscale x 16 x i1> @fcmp_oeq_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6549; CHECK-LABEL: fcmp_oeq_vv_nxv16f32: 6550; CHECK: # %bb.0: 6551; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6552; CHECK-NEXT: vmfeq.vv v0, v8, v16 6553; CHECK-NEXT: ret 6554 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6555 ret <vscale x 16 x i1> %1 6556} 6557 6558define <vscale x 16 x i1> @fcmp_oeq_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6559; CHECK-LABEL: fcmp_oeq_vf_nxv16f32: 6560; CHECK: # %bb.0: 6561; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6562; CHECK-NEXT: vmfeq.vf v0, v8, fa0 6563; CHECK-NEXT: ret 6564 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6565 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6566 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6567 ret <vscale x 16 x i1> %1 6568} 6569 6570define <vscale x 16 x i1> @fcmp_oeq_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6571; CHECK-LABEL: fcmp_oeq_fv_nxv16f32: 6572; CHECK: # %bb.0: 6573; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6574; CHECK-NEXT: vmfeq.vf v0, v8, fa0 6575; CHECK-NEXT: ret 6576 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6577 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6578 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6579 ret <vscale x 16 x i1> %1 6580} 6581 6582define <vscale x 16 x i1> @fcmp_ogt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6583; CHECK-LABEL: fcmp_ogt_vv_nxv16f32: 6584; CHECK: # %bb.0: 6585; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6586; CHECK-NEXT: vmfeq.vv v24, v8, v8 6587; CHECK-NEXT: vmfeq.vv v25, v16, v16 6588; CHECK-NEXT: vmand.mm v24, v25, v24 6589; CHECK-NEXT: vmv1r.v v0, v24 6590; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 6591; CHECK-NEXT: vmv1r.v v0, v24 6592; CHECK-NEXT: ret 6593 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6594 ret <vscale x 16 x i1> %1 6595} 6596 6597define <vscale x 16 x i1> @fcmp_ogt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6598; CHECK-LABEL: fcmp_ogt_vf_nxv16f32: 6599; CHECK: # %bb.0: 6600; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6601; CHECK-NEXT: vfmv.v.f v16, fa0 6602; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6603; CHECK-NEXT: vmfeq.vv v16, v8, v8 6604; CHECK-NEXT: vmand.mm v16, v24, v16 6605; CHECK-NEXT: vmv1r.v v0, v16 6606; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 6607; CHECK-NEXT: vmv1r.v v0, v16 6608; CHECK-NEXT: ret 6609 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6610 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6611 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6612 ret <vscale x 16 x i1> %1 6613} 6614 6615define <vscale x 16 x i1> @fcmp_ogt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6616; CHECK-LABEL: fcmp_ogt_fv_nxv16f32: 6617; CHECK: # %bb.0: 6618; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6619; CHECK-NEXT: vfmv.v.f v16, fa0 6620; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6621; CHECK-NEXT: vmfeq.vv v16, v8, v8 6622; CHECK-NEXT: vmand.mm v16, v16, v24 6623; CHECK-NEXT: vmv1r.v v0, v16 6624; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 6625; CHECK-NEXT: vmv1r.v v0, v16 6626; CHECK-NEXT: ret 6627 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6628 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6629 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6630 ret <vscale x 16 x i1> %1 6631} 6632 6633define <vscale x 16 x i1> @fcmp_oge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6634; CHECK-LABEL: fcmp_oge_vv_nxv16f32: 6635; CHECK: # %bb.0: 6636; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6637; CHECK-NEXT: vmfeq.vv v24, v8, v8 6638; CHECK-NEXT: vmfeq.vv v25, v16, v16 6639; CHECK-NEXT: vmand.mm v24, v25, v24 6640; CHECK-NEXT: vmv1r.v v0, v24 6641; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 6642; CHECK-NEXT: vmv1r.v v0, v24 6643; CHECK-NEXT: ret 6644 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 6645 ret <vscale x 16 x i1> %1 6646} 6647 6648define <vscale x 16 x i1> @fcmp_oge_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6649; CHECK-LABEL: fcmp_oge_vf_nxv16f32: 6650; CHECK: # %bb.0: 6651; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6652; CHECK-NEXT: vfmv.v.f v16, fa0 6653; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6654; CHECK-NEXT: vmfeq.vv v16, v8, v8 6655; CHECK-NEXT: vmand.mm v16, v24, v16 6656; CHECK-NEXT: vmv1r.v v0, v16 6657; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 6658; CHECK-NEXT: vmv1r.v v0, v16 6659; CHECK-NEXT: ret 6660 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6661 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6662 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 6663 ret <vscale x 16 x i1> %1 6664} 6665 6666define <vscale x 16 x i1> @fcmp_oge_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6667; CHECK-LABEL: fcmp_oge_fv_nxv16f32: 6668; CHECK: # %bb.0: 6669; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6670; CHECK-NEXT: vfmv.v.f v16, fa0 6671; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6672; CHECK-NEXT: vmfeq.vv v16, v8, v8 6673; CHECK-NEXT: vmand.mm v16, v16, v24 6674; CHECK-NEXT: vmv1r.v v0, v16 6675; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 6676; CHECK-NEXT: vmv1r.v v0, v16 6677; CHECK-NEXT: ret 6678 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6679 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6680 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 6681 ret <vscale x 16 x i1> %1 6682} 6683 6684define <vscale x 16 x i1> @fcmp_olt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6685; CHECK-LABEL: fcmp_olt_vv_nxv16f32: 6686; CHECK: # %bb.0: 6687; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6688; CHECK-NEXT: vmfeq.vv v24, v16, v16 6689; CHECK-NEXT: vmfeq.vv v25, v8, v8 6690; CHECK-NEXT: vmand.mm v24, v25, v24 6691; CHECK-NEXT: vmv1r.v v0, v24 6692; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 6693; CHECK-NEXT: vmv1r.v v0, v24 6694; CHECK-NEXT: ret 6695 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 6696 ret <vscale x 16 x i1> %1 6697} 6698 6699define <vscale x 16 x i1> @fcmp_olt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6700; CHECK-LABEL: fcmp_olt_vf_nxv16f32: 6701; CHECK: # %bb.0: 6702; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6703; CHECK-NEXT: vfmv.v.f v16, fa0 6704; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6705; CHECK-NEXT: vmfeq.vv v16, v8, v8 6706; CHECK-NEXT: vmand.mm v16, v16, v24 6707; CHECK-NEXT: vmv1r.v v0, v16 6708; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 6709; CHECK-NEXT: vmv1r.v v0, v16 6710; CHECK-NEXT: ret 6711 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6712 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6713 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 6714 ret <vscale x 16 x i1> %1 6715} 6716 6717define <vscale x 16 x i1> @fcmp_olt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6718; CHECK-LABEL: fcmp_olt_fv_nxv16f32: 6719; CHECK: # %bb.0: 6720; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6721; CHECK-NEXT: vfmv.v.f v16, fa0 6722; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6723; CHECK-NEXT: vmfeq.vv v16, v8, v8 6724; CHECK-NEXT: vmand.mm v16, v24, v16 6725; CHECK-NEXT: vmv1r.v v0, v16 6726; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 6727; CHECK-NEXT: vmv1r.v v0, v16 6728; CHECK-NEXT: ret 6729 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6730 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6731 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6732 ret <vscale x 16 x i1> %1 6733} 6734 6735define <vscale x 16 x i1> @fcmp_ole_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6736; CHECK-LABEL: fcmp_ole_vv_nxv16f32: 6737; CHECK: # %bb.0: 6738; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6739; CHECK-NEXT: vmfeq.vv v24, v16, v16 6740; CHECK-NEXT: vmfeq.vv v25, v8, v8 6741; CHECK-NEXT: vmand.mm v24, v25, v24 6742; CHECK-NEXT: vmv1r.v v0, v24 6743; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 6744; CHECK-NEXT: vmv1r.v v0, v24 6745; CHECK-NEXT: ret 6746 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6747 ret <vscale x 16 x i1> %1 6748} 6749 6750define <vscale x 16 x i1> @fcmp_ole_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6751; CHECK-LABEL: fcmp_ole_vf_nxv16f32: 6752; CHECK: # %bb.0: 6753; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6754; CHECK-NEXT: vfmv.v.f v16, fa0 6755; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6756; CHECK-NEXT: vmfeq.vv v16, v8, v8 6757; CHECK-NEXT: vmand.mm v16, v16, v24 6758; CHECK-NEXT: vmv1r.v v0, v16 6759; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 6760; CHECK-NEXT: vmv1r.v v0, v16 6761; CHECK-NEXT: ret 6762 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6763 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6764 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6765 ret <vscale x 16 x i1> %1 6766} 6767 6768define <vscale x 16 x i1> @fcmp_ole_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6769; CHECK-LABEL: fcmp_ole_fv_nxv16f32: 6770; CHECK: # %bb.0: 6771; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6772; CHECK-NEXT: vfmv.v.f v16, fa0 6773; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6774; CHECK-NEXT: vmfeq.vv v16, v8, v8 6775; CHECK-NEXT: vmand.mm v16, v24, v16 6776; CHECK-NEXT: vmv1r.v v0, v16 6777; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 6778; CHECK-NEXT: vmv1r.v v0, v16 6779; CHECK-NEXT: ret 6780 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6781 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6782 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6783 ret <vscale x 16 x i1> %1 6784} 6785 6786define <vscale x 16 x i1> @fcmp_one_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6787; CHECK-LABEL: fcmp_one_vv_nxv16f32: 6788; CHECK: # %bb.0: 6789; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6790; CHECK-NEXT: vmfeq.vv v24, v16, v16 6791; CHECK-NEXT: vmfeq.vv v25, v8, v8 6792; CHECK-NEXT: vmand.mm v24, v25, v24 6793; CHECK-NEXT: vmv1r.v v25, v24 6794; CHECK-NEXT: vmv1r.v v0, v24 6795; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 6796; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 6797; CHECK-NEXT: vmor.mm v0, v24, v25 6798; CHECK-NEXT: ret 6799 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6800 ret <vscale x 16 x i1> %1 6801} 6802 6803define <vscale x 16 x i1> @fcmp_one_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6804; CHECK-LABEL: fcmp_one_vf_nxv16f32: 6805; CHECK: # %bb.0: 6806; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6807; CHECK-NEXT: vfmv.v.f v16, fa0 6808; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6809; CHECK-NEXT: vmfeq.vv v16, v8, v8 6810; CHECK-NEXT: vmand.mm v16, v16, v24 6811; CHECK-NEXT: vmv1r.v v17, v16 6812; CHECK-NEXT: vmv1r.v v0, v16 6813; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 6814; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 6815; CHECK-NEXT: vmor.mm v0, v16, v17 6816; CHECK-NEXT: ret 6817 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6818 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6819 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6820 ret <vscale x 16 x i1> %1 6821} 6822 6823define <vscale x 16 x i1> @fcmp_one_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6824; CHECK-LABEL: fcmp_one_fv_nxv16f32: 6825; CHECK: # %bb.0: 6826; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6827; CHECK-NEXT: vfmv.v.f v16, fa0 6828; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6829; CHECK-NEXT: vmfeq.vv v16, v8, v8 6830; CHECK-NEXT: vmand.mm v16, v24, v16 6831; CHECK-NEXT: vmv1r.v v17, v16 6832; CHECK-NEXT: vmv1r.v v0, v16 6833; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 6834; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 6835; CHECK-NEXT: vmor.mm v0, v16, v17 6836; CHECK-NEXT: ret 6837 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6838 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6839 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6840 ret <vscale x 16 x i1> %1 6841} 6842 6843define <vscale x 16 x i1> @fcmp_ord_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6844; CHECK-LABEL: fcmp_ord_vv_nxv16f32: 6845; CHECK: # %bb.0: 6846; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6847; CHECK-NEXT: vmfeq.vv v24, v16, v16 6848; CHECK-NEXT: vmfeq.vv v16, v8, v8 6849; CHECK-NEXT: vmand.mm v0, v16, v24 6850; CHECK-NEXT: ret 6851 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6852 ret <vscale x 16 x i1> %1 6853} 6854 6855define <vscale x 16 x i1> @fcmp_ord_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6856; CHECK-LABEL: fcmp_ord_vf_nxv16f32: 6857; CHECK: # %bb.0: 6858; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6859; CHECK-NEXT: vfmv.v.f v16, fa0 6860; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6861; CHECK-NEXT: vmfeq.vv v16, v8, v8 6862; CHECK-NEXT: vmand.mm v0, v16, v24 6863; CHECK-NEXT: ret 6864 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6865 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6866 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6867 ret <vscale x 16 x i1> %1 6868} 6869 6870define <vscale x 16 x i1> @fcmp_ord_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6871; CHECK-LABEL: fcmp_ord_fv_nxv16f32: 6872; CHECK: # %bb.0: 6873; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 6874; CHECK-NEXT: vfmv.v.f v16, fa0 6875; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6876; CHECK-NEXT: vmfeq.vv v16, v8, v8 6877; CHECK-NEXT: vmand.mm v0, v24, v16 6878; CHECK-NEXT: ret 6879 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6880 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6881 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6882 ret <vscale x 16 x i1> %1 6883} 6884 6885define <vscale x 16 x i1> @fcmp_ueq_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6886; CHECK-LABEL: fcmp_ueq_vv_nxv16f32: 6887; CHECK: # %bb.0: 6888; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6889; CHECK-NEXT: vmfeq.vv v24, v16, v16 6890; CHECK-NEXT: vmfeq.vv v25, v8, v8 6891; CHECK-NEXT: vmand.mm v24, v25, v24 6892; CHECK-NEXT: vmv1r.v v25, v24 6893; CHECK-NEXT: vmv1r.v v0, v24 6894; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 6895; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 6896; CHECK-NEXT: vmnor.mm v0, v24, v25 6897; CHECK-NEXT: ret 6898 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6899 ret <vscale x 16 x i1> %1 6900} 6901 6902define <vscale x 16 x i1> @fcmp_ueq_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6903; CHECK-LABEL: fcmp_ueq_vf_nxv16f32: 6904; CHECK: # %bb.0: 6905; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6906; CHECK-NEXT: vfmv.v.f v16, fa0 6907; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6908; CHECK-NEXT: vmfeq.vv v16, v8, v8 6909; CHECK-NEXT: vmand.mm v16, v16, v24 6910; CHECK-NEXT: vmv1r.v v17, v16 6911; CHECK-NEXT: vmv1r.v v0, v16 6912; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 6913; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 6914; CHECK-NEXT: vmnor.mm v0, v16, v17 6915; CHECK-NEXT: ret 6916 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6917 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6918 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6919 ret <vscale x 16 x i1> %1 6920} 6921 6922define <vscale x 16 x i1> @fcmp_ueq_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6923; CHECK-LABEL: fcmp_ueq_fv_nxv16f32: 6924; CHECK: # %bb.0: 6925; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6926; CHECK-NEXT: vfmv.v.f v16, fa0 6927; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6928; CHECK-NEXT: vmfeq.vv v16, v8, v8 6929; CHECK-NEXT: vmand.mm v16, v24, v16 6930; CHECK-NEXT: vmv1r.v v17, v16 6931; CHECK-NEXT: vmv1r.v v0, v16 6932; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 6933; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 6934; CHECK-NEXT: vmnor.mm v0, v16, v17 6935; CHECK-NEXT: ret 6936 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6937 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6938 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6939 ret <vscale x 16 x i1> %1 6940} 6941 6942define <vscale x 16 x i1> @fcmp_ugt_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6943; CHECK-LABEL: fcmp_ugt_vv_nxv16f32: 6944; CHECK: # %bb.0: 6945; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6946; CHECK-NEXT: vmfeq.vv v24, v16, v16 6947; CHECK-NEXT: vmfeq.vv v25, v8, v8 6948; CHECK-NEXT: vmand.mm v24, v25, v24 6949; CHECK-NEXT: vmv1r.v v0, v24 6950; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 6951; CHECK-NEXT: vmnot.m v0, v24 6952; CHECK-NEXT: ret 6953 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6954 ret <vscale x 16 x i1> %1 6955} 6956 6957define <vscale x 16 x i1> @fcmp_ugt_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6958; CHECK-LABEL: fcmp_ugt_vf_nxv16f32: 6959; CHECK: # %bb.0: 6960; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6961; CHECK-NEXT: vfmv.v.f v16, fa0 6962; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6963; CHECK-NEXT: vmfeq.vv v16, v8, v8 6964; CHECK-NEXT: vmand.mm v16, v16, v24 6965; CHECK-NEXT: vmv1r.v v0, v16 6966; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 6967; CHECK-NEXT: vmnot.m v0, v16 6968; CHECK-NEXT: ret 6969 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6970 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6971 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6972 ret <vscale x 16 x i1> %1 6973} 6974 6975define <vscale x 16 x i1> @fcmp_ugt_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 6976; CHECK-LABEL: fcmp_ugt_fv_nxv16f32: 6977; CHECK: # %bb.0: 6978; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6979; CHECK-NEXT: vfmv.v.f v16, fa0 6980; CHECK-NEXT: vmfeq.vf v24, v16, fa0 6981; CHECK-NEXT: vmfeq.vv v16, v8, v8 6982; CHECK-NEXT: vmand.mm v16, v24, v16 6983; CHECK-NEXT: vmv1r.v v0, v16 6984; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 6985; CHECK-NEXT: vmnot.m v0, v16 6986; CHECK-NEXT: ret 6987 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 6988 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 6989 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6990 ret <vscale x 16 x i1> %1 6991} 6992 6993define <vscale x 16 x i1> @fcmp_uge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 6994; CHECK-LABEL: fcmp_uge_vv_nxv16f32: 6995; CHECK: # %bb.0: 6996; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 6997; CHECK-NEXT: vmfeq.vv v24, v16, v16 6998; CHECK-NEXT: vmfeq.vv v25, v8, v8 6999; CHECK-NEXT: vmand.mm v24, v25, v24 7000; CHECK-NEXT: vmv1r.v v0, v24 7001; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 7002; CHECK-NEXT: vmnot.m v0, v24 7003; CHECK-NEXT: ret 7004 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 7005 ret <vscale x 16 x i1> %1 7006} 7007 7008define <vscale x 16 x i1> @fcmp_uge_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7009; CHECK-LABEL: fcmp_uge_vf_nxv16f32: 7010; CHECK: # %bb.0: 7011; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7012; CHECK-NEXT: vfmv.v.f v16, fa0 7013; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7014; CHECK-NEXT: vmfeq.vv v16, v8, v8 7015; CHECK-NEXT: vmand.mm v16, v16, v24 7016; CHECK-NEXT: vmv1r.v v0, v16 7017; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 7018; CHECK-NEXT: vmnot.m v0, v16 7019; CHECK-NEXT: ret 7020 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7021 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7022 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 7023 ret <vscale x 16 x i1> %1 7024} 7025 7026define <vscale x 16 x i1> @fcmp_uge_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7027; CHECK-LABEL: fcmp_uge_fv_nxv16f32: 7028; CHECK: # %bb.0: 7029; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7030; CHECK-NEXT: vfmv.v.f v16, fa0 7031; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7032; CHECK-NEXT: vmfeq.vv v16, v8, v8 7033; CHECK-NEXT: vmand.mm v16, v24, v16 7034; CHECK-NEXT: vmv1r.v v0, v16 7035; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 7036; CHECK-NEXT: vmnot.m v0, v16 7037; CHECK-NEXT: ret 7038 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7039 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7040 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 7041 ret <vscale x 16 x i1> %1 7042} 7043 7044define <vscale x 16 x i1> @fcmp_ult_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 7045; CHECK-LABEL: fcmp_ult_vv_nxv16f32: 7046; CHECK: # %bb.0: 7047; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7048; CHECK-NEXT: vmfeq.vv v24, v8, v8 7049; CHECK-NEXT: vmfeq.vv v25, v16, v16 7050; CHECK-NEXT: vmand.mm v24, v25, v24 7051; CHECK-NEXT: vmv1r.v v0, v24 7052; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 7053; CHECK-NEXT: vmnot.m v0, v24 7054; CHECK-NEXT: ret 7055 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7056 ret <vscale x 16 x i1> %1 7057} 7058 7059define <vscale x 16 x i1> @fcmp_ult_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7060; CHECK-LABEL: fcmp_ult_vf_nxv16f32: 7061; CHECK: # %bb.0: 7062; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7063; CHECK-NEXT: vfmv.v.f v16, fa0 7064; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7065; CHECK-NEXT: vmfeq.vv v16, v8, v8 7066; CHECK-NEXT: vmand.mm v16, v24, v16 7067; CHECK-NEXT: vmv1r.v v0, v16 7068; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 7069; CHECK-NEXT: vmnot.m v0, v16 7070; CHECK-NEXT: ret 7071 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7072 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7073 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7074 ret <vscale x 16 x i1> %1 7075} 7076 7077define <vscale x 16 x i1> @fcmp_ult_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7078; CHECK-LABEL: fcmp_ult_fv_nxv16f32: 7079; CHECK: # %bb.0: 7080; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7081; CHECK-NEXT: vfmv.v.f v16, fa0 7082; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7083; CHECK-NEXT: vmfeq.vv v16, v8, v8 7084; CHECK-NEXT: vmand.mm v16, v16, v24 7085; CHECK-NEXT: vmv1r.v v0, v16 7086; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 7087; CHECK-NEXT: vmnot.m v0, v16 7088; CHECK-NEXT: ret 7089 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7090 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7091 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7092 ret <vscale x 16 x i1> %1 7093} 7094 7095define <vscale x 16 x i1> @fcmp_ule_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 7096; CHECK-LABEL: fcmp_ule_vv_nxv16f32: 7097; CHECK: # %bb.0: 7098; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7099; CHECK-NEXT: vmfeq.vv v24, v8, v8 7100; CHECK-NEXT: vmfeq.vv v25, v16, v16 7101; CHECK-NEXT: vmand.mm v24, v25, v24 7102; CHECK-NEXT: vmv1r.v v0, v24 7103; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 7104; CHECK-NEXT: vmnot.m v0, v24 7105; CHECK-NEXT: ret 7106 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7107 ret <vscale x 16 x i1> %1 7108} 7109 7110define <vscale x 16 x i1> @fcmp_ule_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7111; CHECK-LABEL: fcmp_ule_vf_nxv16f32: 7112; CHECK: # %bb.0: 7113; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7114; CHECK-NEXT: vfmv.v.f v16, fa0 7115; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7116; CHECK-NEXT: vmfeq.vv v16, v8, v8 7117; CHECK-NEXT: vmand.mm v16, v24, v16 7118; CHECK-NEXT: vmv1r.v v0, v16 7119; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 7120; CHECK-NEXT: vmnot.m v0, v16 7121; CHECK-NEXT: ret 7122 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7123 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7124 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7125 ret <vscale x 16 x i1> %1 7126} 7127 7128define <vscale x 16 x i1> @fcmp_ule_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7129; CHECK-LABEL: fcmp_ule_fv_nxv16f32: 7130; CHECK: # %bb.0: 7131; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 7132; CHECK-NEXT: vfmv.v.f v16, fa0 7133; CHECK-NEXT: vmfeq.vf v24, v16, fa0 7134; CHECK-NEXT: vmfeq.vv v16, v8, v8 7135; CHECK-NEXT: vmand.mm v16, v16, v24 7136; CHECK-NEXT: vmv1r.v v0, v16 7137; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 7138; CHECK-NEXT: vmnot.m v0, v16 7139; CHECK-NEXT: ret 7140 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7141 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7142 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7143 ret <vscale x 16 x i1> %1 7144} 7145 7146define <vscale x 16 x i1> @fcmp_une_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 7147; CHECK-LABEL: fcmp_une_vv_nxv16f32: 7148; CHECK: # %bb.0: 7149; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7150; CHECK-NEXT: vmfne.vv v0, v8, v16 7151; CHECK-NEXT: ret 7152 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7153 ret <vscale x 16 x i1> %1 7154} 7155 7156define <vscale x 16 x i1> @fcmp_une_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7157; CHECK-LABEL: fcmp_une_vf_nxv16f32: 7158; CHECK: # %bb.0: 7159; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7160; CHECK-NEXT: vmfne.vf v0, v8, fa0 7161; CHECK-NEXT: ret 7162 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7163 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7164 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7165 ret <vscale x 16 x i1> %1 7166} 7167 7168define <vscale x 16 x i1> @fcmp_une_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7169; CHECK-LABEL: fcmp_une_fv_nxv16f32: 7170; CHECK: # %bb.0: 7171; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7172; CHECK-NEXT: vmfne.vf v0, v8, fa0 7173; CHECK-NEXT: ret 7174 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7175 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7176 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7177 ret <vscale x 16 x i1> %1 7178} 7179 7180define <vscale x 16 x i1> @fcmp_uno_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) nounwind strictfp { 7181; CHECK-LABEL: fcmp_uno_vv_nxv16f32: 7182; CHECK: # %bb.0: 7183; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7184; CHECK-NEXT: vmfne.vv v24, v16, v16 7185; CHECK-NEXT: vmfne.vv v16, v8, v8 7186; CHECK-NEXT: vmor.mm v0, v16, v24 7187; CHECK-NEXT: ret 7188 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7189 ret <vscale x 16 x i1> %1 7190} 7191 7192define <vscale x 16 x i1> @fcmp_uno_vf_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7193; CHECK-LABEL: fcmp_uno_vf_nxv16f32: 7194; CHECK: # %bb.0: 7195; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7196; CHECK-NEXT: vfmv.v.f v16, fa0 7197; CHECK-NEXT: vmfne.vf v24, v16, fa0 7198; CHECK-NEXT: vmfne.vv v16, v8, v8 7199; CHECK-NEXT: vmor.mm v0, v16, v24 7200; CHECK-NEXT: ret 7201 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7202 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7203 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 7204 ret <vscale x 16 x i1> %1 7205} 7206 7207define <vscale x 16 x i1> @fcmp_uno_fv_nxv16f32(<vscale x 16 x float> %va, float %b) nounwind strictfp { 7208; CHECK-LABEL: fcmp_uno_fv_nxv16f32: 7209; CHECK: # %bb.0: 7210; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 7211; CHECK-NEXT: vfmv.v.f v16, fa0 7212; CHECK-NEXT: vmfne.vf v24, v16, fa0 7213; CHECK-NEXT: vmfne.vv v16, v8, v8 7214; CHECK-NEXT: vmor.mm v0, v24, v16 7215; CHECK-NEXT: ret 7216 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0 7217 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 7218 %1 = call <vscale x 16 x i1> @llvm.experimental.constrained.fcmp.nxv16f32(<vscale x 16 x float> %splat, <vscale x 16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 7219 ret <vscale x 16 x i1> %1 7220} 7221 7222declare <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata) 7223define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7224; CHECK-LABEL: fcmp_oeq_vv_nxv1f64: 7225; CHECK: # %bb.0: 7226; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7227; CHECK-NEXT: vmfeq.vv v0, v8, v9 7228; CHECK-NEXT: ret 7229 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7230 ret <vscale x 1 x i1> %1 7231} 7232 7233define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7234; CHECK-LABEL: fcmp_oeq_vf_nxv1f64: 7235; CHECK: # %bb.0: 7236; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7237; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7238; CHECK-NEXT: ret 7239 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7240 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7241 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7242 ret <vscale x 1 x i1> %1 7243} 7244 7245define <vscale x 1 x i1> @fcmp_oeq_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7246; CHECK-LABEL: fcmp_oeq_fv_nxv1f64: 7247; CHECK: # %bb.0: 7248; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7249; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7250; CHECK-NEXT: ret 7251 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7252 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7253 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7254 ret <vscale x 1 x i1> %1 7255} 7256 7257define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7258; CHECK-LABEL: fcmp_ogt_vv_nxv1f64: 7259; CHECK: # %bb.0: 7260; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7261; CHECK-NEXT: vmfeq.vv v10, v8, v8 7262; CHECK-NEXT: vmfeq.vv v11, v9, v9 7263; CHECK-NEXT: vmand.mm v0, v11, v10 7264; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7265; CHECK-NEXT: ret 7266 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7267 ret <vscale x 1 x i1> %1 7268} 7269 7270define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7271; CHECK-LABEL: fcmp_ogt_vf_nxv1f64: 7272; CHECK: # %bb.0: 7273; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7274; CHECK-NEXT: vfmv.v.f v9, fa0 7275; CHECK-NEXT: vmfeq.vv v10, v8, v8 7276; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7277; CHECK-NEXT: vmand.mm v0, v9, v10 7278; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7279; CHECK-NEXT: ret 7280 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7281 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7282 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7283 ret <vscale x 1 x i1> %1 7284} 7285 7286define <vscale x 1 x i1> @fcmp_ogt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7287; CHECK-LABEL: fcmp_ogt_fv_nxv1f64: 7288; CHECK: # %bb.0: 7289; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7290; CHECK-NEXT: vfmv.v.f v9, fa0 7291; CHECK-NEXT: vmfeq.vv v10, v8, v8 7292; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7293; CHECK-NEXT: vmand.mm v0, v10, v9 7294; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7295; CHECK-NEXT: ret 7296 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7297 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7298 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7299 ret <vscale x 1 x i1> %1 7300} 7301 7302define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7303; CHECK-LABEL: fcmp_oge_vv_nxv1f64: 7304; CHECK: # %bb.0: 7305; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7306; CHECK-NEXT: vmfeq.vv v10, v8, v8 7307; CHECK-NEXT: vmfeq.vv v11, v9, v9 7308; CHECK-NEXT: vmand.mm v0, v11, v10 7309; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 7310; CHECK-NEXT: ret 7311 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7312 ret <vscale x 1 x i1> %1 7313} 7314 7315define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7316; CHECK-LABEL: fcmp_oge_vf_nxv1f64: 7317; CHECK: # %bb.0: 7318; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7319; CHECK-NEXT: vfmv.v.f v9, fa0 7320; CHECK-NEXT: vmfeq.vv v10, v8, v8 7321; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7322; CHECK-NEXT: vmand.mm v0, v9, v10 7323; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7324; CHECK-NEXT: ret 7325 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7326 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7327 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7328 ret <vscale x 1 x i1> %1 7329} 7330 7331define <vscale x 1 x i1> @fcmp_oge_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7332; CHECK-LABEL: fcmp_oge_fv_nxv1f64: 7333; CHECK: # %bb.0: 7334; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7335; CHECK-NEXT: vfmv.v.f v9, fa0 7336; CHECK-NEXT: vmfeq.vv v10, v8, v8 7337; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7338; CHECK-NEXT: vmand.mm v0, v10, v9 7339; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7340; CHECK-NEXT: ret 7341 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7342 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7343 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7344 ret <vscale x 1 x i1> %1 7345} 7346 7347define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7348; CHECK-LABEL: fcmp_olt_vv_nxv1f64: 7349; CHECK: # %bb.0: 7350; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7351; CHECK-NEXT: vmfeq.vv v10, v9, v9 7352; CHECK-NEXT: vmfeq.vv v11, v8, v8 7353; CHECK-NEXT: vmand.mm v0, v11, v10 7354; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 7355; CHECK-NEXT: ret 7356 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 7357 ret <vscale x 1 x i1> %1 7358} 7359 7360define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7361; CHECK-LABEL: fcmp_olt_vf_nxv1f64: 7362; CHECK: # %bb.0: 7363; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7364; CHECK-NEXT: vfmv.v.f v9, fa0 7365; CHECK-NEXT: vmfeq.vv v10, v8, v8 7366; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7367; CHECK-NEXT: vmand.mm v0, v10, v9 7368; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7369; CHECK-NEXT: ret 7370 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7371 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7372 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 7373 ret <vscale x 1 x i1> %1 7374} 7375 7376define <vscale x 1 x i1> @fcmp_olt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7377; CHECK-LABEL: fcmp_olt_fv_nxv1f64: 7378; CHECK: # %bb.0: 7379; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7380; CHECK-NEXT: vfmv.v.f v9, fa0 7381; CHECK-NEXT: vmfeq.vv v10, v8, v8 7382; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7383; CHECK-NEXT: vmand.mm v0, v9, v10 7384; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7385; CHECK-NEXT: ret 7386 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7387 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7388 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 7389 ret <vscale x 1 x i1> %1 7390} 7391 7392define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7393; CHECK-LABEL: fcmp_ole_vv_nxv1f64: 7394; CHECK: # %bb.0: 7395; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7396; CHECK-NEXT: vmfeq.vv v10, v9, v9 7397; CHECK-NEXT: vmfeq.vv v11, v8, v8 7398; CHECK-NEXT: vmand.mm v0, v11, v10 7399; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 7400; CHECK-NEXT: ret 7401 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 7402 ret <vscale x 1 x i1> %1 7403} 7404 7405define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7406; CHECK-LABEL: fcmp_ole_vf_nxv1f64: 7407; CHECK: # %bb.0: 7408; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7409; CHECK-NEXT: vfmv.v.f v9, fa0 7410; CHECK-NEXT: vmfeq.vv v10, v8, v8 7411; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7412; CHECK-NEXT: vmand.mm v0, v10, v9 7413; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7414; CHECK-NEXT: ret 7415 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7416 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7417 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 7418 ret <vscale x 1 x i1> %1 7419} 7420 7421define <vscale x 1 x i1> @fcmp_ole_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7422; CHECK-LABEL: fcmp_ole_fv_nxv1f64: 7423; CHECK: # %bb.0: 7424; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7425; CHECK-NEXT: vfmv.v.f v9, fa0 7426; CHECK-NEXT: vmfeq.vv v10, v8, v8 7427; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7428; CHECK-NEXT: vmand.mm v0, v9, v10 7429; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7430; CHECK-NEXT: ret 7431 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7432 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7433 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 7434 ret <vscale x 1 x i1> %1 7435} 7436 7437define <vscale x 1 x i1> @fcmp_one_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7438; CHECK-LABEL: fcmp_one_vv_nxv1f64: 7439; CHECK: # %bb.0: 7440; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7441; CHECK-NEXT: vmfeq.vv v10, v9, v9 7442; CHECK-NEXT: vmfeq.vv v11, v8, v8 7443; CHECK-NEXT: vmand.mm v0, v11, v10 7444; CHECK-NEXT: vmv.v.v v10, v0 7445; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 7446; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7447; CHECK-NEXT: vmor.mm v0, v0, v10 7448; CHECK-NEXT: ret 7449 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 7450 ret <vscale x 1 x i1> %1 7451} 7452 7453define <vscale x 1 x i1> @fcmp_one_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7454; CHECK-LABEL: fcmp_one_vf_nxv1f64: 7455; CHECK: # %bb.0: 7456; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7457; CHECK-NEXT: vfmv.v.f v9, fa0 7458; CHECK-NEXT: vmfeq.vv v10, v8, v8 7459; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7460; CHECK-NEXT: vmand.mm v0, v10, v9 7461; CHECK-NEXT: vmv.v.v v9, v0 7462; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 7463; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7464; CHECK-NEXT: vmor.mm v0, v0, v9 7465; CHECK-NEXT: ret 7466 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7467 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7468 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 7469 ret <vscale x 1 x i1> %1 7470} 7471 7472define <vscale x 1 x i1> @fcmp_one_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7473; CHECK-LABEL: fcmp_one_fv_nxv1f64: 7474; CHECK: # %bb.0: 7475; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7476; CHECK-NEXT: vfmv.v.f v9, fa0 7477; CHECK-NEXT: vmfeq.vv v10, v8, v8 7478; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7479; CHECK-NEXT: vmand.mm v0, v9, v10 7480; CHECK-NEXT: vmv.v.v v9, v0 7481; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 7482; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7483; CHECK-NEXT: vmor.mm v0, v0, v9 7484; CHECK-NEXT: ret 7485 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7486 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7487 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 7488 ret <vscale x 1 x i1> %1 7489} 7490 7491define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7492; CHECK-LABEL: fcmp_ord_vv_nxv1f64: 7493; CHECK: # %bb.0: 7494; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7495; CHECK-NEXT: vmfeq.vv v9, v9, v9 7496; CHECK-NEXT: vmfeq.vv v8, v8, v8 7497; CHECK-NEXT: vmand.mm v0, v8, v9 7498; CHECK-NEXT: ret 7499 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 7500 ret <vscale x 1 x i1> %1 7501} 7502 7503define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7504; CHECK-LABEL: fcmp_ord_vf_nxv1f64: 7505; CHECK: # %bb.0: 7506; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7507; CHECK-NEXT: vfmv.v.f v9, fa0 7508; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7509; CHECK-NEXT: vmfeq.vv v8, v8, v8 7510; CHECK-NEXT: vmand.mm v0, v8, v9 7511; CHECK-NEXT: ret 7512 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7513 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7514 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 7515 ret <vscale x 1 x i1> %1 7516} 7517 7518define <vscale x 1 x i1> @fcmp_ord_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7519; CHECK-LABEL: fcmp_ord_fv_nxv1f64: 7520; CHECK: # %bb.0: 7521; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7522; CHECK-NEXT: vfmv.v.f v9, fa0 7523; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7524; CHECK-NEXT: vmfeq.vv v8, v8, v8 7525; CHECK-NEXT: vmand.mm v0, v9, v8 7526; CHECK-NEXT: ret 7527 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7528 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7529 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 7530 ret <vscale x 1 x i1> %1 7531} 7532 7533define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7534; CHECK-LABEL: fcmp_ueq_vv_nxv1f64: 7535; CHECK: # %bb.0: 7536; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7537; CHECK-NEXT: vmfeq.vv v10, v9, v9 7538; CHECK-NEXT: vmfeq.vv v11, v8, v8 7539; CHECK-NEXT: vmand.mm v0, v11, v10 7540; CHECK-NEXT: vmv.v.v v10, v0 7541; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 7542; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7543; CHECK-NEXT: vmnor.mm v0, v0, v10 7544; CHECK-NEXT: ret 7545 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7546 ret <vscale x 1 x i1> %1 7547} 7548 7549define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7550; CHECK-LABEL: fcmp_ueq_vf_nxv1f64: 7551; CHECK: # %bb.0: 7552; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7553; CHECK-NEXT: vfmv.v.f v9, fa0 7554; CHECK-NEXT: vmfeq.vv v10, v8, v8 7555; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7556; CHECK-NEXT: vmand.mm v0, v10, v9 7557; CHECK-NEXT: vmv.v.v v9, v0 7558; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 7559; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7560; CHECK-NEXT: vmnor.mm v0, v0, v9 7561; CHECK-NEXT: ret 7562 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7563 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7564 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7565 ret <vscale x 1 x i1> %1 7566} 7567 7568define <vscale x 1 x i1> @fcmp_ueq_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7569; CHECK-LABEL: fcmp_ueq_fv_nxv1f64: 7570; CHECK: # %bb.0: 7571; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7572; CHECK-NEXT: vfmv.v.f v9, fa0 7573; CHECK-NEXT: vmfeq.vv v10, v8, v8 7574; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7575; CHECK-NEXT: vmand.mm v0, v9, v10 7576; CHECK-NEXT: vmv.v.v v9, v0 7577; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 7578; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7579; CHECK-NEXT: vmnor.mm v0, v0, v9 7580; CHECK-NEXT: ret 7581 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7582 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7583 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7584 ret <vscale x 1 x i1> %1 7585} 7586 7587define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7588; CHECK-LABEL: fcmp_ugt_vv_nxv1f64: 7589; CHECK: # %bb.0: 7590; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7591; CHECK-NEXT: vmfeq.vv v10, v9, v9 7592; CHECK-NEXT: vmfeq.vv v11, v8, v8 7593; CHECK-NEXT: vmand.mm v0, v11, v10 7594; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 7595; CHECK-NEXT: vmnot.m v0, v0 7596; CHECK-NEXT: ret 7597 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7598 ret <vscale x 1 x i1> %1 7599} 7600 7601define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7602; CHECK-LABEL: fcmp_ugt_vf_nxv1f64: 7603; CHECK: # %bb.0: 7604; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7605; CHECK-NEXT: vfmv.v.f v9, fa0 7606; CHECK-NEXT: vmfeq.vv v10, v8, v8 7607; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7608; CHECK-NEXT: vmand.mm v0, v10, v9 7609; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7610; CHECK-NEXT: vmnot.m v0, v0 7611; CHECK-NEXT: ret 7612 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7613 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7614 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7615 ret <vscale x 1 x i1> %1 7616} 7617 7618define <vscale x 1 x i1> @fcmp_ugt_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7619; CHECK-LABEL: fcmp_ugt_fv_nxv1f64: 7620; CHECK: # %bb.0: 7621; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7622; CHECK-NEXT: vfmv.v.f v9, fa0 7623; CHECK-NEXT: vmfeq.vv v10, v8, v8 7624; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7625; CHECK-NEXT: vmand.mm v0, v9, v10 7626; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7627; CHECK-NEXT: vmnot.m v0, v0 7628; CHECK-NEXT: ret 7629 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7630 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7631 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7632 ret <vscale x 1 x i1> %1 7633} 7634 7635define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7636; CHECK-LABEL: fcmp_uge_vv_nxv1f64: 7637; CHECK: # %bb.0: 7638; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7639; CHECK-NEXT: vmfeq.vv v10, v9, v9 7640; CHECK-NEXT: vmfeq.vv v11, v8, v8 7641; CHECK-NEXT: vmand.mm v0, v11, v10 7642; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 7643; CHECK-NEXT: vmnot.m v0, v0 7644; CHECK-NEXT: ret 7645 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 7646 ret <vscale x 1 x i1> %1 7647} 7648 7649define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7650; CHECK-LABEL: fcmp_uge_vf_nxv1f64: 7651; CHECK: # %bb.0: 7652; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7653; CHECK-NEXT: vfmv.v.f v9, fa0 7654; CHECK-NEXT: vmfeq.vv v10, v8, v8 7655; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7656; CHECK-NEXT: vmand.mm v0, v10, v9 7657; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7658; CHECK-NEXT: vmnot.m v0, v0 7659; CHECK-NEXT: ret 7660 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7661 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7662 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 7663 ret <vscale x 1 x i1> %1 7664} 7665 7666define <vscale x 1 x i1> @fcmp_uge_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7667; CHECK-LABEL: fcmp_uge_fv_nxv1f64: 7668; CHECK: # %bb.0: 7669; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7670; CHECK-NEXT: vfmv.v.f v9, fa0 7671; CHECK-NEXT: vmfeq.vv v10, v8, v8 7672; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7673; CHECK-NEXT: vmand.mm v0, v9, v10 7674; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7675; CHECK-NEXT: vmnot.m v0, v0 7676; CHECK-NEXT: ret 7677 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7678 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7679 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 7680 ret <vscale x 1 x i1> %1 7681} 7682 7683define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7684; CHECK-LABEL: fcmp_ult_vv_nxv1f64: 7685; CHECK: # %bb.0: 7686; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7687; CHECK-NEXT: vmfeq.vv v10, v8, v8 7688; CHECK-NEXT: vmfeq.vv v11, v9, v9 7689; CHECK-NEXT: vmand.mm v0, v11, v10 7690; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 7691; CHECK-NEXT: vmnot.m v0, v0 7692; CHECK-NEXT: ret 7693 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7694 ret <vscale x 1 x i1> %1 7695} 7696 7697define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7698; CHECK-LABEL: fcmp_ult_vf_nxv1f64: 7699; CHECK: # %bb.0: 7700; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7701; CHECK-NEXT: vfmv.v.f v9, fa0 7702; CHECK-NEXT: vmfeq.vv v10, v8, v8 7703; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7704; CHECK-NEXT: vmand.mm v0, v9, v10 7705; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7706; CHECK-NEXT: vmnot.m v0, v0 7707; CHECK-NEXT: ret 7708 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7709 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7710 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7711 ret <vscale x 1 x i1> %1 7712} 7713 7714define <vscale x 1 x i1> @fcmp_ult_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7715; CHECK-LABEL: fcmp_ult_fv_nxv1f64: 7716; CHECK: # %bb.0: 7717; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7718; CHECK-NEXT: vfmv.v.f v9, fa0 7719; CHECK-NEXT: vmfeq.vv v10, v8, v8 7720; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7721; CHECK-NEXT: vmand.mm v0, v10, v9 7722; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7723; CHECK-NEXT: vmnot.m v0, v0 7724; CHECK-NEXT: ret 7725 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7726 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7727 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7728 ret <vscale x 1 x i1> %1 7729} 7730 7731define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7732; CHECK-LABEL: fcmp_ule_vv_nxv1f64: 7733; CHECK: # %bb.0: 7734; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7735; CHECK-NEXT: vmfeq.vv v10, v8, v8 7736; CHECK-NEXT: vmfeq.vv v11, v9, v9 7737; CHECK-NEXT: vmand.mm v0, v11, v10 7738; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7739; CHECK-NEXT: vmnot.m v0, v0 7740; CHECK-NEXT: ret 7741 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7742 ret <vscale x 1 x i1> %1 7743} 7744 7745define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7746; CHECK-LABEL: fcmp_ule_vf_nxv1f64: 7747; CHECK: # %bb.0: 7748; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7749; CHECK-NEXT: vfmv.v.f v9, fa0 7750; CHECK-NEXT: vmfeq.vv v10, v8, v8 7751; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7752; CHECK-NEXT: vmand.mm v0, v9, v10 7753; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7754; CHECK-NEXT: vmnot.m v0, v0 7755; CHECK-NEXT: ret 7756 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7757 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7758 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7759 ret <vscale x 1 x i1> %1 7760} 7761 7762define <vscale x 1 x i1> @fcmp_ule_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7763; CHECK-LABEL: fcmp_ule_fv_nxv1f64: 7764; CHECK: # %bb.0: 7765; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 7766; CHECK-NEXT: vfmv.v.f v9, fa0 7767; CHECK-NEXT: vmfeq.vv v10, v8, v8 7768; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7769; CHECK-NEXT: vmand.mm v0, v10, v9 7770; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7771; CHECK-NEXT: vmnot.m v0, v0 7772; CHECK-NEXT: ret 7773 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7774 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7775 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7776 ret <vscale x 1 x i1> %1 7777} 7778 7779define <vscale x 1 x i1> @fcmp_une_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7780; CHECK-LABEL: fcmp_une_vv_nxv1f64: 7781; CHECK: # %bb.0: 7782; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7783; CHECK-NEXT: vmfne.vv v0, v8, v9 7784; CHECK-NEXT: ret 7785 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7786 ret <vscale x 1 x i1> %1 7787} 7788 7789define <vscale x 1 x i1> @fcmp_une_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7790; CHECK-LABEL: fcmp_une_vf_nxv1f64: 7791; CHECK: # %bb.0: 7792; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7793; CHECK-NEXT: vmfne.vf v0, v8, fa0 7794; CHECK-NEXT: ret 7795 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7796 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7797 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7798 ret <vscale x 1 x i1> %1 7799} 7800 7801define <vscale x 1 x i1> @fcmp_une_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7802; CHECK-LABEL: fcmp_une_fv_nxv1f64: 7803; CHECK: # %bb.0: 7804; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7805; CHECK-NEXT: vmfne.vf v0, v8, fa0 7806; CHECK-NEXT: ret 7807 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7808 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7809 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7810 ret <vscale x 1 x i1> %1 7811} 7812 7813define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) nounwind strictfp { 7814; CHECK-LABEL: fcmp_uno_vv_nxv1f64: 7815; CHECK: # %bb.0: 7816; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7817; CHECK-NEXT: vmfne.vv v9, v9, v9 7818; CHECK-NEXT: vmfne.vv v8, v8, v8 7819; CHECK-NEXT: vmor.mm v0, v8, v9 7820; CHECK-NEXT: ret 7821 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7822 ret <vscale x 1 x i1> %1 7823} 7824 7825define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7826; CHECK-LABEL: fcmp_uno_vf_nxv1f64: 7827; CHECK: # %bb.0: 7828; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7829; CHECK-NEXT: vfmv.v.f v9, fa0 7830; CHECK-NEXT: vmfne.vf v9, v9, fa0 7831; CHECK-NEXT: vmfne.vv v8, v8, v8 7832; CHECK-NEXT: vmor.mm v0, v8, v9 7833; CHECK-NEXT: ret 7834 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7835 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7836 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 7837 ret <vscale x 1 x i1> %1 7838} 7839 7840define <vscale x 1 x i1> @fcmp_uno_fv_nxv1f64(<vscale x 1 x double> %va, double %b) nounwind strictfp { 7841; CHECK-LABEL: fcmp_uno_fv_nxv1f64: 7842; CHECK: # %bb.0: 7843; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 7844; CHECK-NEXT: vfmv.v.f v9, fa0 7845; CHECK-NEXT: vmfne.vf v9, v9, fa0 7846; CHECK-NEXT: vmfne.vv v8, v8, v8 7847; CHECK-NEXT: vmor.mm v0, v9, v8 7848; CHECK-NEXT: ret 7849 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0 7850 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 7851 %1 = call <vscale x 1 x i1> @llvm.experimental.constrained.fcmp.nxv1f64(<vscale x 1 x double> %splat, <vscale x 1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 7852 ret <vscale x 1 x i1> %1 7853} 7854 7855declare <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata) 7856define <vscale x 2 x i1> @fcmp_oeq_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 7857; CHECK-LABEL: fcmp_oeq_vv_nxv2f64: 7858; CHECK: # %bb.0: 7859; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 7860; CHECK-NEXT: vmfeq.vv v0, v8, v10 7861; CHECK-NEXT: ret 7862 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7863 ret <vscale x 2 x i1> %1 7864} 7865 7866define <vscale x 2 x i1> @fcmp_oeq_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7867; CHECK-LABEL: fcmp_oeq_vf_nxv2f64: 7868; CHECK: # %bb.0: 7869; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 7870; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7871; CHECK-NEXT: ret 7872 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7873 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7874 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7875 ret <vscale x 2 x i1> %1 7876} 7877 7878define <vscale x 2 x i1> @fcmp_oeq_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7879; CHECK-LABEL: fcmp_oeq_fv_nxv2f64: 7880; CHECK: # %bb.0: 7881; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 7882; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7883; CHECK-NEXT: ret 7884 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7885 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7886 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7887 ret <vscale x 2 x i1> %1 7888} 7889 7890define <vscale x 2 x i1> @fcmp_ogt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 7891; CHECK-LABEL: fcmp_ogt_vv_nxv2f64: 7892; CHECK: # %bb.0: 7893; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7894; CHECK-NEXT: vmfeq.vv v12, v8, v8 7895; CHECK-NEXT: vmfeq.vv v13, v10, v10 7896; CHECK-NEXT: vmand.mm v12, v13, v12 7897; CHECK-NEXT: vmv1r.v v0, v12 7898; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 7899; CHECK-NEXT: vmv1r.v v0, v12 7900; CHECK-NEXT: ret 7901 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7902 ret <vscale x 2 x i1> %1 7903} 7904 7905define <vscale x 2 x i1> @fcmp_ogt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7906; CHECK-LABEL: fcmp_ogt_vf_nxv2f64: 7907; CHECK: # %bb.0: 7908; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7909; CHECK-NEXT: vfmv.v.f v10, fa0 7910; CHECK-NEXT: vmfeq.vf v12, v10, fa0 7911; CHECK-NEXT: vmfeq.vv v10, v8, v8 7912; CHECK-NEXT: vmand.mm v10, v12, v10 7913; CHECK-NEXT: vmv1r.v v0, v10 7914; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 7915; CHECK-NEXT: vmv1r.v v0, v10 7916; CHECK-NEXT: ret 7917 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7918 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7919 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7920 ret <vscale x 2 x i1> %1 7921} 7922 7923define <vscale x 2 x i1> @fcmp_ogt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7924; CHECK-LABEL: fcmp_ogt_fv_nxv2f64: 7925; CHECK: # %bb.0: 7926; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7927; CHECK-NEXT: vfmv.v.f v10, fa0 7928; CHECK-NEXT: vmfeq.vf v12, v10, fa0 7929; CHECK-NEXT: vmfeq.vv v10, v8, v8 7930; CHECK-NEXT: vmand.mm v10, v10, v12 7931; CHECK-NEXT: vmv1r.v v0, v10 7932; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 7933; CHECK-NEXT: vmv1r.v v0, v10 7934; CHECK-NEXT: ret 7935 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7936 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7937 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7938 ret <vscale x 2 x i1> %1 7939} 7940 7941define <vscale x 2 x i1> @fcmp_oge_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 7942; CHECK-LABEL: fcmp_oge_vv_nxv2f64: 7943; CHECK: # %bb.0: 7944; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7945; CHECK-NEXT: vmfeq.vv v12, v8, v8 7946; CHECK-NEXT: vmfeq.vv v13, v10, v10 7947; CHECK-NEXT: vmand.mm v12, v13, v12 7948; CHECK-NEXT: vmv1r.v v0, v12 7949; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 7950; CHECK-NEXT: vmv1r.v v0, v12 7951; CHECK-NEXT: ret 7952 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7953 ret <vscale x 2 x i1> %1 7954} 7955 7956define <vscale x 2 x i1> @fcmp_oge_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7957; CHECK-LABEL: fcmp_oge_vf_nxv2f64: 7958; CHECK: # %bb.0: 7959; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7960; CHECK-NEXT: vfmv.v.f v10, fa0 7961; CHECK-NEXT: vmfeq.vf v12, v10, fa0 7962; CHECK-NEXT: vmfeq.vv v10, v8, v8 7963; CHECK-NEXT: vmand.mm v10, v12, v10 7964; CHECK-NEXT: vmv1r.v v0, v10 7965; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 7966; CHECK-NEXT: vmv1r.v v0, v10 7967; CHECK-NEXT: ret 7968 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7969 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7970 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7971 ret <vscale x 2 x i1> %1 7972} 7973 7974define <vscale x 2 x i1> @fcmp_oge_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 7975; CHECK-LABEL: fcmp_oge_fv_nxv2f64: 7976; CHECK: # %bb.0: 7977; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7978; CHECK-NEXT: vfmv.v.f v10, fa0 7979; CHECK-NEXT: vmfeq.vf v12, v10, fa0 7980; CHECK-NEXT: vmfeq.vv v10, v8, v8 7981; CHECK-NEXT: vmand.mm v10, v10, v12 7982; CHECK-NEXT: vmv1r.v v0, v10 7983; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 7984; CHECK-NEXT: vmv1r.v v0, v10 7985; CHECK-NEXT: ret 7986 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 7987 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 7988 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7989 ret <vscale x 2 x i1> %1 7990} 7991 7992define <vscale x 2 x i1> @fcmp_olt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 7993; CHECK-LABEL: fcmp_olt_vv_nxv2f64: 7994; CHECK: # %bb.0: 7995; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 7996; CHECK-NEXT: vmfeq.vv v12, v10, v10 7997; CHECK-NEXT: vmfeq.vv v13, v8, v8 7998; CHECK-NEXT: vmand.mm v12, v13, v12 7999; CHECK-NEXT: vmv1r.v v0, v12 8000; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 8001; CHECK-NEXT: vmv1r.v v0, v12 8002; CHECK-NEXT: ret 8003 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 8004 ret <vscale x 2 x i1> %1 8005} 8006 8007define <vscale x 2 x i1> @fcmp_olt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8008; CHECK-LABEL: fcmp_olt_vf_nxv2f64: 8009; CHECK: # %bb.0: 8010; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8011; CHECK-NEXT: vfmv.v.f v10, fa0 8012; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8013; CHECK-NEXT: vmfeq.vv v10, v8, v8 8014; CHECK-NEXT: vmand.mm v10, v10, v12 8015; CHECK-NEXT: vmv1r.v v0, v10 8016; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8017; CHECK-NEXT: vmv1r.v v0, v10 8018; CHECK-NEXT: ret 8019 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8020 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8021 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 8022 ret <vscale x 2 x i1> %1 8023} 8024 8025define <vscale x 2 x i1> @fcmp_olt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8026; CHECK-LABEL: fcmp_olt_fv_nxv2f64: 8027; CHECK: # %bb.0: 8028; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8029; CHECK-NEXT: vfmv.v.f v10, fa0 8030; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8031; CHECK-NEXT: vmfeq.vv v10, v8, v8 8032; CHECK-NEXT: vmand.mm v10, v12, v10 8033; CHECK-NEXT: vmv1r.v v0, v10 8034; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8035; CHECK-NEXT: vmv1r.v v0, v10 8036; CHECK-NEXT: ret 8037 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8038 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8039 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 8040 ret <vscale x 2 x i1> %1 8041} 8042 8043define <vscale x 2 x i1> @fcmp_ole_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8044; CHECK-LABEL: fcmp_ole_vv_nxv2f64: 8045; CHECK: # %bb.0: 8046; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8047; CHECK-NEXT: vmfeq.vv v12, v10, v10 8048; CHECK-NEXT: vmfeq.vv v13, v8, v8 8049; CHECK-NEXT: vmand.mm v12, v13, v12 8050; CHECK-NEXT: vmv1r.v v0, v12 8051; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 8052; CHECK-NEXT: vmv1r.v v0, v12 8053; CHECK-NEXT: ret 8054 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 8055 ret <vscale x 2 x i1> %1 8056} 8057 8058define <vscale x 2 x i1> @fcmp_ole_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8059; CHECK-LABEL: fcmp_ole_vf_nxv2f64: 8060; CHECK: # %bb.0: 8061; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8062; CHECK-NEXT: vfmv.v.f v10, fa0 8063; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8064; CHECK-NEXT: vmfeq.vv v10, v8, v8 8065; CHECK-NEXT: vmand.mm v10, v10, v12 8066; CHECK-NEXT: vmv1r.v v0, v10 8067; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8068; CHECK-NEXT: vmv1r.v v0, v10 8069; CHECK-NEXT: ret 8070 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8071 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8072 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 8073 ret <vscale x 2 x i1> %1 8074} 8075 8076define <vscale x 2 x i1> @fcmp_ole_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8077; CHECK-LABEL: fcmp_ole_fv_nxv2f64: 8078; CHECK: # %bb.0: 8079; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8080; CHECK-NEXT: vfmv.v.f v10, fa0 8081; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8082; CHECK-NEXT: vmfeq.vv v10, v8, v8 8083; CHECK-NEXT: vmand.mm v10, v12, v10 8084; CHECK-NEXT: vmv1r.v v0, v10 8085; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8086; CHECK-NEXT: vmv1r.v v0, v10 8087; CHECK-NEXT: ret 8088 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8089 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8090 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 8091 ret <vscale x 2 x i1> %1 8092} 8093 8094define <vscale x 2 x i1> @fcmp_one_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8095; CHECK-LABEL: fcmp_one_vv_nxv2f64: 8096; CHECK: # %bb.0: 8097; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8098; CHECK-NEXT: vmfeq.vv v12, v10, v10 8099; CHECK-NEXT: vmfeq.vv v13, v8, v8 8100; CHECK-NEXT: vmand.mm v12, v13, v12 8101; CHECK-NEXT: vmv1r.v v13, v12 8102; CHECK-NEXT: vmv1r.v v0, v12 8103; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 8104; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8105; CHECK-NEXT: vmor.mm v0, v12, v13 8106; CHECK-NEXT: ret 8107 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 8108 ret <vscale x 2 x i1> %1 8109} 8110 8111define <vscale x 2 x i1> @fcmp_one_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8112; CHECK-LABEL: fcmp_one_vf_nxv2f64: 8113; CHECK: # %bb.0: 8114; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8115; CHECK-NEXT: vfmv.v.f v10, fa0 8116; CHECK-NEXT: vmfeq.vv v12, v8, v8 8117; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8118; CHECK-NEXT: vmand.mm v10, v12, v13 8119; CHECK-NEXT: vmv1r.v v11, v10 8120; CHECK-NEXT: vmv1r.v v0, v10 8121; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 8122; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8123; CHECK-NEXT: vmor.mm v0, v10, v11 8124; CHECK-NEXT: ret 8125 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8126 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8127 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 8128 ret <vscale x 2 x i1> %1 8129} 8130 8131define <vscale x 2 x i1> @fcmp_one_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8132; CHECK-LABEL: fcmp_one_fv_nxv2f64: 8133; CHECK: # %bb.0: 8134; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8135; CHECK-NEXT: vfmv.v.f v10, fa0 8136; CHECK-NEXT: vmfeq.vv v12, v8, v8 8137; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8138; CHECK-NEXT: vmand.mm v10, v13, v12 8139; CHECK-NEXT: vmv1r.v v11, v10 8140; CHECK-NEXT: vmv1r.v v0, v10 8141; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 8142; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8143; CHECK-NEXT: vmor.mm v0, v10, v11 8144; CHECK-NEXT: ret 8145 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8146 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8147 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 8148 ret <vscale x 2 x i1> %1 8149} 8150 8151define <vscale x 2 x i1> @fcmp_ord_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8152; CHECK-LABEL: fcmp_ord_vv_nxv2f64: 8153; CHECK: # %bb.0: 8154; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8155; CHECK-NEXT: vmfeq.vv v12, v10, v10 8156; CHECK-NEXT: vmfeq.vv v10, v8, v8 8157; CHECK-NEXT: vmand.mm v0, v10, v12 8158; CHECK-NEXT: ret 8159 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 8160 ret <vscale x 2 x i1> %1 8161} 8162 8163define <vscale x 2 x i1> @fcmp_ord_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8164; CHECK-LABEL: fcmp_ord_vf_nxv2f64: 8165; CHECK: # %bb.0: 8166; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8167; CHECK-NEXT: vfmv.v.f v10, fa0 8168; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8169; CHECK-NEXT: vmfeq.vv v10, v8, v8 8170; CHECK-NEXT: vmand.mm v0, v10, v12 8171; CHECK-NEXT: ret 8172 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8173 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8174 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 8175 ret <vscale x 2 x i1> %1 8176} 8177 8178define <vscale x 2 x i1> @fcmp_ord_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8179; CHECK-LABEL: fcmp_ord_fv_nxv2f64: 8180; CHECK: # %bb.0: 8181; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8182; CHECK-NEXT: vfmv.v.f v10, fa0 8183; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8184; CHECK-NEXT: vmfeq.vv v10, v8, v8 8185; CHECK-NEXT: vmand.mm v0, v12, v10 8186; CHECK-NEXT: ret 8187 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8188 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8189 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 8190 ret <vscale x 2 x i1> %1 8191} 8192 8193define <vscale x 2 x i1> @fcmp_ueq_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8194; CHECK-LABEL: fcmp_ueq_vv_nxv2f64: 8195; CHECK: # %bb.0: 8196; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8197; CHECK-NEXT: vmfeq.vv v12, v10, v10 8198; CHECK-NEXT: vmfeq.vv v13, v8, v8 8199; CHECK-NEXT: vmand.mm v12, v13, v12 8200; CHECK-NEXT: vmv1r.v v13, v12 8201; CHECK-NEXT: vmv1r.v v0, v12 8202; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 8203; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8204; CHECK-NEXT: vmnor.mm v0, v12, v13 8205; CHECK-NEXT: ret 8206 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8207 ret <vscale x 2 x i1> %1 8208} 8209 8210define <vscale x 2 x i1> @fcmp_ueq_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8211; CHECK-LABEL: fcmp_ueq_vf_nxv2f64: 8212; CHECK: # %bb.0: 8213; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8214; CHECK-NEXT: vfmv.v.f v10, fa0 8215; CHECK-NEXT: vmfeq.vv v12, v8, v8 8216; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8217; CHECK-NEXT: vmand.mm v10, v12, v13 8218; CHECK-NEXT: vmv1r.v v11, v10 8219; CHECK-NEXT: vmv1r.v v0, v10 8220; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 8221; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8222; CHECK-NEXT: vmnor.mm v0, v10, v11 8223; CHECK-NEXT: ret 8224 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8225 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8226 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8227 ret <vscale x 2 x i1> %1 8228} 8229 8230define <vscale x 2 x i1> @fcmp_ueq_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8231; CHECK-LABEL: fcmp_ueq_fv_nxv2f64: 8232; CHECK: # %bb.0: 8233; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8234; CHECK-NEXT: vfmv.v.f v10, fa0 8235; CHECK-NEXT: vmfeq.vv v12, v8, v8 8236; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8237; CHECK-NEXT: vmand.mm v10, v13, v12 8238; CHECK-NEXT: vmv1r.v v11, v10 8239; CHECK-NEXT: vmv1r.v v0, v10 8240; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 8241; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8242; CHECK-NEXT: vmnor.mm v0, v10, v11 8243; CHECK-NEXT: ret 8244 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8245 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8246 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8247 ret <vscale x 2 x i1> %1 8248} 8249 8250define <vscale x 2 x i1> @fcmp_ugt_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8251; CHECK-LABEL: fcmp_ugt_vv_nxv2f64: 8252; CHECK: # %bb.0: 8253; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8254; CHECK-NEXT: vmfeq.vv v12, v10, v10 8255; CHECK-NEXT: vmfeq.vv v13, v8, v8 8256; CHECK-NEXT: vmand.mm v12, v13, v12 8257; CHECK-NEXT: vmv1r.v v0, v12 8258; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 8259; CHECK-NEXT: vmnot.m v0, v12 8260; CHECK-NEXT: ret 8261 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8262 ret <vscale x 2 x i1> %1 8263} 8264 8265define <vscale x 2 x i1> @fcmp_ugt_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8266; CHECK-LABEL: fcmp_ugt_vf_nxv2f64: 8267; CHECK: # %bb.0: 8268; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8269; CHECK-NEXT: vfmv.v.f v10, fa0 8270; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8271; CHECK-NEXT: vmfeq.vv v10, v8, v8 8272; CHECK-NEXT: vmand.mm v10, v10, v12 8273; CHECK-NEXT: vmv1r.v v0, v10 8274; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8275; CHECK-NEXT: vmnot.m v0, v10 8276; CHECK-NEXT: ret 8277 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8278 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8279 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8280 ret <vscale x 2 x i1> %1 8281} 8282 8283define <vscale x 2 x i1> @fcmp_ugt_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8284; CHECK-LABEL: fcmp_ugt_fv_nxv2f64: 8285; CHECK: # %bb.0: 8286; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8287; CHECK-NEXT: vfmv.v.f v10, fa0 8288; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8289; CHECK-NEXT: vmfeq.vv v10, v8, v8 8290; CHECK-NEXT: vmand.mm v10, v12, v10 8291; CHECK-NEXT: vmv1r.v v0, v10 8292; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8293; CHECK-NEXT: vmnot.m v0, v10 8294; CHECK-NEXT: ret 8295 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8296 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8297 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8298 ret <vscale x 2 x i1> %1 8299} 8300 8301define <vscale x 2 x i1> @fcmp_uge_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8302; CHECK-LABEL: fcmp_uge_vv_nxv2f64: 8303; CHECK: # %bb.0: 8304; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8305; CHECK-NEXT: vmfeq.vv v12, v10, v10 8306; CHECK-NEXT: vmfeq.vv v13, v8, v8 8307; CHECK-NEXT: vmand.mm v12, v13, v12 8308; CHECK-NEXT: vmv1r.v v0, v12 8309; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 8310; CHECK-NEXT: vmnot.m v0, v12 8311; CHECK-NEXT: ret 8312 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 8313 ret <vscale x 2 x i1> %1 8314} 8315 8316define <vscale x 2 x i1> @fcmp_uge_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8317; CHECK-LABEL: fcmp_uge_vf_nxv2f64: 8318; CHECK: # %bb.0: 8319; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8320; CHECK-NEXT: vfmv.v.f v10, fa0 8321; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8322; CHECK-NEXT: vmfeq.vv v10, v8, v8 8323; CHECK-NEXT: vmand.mm v10, v10, v12 8324; CHECK-NEXT: vmv1r.v v0, v10 8325; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8326; CHECK-NEXT: vmnot.m v0, v10 8327; CHECK-NEXT: ret 8328 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8329 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8330 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 8331 ret <vscale x 2 x i1> %1 8332} 8333 8334define <vscale x 2 x i1> @fcmp_uge_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8335; CHECK-LABEL: fcmp_uge_fv_nxv2f64: 8336; CHECK: # %bb.0: 8337; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8338; CHECK-NEXT: vfmv.v.f v10, fa0 8339; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8340; CHECK-NEXT: vmfeq.vv v10, v8, v8 8341; CHECK-NEXT: vmand.mm v10, v12, v10 8342; CHECK-NEXT: vmv1r.v v0, v10 8343; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8344; CHECK-NEXT: vmnot.m v0, v10 8345; CHECK-NEXT: ret 8346 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8347 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8348 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 8349 ret <vscale x 2 x i1> %1 8350} 8351 8352define <vscale x 2 x i1> @fcmp_ult_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8353; CHECK-LABEL: fcmp_ult_vv_nxv2f64: 8354; CHECK: # %bb.0: 8355; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8356; CHECK-NEXT: vmfeq.vv v12, v8, v8 8357; CHECK-NEXT: vmfeq.vv v13, v10, v10 8358; CHECK-NEXT: vmand.mm v12, v13, v12 8359; CHECK-NEXT: vmv1r.v v0, v12 8360; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 8361; CHECK-NEXT: vmnot.m v0, v12 8362; CHECK-NEXT: ret 8363 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 8364 ret <vscale x 2 x i1> %1 8365} 8366 8367define <vscale x 2 x i1> @fcmp_ult_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8368; CHECK-LABEL: fcmp_ult_vf_nxv2f64: 8369; CHECK: # %bb.0: 8370; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8371; CHECK-NEXT: vfmv.v.f v10, fa0 8372; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8373; CHECK-NEXT: vmfeq.vv v10, v8, v8 8374; CHECK-NEXT: vmand.mm v10, v12, v10 8375; CHECK-NEXT: vmv1r.v v0, v10 8376; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8377; CHECK-NEXT: vmnot.m v0, v10 8378; CHECK-NEXT: ret 8379 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8380 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8381 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 8382 ret <vscale x 2 x i1> %1 8383} 8384 8385define <vscale x 2 x i1> @fcmp_ult_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8386; CHECK-LABEL: fcmp_ult_fv_nxv2f64: 8387; CHECK: # %bb.0: 8388; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8389; CHECK-NEXT: vfmv.v.f v10, fa0 8390; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8391; CHECK-NEXT: vmfeq.vv v10, v8, v8 8392; CHECK-NEXT: vmand.mm v10, v10, v12 8393; CHECK-NEXT: vmv1r.v v0, v10 8394; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8395; CHECK-NEXT: vmnot.m v0, v10 8396; CHECK-NEXT: ret 8397 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8398 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8399 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 8400 ret <vscale x 2 x i1> %1 8401} 8402 8403define <vscale x 2 x i1> @fcmp_ule_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8404; CHECK-LABEL: fcmp_ule_vv_nxv2f64: 8405; CHECK: # %bb.0: 8406; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8407; CHECK-NEXT: vmfeq.vv v12, v8, v8 8408; CHECK-NEXT: vmfeq.vv v13, v10, v10 8409; CHECK-NEXT: vmand.mm v12, v13, v12 8410; CHECK-NEXT: vmv1r.v v0, v12 8411; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8412; CHECK-NEXT: vmnot.m v0, v12 8413; CHECK-NEXT: ret 8414 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 8415 ret <vscale x 2 x i1> %1 8416} 8417 8418define <vscale x 2 x i1> @fcmp_ule_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8419; CHECK-LABEL: fcmp_ule_vf_nxv2f64: 8420; CHECK: # %bb.0: 8421; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8422; CHECK-NEXT: vfmv.v.f v10, fa0 8423; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8424; CHECK-NEXT: vmfeq.vv v10, v8, v8 8425; CHECK-NEXT: vmand.mm v10, v12, v10 8426; CHECK-NEXT: vmv1r.v v0, v10 8427; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8428; CHECK-NEXT: vmnot.m v0, v10 8429; CHECK-NEXT: ret 8430 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8431 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8432 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 8433 ret <vscale x 2 x i1> %1 8434} 8435 8436define <vscale x 2 x i1> @fcmp_ule_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8437; CHECK-LABEL: fcmp_ule_fv_nxv2f64: 8438; CHECK: # %bb.0: 8439; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 8440; CHECK-NEXT: vfmv.v.f v10, fa0 8441; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8442; CHECK-NEXT: vmfeq.vv v10, v8, v8 8443; CHECK-NEXT: vmand.mm v10, v10, v12 8444; CHECK-NEXT: vmv1r.v v0, v10 8445; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8446; CHECK-NEXT: vmnot.m v0, v10 8447; CHECK-NEXT: ret 8448 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8449 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8450 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 8451 ret <vscale x 2 x i1> %1 8452} 8453 8454define <vscale x 2 x i1> @fcmp_une_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8455; CHECK-LABEL: fcmp_une_vv_nxv2f64: 8456; CHECK: # %bb.0: 8457; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8458; CHECK-NEXT: vmfne.vv v0, v8, v10 8459; CHECK-NEXT: ret 8460 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 8461 ret <vscale x 2 x i1> %1 8462} 8463 8464define <vscale x 2 x i1> @fcmp_une_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8465; CHECK-LABEL: fcmp_une_vf_nxv2f64: 8466; CHECK: # %bb.0: 8467; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8468; CHECK-NEXT: vmfne.vf v0, v8, fa0 8469; CHECK-NEXT: ret 8470 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8471 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8472 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 8473 ret <vscale x 2 x i1> %1 8474} 8475 8476define <vscale x 2 x i1> @fcmp_une_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8477; CHECK-LABEL: fcmp_une_fv_nxv2f64: 8478; CHECK: # %bb.0: 8479; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8480; CHECK-NEXT: vmfne.vf v0, v8, fa0 8481; CHECK-NEXT: ret 8482 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8483 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8484 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 8485 ret <vscale x 2 x i1> %1 8486} 8487 8488define <vscale x 2 x i1> @fcmp_uno_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) nounwind strictfp { 8489; CHECK-LABEL: fcmp_uno_vv_nxv2f64: 8490; CHECK: # %bb.0: 8491; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8492; CHECK-NEXT: vmfne.vv v12, v10, v10 8493; CHECK-NEXT: vmfne.vv v10, v8, v8 8494; CHECK-NEXT: vmor.mm v0, v10, v12 8495; CHECK-NEXT: ret 8496 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 8497 ret <vscale x 2 x i1> %1 8498} 8499 8500define <vscale x 2 x i1> @fcmp_uno_vf_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8501; CHECK-LABEL: fcmp_uno_vf_nxv2f64: 8502; CHECK: # %bb.0: 8503; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8504; CHECK-NEXT: vfmv.v.f v10, fa0 8505; CHECK-NEXT: vmfne.vf v12, v10, fa0 8506; CHECK-NEXT: vmfne.vv v10, v8, v8 8507; CHECK-NEXT: vmor.mm v0, v10, v12 8508; CHECK-NEXT: ret 8509 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8510 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8511 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 8512 ret <vscale x 2 x i1> %1 8513} 8514 8515define <vscale x 2 x i1> @fcmp_uno_fv_nxv2f64(<vscale x 2 x double> %va, double %b) nounwind strictfp { 8516; CHECK-LABEL: fcmp_uno_fv_nxv2f64: 8517; CHECK: # %bb.0: 8518; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 8519; CHECK-NEXT: vfmv.v.f v10, fa0 8520; CHECK-NEXT: vmfne.vf v12, v10, fa0 8521; CHECK-NEXT: vmfne.vv v10, v8, v8 8522; CHECK-NEXT: vmor.mm v0, v12, v10 8523; CHECK-NEXT: ret 8524 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0 8525 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 8526 %1 = call <vscale x 2 x i1> @llvm.experimental.constrained.fcmp.nxv2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 8527 ret <vscale x 2 x i1> %1 8528} 8529 8530declare <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata) 8531define <vscale x 4 x i1> @fcmp_oeq_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8532; CHECK-LABEL: fcmp_oeq_vv_nxv4f64: 8533; CHECK: # %bb.0: 8534; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8535; CHECK-NEXT: vmfeq.vv v0, v8, v12 8536; CHECK-NEXT: ret 8537 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8538 ret <vscale x 4 x i1> %1 8539} 8540 8541define <vscale x 4 x i1> @fcmp_oeq_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8542; CHECK-LABEL: fcmp_oeq_vf_nxv4f64: 8543; CHECK: # %bb.0: 8544; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8545; CHECK-NEXT: vmfeq.vf v0, v8, fa0 8546; CHECK-NEXT: ret 8547 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8548 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8549 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8550 ret <vscale x 4 x i1> %1 8551} 8552 8553define <vscale x 4 x i1> @fcmp_oeq_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8554; CHECK-LABEL: fcmp_oeq_fv_nxv4f64: 8555; CHECK: # %bb.0: 8556; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8557; CHECK-NEXT: vmfeq.vf v0, v8, fa0 8558; CHECK-NEXT: ret 8559 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8560 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8561 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8562 ret <vscale x 4 x i1> %1 8563} 8564 8565define <vscale x 4 x i1> @fcmp_ogt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8566; CHECK-LABEL: fcmp_ogt_vv_nxv4f64: 8567; CHECK: # %bb.0: 8568; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8569; CHECK-NEXT: vmfeq.vv v16, v8, v8 8570; CHECK-NEXT: vmfeq.vv v17, v12, v12 8571; CHECK-NEXT: vmand.mm v16, v17, v16 8572; CHECK-NEXT: vmv1r.v v0, v16 8573; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 8574; CHECK-NEXT: vmv1r.v v0, v16 8575; CHECK-NEXT: ret 8576 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8577 ret <vscale x 4 x i1> %1 8578} 8579 8580define <vscale x 4 x i1> @fcmp_ogt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8581; CHECK-LABEL: fcmp_ogt_vf_nxv4f64: 8582; CHECK: # %bb.0: 8583; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8584; CHECK-NEXT: vfmv.v.f v12, fa0 8585; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8586; CHECK-NEXT: vmfeq.vv v12, v8, v8 8587; CHECK-NEXT: vmand.mm v12, v16, v12 8588; CHECK-NEXT: vmv1r.v v0, v12 8589; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 8590; CHECK-NEXT: vmv1r.v v0, v12 8591; CHECK-NEXT: ret 8592 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8593 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8594 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8595 ret <vscale x 4 x i1> %1 8596} 8597 8598define <vscale x 4 x i1> @fcmp_ogt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8599; CHECK-LABEL: fcmp_ogt_fv_nxv4f64: 8600; CHECK: # %bb.0: 8601; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8602; CHECK-NEXT: vfmv.v.f v12, fa0 8603; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8604; CHECK-NEXT: vmfeq.vv v12, v8, v8 8605; CHECK-NEXT: vmand.mm v12, v12, v16 8606; CHECK-NEXT: vmv1r.v v0, v12 8607; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 8608; CHECK-NEXT: vmv1r.v v0, v12 8609; CHECK-NEXT: ret 8610 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8611 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8612 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8613 ret <vscale x 4 x i1> %1 8614} 8615 8616define <vscale x 4 x i1> @fcmp_oge_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8617; CHECK-LABEL: fcmp_oge_vv_nxv4f64: 8618; CHECK: # %bb.0: 8619; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8620; CHECK-NEXT: vmfeq.vv v16, v8, v8 8621; CHECK-NEXT: vmfeq.vv v17, v12, v12 8622; CHECK-NEXT: vmand.mm v16, v17, v16 8623; CHECK-NEXT: vmv1r.v v0, v16 8624; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 8625; CHECK-NEXT: vmv1r.v v0, v16 8626; CHECK-NEXT: ret 8627 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 8628 ret <vscale x 4 x i1> %1 8629} 8630 8631define <vscale x 4 x i1> @fcmp_oge_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8632; CHECK-LABEL: fcmp_oge_vf_nxv4f64: 8633; CHECK: # %bb.0: 8634; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8635; CHECK-NEXT: vfmv.v.f v12, fa0 8636; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8637; CHECK-NEXT: vmfeq.vv v12, v8, v8 8638; CHECK-NEXT: vmand.mm v12, v16, v12 8639; CHECK-NEXT: vmv1r.v v0, v12 8640; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 8641; CHECK-NEXT: vmv1r.v v0, v12 8642; CHECK-NEXT: ret 8643 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8644 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8645 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 8646 ret <vscale x 4 x i1> %1 8647} 8648 8649define <vscale x 4 x i1> @fcmp_oge_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8650; CHECK-LABEL: fcmp_oge_fv_nxv4f64: 8651; CHECK: # %bb.0: 8652; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8653; CHECK-NEXT: vfmv.v.f v12, fa0 8654; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8655; CHECK-NEXT: vmfeq.vv v12, v8, v8 8656; CHECK-NEXT: vmand.mm v12, v12, v16 8657; CHECK-NEXT: vmv1r.v v0, v12 8658; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 8659; CHECK-NEXT: vmv1r.v v0, v12 8660; CHECK-NEXT: ret 8661 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8662 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8663 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 8664 ret <vscale x 4 x i1> %1 8665} 8666 8667define <vscale x 4 x i1> @fcmp_olt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8668; CHECK-LABEL: fcmp_olt_vv_nxv4f64: 8669; CHECK: # %bb.0: 8670; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8671; CHECK-NEXT: vmfeq.vv v16, v12, v12 8672; CHECK-NEXT: vmfeq.vv v17, v8, v8 8673; CHECK-NEXT: vmand.mm v16, v17, v16 8674; CHECK-NEXT: vmv1r.v v0, v16 8675; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 8676; CHECK-NEXT: vmv1r.v v0, v16 8677; CHECK-NEXT: ret 8678 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 8679 ret <vscale x 4 x i1> %1 8680} 8681 8682define <vscale x 4 x i1> @fcmp_olt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8683; CHECK-LABEL: fcmp_olt_vf_nxv4f64: 8684; CHECK: # %bb.0: 8685; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8686; CHECK-NEXT: vfmv.v.f v12, fa0 8687; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8688; CHECK-NEXT: vmfeq.vv v12, v8, v8 8689; CHECK-NEXT: vmand.mm v12, v12, v16 8690; CHECK-NEXT: vmv1r.v v0, v12 8691; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 8692; CHECK-NEXT: vmv1r.v v0, v12 8693; CHECK-NEXT: ret 8694 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8695 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8696 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 8697 ret <vscale x 4 x i1> %1 8698} 8699 8700define <vscale x 4 x i1> @fcmp_olt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8701; CHECK-LABEL: fcmp_olt_fv_nxv4f64: 8702; CHECK: # %bb.0: 8703; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8704; CHECK-NEXT: vfmv.v.f v12, fa0 8705; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8706; CHECK-NEXT: vmfeq.vv v12, v8, v8 8707; CHECK-NEXT: vmand.mm v12, v16, v12 8708; CHECK-NEXT: vmv1r.v v0, v12 8709; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 8710; CHECK-NEXT: vmv1r.v v0, v12 8711; CHECK-NEXT: ret 8712 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8713 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8714 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 8715 ret <vscale x 4 x i1> %1 8716} 8717 8718define <vscale x 4 x i1> @fcmp_ole_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8719; CHECK-LABEL: fcmp_ole_vv_nxv4f64: 8720; CHECK: # %bb.0: 8721; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8722; CHECK-NEXT: vmfeq.vv v16, v12, v12 8723; CHECK-NEXT: vmfeq.vv v17, v8, v8 8724; CHECK-NEXT: vmand.mm v16, v17, v16 8725; CHECK-NEXT: vmv1r.v v0, v16 8726; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 8727; CHECK-NEXT: vmv1r.v v0, v16 8728; CHECK-NEXT: ret 8729 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 8730 ret <vscale x 4 x i1> %1 8731} 8732 8733define <vscale x 4 x i1> @fcmp_ole_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8734; CHECK-LABEL: fcmp_ole_vf_nxv4f64: 8735; CHECK: # %bb.0: 8736; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8737; CHECK-NEXT: vfmv.v.f v12, fa0 8738; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8739; CHECK-NEXT: vmfeq.vv v12, v8, v8 8740; CHECK-NEXT: vmand.mm v12, v12, v16 8741; CHECK-NEXT: vmv1r.v v0, v12 8742; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 8743; CHECK-NEXT: vmv1r.v v0, v12 8744; CHECK-NEXT: ret 8745 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8746 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8747 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 8748 ret <vscale x 4 x i1> %1 8749} 8750 8751define <vscale x 4 x i1> @fcmp_ole_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8752; CHECK-LABEL: fcmp_ole_fv_nxv4f64: 8753; CHECK: # %bb.0: 8754; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8755; CHECK-NEXT: vfmv.v.f v12, fa0 8756; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8757; CHECK-NEXT: vmfeq.vv v12, v8, v8 8758; CHECK-NEXT: vmand.mm v12, v16, v12 8759; CHECK-NEXT: vmv1r.v v0, v12 8760; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 8761; CHECK-NEXT: vmv1r.v v0, v12 8762; CHECK-NEXT: ret 8763 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8764 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8765 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 8766 ret <vscale x 4 x i1> %1 8767} 8768 8769define <vscale x 4 x i1> @fcmp_one_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8770; CHECK-LABEL: fcmp_one_vv_nxv4f64: 8771; CHECK: # %bb.0: 8772; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8773; CHECK-NEXT: vmfeq.vv v16, v12, v12 8774; CHECK-NEXT: vmfeq.vv v17, v8, v8 8775; CHECK-NEXT: vmand.mm v16, v17, v16 8776; CHECK-NEXT: vmv1r.v v17, v16 8777; CHECK-NEXT: vmv1r.v v0, v16 8778; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 8779; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 8780; CHECK-NEXT: vmor.mm v0, v16, v17 8781; CHECK-NEXT: ret 8782 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 8783 ret <vscale x 4 x i1> %1 8784} 8785 8786define <vscale x 4 x i1> @fcmp_one_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8787; CHECK-LABEL: fcmp_one_vf_nxv4f64: 8788; CHECK: # %bb.0: 8789; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8790; CHECK-NEXT: vfmv.v.f v12, fa0 8791; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8792; CHECK-NEXT: vmfeq.vv v12, v8, v8 8793; CHECK-NEXT: vmand.mm v12, v12, v16 8794; CHECK-NEXT: vmv1r.v v13, v12 8795; CHECK-NEXT: vmv1r.v v0, v12 8796; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 8797; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 8798; CHECK-NEXT: vmor.mm v0, v12, v13 8799; CHECK-NEXT: ret 8800 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8801 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8802 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 8803 ret <vscale x 4 x i1> %1 8804} 8805 8806define <vscale x 4 x i1> @fcmp_one_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8807; CHECK-LABEL: fcmp_one_fv_nxv4f64: 8808; CHECK: # %bb.0: 8809; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8810; CHECK-NEXT: vfmv.v.f v12, fa0 8811; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8812; CHECK-NEXT: vmfeq.vv v12, v8, v8 8813; CHECK-NEXT: vmand.mm v12, v16, v12 8814; CHECK-NEXT: vmv1r.v v13, v12 8815; CHECK-NEXT: vmv1r.v v0, v12 8816; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 8817; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 8818; CHECK-NEXT: vmor.mm v0, v12, v13 8819; CHECK-NEXT: ret 8820 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8821 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8822 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 8823 ret <vscale x 4 x i1> %1 8824} 8825 8826define <vscale x 4 x i1> @fcmp_ord_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8827; CHECK-LABEL: fcmp_ord_vv_nxv4f64: 8828; CHECK: # %bb.0: 8829; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8830; CHECK-NEXT: vmfeq.vv v16, v12, v12 8831; CHECK-NEXT: vmfeq.vv v12, v8, v8 8832; CHECK-NEXT: vmand.mm v0, v12, v16 8833; CHECK-NEXT: ret 8834 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 8835 ret <vscale x 4 x i1> %1 8836} 8837 8838define <vscale x 4 x i1> @fcmp_ord_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8839; CHECK-LABEL: fcmp_ord_vf_nxv4f64: 8840; CHECK: # %bb.0: 8841; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8842; CHECK-NEXT: vfmv.v.f v12, fa0 8843; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8844; CHECK-NEXT: vmfeq.vv v12, v8, v8 8845; CHECK-NEXT: vmand.mm v0, v12, v16 8846; CHECK-NEXT: ret 8847 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8848 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8849 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 8850 ret <vscale x 4 x i1> %1 8851} 8852 8853define <vscale x 4 x i1> @fcmp_ord_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8854; CHECK-LABEL: fcmp_ord_fv_nxv4f64: 8855; CHECK: # %bb.0: 8856; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 8857; CHECK-NEXT: vfmv.v.f v12, fa0 8858; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8859; CHECK-NEXT: vmfeq.vv v12, v8, v8 8860; CHECK-NEXT: vmand.mm v0, v16, v12 8861; CHECK-NEXT: ret 8862 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8863 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8864 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 8865 ret <vscale x 4 x i1> %1 8866} 8867 8868define <vscale x 4 x i1> @fcmp_ueq_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8869; CHECK-LABEL: fcmp_ueq_vv_nxv4f64: 8870; CHECK: # %bb.0: 8871; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8872; CHECK-NEXT: vmfeq.vv v16, v12, v12 8873; CHECK-NEXT: vmfeq.vv v17, v8, v8 8874; CHECK-NEXT: vmand.mm v16, v17, v16 8875; CHECK-NEXT: vmv1r.v v17, v16 8876; CHECK-NEXT: vmv1r.v v0, v16 8877; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 8878; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 8879; CHECK-NEXT: vmnor.mm v0, v16, v17 8880; CHECK-NEXT: ret 8881 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8882 ret <vscale x 4 x i1> %1 8883} 8884 8885define <vscale x 4 x i1> @fcmp_ueq_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8886; CHECK-LABEL: fcmp_ueq_vf_nxv4f64: 8887; CHECK: # %bb.0: 8888; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8889; CHECK-NEXT: vfmv.v.f v12, fa0 8890; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8891; CHECK-NEXT: vmfeq.vv v12, v8, v8 8892; CHECK-NEXT: vmand.mm v12, v12, v16 8893; CHECK-NEXT: vmv1r.v v13, v12 8894; CHECK-NEXT: vmv1r.v v0, v12 8895; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 8896; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 8897; CHECK-NEXT: vmnor.mm v0, v12, v13 8898; CHECK-NEXT: ret 8899 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8900 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8901 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8902 ret <vscale x 4 x i1> %1 8903} 8904 8905define <vscale x 4 x i1> @fcmp_ueq_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8906; CHECK-LABEL: fcmp_ueq_fv_nxv4f64: 8907; CHECK: # %bb.0: 8908; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8909; CHECK-NEXT: vfmv.v.f v12, fa0 8910; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8911; CHECK-NEXT: vmfeq.vv v12, v8, v8 8912; CHECK-NEXT: vmand.mm v12, v16, v12 8913; CHECK-NEXT: vmv1r.v v13, v12 8914; CHECK-NEXT: vmv1r.v v0, v12 8915; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 8916; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 8917; CHECK-NEXT: vmnor.mm v0, v12, v13 8918; CHECK-NEXT: ret 8919 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8920 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8921 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8922 ret <vscale x 4 x i1> %1 8923} 8924 8925define <vscale x 4 x i1> @fcmp_ugt_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8926; CHECK-LABEL: fcmp_ugt_vv_nxv4f64: 8927; CHECK: # %bb.0: 8928; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8929; CHECK-NEXT: vmfeq.vv v16, v12, v12 8930; CHECK-NEXT: vmfeq.vv v17, v8, v8 8931; CHECK-NEXT: vmand.mm v16, v17, v16 8932; CHECK-NEXT: vmv1r.v v0, v16 8933; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 8934; CHECK-NEXT: vmnot.m v0, v16 8935; CHECK-NEXT: ret 8936 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8937 ret <vscale x 4 x i1> %1 8938} 8939 8940define <vscale x 4 x i1> @fcmp_ugt_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8941; CHECK-LABEL: fcmp_ugt_vf_nxv4f64: 8942; CHECK: # %bb.0: 8943; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8944; CHECK-NEXT: vfmv.v.f v12, fa0 8945; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8946; CHECK-NEXT: vmfeq.vv v12, v8, v8 8947; CHECK-NEXT: vmand.mm v12, v12, v16 8948; CHECK-NEXT: vmv1r.v v0, v12 8949; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 8950; CHECK-NEXT: vmnot.m v0, v12 8951; CHECK-NEXT: ret 8952 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8953 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8954 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8955 ret <vscale x 4 x i1> %1 8956} 8957 8958define <vscale x 4 x i1> @fcmp_ugt_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8959; CHECK-LABEL: fcmp_ugt_fv_nxv4f64: 8960; CHECK: # %bb.0: 8961; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8962; CHECK-NEXT: vfmv.v.f v12, fa0 8963; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8964; CHECK-NEXT: vmfeq.vv v12, v8, v8 8965; CHECK-NEXT: vmand.mm v12, v16, v12 8966; CHECK-NEXT: vmv1r.v v0, v12 8967; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 8968; CHECK-NEXT: vmnot.m v0, v12 8969; CHECK-NEXT: ret 8970 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 8971 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 8972 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8973 ret <vscale x 4 x i1> %1 8974} 8975 8976define <vscale x 4 x i1> @fcmp_uge_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 8977; CHECK-LABEL: fcmp_uge_vv_nxv4f64: 8978; CHECK: # %bb.0: 8979; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8980; CHECK-NEXT: vmfeq.vv v16, v12, v12 8981; CHECK-NEXT: vmfeq.vv v17, v8, v8 8982; CHECK-NEXT: vmand.mm v16, v17, v16 8983; CHECK-NEXT: vmv1r.v v0, v16 8984; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 8985; CHECK-NEXT: vmnot.m v0, v16 8986; CHECK-NEXT: ret 8987 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 8988 ret <vscale x 4 x i1> %1 8989} 8990 8991define <vscale x 4 x i1> @fcmp_uge_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 8992; CHECK-LABEL: fcmp_uge_vf_nxv4f64: 8993; CHECK: # %bb.0: 8994; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 8995; CHECK-NEXT: vfmv.v.f v12, fa0 8996; CHECK-NEXT: vmfeq.vf v16, v12, fa0 8997; CHECK-NEXT: vmfeq.vv v12, v8, v8 8998; CHECK-NEXT: vmand.mm v12, v12, v16 8999; CHECK-NEXT: vmv1r.v v0, v12 9000; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9001; CHECK-NEXT: vmnot.m v0, v12 9002; CHECK-NEXT: ret 9003 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9004 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9005 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 9006 ret <vscale x 4 x i1> %1 9007} 9008 9009define <vscale x 4 x i1> @fcmp_uge_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9010; CHECK-LABEL: fcmp_uge_fv_nxv4f64: 9011; CHECK: # %bb.0: 9012; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9013; CHECK-NEXT: vfmv.v.f v12, fa0 9014; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9015; CHECK-NEXT: vmfeq.vv v12, v8, v8 9016; CHECK-NEXT: vmand.mm v12, v16, v12 9017; CHECK-NEXT: vmv1r.v v0, v12 9018; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9019; CHECK-NEXT: vmnot.m v0, v12 9020; CHECK-NEXT: ret 9021 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9022 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9023 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 9024 ret <vscale x 4 x i1> %1 9025} 9026 9027define <vscale x 4 x i1> @fcmp_ult_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 9028; CHECK-LABEL: fcmp_ult_vv_nxv4f64: 9029; CHECK: # %bb.0: 9030; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9031; CHECK-NEXT: vmfeq.vv v16, v8, v8 9032; CHECK-NEXT: vmfeq.vv v17, v12, v12 9033; CHECK-NEXT: vmand.mm v16, v17, v16 9034; CHECK-NEXT: vmv1r.v v0, v16 9035; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 9036; CHECK-NEXT: vmnot.m v0, v16 9037; CHECK-NEXT: ret 9038 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 9039 ret <vscale x 4 x i1> %1 9040} 9041 9042define <vscale x 4 x i1> @fcmp_ult_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9043; CHECK-LABEL: fcmp_ult_vf_nxv4f64: 9044; CHECK: # %bb.0: 9045; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9046; CHECK-NEXT: vfmv.v.f v12, fa0 9047; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9048; CHECK-NEXT: vmfeq.vv v12, v8, v8 9049; CHECK-NEXT: vmand.mm v12, v16, v12 9050; CHECK-NEXT: vmv1r.v v0, v12 9051; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 9052; CHECK-NEXT: vmnot.m v0, v12 9053; CHECK-NEXT: ret 9054 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9055 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9056 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 9057 ret <vscale x 4 x i1> %1 9058} 9059 9060define <vscale x 4 x i1> @fcmp_ult_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9061; CHECK-LABEL: fcmp_ult_fv_nxv4f64: 9062; CHECK: # %bb.0: 9063; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9064; CHECK-NEXT: vfmv.v.f v12, fa0 9065; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9066; CHECK-NEXT: vmfeq.vv v12, v8, v8 9067; CHECK-NEXT: vmand.mm v12, v12, v16 9068; CHECK-NEXT: vmv1r.v v0, v12 9069; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 9070; CHECK-NEXT: vmnot.m v0, v12 9071; CHECK-NEXT: ret 9072 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9073 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9074 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 9075 ret <vscale x 4 x i1> %1 9076} 9077 9078define <vscale x 4 x i1> @fcmp_ule_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 9079; CHECK-LABEL: fcmp_ule_vv_nxv4f64: 9080; CHECK: # %bb.0: 9081; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9082; CHECK-NEXT: vmfeq.vv v16, v8, v8 9083; CHECK-NEXT: vmfeq.vv v17, v12, v12 9084; CHECK-NEXT: vmand.mm v16, v17, v16 9085; CHECK-NEXT: vmv1r.v v0, v16 9086; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 9087; CHECK-NEXT: vmnot.m v0, v16 9088; CHECK-NEXT: ret 9089 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 9090 ret <vscale x 4 x i1> %1 9091} 9092 9093define <vscale x 4 x i1> @fcmp_ule_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9094; CHECK-LABEL: fcmp_ule_vf_nxv4f64: 9095; CHECK: # %bb.0: 9096; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9097; CHECK-NEXT: vfmv.v.f v12, fa0 9098; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9099; CHECK-NEXT: vmfeq.vv v12, v8, v8 9100; CHECK-NEXT: vmand.mm v12, v16, v12 9101; CHECK-NEXT: vmv1r.v v0, v12 9102; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9103; CHECK-NEXT: vmnot.m v0, v12 9104; CHECK-NEXT: ret 9105 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9106 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9107 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 9108 ret <vscale x 4 x i1> %1 9109} 9110 9111define <vscale x 4 x i1> @fcmp_ule_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9112; CHECK-LABEL: fcmp_ule_fv_nxv4f64: 9113; CHECK: # %bb.0: 9114; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 9115; CHECK-NEXT: vfmv.v.f v12, fa0 9116; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9117; CHECK-NEXT: vmfeq.vv v12, v8, v8 9118; CHECK-NEXT: vmand.mm v12, v12, v16 9119; CHECK-NEXT: vmv1r.v v0, v12 9120; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9121; CHECK-NEXT: vmnot.m v0, v12 9122; CHECK-NEXT: ret 9123 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9124 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9125 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 9126 ret <vscale x 4 x i1> %1 9127} 9128 9129define <vscale x 4 x i1> @fcmp_une_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 9130; CHECK-LABEL: fcmp_une_vv_nxv4f64: 9131; CHECK: # %bb.0: 9132; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9133; CHECK-NEXT: vmfne.vv v0, v8, v12 9134; CHECK-NEXT: ret 9135 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 9136 ret <vscale x 4 x i1> %1 9137} 9138 9139define <vscale x 4 x i1> @fcmp_une_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9140; CHECK-LABEL: fcmp_une_vf_nxv4f64: 9141; CHECK: # %bb.0: 9142; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9143; CHECK-NEXT: vmfne.vf v0, v8, fa0 9144; CHECK-NEXT: ret 9145 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9146 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9147 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 9148 ret <vscale x 4 x i1> %1 9149} 9150 9151define <vscale x 4 x i1> @fcmp_une_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9152; CHECK-LABEL: fcmp_une_fv_nxv4f64: 9153; CHECK: # %bb.0: 9154; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9155; CHECK-NEXT: vmfne.vf v0, v8, fa0 9156; CHECK-NEXT: ret 9157 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9158 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9159 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 9160 ret <vscale x 4 x i1> %1 9161} 9162 9163define <vscale x 4 x i1> @fcmp_uno_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) nounwind strictfp { 9164; CHECK-LABEL: fcmp_uno_vv_nxv4f64: 9165; CHECK: # %bb.0: 9166; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9167; CHECK-NEXT: vmfne.vv v16, v12, v12 9168; CHECK-NEXT: vmfne.vv v12, v8, v8 9169; CHECK-NEXT: vmor.mm v0, v12, v16 9170; CHECK-NEXT: ret 9171 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 9172 ret <vscale x 4 x i1> %1 9173} 9174 9175define <vscale x 4 x i1> @fcmp_uno_vf_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9176; CHECK-LABEL: fcmp_uno_vf_nxv4f64: 9177; CHECK: # %bb.0: 9178; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9179; CHECK-NEXT: vfmv.v.f v12, fa0 9180; CHECK-NEXT: vmfne.vf v16, v12, fa0 9181; CHECK-NEXT: vmfne.vv v12, v8, v8 9182; CHECK-NEXT: vmor.mm v0, v12, v16 9183; CHECK-NEXT: ret 9184 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9185 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9186 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 9187 ret <vscale x 4 x i1> %1 9188} 9189 9190define <vscale x 4 x i1> @fcmp_uno_fv_nxv4f64(<vscale x 4 x double> %va, double %b) nounwind strictfp { 9191; CHECK-LABEL: fcmp_uno_fv_nxv4f64: 9192; CHECK: # %bb.0: 9193; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 9194; CHECK-NEXT: vfmv.v.f v12, fa0 9195; CHECK-NEXT: vmfne.vf v16, v12, fa0 9196; CHECK-NEXT: vmfne.vv v12, v8, v8 9197; CHECK-NEXT: vmor.mm v0, v16, v12 9198; CHECK-NEXT: ret 9199 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0 9200 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 9201 %1 = call <vscale x 4 x i1> @llvm.experimental.constrained.fcmp.nxv4f64(<vscale x 4 x double> %splat, <vscale x 4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 9202 ret <vscale x 4 x i1> %1 9203} 9204 9205declare <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata) 9206define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9207; CHECK-LABEL: fcmp_oeq_vv_nxv8f64: 9208; CHECK: # %bb.0: 9209; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9210; CHECK-NEXT: vmfeq.vv v0, v8, v16 9211; CHECK-NEXT: ret 9212 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9213 ret <vscale x 8 x i1> %1 9214} 9215 9216define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9217; CHECK-LABEL: fcmp_oeq_vf_nxv8f64: 9218; CHECK: # %bb.0: 9219; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9220; CHECK-NEXT: vmfeq.vf v0, v8, fa0 9221; CHECK-NEXT: ret 9222 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9223 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9224 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9225 ret <vscale x 8 x i1> %1 9226} 9227 9228define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9229; CHECK-LABEL: fcmp_oeq_fv_nxv8f64: 9230; CHECK: # %bb.0: 9231; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9232; CHECK-NEXT: vmfeq.vf v0, v8, fa0 9233; CHECK-NEXT: ret 9234 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9235 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9236 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9237 ret <vscale x 8 x i1> %1 9238} 9239 9240define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9241; CHECK-LABEL: fcmp_ogt_vv_nxv8f64: 9242; CHECK: # %bb.0: 9243; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9244; CHECK-NEXT: vmfeq.vv v24, v8, v8 9245; CHECK-NEXT: vmfeq.vv v25, v16, v16 9246; CHECK-NEXT: vmand.mm v24, v25, v24 9247; CHECK-NEXT: vmv1r.v v0, v24 9248; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 9249; CHECK-NEXT: vmv1r.v v0, v24 9250; CHECK-NEXT: ret 9251 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9252 ret <vscale x 8 x i1> %1 9253} 9254 9255define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9256; CHECK-LABEL: fcmp_ogt_vf_nxv8f64: 9257; CHECK: # %bb.0: 9258; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9259; CHECK-NEXT: vfmv.v.f v16, fa0 9260; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9261; CHECK-NEXT: vmfeq.vv v16, v8, v8 9262; CHECK-NEXT: vmand.mm v16, v24, v16 9263; CHECK-NEXT: vmv1r.v v0, v16 9264; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9265; CHECK-NEXT: vmv1r.v v0, v16 9266; CHECK-NEXT: ret 9267 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9268 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9269 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9270 ret <vscale x 8 x i1> %1 9271} 9272 9273define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9274; CHECK-LABEL: fcmp_ogt_fv_nxv8f64: 9275; CHECK: # %bb.0: 9276; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9277; CHECK-NEXT: vfmv.v.f v16, fa0 9278; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9279; CHECK-NEXT: vmfeq.vv v16, v8, v8 9280; CHECK-NEXT: vmand.mm v16, v16, v24 9281; CHECK-NEXT: vmv1r.v v0, v16 9282; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9283; CHECK-NEXT: vmv1r.v v0, v16 9284; CHECK-NEXT: ret 9285 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9286 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9287 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9288 ret <vscale x 8 x i1> %1 9289} 9290 9291define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9292; CHECK-LABEL: fcmp_oge_vv_nxv8f64: 9293; CHECK: # %bb.0: 9294; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9295; CHECK-NEXT: vmfeq.vv v24, v8, v8 9296; CHECK-NEXT: vmfeq.vv v25, v16, v16 9297; CHECK-NEXT: vmand.mm v24, v25, v24 9298; CHECK-NEXT: vmv1r.v v0, v24 9299; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 9300; CHECK-NEXT: vmv1r.v v0, v24 9301; CHECK-NEXT: ret 9302 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 9303 ret <vscale x 8 x i1> %1 9304} 9305 9306define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9307; CHECK-LABEL: fcmp_oge_vf_nxv8f64: 9308; CHECK: # %bb.0: 9309; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9310; CHECK-NEXT: vfmv.v.f v16, fa0 9311; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9312; CHECK-NEXT: vmfeq.vv v16, v8, v8 9313; CHECK-NEXT: vmand.mm v16, v24, v16 9314; CHECK-NEXT: vmv1r.v v0, v16 9315; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 9316; CHECK-NEXT: vmv1r.v v0, v16 9317; CHECK-NEXT: ret 9318 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9319 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9320 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 9321 ret <vscale x 8 x i1> %1 9322} 9323 9324define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9325; CHECK-LABEL: fcmp_oge_fv_nxv8f64: 9326; CHECK: # %bb.0: 9327; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9328; CHECK-NEXT: vfmv.v.f v16, fa0 9329; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9330; CHECK-NEXT: vmfeq.vv v16, v8, v8 9331; CHECK-NEXT: vmand.mm v16, v16, v24 9332; CHECK-NEXT: vmv1r.v v0, v16 9333; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 9334; CHECK-NEXT: vmv1r.v v0, v16 9335; CHECK-NEXT: ret 9336 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9337 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9338 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 9339 ret <vscale x 8 x i1> %1 9340} 9341 9342define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9343; CHECK-LABEL: fcmp_olt_vv_nxv8f64: 9344; CHECK: # %bb.0: 9345; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9346; CHECK-NEXT: vmfeq.vv v24, v16, v16 9347; CHECK-NEXT: vmfeq.vv v25, v8, v8 9348; CHECK-NEXT: vmand.mm v24, v25, v24 9349; CHECK-NEXT: vmv1r.v v0, v24 9350; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 9351; CHECK-NEXT: vmv1r.v v0, v24 9352; CHECK-NEXT: ret 9353 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 9354 ret <vscale x 8 x i1> %1 9355} 9356 9357define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9358; CHECK-LABEL: fcmp_olt_vf_nxv8f64: 9359; CHECK: # %bb.0: 9360; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9361; CHECK-NEXT: vfmv.v.f v16, fa0 9362; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9363; CHECK-NEXT: vmfeq.vv v16, v8, v8 9364; CHECK-NEXT: vmand.mm v16, v16, v24 9365; CHECK-NEXT: vmv1r.v v0, v16 9366; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9367; CHECK-NEXT: vmv1r.v v0, v16 9368; CHECK-NEXT: ret 9369 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9370 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9371 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 9372 ret <vscale x 8 x i1> %1 9373} 9374 9375define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9376; CHECK-LABEL: fcmp_olt_fv_nxv8f64: 9377; CHECK: # %bb.0: 9378; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9379; CHECK-NEXT: vfmv.v.f v16, fa0 9380; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9381; CHECK-NEXT: vmfeq.vv v16, v8, v8 9382; CHECK-NEXT: vmand.mm v16, v24, v16 9383; CHECK-NEXT: vmv1r.v v0, v16 9384; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9385; CHECK-NEXT: vmv1r.v v0, v16 9386; CHECK-NEXT: ret 9387 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9388 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9389 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 9390 ret <vscale x 8 x i1> %1 9391} 9392 9393define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9394; CHECK-LABEL: fcmp_ole_vv_nxv8f64: 9395; CHECK: # %bb.0: 9396; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9397; CHECK-NEXT: vmfeq.vv v24, v16, v16 9398; CHECK-NEXT: vmfeq.vv v25, v8, v8 9399; CHECK-NEXT: vmand.mm v24, v25, v24 9400; CHECK-NEXT: vmv1r.v v0, v24 9401; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 9402; CHECK-NEXT: vmv1r.v v0, v24 9403; CHECK-NEXT: ret 9404 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 9405 ret <vscale x 8 x i1> %1 9406} 9407 9408define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9409; CHECK-LABEL: fcmp_ole_vf_nxv8f64: 9410; CHECK: # %bb.0: 9411; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9412; CHECK-NEXT: vfmv.v.f v16, fa0 9413; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9414; CHECK-NEXT: vmfeq.vv v16, v8, v8 9415; CHECK-NEXT: vmand.mm v16, v16, v24 9416; CHECK-NEXT: vmv1r.v v0, v16 9417; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 9418; CHECK-NEXT: vmv1r.v v0, v16 9419; CHECK-NEXT: ret 9420 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9421 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9422 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 9423 ret <vscale x 8 x i1> %1 9424} 9425 9426define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9427; CHECK-LABEL: fcmp_ole_fv_nxv8f64: 9428; CHECK: # %bb.0: 9429; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9430; CHECK-NEXT: vfmv.v.f v16, fa0 9431; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9432; CHECK-NEXT: vmfeq.vv v16, v8, v8 9433; CHECK-NEXT: vmand.mm v16, v24, v16 9434; CHECK-NEXT: vmv1r.v v0, v16 9435; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 9436; CHECK-NEXT: vmv1r.v v0, v16 9437; CHECK-NEXT: ret 9438 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9439 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9440 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 9441 ret <vscale x 8 x i1> %1 9442} 9443 9444define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9445; CHECK-LABEL: fcmp_one_vv_nxv8f64: 9446; CHECK: # %bb.0: 9447; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9448; CHECK-NEXT: vmfeq.vv v24, v16, v16 9449; CHECK-NEXT: vmfeq.vv v25, v8, v8 9450; CHECK-NEXT: vmand.mm v24, v25, v24 9451; CHECK-NEXT: vmv1r.v v25, v24 9452; CHECK-NEXT: vmv1r.v v0, v24 9453; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 9454; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 9455; CHECK-NEXT: vmor.mm v0, v24, v25 9456; CHECK-NEXT: ret 9457 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 9458 ret <vscale x 8 x i1> %1 9459} 9460 9461define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9462; CHECK-LABEL: fcmp_one_vf_nxv8f64: 9463; CHECK: # %bb.0: 9464; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9465; CHECK-NEXT: vfmv.v.f v16, fa0 9466; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9467; CHECK-NEXT: vmfeq.vv v16, v8, v8 9468; CHECK-NEXT: vmand.mm v16, v16, v24 9469; CHECK-NEXT: vmv1r.v v17, v16 9470; CHECK-NEXT: vmv1r.v v0, v16 9471; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 9472; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9473; CHECK-NEXT: vmor.mm v0, v16, v17 9474; CHECK-NEXT: ret 9475 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9476 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9477 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 9478 ret <vscale x 8 x i1> %1 9479} 9480 9481define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9482; CHECK-LABEL: fcmp_one_fv_nxv8f64: 9483; CHECK: # %bb.0: 9484; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9485; CHECK-NEXT: vfmv.v.f v16, fa0 9486; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9487; CHECK-NEXT: vmfeq.vv v16, v8, v8 9488; CHECK-NEXT: vmand.mm v16, v24, v16 9489; CHECK-NEXT: vmv1r.v v17, v16 9490; CHECK-NEXT: vmv1r.v v0, v16 9491; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 9492; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9493; CHECK-NEXT: vmor.mm v0, v16, v17 9494; CHECK-NEXT: ret 9495 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9496 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9497 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 9498 ret <vscale x 8 x i1> %1 9499} 9500 9501define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9502; CHECK-LABEL: fcmp_ord_vv_nxv8f64: 9503; CHECK: # %bb.0: 9504; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9505; CHECK-NEXT: vmfeq.vv v24, v16, v16 9506; CHECK-NEXT: vmfeq.vv v16, v8, v8 9507; CHECK-NEXT: vmand.mm v0, v16, v24 9508; CHECK-NEXT: ret 9509 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 9510 ret <vscale x 8 x i1> %1 9511} 9512 9513define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9514; CHECK-LABEL: fcmp_ord_vf_nxv8f64: 9515; CHECK: # %bb.0: 9516; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9517; CHECK-NEXT: vfmv.v.f v16, fa0 9518; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9519; CHECK-NEXT: vmfeq.vv v16, v8, v8 9520; CHECK-NEXT: vmand.mm v0, v16, v24 9521; CHECK-NEXT: ret 9522 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9523 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9524 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 9525 ret <vscale x 8 x i1> %1 9526} 9527 9528define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9529; CHECK-LABEL: fcmp_ord_fv_nxv8f64: 9530; CHECK: # %bb.0: 9531; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9532; CHECK-NEXT: vfmv.v.f v16, fa0 9533; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9534; CHECK-NEXT: vmfeq.vv v16, v8, v8 9535; CHECK-NEXT: vmand.mm v0, v24, v16 9536; CHECK-NEXT: ret 9537 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9538 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9539 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 9540 ret <vscale x 8 x i1> %1 9541} 9542 9543define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9544; CHECK-LABEL: fcmp_ueq_vv_nxv8f64: 9545; CHECK: # %bb.0: 9546; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9547; CHECK-NEXT: vmfeq.vv v24, v16, v16 9548; CHECK-NEXT: vmfeq.vv v25, v8, v8 9549; CHECK-NEXT: vmand.mm v24, v25, v24 9550; CHECK-NEXT: vmv1r.v v25, v24 9551; CHECK-NEXT: vmv1r.v v0, v24 9552; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t 9553; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 9554; CHECK-NEXT: vmnor.mm v0, v24, v25 9555; CHECK-NEXT: ret 9556 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9557 ret <vscale x 8 x i1> %1 9558} 9559 9560define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9561; CHECK-LABEL: fcmp_ueq_vf_nxv8f64: 9562; CHECK: # %bb.0: 9563; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9564; CHECK-NEXT: vfmv.v.f v16, fa0 9565; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9566; CHECK-NEXT: vmfeq.vv v16, v8, v8 9567; CHECK-NEXT: vmand.mm v16, v16, v24 9568; CHECK-NEXT: vmv1r.v v17, v16 9569; CHECK-NEXT: vmv1r.v v0, v16 9570; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 9571; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9572; CHECK-NEXT: vmnor.mm v0, v16, v17 9573; CHECK-NEXT: ret 9574 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9575 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9576 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9577 ret <vscale x 8 x i1> %1 9578} 9579 9580define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9581; CHECK-LABEL: fcmp_ueq_fv_nxv8f64: 9582; CHECK: # %bb.0: 9583; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9584; CHECK-NEXT: vfmv.v.f v16, fa0 9585; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9586; CHECK-NEXT: vmfeq.vv v16, v8, v8 9587; CHECK-NEXT: vmand.mm v16, v24, v16 9588; CHECK-NEXT: vmv1r.v v17, v16 9589; CHECK-NEXT: vmv1r.v v0, v16 9590; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 9591; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9592; CHECK-NEXT: vmnor.mm v0, v16, v17 9593; CHECK-NEXT: ret 9594 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9595 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9596 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9597 ret <vscale x 8 x i1> %1 9598} 9599 9600define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9601; CHECK-LABEL: fcmp_ugt_vv_nxv8f64: 9602; CHECK: # %bb.0: 9603; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9604; CHECK-NEXT: vmfeq.vv v24, v16, v16 9605; CHECK-NEXT: vmfeq.vv v25, v8, v8 9606; CHECK-NEXT: vmand.mm v24, v25, v24 9607; CHECK-NEXT: vmv1r.v v0, v24 9608; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 9609; CHECK-NEXT: vmnot.m v0, v24 9610; CHECK-NEXT: ret 9611 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9612 ret <vscale x 8 x i1> %1 9613} 9614 9615define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9616; CHECK-LABEL: fcmp_ugt_vf_nxv8f64: 9617; CHECK: # %bb.0: 9618; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9619; CHECK-NEXT: vfmv.v.f v16, fa0 9620; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9621; CHECK-NEXT: vmfeq.vv v16, v8, v8 9622; CHECK-NEXT: vmand.mm v16, v16, v24 9623; CHECK-NEXT: vmv1r.v v0, v16 9624; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 9625; CHECK-NEXT: vmnot.m v0, v16 9626; CHECK-NEXT: ret 9627 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9628 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9629 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9630 ret <vscale x 8 x i1> %1 9631} 9632 9633define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9634; CHECK-LABEL: fcmp_ugt_fv_nxv8f64: 9635; CHECK: # %bb.0: 9636; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9637; CHECK-NEXT: vfmv.v.f v16, fa0 9638; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9639; CHECK-NEXT: vmfeq.vv v16, v8, v8 9640; CHECK-NEXT: vmand.mm v16, v24, v16 9641; CHECK-NEXT: vmv1r.v v0, v16 9642; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 9643; CHECK-NEXT: vmnot.m v0, v16 9644; CHECK-NEXT: ret 9645 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9646 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9647 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9648 ret <vscale x 8 x i1> %1 9649} 9650 9651define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9652; CHECK-LABEL: fcmp_uge_vv_nxv8f64: 9653; CHECK: # %bb.0: 9654; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9655; CHECK-NEXT: vmfeq.vv v24, v16, v16 9656; CHECK-NEXT: vmfeq.vv v25, v8, v8 9657; CHECK-NEXT: vmand.mm v24, v25, v24 9658; CHECK-NEXT: vmv1r.v v0, v24 9659; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 9660; CHECK-NEXT: vmnot.m v0, v24 9661; CHECK-NEXT: ret 9662 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 9663 ret <vscale x 8 x i1> %1 9664} 9665 9666define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9667; CHECK-LABEL: fcmp_uge_vf_nxv8f64: 9668; CHECK: # %bb.0: 9669; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9670; CHECK-NEXT: vfmv.v.f v16, fa0 9671; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9672; CHECK-NEXT: vmfeq.vv v16, v8, v8 9673; CHECK-NEXT: vmand.mm v16, v16, v24 9674; CHECK-NEXT: vmv1r.v v0, v16 9675; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9676; CHECK-NEXT: vmnot.m v0, v16 9677; CHECK-NEXT: ret 9678 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9679 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9680 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 9681 ret <vscale x 8 x i1> %1 9682} 9683 9684define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9685; CHECK-LABEL: fcmp_uge_fv_nxv8f64: 9686; CHECK: # %bb.0: 9687; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9688; CHECK-NEXT: vfmv.v.f v16, fa0 9689; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9690; CHECK-NEXT: vmfeq.vv v16, v8, v8 9691; CHECK-NEXT: vmand.mm v16, v24, v16 9692; CHECK-NEXT: vmv1r.v v0, v16 9693; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9694; CHECK-NEXT: vmnot.m v0, v16 9695; CHECK-NEXT: ret 9696 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9697 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9698 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 9699 ret <vscale x 8 x i1> %1 9700} 9701 9702define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9703; CHECK-LABEL: fcmp_ult_vv_nxv8f64: 9704; CHECK: # %bb.0: 9705; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9706; CHECK-NEXT: vmfeq.vv v24, v8, v8 9707; CHECK-NEXT: vmfeq.vv v25, v16, v16 9708; CHECK-NEXT: vmand.mm v24, v25, v24 9709; CHECK-NEXT: vmv1r.v v0, v24 9710; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 9711; CHECK-NEXT: vmnot.m v0, v24 9712; CHECK-NEXT: ret 9713 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 9714 ret <vscale x 8 x i1> %1 9715} 9716 9717define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9718; CHECK-LABEL: fcmp_ult_vf_nxv8f64: 9719; CHECK: # %bb.0: 9720; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9721; CHECK-NEXT: vfmv.v.f v16, fa0 9722; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9723; CHECK-NEXT: vmfeq.vv v16, v8, v8 9724; CHECK-NEXT: vmand.mm v16, v24, v16 9725; CHECK-NEXT: vmv1r.v v0, v16 9726; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 9727; CHECK-NEXT: vmnot.m v0, v16 9728; CHECK-NEXT: ret 9729 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9730 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9731 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 9732 ret <vscale x 8 x i1> %1 9733} 9734 9735define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9736; CHECK-LABEL: fcmp_ult_fv_nxv8f64: 9737; CHECK: # %bb.0: 9738; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9739; CHECK-NEXT: vfmv.v.f v16, fa0 9740; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9741; CHECK-NEXT: vmfeq.vv v16, v8, v8 9742; CHECK-NEXT: vmand.mm v16, v16, v24 9743; CHECK-NEXT: vmv1r.v v0, v16 9744; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 9745; CHECK-NEXT: vmnot.m v0, v16 9746; CHECK-NEXT: ret 9747 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9748 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9749 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 9750 ret <vscale x 8 x i1> %1 9751} 9752 9753define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9754; CHECK-LABEL: fcmp_ule_vv_nxv8f64: 9755; CHECK: # %bb.0: 9756; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9757; CHECK-NEXT: vmfeq.vv v24, v8, v8 9758; CHECK-NEXT: vmfeq.vv v25, v16, v16 9759; CHECK-NEXT: vmand.mm v24, v25, v24 9760; CHECK-NEXT: vmv1r.v v0, v24 9761; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 9762; CHECK-NEXT: vmnot.m v0, v24 9763; CHECK-NEXT: ret 9764 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 9765 ret <vscale x 8 x i1> %1 9766} 9767 9768define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9769; CHECK-LABEL: fcmp_ule_vf_nxv8f64: 9770; CHECK: # %bb.0: 9771; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9772; CHECK-NEXT: vfmv.v.f v16, fa0 9773; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9774; CHECK-NEXT: vmfeq.vv v16, v8, v8 9775; CHECK-NEXT: vmand.mm v16, v24, v16 9776; CHECK-NEXT: vmv1r.v v0, v16 9777; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 9778; CHECK-NEXT: vmnot.m v0, v16 9779; CHECK-NEXT: ret 9780 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9781 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9782 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 9783 ret <vscale x 8 x i1> %1 9784} 9785 9786define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9787; CHECK-LABEL: fcmp_ule_fv_nxv8f64: 9788; CHECK: # %bb.0: 9789; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 9790; CHECK-NEXT: vfmv.v.f v16, fa0 9791; CHECK-NEXT: vmfeq.vf v24, v16, fa0 9792; CHECK-NEXT: vmfeq.vv v16, v8, v8 9793; CHECK-NEXT: vmand.mm v16, v16, v24 9794; CHECK-NEXT: vmv1r.v v0, v16 9795; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 9796; CHECK-NEXT: vmnot.m v0, v16 9797; CHECK-NEXT: ret 9798 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9799 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9800 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 9801 ret <vscale x 8 x i1> %1 9802} 9803 9804define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9805; CHECK-LABEL: fcmp_une_vv_nxv8f64: 9806; CHECK: # %bb.0: 9807; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9808; CHECK-NEXT: vmfne.vv v0, v8, v16 9809; CHECK-NEXT: ret 9810 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 9811 ret <vscale x 8 x i1> %1 9812} 9813 9814define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9815; CHECK-LABEL: fcmp_une_vf_nxv8f64: 9816; CHECK: # %bb.0: 9817; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9818; CHECK-NEXT: vmfne.vf v0, v8, fa0 9819; CHECK-NEXT: ret 9820 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9821 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9822 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 9823 ret <vscale x 8 x i1> %1 9824} 9825 9826define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9827; CHECK-LABEL: fcmp_une_fv_nxv8f64: 9828; CHECK: # %bb.0: 9829; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9830; CHECK-NEXT: vmfne.vf v0, v8, fa0 9831; CHECK-NEXT: ret 9832 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9833 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9834 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 9835 ret <vscale x 8 x i1> %1 9836} 9837 9838define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) nounwind strictfp { 9839; CHECK-LABEL: fcmp_uno_vv_nxv8f64: 9840; CHECK: # %bb.0: 9841; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9842; CHECK-NEXT: vmfne.vv v24, v16, v16 9843; CHECK-NEXT: vmfne.vv v16, v8, v8 9844; CHECK-NEXT: vmor.mm v0, v16, v24 9845; CHECK-NEXT: ret 9846 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 9847 ret <vscale x 8 x i1> %1 9848} 9849 9850define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9851; CHECK-LABEL: fcmp_uno_vf_nxv8f64: 9852; CHECK: # %bb.0: 9853; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9854; CHECK-NEXT: vfmv.v.f v16, fa0 9855; CHECK-NEXT: vmfne.vf v24, v16, fa0 9856; CHECK-NEXT: vmfne.vv v16, v8, v8 9857; CHECK-NEXT: vmor.mm v0, v16, v24 9858; CHECK-NEXT: ret 9859 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9860 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9861 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 9862 ret <vscale x 8 x i1> %1 9863} 9864 9865define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) nounwind strictfp { 9866; CHECK-LABEL: fcmp_uno_fv_nxv8f64: 9867; CHECK: # %bb.0: 9868; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 9869; CHECK-NEXT: vfmv.v.f v16, fa0 9870; CHECK-NEXT: vmfne.vf v24, v16, fa0 9871; CHECK-NEXT: vmfne.vv v16, v8, v8 9872; CHECK-NEXT: vmor.mm v0, v24, v16 9873; CHECK-NEXT: ret 9874 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0 9875 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 9876 %1 = call <vscale x 8 x i1> @llvm.experimental.constrained.fcmp.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 9877 ret <vscale x 8 x i1> %1 9878} 9879