1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half>, <1 x half>, metadata, metadata) 8define <1 x i1> @fcmp_oeq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 9; CHECK-LABEL: fcmp_oeq_vv_v1f16: 10; CHECK: # %bb.0: 11; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 12; CHECK-NEXT: vmfeq.vv v0, v8, v9 13; CHECK-NEXT: ret 14 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 15 ret <1 x i1> %1 16} 17 18define <1 x i1> @fcmp_oeq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 19; CHECK-LABEL: fcmp_oeq_vf_v1f16: 20; CHECK: # %bb.0: 21; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 22; CHECK-NEXT: vmfeq.vf v0, v8, fa0 23; CHECK-NEXT: ret 24 %head = insertelement <1 x half> poison, half %b, i32 0 25 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 26 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 27 ret <1 x i1> %1 28} 29 30define <1 x i1> @fcmp_oeq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 31; CHECK-LABEL: fcmp_oeq_fv_v1f16: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 34; CHECK-NEXT: vmfeq.vf v0, v8, fa0 35; CHECK-NEXT: ret 36 %head = insertelement <1 x half> poison, half %b, i32 0 37 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 38 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 39 ret <1 x i1> %1 40} 41 42define <1 x i1> @fcmp_ogt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 43; CHECK-LABEL: fcmp_ogt_vv_v1f16: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 46; CHECK-NEXT: vmfeq.vv v10, v8, v8 47; CHECK-NEXT: vmfeq.vv v11, v9, v9 48; CHECK-NEXT: vmand.mm v0, v11, v10 49; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 50; CHECK-NEXT: ret 51 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 52 ret <1 x i1> %1 53} 54 55define <1 x i1> @fcmp_ogt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 56; CHECK-LABEL: fcmp_ogt_vf_v1f16: 57; CHECK: # %bb.0: 58; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 59; CHECK-NEXT: vfmv.s.f v9, fa0 60; CHECK-NEXT: vmfeq.vv v10, v8, v8 61; CHECK-NEXT: vmfeq.vf v9, v9, fa0 62; CHECK-NEXT: vmand.mm v0, v9, v10 63; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 64; CHECK-NEXT: ret 65 %head = insertelement <1 x half> poison, half %b, i32 0 66 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 67 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 68 ret <1 x i1> %1 69} 70 71define <1 x i1> @fcmp_ogt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 72; CHECK-LABEL: fcmp_ogt_fv_v1f16: 73; CHECK: # %bb.0: 74; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 75; CHECK-NEXT: vfmv.s.f v9, fa0 76; CHECK-NEXT: vmfeq.vv v10, v8, v8 77; CHECK-NEXT: vmfeq.vf v9, v9, fa0 78; CHECK-NEXT: vmand.mm v0, v10, v9 79; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 80; CHECK-NEXT: ret 81 %head = insertelement <1 x half> poison, half %b, i32 0 82 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 83 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 84 ret <1 x i1> %1 85} 86 87define <1 x i1> @fcmp_oge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 88; CHECK-LABEL: fcmp_oge_vv_v1f16: 89; CHECK: # %bb.0: 90; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 91; CHECK-NEXT: vmfeq.vv v10, v8, v8 92; CHECK-NEXT: vmfeq.vv v11, v9, v9 93; CHECK-NEXT: vmand.mm v0, v11, v10 94; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 95; CHECK-NEXT: ret 96 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 97 ret <1 x i1> %1 98} 99 100define <1 x i1> @fcmp_oge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 101; CHECK-LABEL: fcmp_oge_vf_v1f16: 102; CHECK: # %bb.0: 103; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 104; CHECK-NEXT: vfmv.s.f v9, fa0 105; CHECK-NEXT: vmfeq.vv v10, v8, v8 106; CHECK-NEXT: vmfeq.vf v9, v9, fa0 107; CHECK-NEXT: vmand.mm v0, v9, v10 108; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 109; CHECK-NEXT: ret 110 %head = insertelement <1 x half> poison, half %b, i32 0 111 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 112 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 113 ret <1 x i1> %1 114} 115 116define <1 x i1> @fcmp_oge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 117; CHECK-LABEL: fcmp_oge_fv_v1f16: 118; CHECK: # %bb.0: 119; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 120; CHECK-NEXT: vfmv.s.f v9, fa0 121; CHECK-NEXT: vmfeq.vv v10, v8, v8 122; CHECK-NEXT: vmfeq.vf v9, v9, fa0 123; CHECK-NEXT: vmand.mm v0, v10, v9 124; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 125; CHECK-NEXT: ret 126 %head = insertelement <1 x half> poison, half %b, i32 0 127 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 128 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 129 ret <1 x i1> %1 130} 131 132define <1 x i1> @fcmp_olt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 133; CHECK-LABEL: fcmp_olt_vv_v1f16: 134; CHECK: # %bb.0: 135; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 136; CHECK-NEXT: vmfeq.vv v10, v9, v9 137; CHECK-NEXT: vmfeq.vv v11, v8, v8 138; CHECK-NEXT: vmand.mm v0, v11, v10 139; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 140; CHECK-NEXT: ret 141 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 142 ret <1 x i1> %1 143} 144 145define <1 x i1> @fcmp_olt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 146; CHECK-LABEL: fcmp_olt_vf_v1f16: 147; CHECK: # %bb.0: 148; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 149; CHECK-NEXT: vfmv.s.f v9, fa0 150; CHECK-NEXT: vmfeq.vv v10, v8, v8 151; CHECK-NEXT: vmfeq.vf v9, v9, fa0 152; CHECK-NEXT: vmand.mm v0, v10, v9 153; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 154; CHECK-NEXT: ret 155 %head = insertelement <1 x half> poison, half %b, i32 0 156 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 157 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 158 ret <1 x i1> %1 159} 160 161define <1 x i1> @fcmp_olt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 162; CHECK-LABEL: fcmp_olt_fv_v1f16: 163; CHECK: # %bb.0: 164; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 165; CHECK-NEXT: vfmv.s.f v9, fa0 166; CHECK-NEXT: vmfeq.vv v10, v8, v8 167; CHECK-NEXT: vmfeq.vf v9, v9, fa0 168; CHECK-NEXT: vmand.mm v0, v9, v10 169; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 170; CHECK-NEXT: ret 171 %head = insertelement <1 x half> poison, half %b, i32 0 172 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 173 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 174 ret <1 x i1> %1 175} 176 177define <1 x i1> @fcmp_ole_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 178; CHECK-LABEL: fcmp_ole_vv_v1f16: 179; CHECK: # %bb.0: 180; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 181; CHECK-NEXT: vmfeq.vv v10, v9, v9 182; CHECK-NEXT: vmfeq.vv v11, v8, v8 183; CHECK-NEXT: vmand.mm v0, v11, v10 184; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 185; CHECK-NEXT: ret 186 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 187 ret <1 x i1> %1 188} 189 190define <1 x i1> @fcmp_ole_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 191; CHECK-LABEL: fcmp_ole_vf_v1f16: 192; CHECK: # %bb.0: 193; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 194; CHECK-NEXT: vfmv.s.f v9, fa0 195; CHECK-NEXT: vmfeq.vv v10, v8, v8 196; CHECK-NEXT: vmfeq.vf v9, v9, fa0 197; CHECK-NEXT: vmand.mm v0, v10, v9 198; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 199; CHECK-NEXT: ret 200 %head = insertelement <1 x half> poison, half %b, i32 0 201 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 202 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 203 ret <1 x i1> %1 204} 205 206define <1 x i1> @fcmp_ole_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 207; CHECK-LABEL: fcmp_ole_fv_v1f16: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 210; CHECK-NEXT: vfmv.s.f v9, fa0 211; CHECK-NEXT: vmfeq.vv v10, v8, v8 212; CHECK-NEXT: vmfeq.vf v9, v9, fa0 213; CHECK-NEXT: vmand.mm v0, v9, v10 214; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 215; CHECK-NEXT: ret 216 %head = insertelement <1 x half> poison, half %b, i32 0 217 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 218 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 219 ret <1 x i1> %1 220} 221 222define <1 x i1> @fcmp_one_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 223; CHECK-LABEL: fcmp_one_vv_v1f16: 224; CHECK: # %bb.0: 225; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 226; CHECK-NEXT: vmfeq.vv v10, v9, v9 227; CHECK-NEXT: vmfeq.vv v11, v8, v8 228; CHECK-NEXT: vmand.mm v0, v11, v10 229; CHECK-NEXT: vmv1r.v v10, v0 230; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 231; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 232; CHECK-NEXT: vmor.mm v0, v0, v10 233; CHECK-NEXT: ret 234 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 235 ret <1 x i1> %1 236} 237 238define <1 x i1> @fcmp_one_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 239; CHECK-LABEL: fcmp_one_vf_v1f16: 240; CHECK: # %bb.0: 241; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 242; CHECK-NEXT: vfmv.s.f v9, fa0 243; CHECK-NEXT: vmfeq.vv v10, v8, v8 244; CHECK-NEXT: vmfeq.vf v9, v9, fa0 245; CHECK-NEXT: vmand.mm v0, v10, v9 246; CHECK-NEXT: vmv1r.v v9, v0 247; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 248; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 249; CHECK-NEXT: vmor.mm v0, v0, v9 250; CHECK-NEXT: ret 251 %head = insertelement <1 x half> poison, half %b, i32 0 252 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 253 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 254 ret <1 x i1> %1 255} 256 257define <1 x i1> @fcmp_one_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 258; CHECK-LABEL: fcmp_one_fv_v1f16: 259; CHECK: # %bb.0: 260; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 261; CHECK-NEXT: vfmv.s.f v9, fa0 262; CHECK-NEXT: vmfeq.vv v10, v8, v8 263; CHECK-NEXT: vmfeq.vf v9, v9, fa0 264; CHECK-NEXT: vmand.mm v0, v9, v10 265; CHECK-NEXT: vmv1r.v v9, v0 266; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 267; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 268; CHECK-NEXT: vmor.mm v0, v0, v9 269; CHECK-NEXT: ret 270 %head = insertelement <1 x half> poison, half %b, i32 0 271 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 272 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 273 ret <1 x i1> %1 274} 275 276define <1 x i1> @fcmp_ord_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 277; CHECK-LABEL: fcmp_ord_vv_v1f16: 278; CHECK: # %bb.0: 279; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 280; CHECK-NEXT: vmfeq.vv v9, v9, v9 281; CHECK-NEXT: vmfeq.vv v8, v8, v8 282; CHECK-NEXT: vmand.mm v0, v8, v9 283; CHECK-NEXT: ret 284 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 285 ret <1 x i1> %1 286} 287 288define <1 x i1> @fcmp_ord_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 289; CHECK-LABEL: fcmp_ord_vf_v1f16: 290; CHECK: # %bb.0: 291; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 292; CHECK-NEXT: vfmv.s.f v9, fa0 293; CHECK-NEXT: vmfeq.vf v9, v9, fa0 294; CHECK-NEXT: vmfeq.vv v8, v8, v8 295; CHECK-NEXT: vmand.mm v0, v8, v9 296; CHECK-NEXT: ret 297 %head = insertelement <1 x half> poison, half %b, i32 0 298 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 299 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 300 ret <1 x i1> %1 301} 302 303define <1 x i1> @fcmp_ord_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 304; CHECK-LABEL: fcmp_ord_fv_v1f16: 305; CHECK: # %bb.0: 306; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 307; CHECK-NEXT: vfmv.s.f v9, fa0 308; CHECK-NEXT: vmfeq.vf v9, v9, fa0 309; CHECK-NEXT: vmfeq.vv v8, v8, v8 310; CHECK-NEXT: vmand.mm v0, v9, v8 311; CHECK-NEXT: ret 312 %head = insertelement <1 x half> poison, half %b, i32 0 313 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 314 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 315 ret <1 x i1> %1 316} 317 318define <1 x i1> @fcmp_ueq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 319; CHECK-LABEL: fcmp_ueq_vv_v1f16: 320; CHECK: # %bb.0: 321; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 322; CHECK-NEXT: vmfeq.vv v10, v9, v9 323; CHECK-NEXT: vmfeq.vv v11, v8, v8 324; CHECK-NEXT: vmand.mm v0, v11, v10 325; CHECK-NEXT: vmv1r.v v10, v0 326; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 327; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 328; CHECK-NEXT: vmnor.mm v0, v0, v10 329; CHECK-NEXT: ret 330 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 331 ret <1 x i1> %1 332} 333 334define <1 x i1> @fcmp_ueq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 335; CHECK-LABEL: fcmp_ueq_vf_v1f16: 336; CHECK: # %bb.0: 337; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 338; CHECK-NEXT: vfmv.s.f v9, fa0 339; CHECK-NEXT: vmfeq.vv v10, v8, v8 340; CHECK-NEXT: vmfeq.vf v9, v9, fa0 341; CHECK-NEXT: vmand.mm v0, v10, v9 342; CHECK-NEXT: vmv1r.v v9, v0 343; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 344; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 345; CHECK-NEXT: vmnor.mm v0, v0, v9 346; CHECK-NEXT: ret 347 %head = insertelement <1 x half> poison, half %b, i32 0 348 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 349 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 350 ret <1 x i1> %1 351} 352 353define <1 x i1> @fcmp_ueq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 354; CHECK-LABEL: fcmp_ueq_fv_v1f16: 355; CHECK: # %bb.0: 356; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 357; CHECK-NEXT: vfmv.s.f v9, fa0 358; CHECK-NEXT: vmfeq.vv v10, v8, v8 359; CHECK-NEXT: vmfeq.vf v9, v9, fa0 360; CHECK-NEXT: vmand.mm v0, v9, v10 361; CHECK-NEXT: vmv1r.v v9, v0 362; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 363; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 364; CHECK-NEXT: vmnor.mm v0, v0, v9 365; CHECK-NEXT: ret 366 %head = insertelement <1 x half> poison, half %b, i32 0 367 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 368 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 369 ret <1 x i1> %1 370} 371 372define <1 x i1> @fcmp_ugt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 373; CHECK-LABEL: fcmp_ugt_vv_v1f16: 374; CHECK: # %bb.0: 375; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 376; CHECK-NEXT: vmfeq.vv v10, v9, v9 377; CHECK-NEXT: vmfeq.vv v11, v8, v8 378; CHECK-NEXT: vmand.mm v0, v11, v10 379; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 380; CHECK-NEXT: vmnot.m v0, v0 381; CHECK-NEXT: ret 382 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 383 ret <1 x i1> %1 384} 385 386define <1 x i1> @fcmp_ugt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 387; CHECK-LABEL: fcmp_ugt_vf_v1f16: 388; CHECK: # %bb.0: 389; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 390; CHECK-NEXT: vfmv.s.f v9, fa0 391; CHECK-NEXT: vmfeq.vv v10, v8, v8 392; CHECK-NEXT: vmfeq.vf v9, v9, fa0 393; CHECK-NEXT: vmand.mm v0, v10, v9 394; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 395; CHECK-NEXT: vmnot.m v0, v0 396; CHECK-NEXT: ret 397 %head = insertelement <1 x half> poison, half %b, i32 0 398 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 399 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 400 ret <1 x i1> %1 401} 402 403define <1 x i1> @fcmp_ugt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 404; CHECK-LABEL: fcmp_ugt_fv_v1f16: 405; CHECK: # %bb.0: 406; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 407; CHECK-NEXT: vfmv.s.f v9, fa0 408; CHECK-NEXT: vmfeq.vv v10, v8, v8 409; CHECK-NEXT: vmfeq.vf v9, v9, fa0 410; CHECK-NEXT: vmand.mm v0, v9, v10 411; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 412; CHECK-NEXT: vmnot.m v0, v0 413; CHECK-NEXT: ret 414 %head = insertelement <1 x half> poison, half %b, i32 0 415 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 416 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 417 ret <1 x i1> %1 418} 419 420define <1 x i1> @fcmp_uge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 421; CHECK-LABEL: fcmp_uge_vv_v1f16: 422; CHECK: # %bb.0: 423; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 424; CHECK-NEXT: vmfeq.vv v10, v9, v9 425; CHECK-NEXT: vmfeq.vv v11, v8, v8 426; CHECK-NEXT: vmand.mm v0, v11, v10 427; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 428; CHECK-NEXT: vmnot.m v0, v0 429; CHECK-NEXT: ret 430 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 431 ret <1 x i1> %1 432} 433 434define <1 x i1> @fcmp_uge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 435; CHECK-LABEL: fcmp_uge_vf_v1f16: 436; CHECK: # %bb.0: 437; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 438; CHECK-NEXT: vfmv.s.f v9, fa0 439; CHECK-NEXT: vmfeq.vv v10, v8, v8 440; CHECK-NEXT: vmfeq.vf v9, v9, fa0 441; CHECK-NEXT: vmand.mm v0, v10, v9 442; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 443; CHECK-NEXT: vmnot.m v0, v0 444; CHECK-NEXT: ret 445 %head = insertelement <1 x half> poison, half %b, i32 0 446 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 447 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 448 ret <1 x i1> %1 449} 450 451define <1 x i1> @fcmp_uge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 452; CHECK-LABEL: fcmp_uge_fv_v1f16: 453; CHECK: # %bb.0: 454; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 455; CHECK-NEXT: vfmv.s.f v9, fa0 456; CHECK-NEXT: vmfeq.vv v10, v8, v8 457; CHECK-NEXT: vmfeq.vf v9, v9, fa0 458; CHECK-NEXT: vmand.mm v0, v9, v10 459; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 460; CHECK-NEXT: vmnot.m v0, v0 461; CHECK-NEXT: ret 462 %head = insertelement <1 x half> poison, half %b, i32 0 463 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 464 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 465 ret <1 x i1> %1 466} 467 468define <1 x i1> @fcmp_ult_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 469; CHECK-LABEL: fcmp_ult_vv_v1f16: 470; CHECK: # %bb.0: 471; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 472; CHECK-NEXT: vmfeq.vv v10, v8, v8 473; CHECK-NEXT: vmfeq.vv v11, v9, v9 474; CHECK-NEXT: vmand.mm v0, v11, v10 475; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 476; CHECK-NEXT: vmnot.m v0, v0 477; CHECK-NEXT: ret 478 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 479 ret <1 x i1> %1 480} 481 482define <1 x i1> @fcmp_ult_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 483; CHECK-LABEL: fcmp_ult_vf_v1f16: 484; CHECK: # %bb.0: 485; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 486; CHECK-NEXT: vfmv.s.f v9, fa0 487; CHECK-NEXT: vmfeq.vv v10, v8, v8 488; CHECK-NEXT: vmfeq.vf v9, v9, fa0 489; CHECK-NEXT: vmand.mm v0, v9, v10 490; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 491; CHECK-NEXT: vmnot.m v0, v0 492; CHECK-NEXT: ret 493 %head = insertelement <1 x half> poison, half %b, i32 0 494 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 495 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 496 ret <1 x i1> %1 497} 498 499define <1 x i1> @fcmp_ult_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 500; CHECK-LABEL: fcmp_ult_fv_v1f16: 501; CHECK: # %bb.0: 502; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 503; CHECK-NEXT: vfmv.s.f v9, fa0 504; CHECK-NEXT: vmfeq.vv v10, v8, v8 505; CHECK-NEXT: vmfeq.vf v9, v9, fa0 506; CHECK-NEXT: vmand.mm v0, v10, v9 507; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 508; CHECK-NEXT: vmnot.m v0, v0 509; CHECK-NEXT: ret 510 %head = insertelement <1 x half> poison, half %b, i32 0 511 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 512 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 513 ret <1 x i1> %1 514} 515 516define <1 x i1> @fcmp_ule_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 517; CHECK-LABEL: fcmp_ule_vv_v1f16: 518; CHECK: # %bb.0: 519; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 520; CHECK-NEXT: vmfeq.vv v10, v8, v8 521; CHECK-NEXT: vmfeq.vv v11, v9, v9 522; CHECK-NEXT: vmand.mm v0, v11, v10 523; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 524; CHECK-NEXT: vmnot.m v0, v0 525; CHECK-NEXT: ret 526 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 527 ret <1 x i1> %1 528} 529 530define <1 x i1> @fcmp_ule_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 531; CHECK-LABEL: fcmp_ule_vf_v1f16: 532; CHECK: # %bb.0: 533; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 534; CHECK-NEXT: vfmv.s.f v9, fa0 535; CHECK-NEXT: vmfeq.vv v10, v8, v8 536; CHECK-NEXT: vmfeq.vf v9, v9, fa0 537; CHECK-NEXT: vmand.mm v0, v9, v10 538; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 539; CHECK-NEXT: vmnot.m v0, v0 540; CHECK-NEXT: ret 541 %head = insertelement <1 x half> poison, half %b, i32 0 542 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 543 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 544 ret <1 x i1> %1 545} 546 547define <1 x i1> @fcmp_ule_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 548; CHECK-LABEL: fcmp_ule_fv_v1f16: 549; CHECK: # %bb.0: 550; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu 551; CHECK-NEXT: vfmv.s.f v9, fa0 552; CHECK-NEXT: vmfeq.vv v10, v8, v8 553; CHECK-NEXT: vmfeq.vf v9, v9, fa0 554; CHECK-NEXT: vmand.mm v0, v10, v9 555; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 556; CHECK-NEXT: vmnot.m v0, v0 557; CHECK-NEXT: ret 558 %head = insertelement <1 x half> poison, half %b, i32 0 559 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 560 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 561 ret <1 x i1> %1 562} 563 564define <1 x i1> @fcmp_une_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 565; CHECK-LABEL: fcmp_une_vv_v1f16: 566; CHECK: # %bb.0: 567; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 568; CHECK-NEXT: vmfne.vv v0, v8, v9 569; CHECK-NEXT: ret 570 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 571 ret <1 x i1> %1 572} 573 574define <1 x i1> @fcmp_une_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 575; CHECK-LABEL: fcmp_une_vf_v1f16: 576; CHECK: # %bb.0: 577; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 578; CHECK-NEXT: vmfne.vf v0, v8, fa0 579; CHECK-NEXT: ret 580 %head = insertelement <1 x half> poison, half %b, i32 0 581 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 582 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 583 ret <1 x i1> %1 584} 585 586define <1 x i1> @fcmp_une_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 587; CHECK-LABEL: fcmp_une_fv_v1f16: 588; CHECK: # %bb.0: 589; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 590; CHECK-NEXT: vmfne.vf v0, v8, fa0 591; CHECK-NEXT: ret 592 %head = insertelement <1 x half> poison, half %b, i32 0 593 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 594 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 595 ret <1 x i1> %1 596} 597 598define <1 x i1> @fcmp_uno_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 599; CHECK-LABEL: fcmp_uno_vv_v1f16: 600; CHECK: # %bb.0: 601; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 602; CHECK-NEXT: vmfne.vv v9, v9, v9 603; CHECK-NEXT: vmfne.vv v8, v8, v8 604; CHECK-NEXT: vmor.mm v0, v8, v9 605; CHECK-NEXT: ret 606 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 607 ret <1 x i1> %1 608} 609 610define <1 x i1> @fcmp_uno_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 611; CHECK-LABEL: fcmp_uno_vf_v1f16: 612; CHECK: # %bb.0: 613; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 614; CHECK-NEXT: vfmv.s.f v9, fa0 615; CHECK-NEXT: vmfne.vf v9, v9, fa0 616; CHECK-NEXT: vmfne.vv v8, v8, v8 617; CHECK-NEXT: vmor.mm v0, v8, v9 618; CHECK-NEXT: ret 619 %head = insertelement <1 x half> poison, half %b, i32 0 620 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 621 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 622 ret <1 x i1> %1 623} 624 625define <1 x i1> @fcmp_uno_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 626; CHECK-LABEL: fcmp_uno_fv_v1f16: 627; CHECK: # %bb.0: 628; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 629; CHECK-NEXT: vfmv.s.f v9, fa0 630; CHECK-NEXT: vmfne.vf v9, v9, fa0 631; CHECK-NEXT: vmfne.vv v8, v8, v8 632; CHECK-NEXT: vmor.mm v0, v9, v8 633; CHECK-NEXT: ret 634 %head = insertelement <1 x half> poison, half %b, i32 0 635 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 636 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 637 ret <1 x i1> %1 638} 639 640declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half>, <2 x half>, metadata, metadata) 641define <2 x i1> @fcmp_oeq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 642; CHECK-LABEL: fcmp_oeq_vv_v2f16: 643; CHECK: # %bb.0: 644; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 645; CHECK-NEXT: vmfeq.vv v0, v8, v9 646; CHECK-NEXT: ret 647 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 648 ret <2 x i1> %1 649} 650 651define <2 x i1> @fcmp_oeq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 652; CHECK-LABEL: fcmp_oeq_vf_v2f16: 653; CHECK: # %bb.0: 654; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 655; CHECK-NEXT: vmfeq.vf v0, v8, fa0 656; CHECK-NEXT: ret 657 %head = insertelement <2 x half> poison, half %b, i32 0 658 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 659 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 660 ret <2 x i1> %1 661} 662 663define <2 x i1> @fcmp_oeq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 664; CHECK-LABEL: fcmp_oeq_fv_v2f16: 665; CHECK: # %bb.0: 666; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 667; CHECK-NEXT: vmfeq.vf v0, v8, fa0 668; CHECK-NEXT: ret 669 %head = insertelement <2 x half> poison, half %b, i32 0 670 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 671 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 672 ret <2 x i1> %1 673} 674 675define <2 x i1> @fcmp_ogt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 676; CHECK-LABEL: fcmp_ogt_vv_v2f16: 677; CHECK: # %bb.0: 678; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 679; CHECK-NEXT: vmfeq.vv v10, v8, v8 680; CHECK-NEXT: vmfeq.vv v11, v9, v9 681; CHECK-NEXT: vmand.mm v0, v11, v10 682; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 683; CHECK-NEXT: ret 684 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 685 ret <2 x i1> %1 686} 687 688define <2 x i1> @fcmp_ogt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 689; CHECK-LABEL: fcmp_ogt_vf_v2f16: 690; CHECK: # %bb.0: 691; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 692; CHECK-NEXT: vfmv.v.f v9, fa0 693; CHECK-NEXT: vmfeq.vv v10, v8, v8 694; CHECK-NEXT: vmfeq.vf v9, v9, fa0 695; CHECK-NEXT: vmand.mm v0, v9, v10 696; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 697; CHECK-NEXT: ret 698 %head = insertelement <2 x half> poison, half %b, i32 0 699 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 700 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 701 ret <2 x i1> %1 702} 703 704define <2 x i1> @fcmp_ogt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 705; CHECK-LABEL: fcmp_ogt_fv_v2f16: 706; CHECK: # %bb.0: 707; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 708; CHECK-NEXT: vfmv.v.f v9, fa0 709; CHECK-NEXT: vmfeq.vv v10, v8, v8 710; CHECK-NEXT: vmfeq.vf v9, v9, fa0 711; CHECK-NEXT: vmand.mm v0, v10, v9 712; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 713; CHECK-NEXT: ret 714 %head = insertelement <2 x half> poison, half %b, i32 0 715 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 716 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 717 ret <2 x i1> %1 718} 719 720define <2 x i1> @fcmp_oge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 721; CHECK-LABEL: fcmp_oge_vv_v2f16: 722; CHECK: # %bb.0: 723; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 724; CHECK-NEXT: vmfeq.vv v10, v8, v8 725; CHECK-NEXT: vmfeq.vv v11, v9, v9 726; CHECK-NEXT: vmand.mm v0, v11, v10 727; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 728; CHECK-NEXT: ret 729 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 730 ret <2 x i1> %1 731} 732 733define <2 x i1> @fcmp_oge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 734; CHECK-LABEL: fcmp_oge_vf_v2f16: 735; CHECK: # %bb.0: 736; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 737; CHECK-NEXT: vfmv.v.f v9, fa0 738; CHECK-NEXT: vmfeq.vv v10, v8, v8 739; CHECK-NEXT: vmfeq.vf v9, v9, fa0 740; CHECK-NEXT: vmand.mm v0, v9, v10 741; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 742; CHECK-NEXT: ret 743 %head = insertelement <2 x half> poison, half %b, i32 0 744 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 745 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 746 ret <2 x i1> %1 747} 748 749define <2 x i1> @fcmp_oge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 750; CHECK-LABEL: fcmp_oge_fv_v2f16: 751; CHECK: # %bb.0: 752; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 753; CHECK-NEXT: vfmv.v.f v9, fa0 754; CHECK-NEXT: vmfeq.vv v10, v8, v8 755; CHECK-NEXT: vmfeq.vf v9, v9, fa0 756; CHECK-NEXT: vmand.mm v0, v10, v9 757; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 758; CHECK-NEXT: ret 759 %head = insertelement <2 x half> poison, half %b, i32 0 760 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 761 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 762 ret <2 x i1> %1 763} 764 765define <2 x i1> @fcmp_olt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 766; CHECK-LABEL: fcmp_olt_vv_v2f16: 767; CHECK: # %bb.0: 768; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 769; CHECK-NEXT: vmfeq.vv v10, v9, v9 770; CHECK-NEXT: vmfeq.vv v11, v8, v8 771; CHECK-NEXT: vmand.mm v0, v11, v10 772; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 773; CHECK-NEXT: ret 774 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 775 ret <2 x i1> %1 776} 777 778define <2 x i1> @fcmp_olt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 779; CHECK-LABEL: fcmp_olt_vf_v2f16: 780; CHECK: # %bb.0: 781; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 782; CHECK-NEXT: vfmv.v.f v9, fa0 783; CHECK-NEXT: vmfeq.vv v10, v8, v8 784; CHECK-NEXT: vmfeq.vf v9, v9, fa0 785; CHECK-NEXT: vmand.mm v0, v10, v9 786; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 787; CHECK-NEXT: ret 788 %head = insertelement <2 x half> poison, half %b, i32 0 789 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 790 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 791 ret <2 x i1> %1 792} 793 794define <2 x i1> @fcmp_olt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 795; CHECK-LABEL: fcmp_olt_fv_v2f16: 796; CHECK: # %bb.0: 797; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 798; CHECK-NEXT: vfmv.v.f v9, fa0 799; CHECK-NEXT: vmfeq.vv v10, v8, v8 800; CHECK-NEXT: vmfeq.vf v9, v9, fa0 801; CHECK-NEXT: vmand.mm v0, v9, v10 802; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 803; CHECK-NEXT: ret 804 %head = insertelement <2 x half> poison, half %b, i32 0 805 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 806 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 807 ret <2 x i1> %1 808} 809 810define <2 x i1> @fcmp_ole_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 811; CHECK-LABEL: fcmp_ole_vv_v2f16: 812; CHECK: # %bb.0: 813; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 814; CHECK-NEXT: vmfeq.vv v10, v9, v9 815; CHECK-NEXT: vmfeq.vv v11, v8, v8 816; CHECK-NEXT: vmand.mm v0, v11, v10 817; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 818; CHECK-NEXT: ret 819 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 820 ret <2 x i1> %1 821} 822 823define <2 x i1> @fcmp_ole_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 824; CHECK-LABEL: fcmp_ole_vf_v2f16: 825; CHECK: # %bb.0: 826; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 827; CHECK-NEXT: vfmv.v.f v9, fa0 828; CHECK-NEXT: vmfeq.vv v10, v8, v8 829; CHECK-NEXT: vmfeq.vf v9, v9, fa0 830; CHECK-NEXT: vmand.mm v0, v10, v9 831; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 832; CHECK-NEXT: ret 833 %head = insertelement <2 x half> poison, half %b, i32 0 834 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 835 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 836 ret <2 x i1> %1 837} 838 839define <2 x i1> @fcmp_ole_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 840; CHECK-LABEL: fcmp_ole_fv_v2f16: 841; CHECK: # %bb.0: 842; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 843; CHECK-NEXT: vfmv.v.f v9, fa0 844; CHECK-NEXT: vmfeq.vv v10, v8, v8 845; CHECK-NEXT: vmfeq.vf v9, v9, fa0 846; CHECK-NEXT: vmand.mm v0, v9, v10 847; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 848; CHECK-NEXT: ret 849 %head = insertelement <2 x half> poison, half %b, i32 0 850 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 851 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 852 ret <2 x i1> %1 853} 854 855define <2 x i1> @fcmp_one_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 856; CHECK-LABEL: fcmp_one_vv_v2f16: 857; CHECK: # %bb.0: 858; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 859; CHECK-NEXT: vmfeq.vv v10, v9, v9 860; CHECK-NEXT: vmfeq.vv v11, v8, v8 861; CHECK-NEXT: vmand.mm v0, v11, v10 862; CHECK-NEXT: vmv1r.v v10, v0 863; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 864; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 865; CHECK-NEXT: vmor.mm v0, v0, v10 866; CHECK-NEXT: ret 867 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 868 ret <2 x i1> %1 869} 870 871define <2 x i1> @fcmp_one_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 872; CHECK-LABEL: fcmp_one_vf_v2f16: 873; CHECK: # %bb.0: 874; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 875; CHECK-NEXT: vfmv.v.f v9, fa0 876; CHECK-NEXT: vmfeq.vv v10, v8, v8 877; CHECK-NEXT: vmfeq.vf v9, v9, fa0 878; CHECK-NEXT: vmand.mm v0, v10, v9 879; CHECK-NEXT: vmv1r.v v9, v0 880; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 881; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 882; CHECK-NEXT: vmor.mm v0, v0, v9 883; CHECK-NEXT: ret 884 %head = insertelement <2 x half> poison, half %b, i32 0 885 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 886 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 887 ret <2 x i1> %1 888} 889 890define <2 x i1> @fcmp_one_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 891; CHECK-LABEL: fcmp_one_fv_v2f16: 892; CHECK: # %bb.0: 893; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 894; CHECK-NEXT: vfmv.v.f v9, fa0 895; CHECK-NEXT: vmfeq.vv v10, v8, v8 896; CHECK-NEXT: vmfeq.vf v9, v9, fa0 897; CHECK-NEXT: vmand.mm v0, v9, v10 898; CHECK-NEXT: vmv1r.v v9, v0 899; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 900; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 901; CHECK-NEXT: vmor.mm v0, v0, v9 902; CHECK-NEXT: ret 903 %head = insertelement <2 x half> poison, half %b, i32 0 904 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 905 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 906 ret <2 x i1> %1 907} 908 909define <2 x i1> @fcmp_ord_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 910; CHECK-LABEL: fcmp_ord_vv_v2f16: 911; CHECK: # %bb.0: 912; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 913; CHECK-NEXT: vmfeq.vv v9, v9, v9 914; CHECK-NEXT: vmfeq.vv v8, v8, v8 915; CHECK-NEXT: vmand.mm v0, v8, v9 916; CHECK-NEXT: ret 917 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 918 ret <2 x i1> %1 919} 920 921define <2 x i1> @fcmp_ord_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 922; CHECK-LABEL: fcmp_ord_vf_v2f16: 923; CHECK: # %bb.0: 924; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 925; CHECK-NEXT: vfmv.v.f v9, fa0 926; CHECK-NEXT: vmfeq.vf v9, v9, fa0 927; CHECK-NEXT: vmfeq.vv v8, v8, v8 928; CHECK-NEXT: vmand.mm v0, v8, v9 929; CHECK-NEXT: ret 930 %head = insertelement <2 x half> poison, half %b, i32 0 931 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 932 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 933 ret <2 x i1> %1 934} 935 936define <2 x i1> @fcmp_ord_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 937; CHECK-LABEL: fcmp_ord_fv_v2f16: 938; CHECK: # %bb.0: 939; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 940; CHECK-NEXT: vfmv.v.f v9, fa0 941; CHECK-NEXT: vmfeq.vf v9, v9, fa0 942; CHECK-NEXT: vmfeq.vv v8, v8, v8 943; CHECK-NEXT: vmand.mm v0, v9, v8 944; CHECK-NEXT: ret 945 %head = insertelement <2 x half> poison, half %b, i32 0 946 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 947 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 948 ret <2 x i1> %1 949} 950 951define <2 x i1> @fcmp_ueq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 952; CHECK-LABEL: fcmp_ueq_vv_v2f16: 953; CHECK: # %bb.0: 954; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 955; CHECK-NEXT: vmfeq.vv v10, v9, v9 956; CHECK-NEXT: vmfeq.vv v11, v8, v8 957; CHECK-NEXT: vmand.mm v0, v11, v10 958; CHECK-NEXT: vmv1r.v v10, v0 959; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 960; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 961; CHECK-NEXT: vmnor.mm v0, v0, v10 962; CHECK-NEXT: ret 963 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 964 ret <2 x i1> %1 965} 966 967define <2 x i1> @fcmp_ueq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 968; CHECK-LABEL: fcmp_ueq_vf_v2f16: 969; CHECK: # %bb.0: 970; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 971; CHECK-NEXT: vfmv.v.f v9, fa0 972; CHECK-NEXT: vmfeq.vv v10, v8, v8 973; CHECK-NEXT: vmfeq.vf v9, v9, fa0 974; CHECK-NEXT: vmand.mm v0, v10, v9 975; CHECK-NEXT: vmv1r.v v9, v0 976; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 977; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 978; CHECK-NEXT: vmnor.mm v0, v0, v9 979; CHECK-NEXT: ret 980 %head = insertelement <2 x half> poison, half %b, i32 0 981 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 982 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 983 ret <2 x i1> %1 984} 985 986define <2 x i1> @fcmp_ueq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 987; CHECK-LABEL: fcmp_ueq_fv_v2f16: 988; CHECK: # %bb.0: 989; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 990; CHECK-NEXT: vfmv.v.f v9, fa0 991; CHECK-NEXT: vmfeq.vv v10, v8, v8 992; CHECK-NEXT: vmfeq.vf v9, v9, fa0 993; CHECK-NEXT: vmand.mm v0, v9, v10 994; CHECK-NEXT: vmv1r.v v9, v0 995; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 996; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 997; CHECK-NEXT: vmnor.mm v0, v0, v9 998; CHECK-NEXT: ret 999 %head = insertelement <2 x half> poison, half %b, i32 0 1000 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1001 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1002 ret <2 x i1> %1 1003} 1004 1005define <2 x i1> @fcmp_ugt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1006; CHECK-LABEL: fcmp_ugt_vv_v2f16: 1007; CHECK: # %bb.0: 1008; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1009; CHECK-NEXT: vmfeq.vv v10, v9, v9 1010; CHECK-NEXT: vmfeq.vv v11, v8, v8 1011; CHECK-NEXT: vmand.mm v0, v11, v10 1012; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1013; CHECK-NEXT: vmnot.m v0, v0 1014; CHECK-NEXT: ret 1015 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1016 ret <2 x i1> %1 1017} 1018 1019define <2 x i1> @fcmp_ugt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1020; CHECK-LABEL: fcmp_ugt_vf_v2f16: 1021; CHECK: # %bb.0: 1022; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1023; CHECK-NEXT: vfmv.v.f v9, fa0 1024; CHECK-NEXT: vmfeq.vv v10, v8, v8 1025; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1026; CHECK-NEXT: vmand.mm v0, v10, v9 1027; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1028; CHECK-NEXT: vmnot.m v0, v0 1029; CHECK-NEXT: ret 1030 %head = insertelement <2 x half> poison, half %b, i32 0 1031 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1032 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1033 ret <2 x i1> %1 1034} 1035 1036define <2 x i1> @fcmp_ugt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1037; CHECK-LABEL: fcmp_ugt_fv_v2f16: 1038; CHECK: # %bb.0: 1039; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1040; CHECK-NEXT: vfmv.v.f v9, fa0 1041; CHECK-NEXT: vmfeq.vv v10, v8, v8 1042; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1043; CHECK-NEXT: vmand.mm v0, v9, v10 1044; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1045; CHECK-NEXT: vmnot.m v0, v0 1046; CHECK-NEXT: ret 1047 %head = insertelement <2 x half> poison, half %b, i32 0 1048 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1049 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1050 ret <2 x i1> %1 1051} 1052 1053define <2 x i1> @fcmp_uge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1054; CHECK-LABEL: fcmp_uge_vv_v2f16: 1055; CHECK: # %bb.0: 1056; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1057; CHECK-NEXT: vmfeq.vv v10, v9, v9 1058; CHECK-NEXT: vmfeq.vv v11, v8, v8 1059; CHECK-NEXT: vmand.mm v0, v11, v10 1060; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1061; CHECK-NEXT: vmnot.m v0, v0 1062; CHECK-NEXT: ret 1063 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1064 ret <2 x i1> %1 1065} 1066 1067define <2 x i1> @fcmp_uge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1068; CHECK-LABEL: fcmp_uge_vf_v2f16: 1069; CHECK: # %bb.0: 1070; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1071; CHECK-NEXT: vfmv.v.f v9, fa0 1072; CHECK-NEXT: vmfeq.vv v10, v8, v8 1073; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1074; CHECK-NEXT: vmand.mm v0, v10, v9 1075; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1076; CHECK-NEXT: vmnot.m v0, v0 1077; CHECK-NEXT: ret 1078 %head = insertelement <2 x half> poison, half %b, i32 0 1079 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1080 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1081 ret <2 x i1> %1 1082} 1083 1084define <2 x i1> @fcmp_uge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1085; CHECK-LABEL: fcmp_uge_fv_v2f16: 1086; CHECK: # %bb.0: 1087; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1088; CHECK-NEXT: vfmv.v.f v9, fa0 1089; CHECK-NEXT: vmfeq.vv v10, v8, v8 1090; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1091; CHECK-NEXT: vmand.mm v0, v9, v10 1092; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1093; CHECK-NEXT: vmnot.m v0, v0 1094; CHECK-NEXT: ret 1095 %head = insertelement <2 x half> poison, half %b, i32 0 1096 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1097 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1098 ret <2 x i1> %1 1099} 1100 1101define <2 x i1> @fcmp_ult_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1102; CHECK-LABEL: fcmp_ult_vv_v2f16: 1103; CHECK: # %bb.0: 1104; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1105; CHECK-NEXT: vmfeq.vv v10, v8, v8 1106; CHECK-NEXT: vmfeq.vv v11, v9, v9 1107; CHECK-NEXT: vmand.mm v0, v11, v10 1108; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1109; CHECK-NEXT: vmnot.m v0, v0 1110; CHECK-NEXT: ret 1111 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1112 ret <2 x i1> %1 1113} 1114 1115define <2 x i1> @fcmp_ult_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1116; CHECK-LABEL: fcmp_ult_vf_v2f16: 1117; CHECK: # %bb.0: 1118; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1119; CHECK-NEXT: vfmv.v.f v9, fa0 1120; CHECK-NEXT: vmfeq.vv v10, v8, v8 1121; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1122; CHECK-NEXT: vmand.mm v0, v9, v10 1123; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1124; CHECK-NEXT: vmnot.m v0, v0 1125; CHECK-NEXT: ret 1126 %head = insertelement <2 x half> poison, half %b, i32 0 1127 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1128 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1129 ret <2 x i1> %1 1130} 1131 1132define <2 x i1> @fcmp_ult_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1133; CHECK-LABEL: fcmp_ult_fv_v2f16: 1134; CHECK: # %bb.0: 1135; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1136; CHECK-NEXT: vfmv.v.f v9, fa0 1137; CHECK-NEXT: vmfeq.vv v10, v8, v8 1138; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1139; CHECK-NEXT: vmand.mm v0, v10, v9 1140; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1141; CHECK-NEXT: vmnot.m v0, v0 1142; CHECK-NEXT: ret 1143 %head = insertelement <2 x half> poison, half %b, i32 0 1144 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1145 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 1146 ret <2 x i1> %1 1147} 1148 1149define <2 x i1> @fcmp_ule_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1150; CHECK-LABEL: fcmp_ule_vv_v2f16: 1151; CHECK: # %bb.0: 1152; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1153; CHECK-NEXT: vmfeq.vv v10, v8, v8 1154; CHECK-NEXT: vmfeq.vv v11, v9, v9 1155; CHECK-NEXT: vmand.mm v0, v11, v10 1156; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1157; CHECK-NEXT: vmnot.m v0, v0 1158; CHECK-NEXT: ret 1159 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 1160 ret <2 x i1> %1 1161} 1162 1163define <2 x i1> @fcmp_ule_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1164; CHECK-LABEL: fcmp_ule_vf_v2f16: 1165; CHECK: # %bb.0: 1166; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1167; CHECK-NEXT: vfmv.v.f v9, fa0 1168; CHECK-NEXT: vmfeq.vv v10, v8, v8 1169; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1170; CHECK-NEXT: vmand.mm v0, v9, v10 1171; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1172; CHECK-NEXT: vmnot.m v0, v0 1173; CHECK-NEXT: ret 1174 %head = insertelement <2 x half> poison, half %b, i32 0 1175 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1176 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 1177 ret <2 x i1> %1 1178} 1179 1180define <2 x i1> @fcmp_ule_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1181; CHECK-LABEL: fcmp_ule_fv_v2f16: 1182; CHECK: # %bb.0: 1183; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu 1184; CHECK-NEXT: vfmv.v.f v9, fa0 1185; CHECK-NEXT: vmfeq.vv v10, v8, v8 1186; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1187; CHECK-NEXT: vmand.mm v0, v10, v9 1188; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1189; CHECK-NEXT: vmnot.m v0, v0 1190; CHECK-NEXT: ret 1191 %head = insertelement <2 x half> poison, half %b, i32 0 1192 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1193 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 1194 ret <2 x i1> %1 1195} 1196 1197define <2 x i1> @fcmp_une_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1198; CHECK-LABEL: fcmp_une_vv_v2f16: 1199; CHECK: # %bb.0: 1200; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1201; CHECK-NEXT: vmfne.vv v0, v8, v9 1202; CHECK-NEXT: ret 1203 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 1204 ret <2 x i1> %1 1205} 1206 1207define <2 x i1> @fcmp_une_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1208; CHECK-LABEL: fcmp_une_vf_v2f16: 1209; CHECK: # %bb.0: 1210; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1211; CHECK-NEXT: vmfne.vf v0, v8, fa0 1212; CHECK-NEXT: ret 1213 %head = insertelement <2 x half> poison, half %b, i32 0 1214 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1215 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1216 ret <2 x i1> %1 1217} 1218 1219define <2 x i1> @fcmp_une_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1220; CHECK-LABEL: fcmp_une_fv_v2f16: 1221; CHECK: # %bb.0: 1222; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1223; CHECK-NEXT: vmfne.vf v0, v8, fa0 1224; CHECK-NEXT: ret 1225 %head = insertelement <2 x half> poison, half %b, i32 0 1226 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1227 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1228 ret <2 x i1> %1 1229} 1230 1231define <2 x i1> @fcmp_uno_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1232; CHECK-LABEL: fcmp_uno_vv_v2f16: 1233; CHECK: # %bb.0: 1234; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1235; CHECK-NEXT: vmfne.vv v9, v9, v9 1236; CHECK-NEXT: vmfne.vv v8, v8, v8 1237; CHECK-NEXT: vmor.mm v0, v8, v9 1238; CHECK-NEXT: ret 1239 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1240 ret <2 x i1> %1 1241} 1242 1243define <2 x i1> @fcmp_uno_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1244; CHECK-LABEL: fcmp_uno_vf_v2f16: 1245; CHECK: # %bb.0: 1246; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1247; CHECK-NEXT: vfmv.v.f v9, fa0 1248; CHECK-NEXT: vmfne.vf v9, v9, fa0 1249; CHECK-NEXT: vmfne.vv v8, v8, v8 1250; CHECK-NEXT: vmor.mm v0, v8, v9 1251; CHECK-NEXT: ret 1252 %head = insertelement <2 x half> poison, half %b, i32 0 1253 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1254 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1255 ret <2 x i1> %1 1256} 1257 1258define <2 x i1> @fcmp_uno_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1259; CHECK-LABEL: fcmp_uno_fv_v2f16: 1260; CHECK: # %bb.0: 1261; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1262; CHECK-NEXT: vfmv.v.f v9, fa0 1263; CHECK-NEXT: vmfne.vf v9, v9, fa0 1264; CHECK-NEXT: vmfne.vv v8, v8, v8 1265; CHECK-NEXT: vmor.mm v0, v9, v8 1266; CHECK-NEXT: ret 1267 %head = insertelement <2 x half> poison, half %b, i32 0 1268 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1269 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1270 ret <2 x i1> %1 1271} 1272 1273declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half>, <4 x half>, metadata, metadata) 1274define <4 x i1> @fcmp_oeq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1275; CHECK-LABEL: fcmp_oeq_vv_v4f16: 1276; CHECK: # %bb.0: 1277; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1278; CHECK-NEXT: vmfeq.vv v0, v8, v9 1279; CHECK-NEXT: ret 1280 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1281 ret <4 x i1> %1 1282} 1283 1284define <4 x i1> @fcmp_oeq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1285; CHECK-LABEL: fcmp_oeq_vf_v4f16: 1286; CHECK: # %bb.0: 1287; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1288; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1289; CHECK-NEXT: ret 1290 %head = insertelement <4 x half> poison, half %b, i32 0 1291 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1292 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1293 ret <4 x i1> %1 1294} 1295 1296define <4 x i1> @fcmp_oeq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1297; CHECK-LABEL: fcmp_oeq_fv_v4f16: 1298; CHECK: # %bb.0: 1299; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1300; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1301; CHECK-NEXT: ret 1302 %head = insertelement <4 x half> poison, half %b, i32 0 1303 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1304 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1305 ret <4 x i1> %1 1306} 1307 1308define <4 x i1> @fcmp_ogt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1309; CHECK-LABEL: fcmp_ogt_vv_v4f16: 1310; CHECK: # %bb.0: 1311; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1312; CHECK-NEXT: vmfeq.vv v10, v8, v8 1313; CHECK-NEXT: vmfeq.vv v11, v9, v9 1314; CHECK-NEXT: vmand.mm v0, v11, v10 1315; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1316; CHECK-NEXT: ret 1317 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1318 ret <4 x i1> %1 1319} 1320 1321define <4 x i1> @fcmp_ogt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1322; CHECK-LABEL: fcmp_ogt_vf_v4f16: 1323; CHECK: # %bb.0: 1324; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1325; CHECK-NEXT: vfmv.v.f v9, fa0 1326; CHECK-NEXT: vmfeq.vv v10, v8, v8 1327; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1328; CHECK-NEXT: vmand.mm v0, v9, v10 1329; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1330; CHECK-NEXT: ret 1331 %head = insertelement <4 x half> poison, half %b, i32 0 1332 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1333 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1334 ret <4 x i1> %1 1335} 1336 1337define <4 x i1> @fcmp_ogt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1338; CHECK-LABEL: fcmp_ogt_fv_v4f16: 1339; CHECK: # %bb.0: 1340; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1341; CHECK-NEXT: vfmv.v.f v9, fa0 1342; CHECK-NEXT: vmfeq.vv v10, v8, v8 1343; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1344; CHECK-NEXT: vmand.mm v0, v10, v9 1345; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1346; CHECK-NEXT: ret 1347 %head = insertelement <4 x half> poison, half %b, i32 0 1348 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1349 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1350 ret <4 x i1> %1 1351} 1352 1353define <4 x i1> @fcmp_oge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1354; CHECK-LABEL: fcmp_oge_vv_v4f16: 1355; CHECK: # %bb.0: 1356; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1357; CHECK-NEXT: vmfeq.vv v10, v8, v8 1358; CHECK-NEXT: vmfeq.vv v11, v9, v9 1359; CHECK-NEXT: vmand.mm v0, v11, v10 1360; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1361; CHECK-NEXT: ret 1362 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 1363 ret <4 x i1> %1 1364} 1365 1366define <4 x i1> @fcmp_oge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1367; CHECK-LABEL: fcmp_oge_vf_v4f16: 1368; CHECK: # %bb.0: 1369; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1370; CHECK-NEXT: vfmv.v.f v9, fa0 1371; CHECK-NEXT: vmfeq.vv v10, v8, v8 1372; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1373; CHECK-NEXT: vmand.mm v0, v9, v10 1374; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1375; CHECK-NEXT: ret 1376 %head = insertelement <4 x half> poison, half %b, i32 0 1377 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1378 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 1379 ret <4 x i1> %1 1380} 1381 1382define <4 x i1> @fcmp_oge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1383; CHECK-LABEL: fcmp_oge_fv_v4f16: 1384; CHECK: # %bb.0: 1385; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1386; CHECK-NEXT: vfmv.v.f v9, fa0 1387; CHECK-NEXT: vmfeq.vv v10, v8, v8 1388; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1389; CHECK-NEXT: vmand.mm v0, v10, v9 1390; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1391; CHECK-NEXT: ret 1392 %head = insertelement <4 x half> poison, half %b, i32 0 1393 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1394 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 1395 ret <4 x i1> %1 1396} 1397 1398define <4 x i1> @fcmp_olt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1399; CHECK-LABEL: fcmp_olt_vv_v4f16: 1400; CHECK: # %bb.0: 1401; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1402; CHECK-NEXT: vmfeq.vv v10, v9, v9 1403; CHECK-NEXT: vmfeq.vv v11, v8, v8 1404; CHECK-NEXT: vmand.mm v0, v11, v10 1405; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1406; CHECK-NEXT: ret 1407 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 1408 ret <4 x i1> %1 1409} 1410 1411define <4 x i1> @fcmp_olt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1412; CHECK-LABEL: fcmp_olt_vf_v4f16: 1413; CHECK: # %bb.0: 1414; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1415; CHECK-NEXT: vfmv.v.f v9, fa0 1416; CHECK-NEXT: vmfeq.vv v10, v8, v8 1417; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1418; CHECK-NEXT: vmand.mm v0, v10, v9 1419; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1420; CHECK-NEXT: ret 1421 %head = insertelement <4 x half> poison, half %b, i32 0 1422 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1423 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 1424 ret <4 x i1> %1 1425} 1426 1427define <4 x i1> @fcmp_olt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1428; CHECK-LABEL: fcmp_olt_fv_v4f16: 1429; CHECK: # %bb.0: 1430; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1431; CHECK-NEXT: vfmv.v.f v9, fa0 1432; CHECK-NEXT: vmfeq.vv v10, v8, v8 1433; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1434; CHECK-NEXT: vmand.mm v0, v9, v10 1435; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1436; CHECK-NEXT: ret 1437 %head = insertelement <4 x half> poison, half %b, i32 0 1438 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1439 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 1440 ret <4 x i1> %1 1441} 1442 1443define <4 x i1> @fcmp_ole_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1444; CHECK-LABEL: fcmp_ole_vv_v4f16: 1445; CHECK: # %bb.0: 1446; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1447; CHECK-NEXT: vmfeq.vv v10, v9, v9 1448; CHECK-NEXT: vmfeq.vv v11, v8, v8 1449; CHECK-NEXT: vmand.mm v0, v11, v10 1450; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1451; CHECK-NEXT: ret 1452 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 1453 ret <4 x i1> %1 1454} 1455 1456define <4 x i1> @fcmp_ole_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1457; CHECK-LABEL: fcmp_ole_vf_v4f16: 1458; CHECK: # %bb.0: 1459; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1460; CHECK-NEXT: vfmv.v.f v9, fa0 1461; CHECK-NEXT: vmfeq.vv v10, v8, v8 1462; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1463; CHECK-NEXT: vmand.mm v0, v10, v9 1464; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1465; CHECK-NEXT: ret 1466 %head = insertelement <4 x half> poison, half %b, i32 0 1467 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1468 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 1469 ret <4 x i1> %1 1470} 1471 1472define <4 x i1> @fcmp_ole_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1473; CHECK-LABEL: fcmp_ole_fv_v4f16: 1474; CHECK: # %bb.0: 1475; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1476; CHECK-NEXT: vfmv.v.f v9, fa0 1477; CHECK-NEXT: vmfeq.vv v10, v8, v8 1478; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1479; CHECK-NEXT: vmand.mm v0, v9, v10 1480; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1481; CHECK-NEXT: ret 1482 %head = insertelement <4 x half> poison, half %b, i32 0 1483 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1484 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 1485 ret <4 x i1> %1 1486} 1487 1488define <4 x i1> @fcmp_one_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1489; CHECK-LABEL: fcmp_one_vv_v4f16: 1490; CHECK: # %bb.0: 1491; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1492; CHECK-NEXT: vmfeq.vv v10, v9, v9 1493; CHECK-NEXT: vmfeq.vv v11, v8, v8 1494; CHECK-NEXT: vmand.mm v0, v11, v10 1495; CHECK-NEXT: vmv1r.v v10, v0 1496; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 1497; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1498; CHECK-NEXT: vmor.mm v0, v0, v10 1499; CHECK-NEXT: ret 1500 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 1501 ret <4 x i1> %1 1502} 1503 1504define <4 x i1> @fcmp_one_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1505; CHECK-LABEL: fcmp_one_vf_v4f16: 1506; CHECK: # %bb.0: 1507; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1508; CHECK-NEXT: vfmv.v.f v9, fa0 1509; CHECK-NEXT: vmfeq.vv v10, v8, v8 1510; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1511; CHECK-NEXT: vmand.mm v0, v10, v9 1512; CHECK-NEXT: vmv1r.v v9, v0 1513; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 1514; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1515; CHECK-NEXT: vmor.mm v0, v0, v9 1516; CHECK-NEXT: ret 1517 %head = insertelement <4 x half> poison, half %b, i32 0 1518 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1519 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 1520 ret <4 x i1> %1 1521} 1522 1523define <4 x i1> @fcmp_one_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1524; CHECK-LABEL: fcmp_one_fv_v4f16: 1525; CHECK: # %bb.0: 1526; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1527; CHECK-NEXT: vfmv.v.f v9, fa0 1528; CHECK-NEXT: vmfeq.vv v10, v8, v8 1529; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1530; CHECK-NEXT: vmand.mm v0, v9, v10 1531; CHECK-NEXT: vmv1r.v v9, v0 1532; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 1533; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1534; CHECK-NEXT: vmor.mm v0, v0, v9 1535; CHECK-NEXT: ret 1536 %head = insertelement <4 x half> poison, half %b, i32 0 1537 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1538 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 1539 ret <4 x i1> %1 1540} 1541 1542define <4 x i1> @fcmp_ord_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1543; CHECK-LABEL: fcmp_ord_vv_v4f16: 1544; CHECK: # %bb.0: 1545; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1546; CHECK-NEXT: vmfeq.vv v9, v9, v9 1547; CHECK-NEXT: vmfeq.vv v8, v8, v8 1548; CHECK-NEXT: vmand.mm v0, v8, v9 1549; CHECK-NEXT: ret 1550 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 1551 ret <4 x i1> %1 1552} 1553 1554define <4 x i1> @fcmp_ord_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1555; CHECK-LABEL: fcmp_ord_vf_v4f16: 1556; CHECK: # %bb.0: 1557; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1558; CHECK-NEXT: vfmv.v.f v9, fa0 1559; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1560; CHECK-NEXT: vmfeq.vv v8, v8, v8 1561; CHECK-NEXT: vmand.mm v0, v8, v9 1562; CHECK-NEXT: ret 1563 %head = insertelement <4 x half> poison, half %b, i32 0 1564 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1565 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 1566 ret <4 x i1> %1 1567} 1568 1569define <4 x i1> @fcmp_ord_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1570; CHECK-LABEL: fcmp_ord_fv_v4f16: 1571; CHECK: # %bb.0: 1572; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1573; CHECK-NEXT: vfmv.v.f v9, fa0 1574; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1575; CHECK-NEXT: vmfeq.vv v8, v8, v8 1576; CHECK-NEXT: vmand.mm v0, v9, v8 1577; CHECK-NEXT: ret 1578 %head = insertelement <4 x half> poison, half %b, i32 0 1579 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1580 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 1581 ret <4 x i1> %1 1582} 1583 1584define <4 x i1> @fcmp_ueq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1585; CHECK-LABEL: fcmp_ueq_vv_v4f16: 1586; CHECK: # %bb.0: 1587; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1588; CHECK-NEXT: vmfeq.vv v10, v9, v9 1589; CHECK-NEXT: vmfeq.vv v11, v8, v8 1590; CHECK-NEXT: vmand.mm v0, v11, v10 1591; CHECK-NEXT: vmv1r.v v10, v0 1592; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 1593; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1594; CHECK-NEXT: vmnor.mm v0, v0, v10 1595; CHECK-NEXT: ret 1596 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1597 ret <4 x i1> %1 1598} 1599 1600define <4 x i1> @fcmp_ueq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1601; CHECK-LABEL: fcmp_ueq_vf_v4f16: 1602; CHECK: # %bb.0: 1603; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1604; CHECK-NEXT: vfmv.v.f v9, fa0 1605; CHECK-NEXT: vmfeq.vv v10, v8, v8 1606; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1607; CHECK-NEXT: vmand.mm v0, v10, v9 1608; CHECK-NEXT: vmv1r.v v9, v0 1609; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 1610; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1611; CHECK-NEXT: vmnor.mm v0, v0, v9 1612; CHECK-NEXT: ret 1613 %head = insertelement <4 x half> poison, half %b, i32 0 1614 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1615 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1616 ret <4 x i1> %1 1617} 1618 1619define <4 x i1> @fcmp_ueq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1620; CHECK-LABEL: fcmp_ueq_fv_v4f16: 1621; CHECK: # %bb.0: 1622; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1623; CHECK-NEXT: vfmv.v.f v9, fa0 1624; CHECK-NEXT: vmfeq.vv v10, v8, v8 1625; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1626; CHECK-NEXT: vmand.mm v0, v9, v10 1627; CHECK-NEXT: vmv1r.v v9, v0 1628; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 1629; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1630; CHECK-NEXT: vmnor.mm v0, v0, v9 1631; CHECK-NEXT: ret 1632 %head = insertelement <4 x half> poison, half %b, i32 0 1633 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1634 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1635 ret <4 x i1> %1 1636} 1637 1638define <4 x i1> @fcmp_ugt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1639; CHECK-LABEL: fcmp_ugt_vv_v4f16: 1640; CHECK: # %bb.0: 1641; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1642; CHECK-NEXT: vmfeq.vv v10, v9, v9 1643; CHECK-NEXT: vmfeq.vv v11, v8, v8 1644; CHECK-NEXT: vmand.mm v0, v11, v10 1645; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 1646; CHECK-NEXT: vmnot.m v0, v0 1647; CHECK-NEXT: ret 1648 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1649 ret <4 x i1> %1 1650} 1651 1652define <4 x i1> @fcmp_ugt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1653; CHECK-LABEL: fcmp_ugt_vf_v4f16: 1654; CHECK: # %bb.0: 1655; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1656; CHECK-NEXT: vfmv.v.f v9, fa0 1657; CHECK-NEXT: vmfeq.vv v10, v8, v8 1658; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1659; CHECK-NEXT: vmand.mm v0, v10, v9 1660; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1661; CHECK-NEXT: vmnot.m v0, v0 1662; CHECK-NEXT: ret 1663 %head = insertelement <4 x half> poison, half %b, i32 0 1664 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1665 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1666 ret <4 x i1> %1 1667} 1668 1669define <4 x i1> @fcmp_ugt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1670; CHECK-LABEL: fcmp_ugt_fv_v4f16: 1671; CHECK: # %bb.0: 1672; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1673; CHECK-NEXT: vfmv.v.f v9, fa0 1674; CHECK-NEXT: vmfeq.vv v10, v8, v8 1675; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1676; CHECK-NEXT: vmand.mm v0, v9, v10 1677; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1678; CHECK-NEXT: vmnot.m v0, v0 1679; CHECK-NEXT: ret 1680 %head = insertelement <4 x half> poison, half %b, i32 0 1681 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1682 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1683 ret <4 x i1> %1 1684} 1685 1686define <4 x i1> @fcmp_uge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1687; CHECK-LABEL: fcmp_uge_vv_v4f16: 1688; CHECK: # %bb.0: 1689; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1690; CHECK-NEXT: vmfeq.vv v10, v9, v9 1691; CHECK-NEXT: vmfeq.vv v11, v8, v8 1692; CHECK-NEXT: vmand.mm v0, v11, v10 1693; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 1694; CHECK-NEXT: vmnot.m v0, v0 1695; CHECK-NEXT: ret 1696 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1697 ret <4 x i1> %1 1698} 1699 1700define <4 x i1> @fcmp_uge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1701; CHECK-LABEL: fcmp_uge_vf_v4f16: 1702; CHECK: # %bb.0: 1703; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1704; CHECK-NEXT: vfmv.v.f v9, fa0 1705; CHECK-NEXT: vmfeq.vv v10, v8, v8 1706; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1707; CHECK-NEXT: vmand.mm v0, v10, v9 1708; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1709; CHECK-NEXT: vmnot.m v0, v0 1710; CHECK-NEXT: ret 1711 %head = insertelement <4 x half> poison, half %b, i32 0 1712 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1713 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1714 ret <4 x i1> %1 1715} 1716 1717define <4 x i1> @fcmp_uge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1718; CHECK-LABEL: fcmp_uge_fv_v4f16: 1719; CHECK: # %bb.0: 1720; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1721; CHECK-NEXT: vfmv.v.f v9, fa0 1722; CHECK-NEXT: vmfeq.vv v10, v8, v8 1723; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1724; CHECK-NEXT: vmand.mm v0, v9, v10 1725; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1726; CHECK-NEXT: vmnot.m v0, v0 1727; CHECK-NEXT: ret 1728 %head = insertelement <4 x half> poison, half %b, i32 0 1729 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1730 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1731 ret <4 x i1> %1 1732} 1733 1734define <4 x i1> @fcmp_ult_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1735; CHECK-LABEL: fcmp_ult_vv_v4f16: 1736; CHECK: # %bb.0: 1737; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1738; CHECK-NEXT: vmfeq.vv v10, v8, v8 1739; CHECK-NEXT: vmfeq.vv v11, v9, v9 1740; CHECK-NEXT: vmand.mm v0, v11, v10 1741; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1742; CHECK-NEXT: vmnot.m v0, v0 1743; CHECK-NEXT: ret 1744 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1745 ret <4 x i1> %1 1746} 1747 1748define <4 x i1> @fcmp_ult_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1749; CHECK-LABEL: fcmp_ult_vf_v4f16: 1750; CHECK: # %bb.0: 1751; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1752; CHECK-NEXT: vfmv.v.f v9, fa0 1753; CHECK-NEXT: vmfeq.vv v10, v8, v8 1754; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1755; CHECK-NEXT: vmand.mm v0, v9, v10 1756; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 1757; CHECK-NEXT: vmnot.m v0, v0 1758; CHECK-NEXT: ret 1759 %head = insertelement <4 x half> poison, half %b, i32 0 1760 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1761 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1762 ret <4 x i1> %1 1763} 1764 1765define <4 x i1> @fcmp_ult_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1766; CHECK-LABEL: fcmp_ult_fv_v4f16: 1767; CHECK: # %bb.0: 1768; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1769; CHECK-NEXT: vfmv.v.f v9, fa0 1770; CHECK-NEXT: vmfeq.vv v10, v8, v8 1771; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1772; CHECK-NEXT: vmand.mm v0, v10, v9 1773; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 1774; CHECK-NEXT: vmnot.m v0, v0 1775; CHECK-NEXT: ret 1776 %head = insertelement <4 x half> poison, half %b, i32 0 1777 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1778 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 1779 ret <4 x i1> %1 1780} 1781 1782define <4 x i1> @fcmp_ule_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1783; CHECK-LABEL: fcmp_ule_vv_v4f16: 1784; CHECK: # %bb.0: 1785; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1786; CHECK-NEXT: vmfeq.vv v10, v8, v8 1787; CHECK-NEXT: vmfeq.vv v11, v9, v9 1788; CHECK-NEXT: vmand.mm v0, v11, v10 1789; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1790; CHECK-NEXT: vmnot.m v0, v0 1791; CHECK-NEXT: ret 1792 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 1793 ret <4 x i1> %1 1794} 1795 1796define <4 x i1> @fcmp_ule_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1797; CHECK-LABEL: fcmp_ule_vf_v4f16: 1798; CHECK: # %bb.0: 1799; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1800; CHECK-NEXT: vfmv.v.f v9, fa0 1801; CHECK-NEXT: vmfeq.vv v10, v8, v8 1802; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1803; CHECK-NEXT: vmand.mm v0, v9, v10 1804; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1805; CHECK-NEXT: vmnot.m v0, v0 1806; CHECK-NEXT: ret 1807 %head = insertelement <4 x half> poison, half %b, i32 0 1808 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1809 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 1810 ret <4 x i1> %1 1811} 1812 1813define <4 x i1> @fcmp_ule_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1814; CHECK-LABEL: fcmp_ule_fv_v4f16: 1815; CHECK: # %bb.0: 1816; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu 1817; CHECK-NEXT: vfmv.v.f v9, fa0 1818; CHECK-NEXT: vmfeq.vv v10, v8, v8 1819; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1820; CHECK-NEXT: vmand.mm v0, v10, v9 1821; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1822; CHECK-NEXT: vmnot.m v0, v0 1823; CHECK-NEXT: ret 1824 %head = insertelement <4 x half> poison, half %b, i32 0 1825 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1826 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 1827 ret <4 x i1> %1 1828} 1829 1830define <4 x i1> @fcmp_une_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1831; CHECK-LABEL: fcmp_une_vv_v4f16: 1832; CHECK: # %bb.0: 1833; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1834; CHECK-NEXT: vmfne.vv v0, v8, v9 1835; CHECK-NEXT: ret 1836 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 1837 ret <4 x i1> %1 1838} 1839 1840define <4 x i1> @fcmp_une_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1841; CHECK-LABEL: fcmp_une_vf_v4f16: 1842; CHECK: # %bb.0: 1843; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1844; CHECK-NEXT: vmfne.vf v0, v8, fa0 1845; CHECK-NEXT: ret 1846 %head = insertelement <4 x half> poison, half %b, i32 0 1847 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1848 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1849 ret <4 x i1> %1 1850} 1851 1852define <4 x i1> @fcmp_une_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1853; CHECK-LABEL: fcmp_une_fv_v4f16: 1854; CHECK: # %bb.0: 1855; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1856; CHECK-NEXT: vmfne.vf v0, v8, fa0 1857; CHECK-NEXT: ret 1858 %head = insertelement <4 x half> poison, half %b, i32 0 1859 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1860 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1861 ret <4 x i1> %1 1862} 1863 1864define <4 x i1> @fcmp_uno_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1865; CHECK-LABEL: fcmp_uno_vv_v4f16: 1866; CHECK: # %bb.0: 1867; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1868; CHECK-NEXT: vmfne.vv v9, v9, v9 1869; CHECK-NEXT: vmfne.vv v8, v8, v8 1870; CHECK-NEXT: vmor.mm v0, v8, v9 1871; CHECK-NEXT: ret 1872 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1873 ret <4 x i1> %1 1874} 1875 1876define <4 x i1> @fcmp_uno_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1877; CHECK-LABEL: fcmp_uno_vf_v4f16: 1878; CHECK: # %bb.0: 1879; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1880; CHECK-NEXT: vfmv.v.f v9, fa0 1881; CHECK-NEXT: vmfne.vf v9, v9, fa0 1882; CHECK-NEXT: vmfne.vv v8, v8, v8 1883; CHECK-NEXT: vmor.mm v0, v8, v9 1884; CHECK-NEXT: ret 1885 %head = insertelement <4 x half> poison, half %b, i32 0 1886 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1887 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1888 ret <4 x i1> %1 1889} 1890 1891define <4 x i1> @fcmp_uno_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1892; CHECK-LABEL: fcmp_uno_fv_v4f16: 1893; CHECK: # %bb.0: 1894; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1895; CHECK-NEXT: vfmv.v.f v9, fa0 1896; CHECK-NEXT: vmfne.vf v9, v9, fa0 1897; CHECK-NEXT: vmfne.vv v8, v8, v8 1898; CHECK-NEXT: vmor.mm v0, v9, v8 1899; CHECK-NEXT: ret 1900 %head = insertelement <4 x half> poison, half %b, i32 0 1901 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1902 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1903 ret <4 x i1> %1 1904} 1905 1906declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half>, <8 x half>, metadata, metadata) 1907define <8 x i1> @fcmp_oeq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1908; CHECK-LABEL: fcmp_oeq_vv_v8f16: 1909; CHECK: # %bb.0: 1910; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1911; CHECK-NEXT: vmfeq.vv v0, v8, v9 1912; CHECK-NEXT: ret 1913 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1914 ret <8 x i1> %1 1915} 1916 1917define <8 x i1> @fcmp_oeq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1918; CHECK-LABEL: fcmp_oeq_vf_v8f16: 1919; CHECK: # %bb.0: 1920; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1921; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1922; CHECK-NEXT: ret 1923 %head = insertelement <8 x half> poison, half %b, i32 0 1924 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1925 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1926 ret <8 x i1> %1 1927} 1928 1929define <8 x i1> @fcmp_oeq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1930; CHECK-LABEL: fcmp_oeq_fv_v8f16: 1931; CHECK: # %bb.0: 1932; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1933; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1934; CHECK-NEXT: ret 1935 %head = insertelement <8 x half> poison, half %b, i32 0 1936 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1937 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1938 ret <8 x i1> %1 1939} 1940 1941define <8 x i1> @fcmp_ogt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1942; CHECK-LABEL: fcmp_ogt_vv_v8f16: 1943; CHECK: # %bb.0: 1944; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1945; CHECK-NEXT: vmfeq.vv v10, v8, v8 1946; CHECK-NEXT: vmfeq.vv v11, v9, v9 1947; CHECK-NEXT: vmand.mm v0, v11, v10 1948; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 1949; CHECK-NEXT: ret 1950 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1951 ret <8 x i1> %1 1952} 1953 1954define <8 x i1> @fcmp_ogt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1955; CHECK-LABEL: fcmp_ogt_vf_v8f16: 1956; CHECK: # %bb.0: 1957; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1958; CHECK-NEXT: vfmv.v.f v9, fa0 1959; CHECK-NEXT: vmfeq.vv v10, v8, v8 1960; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1961; CHECK-NEXT: vmand.mm v0, v9, v10 1962; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1963; CHECK-NEXT: ret 1964 %head = insertelement <8 x half> poison, half %b, i32 0 1965 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1966 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1967 ret <8 x i1> %1 1968} 1969 1970define <8 x i1> @fcmp_ogt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1971; CHECK-LABEL: fcmp_ogt_fv_v8f16: 1972; CHECK: # %bb.0: 1973; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1974; CHECK-NEXT: vfmv.v.f v9, fa0 1975; CHECK-NEXT: vmfeq.vv v10, v8, v8 1976; CHECK-NEXT: vmfeq.vf v9, v9, fa0 1977; CHECK-NEXT: vmand.mm v0, v10, v9 1978; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 1979; CHECK-NEXT: ret 1980 %head = insertelement <8 x half> poison, half %b, i32 0 1981 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1982 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1983 ret <8 x i1> %1 1984} 1985 1986define <8 x i1> @fcmp_oge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1987; CHECK-LABEL: fcmp_oge_vv_v8f16: 1988; CHECK: # %bb.0: 1989; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1990; CHECK-NEXT: vmfeq.vv v10, v8, v8 1991; CHECK-NEXT: vmfeq.vv v11, v9, v9 1992; CHECK-NEXT: vmand.mm v0, v11, v10 1993; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 1994; CHECK-NEXT: ret 1995 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 1996 ret <8 x i1> %1 1997} 1998 1999define <8 x i1> @fcmp_oge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2000; CHECK-LABEL: fcmp_oge_vf_v8f16: 2001; CHECK: # %bb.0: 2002; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2003; CHECK-NEXT: vfmv.v.f v9, fa0 2004; CHECK-NEXT: vmfeq.vv v10, v8, v8 2005; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2006; CHECK-NEXT: vmand.mm v0, v9, v10 2007; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 2008; CHECK-NEXT: ret 2009 %head = insertelement <8 x half> poison, half %b, i32 0 2010 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2011 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2012 ret <8 x i1> %1 2013} 2014 2015define <8 x i1> @fcmp_oge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2016; CHECK-LABEL: fcmp_oge_fv_v8f16: 2017; CHECK: # %bb.0: 2018; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2019; CHECK-NEXT: vfmv.v.f v9, fa0 2020; CHECK-NEXT: vmfeq.vv v10, v8, v8 2021; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2022; CHECK-NEXT: vmand.mm v0, v10, v9 2023; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 2024; CHECK-NEXT: ret 2025 %head = insertelement <8 x half> poison, half %b, i32 0 2026 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2027 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2028 ret <8 x i1> %1 2029} 2030 2031define <8 x i1> @fcmp_olt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2032; CHECK-LABEL: fcmp_olt_vv_v8f16: 2033; CHECK: # %bb.0: 2034; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2035; CHECK-NEXT: vmfeq.vv v10, v9, v9 2036; CHECK-NEXT: vmfeq.vv v11, v8, v8 2037; CHECK-NEXT: vmand.mm v0, v11, v10 2038; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 2039; CHECK-NEXT: ret 2040 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2041 ret <8 x i1> %1 2042} 2043 2044define <8 x i1> @fcmp_olt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2045; CHECK-LABEL: fcmp_olt_vf_v8f16: 2046; CHECK: # %bb.0: 2047; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2048; CHECK-NEXT: vfmv.v.f v9, fa0 2049; CHECK-NEXT: vmfeq.vv v10, v8, v8 2050; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2051; CHECK-NEXT: vmand.mm v0, v10, v9 2052; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 2053; CHECK-NEXT: ret 2054 %head = insertelement <8 x half> poison, half %b, i32 0 2055 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2056 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2057 ret <8 x i1> %1 2058} 2059 2060define <8 x i1> @fcmp_olt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2061; CHECK-LABEL: fcmp_olt_fv_v8f16: 2062; CHECK: # %bb.0: 2063; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2064; CHECK-NEXT: vfmv.v.f v9, fa0 2065; CHECK-NEXT: vmfeq.vv v10, v8, v8 2066; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2067; CHECK-NEXT: vmand.mm v0, v9, v10 2068; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 2069; CHECK-NEXT: ret 2070 %head = insertelement <8 x half> poison, half %b, i32 0 2071 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2072 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2073 ret <8 x i1> %1 2074} 2075 2076define <8 x i1> @fcmp_ole_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2077; CHECK-LABEL: fcmp_ole_vv_v8f16: 2078; CHECK: # %bb.0: 2079; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2080; CHECK-NEXT: vmfeq.vv v10, v9, v9 2081; CHECK-NEXT: vmfeq.vv v11, v8, v8 2082; CHECK-NEXT: vmand.mm v0, v11, v10 2083; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 2084; CHECK-NEXT: ret 2085 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2086 ret <8 x i1> %1 2087} 2088 2089define <8 x i1> @fcmp_ole_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2090; CHECK-LABEL: fcmp_ole_vf_v8f16: 2091; CHECK: # %bb.0: 2092; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2093; CHECK-NEXT: vfmv.v.f v9, fa0 2094; CHECK-NEXT: vmfeq.vv v10, v8, v8 2095; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2096; CHECK-NEXT: vmand.mm v0, v10, v9 2097; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 2098; CHECK-NEXT: ret 2099 %head = insertelement <8 x half> poison, half %b, i32 0 2100 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2101 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2102 ret <8 x i1> %1 2103} 2104 2105define <8 x i1> @fcmp_ole_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2106; CHECK-LABEL: fcmp_ole_fv_v8f16: 2107; CHECK: # %bb.0: 2108; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2109; CHECK-NEXT: vfmv.v.f v9, fa0 2110; CHECK-NEXT: vmfeq.vv v10, v8, v8 2111; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2112; CHECK-NEXT: vmand.mm v0, v9, v10 2113; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 2114; CHECK-NEXT: ret 2115 %head = insertelement <8 x half> poison, half %b, i32 0 2116 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2117 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2118 ret <8 x i1> %1 2119} 2120 2121define <8 x i1> @fcmp_one_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2122; CHECK-LABEL: fcmp_one_vv_v8f16: 2123; CHECK: # %bb.0: 2124; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2125; CHECK-NEXT: vmfeq.vv v10, v9, v9 2126; CHECK-NEXT: vmfeq.vv v11, v8, v8 2127; CHECK-NEXT: vmand.mm v0, v11, v10 2128; CHECK-NEXT: vmv.v.v v10, v0 2129; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 2130; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 2131; CHECK-NEXT: vmor.mm v0, v0, v10 2132; CHECK-NEXT: ret 2133 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2134 ret <8 x i1> %1 2135} 2136 2137define <8 x i1> @fcmp_one_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2138; CHECK-LABEL: fcmp_one_vf_v8f16: 2139; CHECK: # %bb.0: 2140; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2141; CHECK-NEXT: vfmv.v.f v9, fa0 2142; CHECK-NEXT: vmfeq.vv v10, v8, v8 2143; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2144; CHECK-NEXT: vmand.mm v0, v10, v9 2145; CHECK-NEXT: vmv.v.v v9, v0 2146; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 2147; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 2148; CHECK-NEXT: vmor.mm v0, v0, v9 2149; CHECK-NEXT: ret 2150 %head = insertelement <8 x half> poison, half %b, i32 0 2151 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2152 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2153 ret <8 x i1> %1 2154} 2155 2156define <8 x i1> @fcmp_one_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2157; CHECK-LABEL: fcmp_one_fv_v8f16: 2158; CHECK: # %bb.0: 2159; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2160; CHECK-NEXT: vfmv.v.f v9, fa0 2161; CHECK-NEXT: vmfeq.vv v10, v8, v8 2162; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2163; CHECK-NEXT: vmand.mm v0, v9, v10 2164; CHECK-NEXT: vmv.v.v v9, v0 2165; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 2166; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 2167; CHECK-NEXT: vmor.mm v0, v0, v9 2168; CHECK-NEXT: ret 2169 %head = insertelement <8 x half> poison, half %b, i32 0 2170 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2171 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2172 ret <8 x i1> %1 2173} 2174 2175define <8 x i1> @fcmp_ord_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2176; CHECK-LABEL: fcmp_ord_vv_v8f16: 2177; CHECK: # %bb.0: 2178; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2179; CHECK-NEXT: vmfeq.vv v9, v9, v9 2180; CHECK-NEXT: vmfeq.vv v8, v8, v8 2181; CHECK-NEXT: vmand.mm v0, v8, v9 2182; CHECK-NEXT: ret 2183 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2184 ret <8 x i1> %1 2185} 2186 2187define <8 x i1> @fcmp_ord_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2188; CHECK-LABEL: fcmp_ord_vf_v8f16: 2189; CHECK: # %bb.0: 2190; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2191; CHECK-NEXT: vfmv.v.f v9, fa0 2192; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2193; CHECK-NEXT: vmfeq.vv v8, v8, v8 2194; CHECK-NEXT: vmand.mm v0, v8, v9 2195; CHECK-NEXT: ret 2196 %head = insertelement <8 x half> poison, half %b, i32 0 2197 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2198 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2199 ret <8 x i1> %1 2200} 2201 2202define <8 x i1> @fcmp_ord_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2203; CHECK-LABEL: fcmp_ord_fv_v8f16: 2204; CHECK: # %bb.0: 2205; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2206; CHECK-NEXT: vfmv.v.f v9, fa0 2207; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2208; CHECK-NEXT: vmfeq.vv v8, v8, v8 2209; CHECK-NEXT: vmand.mm v0, v9, v8 2210; CHECK-NEXT: ret 2211 %head = insertelement <8 x half> poison, half %b, i32 0 2212 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2213 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2214 ret <8 x i1> %1 2215} 2216 2217define <8 x i1> @fcmp_ueq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2218; CHECK-LABEL: fcmp_ueq_vv_v8f16: 2219; CHECK: # %bb.0: 2220; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2221; CHECK-NEXT: vmfeq.vv v10, v9, v9 2222; CHECK-NEXT: vmfeq.vv v11, v8, v8 2223; CHECK-NEXT: vmand.mm v0, v11, v10 2224; CHECK-NEXT: vmv.v.v v10, v0 2225; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 2226; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 2227; CHECK-NEXT: vmnor.mm v0, v0, v10 2228; CHECK-NEXT: ret 2229 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2230 ret <8 x i1> %1 2231} 2232 2233define <8 x i1> @fcmp_ueq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2234; CHECK-LABEL: fcmp_ueq_vf_v8f16: 2235; CHECK: # %bb.0: 2236; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2237; CHECK-NEXT: vfmv.v.f v9, fa0 2238; CHECK-NEXT: vmfeq.vv v10, v8, v8 2239; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2240; CHECK-NEXT: vmand.mm v0, v10, v9 2241; CHECK-NEXT: vmv.v.v v9, v0 2242; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 2243; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 2244; CHECK-NEXT: vmnor.mm v0, v0, v9 2245; CHECK-NEXT: ret 2246 %head = insertelement <8 x half> poison, half %b, i32 0 2247 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2248 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2249 ret <8 x i1> %1 2250} 2251 2252define <8 x i1> @fcmp_ueq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2253; CHECK-LABEL: fcmp_ueq_fv_v8f16: 2254; CHECK: # %bb.0: 2255; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2256; CHECK-NEXT: vfmv.v.f v9, fa0 2257; CHECK-NEXT: vmfeq.vv v10, v8, v8 2258; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2259; CHECK-NEXT: vmand.mm v0, v9, v10 2260; CHECK-NEXT: vmv.v.v v9, v0 2261; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 2262; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 2263; CHECK-NEXT: vmnor.mm v0, v0, v9 2264; CHECK-NEXT: ret 2265 %head = insertelement <8 x half> poison, half %b, i32 0 2266 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2267 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2268 ret <8 x i1> %1 2269} 2270 2271define <8 x i1> @fcmp_ugt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2272; CHECK-LABEL: fcmp_ugt_vv_v8f16: 2273; CHECK: # %bb.0: 2274; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2275; CHECK-NEXT: vmfeq.vv v10, v9, v9 2276; CHECK-NEXT: vmfeq.vv v11, v8, v8 2277; CHECK-NEXT: vmand.mm v0, v11, v10 2278; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 2279; CHECK-NEXT: vmnot.m v0, v0 2280; CHECK-NEXT: ret 2281 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2282 ret <8 x i1> %1 2283} 2284 2285define <8 x i1> @fcmp_ugt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2286; CHECK-LABEL: fcmp_ugt_vf_v8f16: 2287; CHECK: # %bb.0: 2288; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2289; CHECK-NEXT: vfmv.v.f v9, fa0 2290; CHECK-NEXT: vmfeq.vv v10, v8, v8 2291; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2292; CHECK-NEXT: vmand.mm v0, v10, v9 2293; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 2294; CHECK-NEXT: vmnot.m v0, v0 2295; CHECK-NEXT: ret 2296 %head = insertelement <8 x half> poison, half %b, i32 0 2297 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2298 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2299 ret <8 x i1> %1 2300} 2301 2302define <8 x i1> @fcmp_ugt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2303; CHECK-LABEL: fcmp_ugt_fv_v8f16: 2304; CHECK: # %bb.0: 2305; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2306; CHECK-NEXT: vfmv.v.f v9, fa0 2307; CHECK-NEXT: vmfeq.vv v10, v8, v8 2308; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2309; CHECK-NEXT: vmand.mm v0, v9, v10 2310; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 2311; CHECK-NEXT: vmnot.m v0, v0 2312; CHECK-NEXT: ret 2313 %head = insertelement <8 x half> poison, half %b, i32 0 2314 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2315 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2316 ret <8 x i1> %1 2317} 2318 2319define <8 x i1> @fcmp_uge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2320; CHECK-LABEL: fcmp_uge_vv_v8f16: 2321; CHECK: # %bb.0: 2322; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2323; CHECK-NEXT: vmfeq.vv v10, v9, v9 2324; CHECK-NEXT: vmfeq.vv v11, v8, v8 2325; CHECK-NEXT: vmand.mm v0, v11, v10 2326; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 2327; CHECK-NEXT: vmnot.m v0, v0 2328; CHECK-NEXT: ret 2329 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 2330 ret <8 x i1> %1 2331} 2332 2333define <8 x i1> @fcmp_uge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2334; CHECK-LABEL: fcmp_uge_vf_v8f16: 2335; CHECK: # %bb.0: 2336; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2337; CHECK-NEXT: vfmv.v.f v9, fa0 2338; CHECK-NEXT: vmfeq.vv v10, v8, v8 2339; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2340; CHECK-NEXT: vmand.mm v0, v10, v9 2341; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 2342; CHECK-NEXT: vmnot.m v0, v0 2343; CHECK-NEXT: ret 2344 %head = insertelement <8 x half> poison, half %b, i32 0 2345 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2346 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 2347 ret <8 x i1> %1 2348} 2349 2350define <8 x i1> @fcmp_uge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2351; CHECK-LABEL: fcmp_uge_fv_v8f16: 2352; CHECK: # %bb.0: 2353; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2354; CHECK-NEXT: vfmv.v.f v9, fa0 2355; CHECK-NEXT: vmfeq.vv v10, v8, v8 2356; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2357; CHECK-NEXT: vmand.mm v0, v9, v10 2358; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 2359; CHECK-NEXT: vmnot.m v0, v0 2360; CHECK-NEXT: ret 2361 %head = insertelement <8 x half> poison, half %b, i32 0 2362 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2363 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 2364 ret <8 x i1> %1 2365} 2366 2367define <8 x i1> @fcmp_ult_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2368; CHECK-LABEL: fcmp_ult_vv_v8f16: 2369; CHECK: # %bb.0: 2370; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2371; CHECK-NEXT: vmfeq.vv v10, v8, v8 2372; CHECK-NEXT: vmfeq.vv v11, v9, v9 2373; CHECK-NEXT: vmand.mm v0, v11, v10 2374; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 2375; CHECK-NEXT: vmnot.m v0, v0 2376; CHECK-NEXT: ret 2377 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 2378 ret <8 x i1> %1 2379} 2380 2381define <8 x i1> @fcmp_ult_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2382; CHECK-LABEL: fcmp_ult_vf_v8f16: 2383; CHECK: # %bb.0: 2384; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2385; CHECK-NEXT: vfmv.v.f v9, fa0 2386; CHECK-NEXT: vmfeq.vv v10, v8, v8 2387; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2388; CHECK-NEXT: vmand.mm v0, v9, v10 2389; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 2390; CHECK-NEXT: vmnot.m v0, v0 2391; CHECK-NEXT: ret 2392 %head = insertelement <8 x half> poison, half %b, i32 0 2393 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2394 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 2395 ret <8 x i1> %1 2396} 2397 2398define <8 x i1> @fcmp_ult_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2399; CHECK-LABEL: fcmp_ult_fv_v8f16: 2400; CHECK: # %bb.0: 2401; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2402; CHECK-NEXT: vfmv.v.f v9, fa0 2403; CHECK-NEXT: vmfeq.vv v10, v8, v8 2404; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2405; CHECK-NEXT: vmand.mm v0, v10, v9 2406; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 2407; CHECK-NEXT: vmnot.m v0, v0 2408; CHECK-NEXT: ret 2409 %head = insertelement <8 x half> poison, half %b, i32 0 2410 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2411 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 2412 ret <8 x i1> %1 2413} 2414 2415define <8 x i1> @fcmp_ule_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2416; CHECK-LABEL: fcmp_ule_vv_v8f16: 2417; CHECK: # %bb.0: 2418; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2419; CHECK-NEXT: vmfeq.vv v10, v8, v8 2420; CHECK-NEXT: vmfeq.vv v11, v9, v9 2421; CHECK-NEXT: vmand.mm v0, v11, v10 2422; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 2423; CHECK-NEXT: vmnot.m v0, v0 2424; CHECK-NEXT: ret 2425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 2426 ret <8 x i1> %1 2427} 2428 2429define <8 x i1> @fcmp_ule_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2430; CHECK-LABEL: fcmp_ule_vf_v8f16: 2431; CHECK: # %bb.0: 2432; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2433; CHECK-NEXT: vfmv.v.f v9, fa0 2434; CHECK-NEXT: vmfeq.vv v10, v8, v8 2435; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2436; CHECK-NEXT: vmand.mm v0, v9, v10 2437; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 2438; CHECK-NEXT: vmnot.m v0, v0 2439; CHECK-NEXT: ret 2440 %head = insertelement <8 x half> poison, half %b, i32 0 2441 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2442 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 2443 ret <8 x i1> %1 2444} 2445 2446define <8 x i1> @fcmp_ule_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2447; CHECK-LABEL: fcmp_ule_fv_v8f16: 2448; CHECK: # %bb.0: 2449; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2450; CHECK-NEXT: vfmv.v.f v9, fa0 2451; CHECK-NEXT: vmfeq.vv v10, v8, v8 2452; CHECK-NEXT: vmfeq.vf v9, v9, fa0 2453; CHECK-NEXT: vmand.mm v0, v10, v9 2454; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 2455; CHECK-NEXT: vmnot.m v0, v0 2456; CHECK-NEXT: ret 2457 %head = insertelement <8 x half> poison, half %b, i32 0 2458 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2459 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 2460 ret <8 x i1> %1 2461} 2462 2463define <8 x i1> @fcmp_une_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2464; CHECK-LABEL: fcmp_une_vv_v8f16: 2465; CHECK: # %bb.0: 2466; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2467; CHECK-NEXT: vmfne.vv v0, v8, v9 2468; CHECK-NEXT: ret 2469 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 2470 ret <8 x i1> %1 2471} 2472 2473define <8 x i1> @fcmp_une_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2474; CHECK-LABEL: fcmp_une_vf_v8f16: 2475; CHECK: # %bb.0: 2476; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2477; CHECK-NEXT: vmfne.vf v0, v8, fa0 2478; CHECK-NEXT: ret 2479 %head = insertelement <8 x half> poison, half %b, i32 0 2480 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2481 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 2482 ret <8 x i1> %1 2483} 2484 2485define <8 x i1> @fcmp_une_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2486; CHECK-LABEL: fcmp_une_fv_v8f16: 2487; CHECK: # %bb.0: 2488; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2489; CHECK-NEXT: vmfne.vf v0, v8, fa0 2490; CHECK-NEXT: ret 2491 %head = insertelement <8 x half> poison, half %b, i32 0 2492 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2493 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 2494 ret <8 x i1> %1 2495} 2496 2497define <8 x i1> @fcmp_uno_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2498; CHECK-LABEL: fcmp_uno_vv_v8f16: 2499; CHECK: # %bb.0: 2500; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2501; CHECK-NEXT: vmfne.vv v9, v9, v9 2502; CHECK-NEXT: vmfne.vv v8, v8, v8 2503; CHECK-NEXT: vmor.mm v0, v8, v9 2504; CHECK-NEXT: ret 2505 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 2506 ret <8 x i1> %1 2507} 2508 2509define <8 x i1> @fcmp_uno_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2510; CHECK-LABEL: fcmp_uno_vf_v8f16: 2511; CHECK: # %bb.0: 2512; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2513; CHECK-NEXT: vfmv.v.f v9, fa0 2514; CHECK-NEXT: vmfne.vf v9, v9, fa0 2515; CHECK-NEXT: vmfne.vv v8, v8, v8 2516; CHECK-NEXT: vmor.mm v0, v8, v9 2517; CHECK-NEXT: ret 2518 %head = insertelement <8 x half> poison, half %b, i32 0 2519 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2520 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 2521 ret <8 x i1> %1 2522} 2523 2524define <8 x i1> @fcmp_uno_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2525; CHECK-LABEL: fcmp_uno_fv_v8f16: 2526; CHECK: # %bb.0: 2527; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2528; CHECK-NEXT: vfmv.v.f v9, fa0 2529; CHECK-NEXT: vmfne.vf v9, v9, fa0 2530; CHECK-NEXT: vmfne.vv v8, v8, v8 2531; CHECK-NEXT: vmor.mm v0, v9, v8 2532; CHECK-NEXT: ret 2533 %head = insertelement <8 x half> poison, half %b, i32 0 2534 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2535 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 2536 ret <8 x i1> %1 2537} 2538 2539declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half>, <16 x half>, metadata, metadata) 2540define <16 x i1> @fcmp_oeq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2541; CHECK-LABEL: fcmp_oeq_vv_v16f16: 2542; CHECK: # %bb.0: 2543; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2544; CHECK-NEXT: vmfeq.vv v0, v8, v10 2545; CHECK-NEXT: ret 2546 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2547 ret <16 x i1> %1 2548} 2549 2550define <16 x i1> @fcmp_oeq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2551; CHECK-LABEL: fcmp_oeq_vf_v16f16: 2552; CHECK: # %bb.0: 2553; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2554; CHECK-NEXT: vmfeq.vf v0, v8, fa0 2555; CHECK-NEXT: ret 2556 %head = insertelement <16 x half> poison, half %b, i32 0 2557 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2558 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2559 ret <16 x i1> %1 2560} 2561 2562define <16 x i1> @fcmp_oeq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2563; CHECK-LABEL: fcmp_oeq_fv_v16f16: 2564; CHECK: # %bb.0: 2565; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2566; CHECK-NEXT: vmfeq.vf v0, v8, fa0 2567; CHECK-NEXT: ret 2568 %head = insertelement <16 x half> poison, half %b, i32 0 2569 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2570 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2571 ret <16 x i1> %1 2572} 2573 2574define <16 x i1> @fcmp_ogt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2575; CHECK-LABEL: fcmp_ogt_vv_v16f16: 2576; CHECK: # %bb.0: 2577; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2578; CHECK-NEXT: vmfeq.vv v12, v8, v8 2579; CHECK-NEXT: vmfeq.vv v13, v10, v10 2580; CHECK-NEXT: vmand.mm v12, v13, v12 2581; CHECK-NEXT: vmv1r.v v0, v12 2582; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2583; CHECK-NEXT: vmv1r.v v0, v12 2584; CHECK-NEXT: ret 2585 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2586 ret <16 x i1> %1 2587} 2588 2589define <16 x i1> @fcmp_ogt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2590; CHECK-LABEL: fcmp_ogt_vf_v16f16: 2591; CHECK: # %bb.0: 2592; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2593; CHECK-NEXT: vfmv.v.f v10, fa0 2594; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2595; CHECK-NEXT: vmfeq.vv v10, v8, v8 2596; CHECK-NEXT: vmand.mm v10, v12, v10 2597; CHECK-NEXT: vmv1r.v v0, v10 2598; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2599; CHECK-NEXT: vmv1r.v v0, v10 2600; CHECK-NEXT: ret 2601 %head = insertelement <16 x half> poison, half %b, i32 0 2602 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2603 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2604 ret <16 x i1> %1 2605} 2606 2607define <16 x i1> @fcmp_ogt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2608; CHECK-LABEL: fcmp_ogt_fv_v16f16: 2609; CHECK: # %bb.0: 2610; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2611; CHECK-NEXT: vfmv.v.f v10, fa0 2612; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2613; CHECK-NEXT: vmfeq.vv v10, v8, v8 2614; CHECK-NEXT: vmand.mm v10, v10, v12 2615; CHECK-NEXT: vmv1r.v v0, v10 2616; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2617; CHECK-NEXT: vmv1r.v v0, v10 2618; CHECK-NEXT: ret 2619 %head = insertelement <16 x half> poison, half %b, i32 0 2620 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2621 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2622 ret <16 x i1> %1 2623} 2624 2625define <16 x i1> @fcmp_oge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2626; CHECK-LABEL: fcmp_oge_vv_v16f16: 2627; CHECK: # %bb.0: 2628; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2629; CHECK-NEXT: vmfeq.vv v12, v8, v8 2630; CHECK-NEXT: vmfeq.vv v13, v10, v10 2631; CHECK-NEXT: vmand.mm v12, v13, v12 2632; CHECK-NEXT: vmv1r.v v0, v12 2633; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 2634; CHECK-NEXT: vmv1r.v v0, v12 2635; CHECK-NEXT: ret 2636 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 2637 ret <16 x i1> %1 2638} 2639 2640define <16 x i1> @fcmp_oge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2641; CHECK-LABEL: fcmp_oge_vf_v16f16: 2642; CHECK: # %bb.0: 2643; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2644; CHECK-NEXT: vfmv.v.f v10, fa0 2645; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2646; CHECK-NEXT: vmfeq.vv v10, v8, v8 2647; CHECK-NEXT: vmand.mm v10, v12, v10 2648; CHECK-NEXT: vmv1r.v v0, v10 2649; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2650; CHECK-NEXT: vmv1r.v v0, v10 2651; CHECK-NEXT: ret 2652 %head = insertelement <16 x half> poison, half %b, i32 0 2653 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2654 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2655 ret <16 x i1> %1 2656} 2657 2658define <16 x i1> @fcmp_oge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2659; CHECK-LABEL: fcmp_oge_fv_v16f16: 2660; CHECK: # %bb.0: 2661; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2662; CHECK-NEXT: vfmv.v.f v10, fa0 2663; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2664; CHECK-NEXT: vmfeq.vv v10, v8, v8 2665; CHECK-NEXT: vmand.mm v10, v10, v12 2666; CHECK-NEXT: vmv1r.v v0, v10 2667; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2668; CHECK-NEXT: vmv1r.v v0, v10 2669; CHECK-NEXT: ret 2670 %head = insertelement <16 x half> poison, half %b, i32 0 2671 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2672 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2673 ret <16 x i1> %1 2674} 2675 2676define <16 x i1> @fcmp_olt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2677; CHECK-LABEL: fcmp_olt_vv_v16f16: 2678; CHECK: # %bb.0: 2679; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2680; CHECK-NEXT: vmfeq.vv v12, v10, v10 2681; CHECK-NEXT: vmfeq.vv v13, v8, v8 2682; CHECK-NEXT: vmand.mm v12, v13, v12 2683; CHECK-NEXT: vmv1r.v v0, v12 2684; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 2685; CHECK-NEXT: vmv1r.v v0, v12 2686; CHECK-NEXT: ret 2687 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2688 ret <16 x i1> %1 2689} 2690 2691define <16 x i1> @fcmp_olt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2692; CHECK-LABEL: fcmp_olt_vf_v16f16: 2693; CHECK: # %bb.0: 2694; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2695; CHECK-NEXT: vfmv.v.f v10, fa0 2696; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2697; CHECK-NEXT: vmfeq.vv v10, v8, v8 2698; CHECK-NEXT: vmand.mm v10, v10, v12 2699; CHECK-NEXT: vmv1r.v v0, v10 2700; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2701; CHECK-NEXT: vmv1r.v v0, v10 2702; CHECK-NEXT: ret 2703 %head = insertelement <16 x half> poison, half %b, i32 0 2704 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2705 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2706 ret <16 x i1> %1 2707} 2708 2709define <16 x i1> @fcmp_olt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2710; CHECK-LABEL: fcmp_olt_fv_v16f16: 2711; CHECK: # %bb.0: 2712; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2713; CHECK-NEXT: vfmv.v.f v10, fa0 2714; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2715; CHECK-NEXT: vmfeq.vv v10, v8, v8 2716; CHECK-NEXT: vmand.mm v10, v12, v10 2717; CHECK-NEXT: vmv1r.v v0, v10 2718; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2719; CHECK-NEXT: vmv1r.v v0, v10 2720; CHECK-NEXT: ret 2721 %head = insertelement <16 x half> poison, half %b, i32 0 2722 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2723 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2724 ret <16 x i1> %1 2725} 2726 2727define <16 x i1> @fcmp_ole_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2728; CHECK-LABEL: fcmp_ole_vv_v16f16: 2729; CHECK: # %bb.0: 2730; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2731; CHECK-NEXT: vmfeq.vv v12, v10, v10 2732; CHECK-NEXT: vmfeq.vv v13, v8, v8 2733; CHECK-NEXT: vmand.mm v12, v13, v12 2734; CHECK-NEXT: vmv1r.v v0, v12 2735; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 2736; CHECK-NEXT: vmv1r.v v0, v12 2737; CHECK-NEXT: ret 2738 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2739 ret <16 x i1> %1 2740} 2741 2742define <16 x i1> @fcmp_ole_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2743; CHECK-LABEL: fcmp_ole_vf_v16f16: 2744; CHECK: # %bb.0: 2745; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2746; CHECK-NEXT: vfmv.v.f v10, fa0 2747; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2748; CHECK-NEXT: vmfeq.vv v10, v8, v8 2749; CHECK-NEXT: vmand.mm v10, v10, v12 2750; CHECK-NEXT: vmv1r.v v0, v10 2751; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2752; CHECK-NEXT: vmv1r.v v0, v10 2753; CHECK-NEXT: ret 2754 %head = insertelement <16 x half> poison, half %b, i32 0 2755 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2756 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2757 ret <16 x i1> %1 2758} 2759 2760define <16 x i1> @fcmp_ole_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2761; CHECK-LABEL: fcmp_ole_fv_v16f16: 2762; CHECK: # %bb.0: 2763; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2764; CHECK-NEXT: vfmv.v.f v10, fa0 2765; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2766; CHECK-NEXT: vmfeq.vv v10, v8, v8 2767; CHECK-NEXT: vmand.mm v10, v12, v10 2768; CHECK-NEXT: vmv1r.v v0, v10 2769; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2770; CHECK-NEXT: vmv1r.v v0, v10 2771; CHECK-NEXT: ret 2772 %head = insertelement <16 x half> poison, half %b, i32 0 2773 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2774 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2775 ret <16 x i1> %1 2776} 2777 2778define <16 x i1> @fcmp_one_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2779; CHECK-LABEL: fcmp_one_vv_v16f16: 2780; CHECK: # %bb.0: 2781; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2782; CHECK-NEXT: vmfeq.vv v12, v10, v10 2783; CHECK-NEXT: vmfeq.vv v13, v8, v8 2784; CHECK-NEXT: vmand.mm v12, v13, v12 2785; CHECK-NEXT: vmv1r.v v13, v12 2786; CHECK-NEXT: vmv1r.v v0, v12 2787; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 2788; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2789; CHECK-NEXT: vmor.mm v0, v12, v13 2790; CHECK-NEXT: ret 2791 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2792 ret <16 x i1> %1 2793} 2794 2795define <16 x i1> @fcmp_one_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2796; CHECK-LABEL: fcmp_one_vf_v16f16: 2797; CHECK: # %bb.0: 2798; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2799; CHECK-NEXT: vfmv.v.f v10, fa0 2800; CHECK-NEXT: vmfeq.vv v12, v8, v8 2801; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2802; CHECK-NEXT: vmand.mm v10, v12, v13 2803; CHECK-NEXT: vmv1r.v v11, v10 2804; CHECK-NEXT: vmv1r.v v0, v10 2805; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 2806; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2807; CHECK-NEXT: vmor.mm v0, v10, v11 2808; CHECK-NEXT: ret 2809 %head = insertelement <16 x half> poison, half %b, i32 0 2810 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2811 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2812 ret <16 x i1> %1 2813} 2814 2815define <16 x i1> @fcmp_one_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2816; CHECK-LABEL: fcmp_one_fv_v16f16: 2817; CHECK: # %bb.0: 2818; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2819; CHECK-NEXT: vfmv.v.f v10, fa0 2820; CHECK-NEXT: vmfeq.vv v12, v8, v8 2821; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2822; CHECK-NEXT: vmand.mm v10, v13, v12 2823; CHECK-NEXT: vmv1r.v v11, v10 2824; CHECK-NEXT: vmv1r.v v0, v10 2825; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 2826; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2827; CHECK-NEXT: vmor.mm v0, v10, v11 2828; CHECK-NEXT: ret 2829 %head = insertelement <16 x half> poison, half %b, i32 0 2830 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2831 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2832 ret <16 x i1> %1 2833} 2834 2835define <16 x i1> @fcmp_ord_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2836; CHECK-LABEL: fcmp_ord_vv_v16f16: 2837; CHECK: # %bb.0: 2838; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2839; CHECK-NEXT: vmfeq.vv v12, v10, v10 2840; CHECK-NEXT: vmfeq.vv v10, v8, v8 2841; CHECK-NEXT: vmand.mm v0, v10, v12 2842; CHECK-NEXT: ret 2843 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2844 ret <16 x i1> %1 2845} 2846 2847define <16 x i1> @fcmp_ord_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2848; CHECK-LABEL: fcmp_ord_vf_v16f16: 2849; CHECK: # %bb.0: 2850; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2851; CHECK-NEXT: vfmv.v.f v10, fa0 2852; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2853; CHECK-NEXT: vmfeq.vv v10, v8, v8 2854; CHECK-NEXT: vmand.mm v0, v10, v12 2855; CHECK-NEXT: ret 2856 %head = insertelement <16 x half> poison, half %b, i32 0 2857 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2858 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2859 ret <16 x i1> %1 2860} 2861 2862define <16 x i1> @fcmp_ord_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2863; CHECK-LABEL: fcmp_ord_fv_v16f16: 2864; CHECK: # %bb.0: 2865; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2866; CHECK-NEXT: vfmv.v.f v10, fa0 2867; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2868; CHECK-NEXT: vmfeq.vv v10, v8, v8 2869; CHECK-NEXT: vmand.mm v0, v12, v10 2870; CHECK-NEXT: ret 2871 %head = insertelement <16 x half> poison, half %b, i32 0 2872 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2873 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2874 ret <16 x i1> %1 2875} 2876 2877define <16 x i1> @fcmp_ueq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2878; CHECK-LABEL: fcmp_ueq_vv_v16f16: 2879; CHECK: # %bb.0: 2880; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2881; CHECK-NEXT: vmfeq.vv v12, v10, v10 2882; CHECK-NEXT: vmfeq.vv v13, v8, v8 2883; CHECK-NEXT: vmand.mm v12, v13, v12 2884; CHECK-NEXT: vmv1r.v v13, v12 2885; CHECK-NEXT: vmv1r.v v0, v12 2886; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 2887; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 2888; CHECK-NEXT: vmnor.mm v0, v12, v13 2889; CHECK-NEXT: ret 2890 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2891 ret <16 x i1> %1 2892} 2893 2894define <16 x i1> @fcmp_ueq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2895; CHECK-LABEL: fcmp_ueq_vf_v16f16: 2896; CHECK: # %bb.0: 2897; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2898; CHECK-NEXT: vfmv.v.f v10, fa0 2899; CHECK-NEXT: vmfeq.vv v12, v8, v8 2900; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2901; CHECK-NEXT: vmand.mm v10, v12, v13 2902; CHECK-NEXT: vmv1r.v v11, v10 2903; CHECK-NEXT: vmv1r.v v0, v10 2904; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 2905; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2906; CHECK-NEXT: vmnor.mm v0, v10, v11 2907; CHECK-NEXT: ret 2908 %head = insertelement <16 x half> poison, half %b, i32 0 2909 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2910 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2911 ret <16 x i1> %1 2912} 2913 2914define <16 x i1> @fcmp_ueq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2915; CHECK-LABEL: fcmp_ueq_fv_v16f16: 2916; CHECK: # %bb.0: 2917; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2918; CHECK-NEXT: vfmv.v.f v10, fa0 2919; CHECK-NEXT: vmfeq.vv v12, v8, v8 2920; CHECK-NEXT: vmfeq.vf v13, v10, fa0 2921; CHECK-NEXT: vmand.mm v10, v13, v12 2922; CHECK-NEXT: vmv1r.v v11, v10 2923; CHECK-NEXT: vmv1r.v v0, v10 2924; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 2925; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 2926; CHECK-NEXT: vmnor.mm v0, v10, v11 2927; CHECK-NEXT: ret 2928 %head = insertelement <16 x half> poison, half %b, i32 0 2929 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2930 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2931 ret <16 x i1> %1 2932} 2933 2934define <16 x i1> @fcmp_ugt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2935; CHECK-LABEL: fcmp_ugt_vv_v16f16: 2936; CHECK: # %bb.0: 2937; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2938; CHECK-NEXT: vmfeq.vv v12, v10, v10 2939; CHECK-NEXT: vmfeq.vv v13, v8, v8 2940; CHECK-NEXT: vmand.mm v12, v13, v12 2941; CHECK-NEXT: vmv1r.v v0, v12 2942; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 2943; CHECK-NEXT: vmnot.m v0, v12 2944; CHECK-NEXT: ret 2945 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2946 ret <16 x i1> %1 2947} 2948 2949define <16 x i1> @fcmp_ugt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2950; CHECK-LABEL: fcmp_ugt_vf_v16f16: 2951; CHECK: # %bb.0: 2952; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2953; CHECK-NEXT: vfmv.v.f v10, fa0 2954; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2955; CHECK-NEXT: vmfeq.vv v10, v8, v8 2956; CHECK-NEXT: vmand.mm v10, v10, v12 2957; CHECK-NEXT: vmv1r.v v0, v10 2958; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 2959; CHECK-NEXT: vmnot.m v0, v10 2960; CHECK-NEXT: ret 2961 %head = insertelement <16 x half> poison, half %b, i32 0 2962 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2963 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2964 ret <16 x i1> %1 2965} 2966 2967define <16 x i1> @fcmp_ugt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2968; CHECK-LABEL: fcmp_ugt_fv_v16f16: 2969; CHECK: # %bb.0: 2970; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2971; CHECK-NEXT: vfmv.v.f v10, fa0 2972; CHECK-NEXT: vmfeq.vf v12, v10, fa0 2973; CHECK-NEXT: vmfeq.vv v10, v8, v8 2974; CHECK-NEXT: vmand.mm v10, v12, v10 2975; CHECK-NEXT: vmv1r.v v0, v10 2976; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 2977; CHECK-NEXT: vmnot.m v0, v10 2978; CHECK-NEXT: ret 2979 %head = insertelement <16 x half> poison, half %b, i32 0 2980 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2981 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2982 ret <16 x i1> %1 2983} 2984 2985define <16 x i1> @fcmp_uge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2986; CHECK-LABEL: fcmp_uge_vv_v16f16: 2987; CHECK: # %bb.0: 2988; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 2989; CHECK-NEXT: vmfeq.vv v12, v10, v10 2990; CHECK-NEXT: vmfeq.vv v13, v8, v8 2991; CHECK-NEXT: vmand.mm v12, v13, v12 2992; CHECK-NEXT: vmv1r.v v0, v12 2993; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 2994; CHECK-NEXT: vmnot.m v0, v12 2995; CHECK-NEXT: ret 2996 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 2997 ret <16 x i1> %1 2998} 2999 3000define <16 x i1> @fcmp_uge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3001; CHECK-LABEL: fcmp_uge_vf_v16f16: 3002; CHECK: # %bb.0: 3003; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3004; CHECK-NEXT: vfmv.v.f v10, fa0 3005; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3006; CHECK-NEXT: vmfeq.vv v10, v8, v8 3007; CHECK-NEXT: vmand.mm v10, v10, v12 3008; CHECK-NEXT: vmv1r.v v0, v10 3009; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 3010; CHECK-NEXT: vmnot.m v0, v10 3011; CHECK-NEXT: ret 3012 %head = insertelement <16 x half> poison, half %b, i32 0 3013 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3014 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3015 ret <16 x i1> %1 3016} 3017 3018define <16 x i1> @fcmp_uge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3019; CHECK-LABEL: fcmp_uge_fv_v16f16: 3020; CHECK: # %bb.0: 3021; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3022; CHECK-NEXT: vfmv.v.f v10, fa0 3023; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3024; CHECK-NEXT: vmfeq.vv v10, v8, v8 3025; CHECK-NEXT: vmand.mm v10, v12, v10 3026; CHECK-NEXT: vmv1r.v v0, v10 3027; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3028; CHECK-NEXT: vmnot.m v0, v10 3029; CHECK-NEXT: ret 3030 %head = insertelement <16 x half> poison, half %b, i32 0 3031 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3032 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3033 ret <16 x i1> %1 3034} 3035 3036define <16 x i1> @fcmp_ult_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 3037; CHECK-LABEL: fcmp_ult_vv_v16f16: 3038; CHECK: # %bb.0: 3039; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3040; CHECK-NEXT: vmfeq.vv v12, v8, v8 3041; CHECK-NEXT: vmfeq.vv v13, v10, v10 3042; CHECK-NEXT: vmand.mm v12, v13, v12 3043; CHECK-NEXT: vmv1r.v v0, v12 3044; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 3045; CHECK-NEXT: vmnot.m v0, v12 3046; CHECK-NEXT: ret 3047 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3048 ret <16 x i1> %1 3049} 3050 3051define <16 x i1> @fcmp_ult_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3052; CHECK-LABEL: fcmp_ult_vf_v16f16: 3053; CHECK: # %bb.0: 3054; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3055; CHECK-NEXT: vfmv.v.f v10, fa0 3056; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3057; CHECK-NEXT: vmfeq.vv v10, v8, v8 3058; CHECK-NEXT: vmand.mm v10, v12, v10 3059; CHECK-NEXT: vmv1r.v v0, v10 3060; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 3061; CHECK-NEXT: vmnot.m v0, v10 3062; CHECK-NEXT: ret 3063 %head = insertelement <16 x half> poison, half %b, i32 0 3064 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3065 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3066 ret <16 x i1> %1 3067} 3068 3069define <16 x i1> @fcmp_ult_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3070; CHECK-LABEL: fcmp_ult_fv_v16f16: 3071; CHECK: # %bb.0: 3072; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3073; CHECK-NEXT: vfmv.v.f v10, fa0 3074; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3075; CHECK-NEXT: vmfeq.vv v10, v8, v8 3076; CHECK-NEXT: vmand.mm v10, v10, v12 3077; CHECK-NEXT: vmv1r.v v0, v10 3078; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 3079; CHECK-NEXT: vmnot.m v0, v10 3080; CHECK-NEXT: ret 3081 %head = insertelement <16 x half> poison, half %b, i32 0 3082 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3083 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3084 ret <16 x i1> %1 3085} 3086 3087define <16 x i1> @fcmp_ule_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 3088; CHECK-LABEL: fcmp_ule_vv_v16f16: 3089; CHECK: # %bb.0: 3090; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3091; CHECK-NEXT: vmfeq.vv v12, v8, v8 3092; CHECK-NEXT: vmfeq.vv v13, v10, v10 3093; CHECK-NEXT: vmand.mm v12, v13, v12 3094; CHECK-NEXT: vmv1r.v v0, v12 3095; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 3096; CHECK-NEXT: vmnot.m v0, v12 3097; CHECK-NEXT: ret 3098 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3099 ret <16 x i1> %1 3100} 3101 3102define <16 x i1> @fcmp_ule_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3103; CHECK-LABEL: fcmp_ule_vf_v16f16: 3104; CHECK: # %bb.0: 3105; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3106; CHECK-NEXT: vfmv.v.f v10, fa0 3107; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3108; CHECK-NEXT: vmfeq.vv v10, v8, v8 3109; CHECK-NEXT: vmand.mm v10, v12, v10 3110; CHECK-NEXT: vmv1r.v v0, v10 3111; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3112; CHECK-NEXT: vmnot.m v0, v10 3113; CHECK-NEXT: ret 3114 %head = insertelement <16 x half> poison, half %b, i32 0 3115 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3116 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3117 ret <16 x i1> %1 3118} 3119 3120define <16 x i1> @fcmp_ule_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3121; CHECK-LABEL: fcmp_ule_fv_v16f16: 3122; CHECK: # %bb.0: 3123; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu 3124; CHECK-NEXT: vfmv.v.f v10, fa0 3125; CHECK-NEXT: vmfeq.vf v12, v10, fa0 3126; CHECK-NEXT: vmfeq.vv v10, v8, v8 3127; CHECK-NEXT: vmand.mm v10, v10, v12 3128; CHECK-NEXT: vmv1r.v v0, v10 3129; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 3130; CHECK-NEXT: vmnot.m v0, v10 3131; CHECK-NEXT: ret 3132 %head = insertelement <16 x half> poison, half %b, i32 0 3133 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3134 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3135 ret <16 x i1> %1 3136} 3137 3138define <16 x i1> @fcmp_une_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 3139; CHECK-LABEL: fcmp_une_vv_v16f16: 3140; CHECK: # %bb.0: 3141; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3142; CHECK-NEXT: vmfne.vv v0, v8, v10 3143; CHECK-NEXT: ret 3144 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3145 ret <16 x i1> %1 3146} 3147 3148define <16 x i1> @fcmp_une_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3149; CHECK-LABEL: fcmp_une_vf_v16f16: 3150; CHECK: # %bb.0: 3151; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3152; CHECK-NEXT: vmfne.vf v0, v8, fa0 3153; CHECK-NEXT: ret 3154 %head = insertelement <16 x half> poison, half %b, i32 0 3155 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3156 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3157 ret <16 x i1> %1 3158} 3159 3160define <16 x i1> @fcmp_une_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3161; CHECK-LABEL: fcmp_une_fv_v16f16: 3162; CHECK: # %bb.0: 3163; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3164; CHECK-NEXT: vmfne.vf v0, v8, fa0 3165; CHECK-NEXT: ret 3166 %head = insertelement <16 x half> poison, half %b, i32 0 3167 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3168 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3169 ret <16 x i1> %1 3170} 3171 3172define <16 x i1> @fcmp_uno_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 3173; CHECK-LABEL: fcmp_uno_vv_v16f16: 3174; CHECK: # %bb.0: 3175; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3176; CHECK-NEXT: vmfne.vv v12, v10, v10 3177; CHECK-NEXT: vmfne.vv v10, v8, v8 3178; CHECK-NEXT: vmor.mm v0, v10, v12 3179; CHECK-NEXT: ret 3180 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3181 ret <16 x i1> %1 3182} 3183 3184define <16 x i1> @fcmp_uno_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3185; CHECK-LABEL: fcmp_uno_vf_v16f16: 3186; CHECK: # %bb.0: 3187; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3188; CHECK-NEXT: vfmv.v.f v10, fa0 3189; CHECK-NEXT: vmfne.vf v12, v10, fa0 3190; CHECK-NEXT: vmfne.vv v10, v8, v8 3191; CHECK-NEXT: vmor.mm v0, v10, v12 3192; CHECK-NEXT: ret 3193 %head = insertelement <16 x half> poison, half %b, i32 0 3194 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3195 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3196 ret <16 x i1> %1 3197} 3198 3199define <16 x i1> @fcmp_uno_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 3200; CHECK-LABEL: fcmp_uno_fv_v16f16: 3201; CHECK: # %bb.0: 3202; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 3203; CHECK-NEXT: vfmv.v.f v10, fa0 3204; CHECK-NEXT: vmfne.vf v12, v10, fa0 3205; CHECK-NEXT: vmfne.vv v10, v8, v8 3206; CHECK-NEXT: vmor.mm v0, v12, v10 3207; CHECK-NEXT: ret 3208 %head = insertelement <16 x half> poison, half %b, i32 0 3209 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 3210 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3211 ret <16 x i1> %1 3212} 3213 3214declare <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half>, <32 x half>, metadata, metadata) 3215define <32 x i1> @fcmp_oeq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3216; CHECK-LABEL: fcmp_oeq_vv_v32f16: 3217; CHECK: # %bb.0: 3218; CHECK-NEXT: li a0, 32 3219; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3220; CHECK-NEXT: vmfeq.vv v0, v8, v12 3221; CHECK-NEXT: ret 3222 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3223 ret <32 x i1> %1 3224} 3225 3226define <32 x i1> @fcmp_oeq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3227; CHECK-LABEL: fcmp_oeq_vf_v32f16: 3228; CHECK: # %bb.0: 3229; CHECK-NEXT: li a0, 32 3230; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3231; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3232; CHECK-NEXT: ret 3233 %head = insertelement <32 x half> poison, half %b, i32 0 3234 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3235 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3236 ret <32 x i1> %1 3237} 3238 3239define <32 x i1> @fcmp_oeq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3240; CHECK-LABEL: fcmp_oeq_fv_v32f16: 3241; CHECK: # %bb.0: 3242; CHECK-NEXT: li a0, 32 3243; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3244; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3245; CHECK-NEXT: ret 3246 %head = insertelement <32 x half> poison, half %b, i32 0 3247 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3248 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3249 ret <32 x i1> %1 3250} 3251 3252define <32 x i1> @fcmp_ogt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3253; CHECK-LABEL: fcmp_ogt_vv_v32f16: 3254; CHECK: # %bb.0: 3255; CHECK-NEXT: li a0, 32 3256; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3257; CHECK-NEXT: vmfeq.vv v16, v8, v8 3258; CHECK-NEXT: vmfeq.vv v17, v12, v12 3259; CHECK-NEXT: vmand.mm v16, v17, v16 3260; CHECK-NEXT: vmv1r.v v0, v16 3261; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 3262; CHECK-NEXT: vmv1r.v v0, v16 3263; CHECK-NEXT: ret 3264 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3265 ret <32 x i1> %1 3266} 3267 3268define <32 x i1> @fcmp_ogt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3269; CHECK-LABEL: fcmp_ogt_vf_v32f16: 3270; CHECK: # %bb.0: 3271; CHECK-NEXT: li a0, 32 3272; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3273; CHECK-NEXT: vfmv.v.f v12, fa0 3274; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3275; CHECK-NEXT: vmfeq.vv v12, v8, v8 3276; CHECK-NEXT: vmand.mm v12, v16, v12 3277; CHECK-NEXT: vmv1r.v v0, v12 3278; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3279; CHECK-NEXT: vmv1r.v v0, v12 3280; CHECK-NEXT: ret 3281 %head = insertelement <32 x half> poison, half %b, i32 0 3282 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3283 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3284 ret <32 x i1> %1 3285} 3286 3287define <32 x i1> @fcmp_ogt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3288; CHECK-LABEL: fcmp_ogt_fv_v32f16: 3289; CHECK: # %bb.0: 3290; CHECK-NEXT: li a0, 32 3291; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3292; CHECK-NEXT: vfmv.v.f v12, fa0 3293; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3294; CHECK-NEXT: vmfeq.vv v12, v8, v8 3295; CHECK-NEXT: vmand.mm v12, v12, v16 3296; CHECK-NEXT: vmv1r.v v0, v12 3297; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3298; CHECK-NEXT: vmv1r.v v0, v12 3299; CHECK-NEXT: ret 3300 %head = insertelement <32 x half> poison, half %b, i32 0 3301 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3302 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3303 ret <32 x i1> %1 3304} 3305 3306define <32 x i1> @fcmp_oge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3307; CHECK-LABEL: fcmp_oge_vv_v32f16: 3308; CHECK: # %bb.0: 3309; CHECK-NEXT: li a0, 32 3310; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3311; CHECK-NEXT: vmfeq.vv v16, v8, v8 3312; CHECK-NEXT: vmfeq.vv v17, v12, v12 3313; CHECK-NEXT: vmand.mm v16, v17, v16 3314; CHECK-NEXT: vmv1r.v v0, v16 3315; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 3316; CHECK-NEXT: vmv1r.v v0, v16 3317; CHECK-NEXT: ret 3318 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 3319 ret <32 x i1> %1 3320} 3321 3322define <32 x i1> @fcmp_oge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3323; CHECK-LABEL: fcmp_oge_vf_v32f16: 3324; CHECK: # %bb.0: 3325; CHECK-NEXT: li a0, 32 3326; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3327; CHECK-NEXT: vfmv.v.f v12, fa0 3328; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3329; CHECK-NEXT: vmfeq.vv v12, v8, v8 3330; CHECK-NEXT: vmand.mm v12, v16, v12 3331; CHECK-NEXT: vmv1r.v v0, v12 3332; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3333; CHECK-NEXT: vmv1r.v v0, v12 3334; CHECK-NEXT: ret 3335 %head = insertelement <32 x half> poison, half %b, i32 0 3336 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3337 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 3338 ret <32 x i1> %1 3339} 3340 3341define <32 x i1> @fcmp_oge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3342; CHECK-LABEL: fcmp_oge_fv_v32f16: 3343; CHECK: # %bb.0: 3344; CHECK-NEXT: li a0, 32 3345; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3346; CHECK-NEXT: vfmv.v.f v12, fa0 3347; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3348; CHECK-NEXT: vmfeq.vv v12, v8, v8 3349; CHECK-NEXT: vmand.mm v12, v12, v16 3350; CHECK-NEXT: vmv1r.v v0, v12 3351; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3352; CHECK-NEXT: vmv1r.v v0, v12 3353; CHECK-NEXT: ret 3354 %head = insertelement <32 x half> poison, half %b, i32 0 3355 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3356 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 3357 ret <32 x i1> %1 3358} 3359 3360define <32 x i1> @fcmp_olt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3361; CHECK-LABEL: fcmp_olt_vv_v32f16: 3362; CHECK: # %bb.0: 3363; CHECK-NEXT: li a0, 32 3364; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3365; CHECK-NEXT: vmfeq.vv v16, v12, v12 3366; CHECK-NEXT: vmfeq.vv v17, v8, v8 3367; CHECK-NEXT: vmand.mm v16, v17, v16 3368; CHECK-NEXT: vmv1r.v v0, v16 3369; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 3370; CHECK-NEXT: vmv1r.v v0, v16 3371; CHECK-NEXT: ret 3372 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 3373 ret <32 x i1> %1 3374} 3375 3376define <32 x i1> @fcmp_olt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3377; CHECK-LABEL: fcmp_olt_vf_v32f16: 3378; CHECK: # %bb.0: 3379; CHECK-NEXT: li a0, 32 3380; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3381; CHECK-NEXT: vfmv.v.f v12, fa0 3382; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3383; CHECK-NEXT: vmfeq.vv v12, v8, v8 3384; CHECK-NEXT: vmand.mm v12, v12, v16 3385; CHECK-NEXT: vmv1r.v v0, v12 3386; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3387; CHECK-NEXT: vmv1r.v v0, v12 3388; CHECK-NEXT: ret 3389 %head = insertelement <32 x half> poison, half %b, i32 0 3390 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3391 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 3392 ret <32 x i1> %1 3393} 3394 3395define <32 x i1> @fcmp_olt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3396; CHECK-LABEL: fcmp_olt_fv_v32f16: 3397; CHECK: # %bb.0: 3398; CHECK-NEXT: li a0, 32 3399; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3400; CHECK-NEXT: vfmv.v.f v12, fa0 3401; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3402; CHECK-NEXT: vmfeq.vv v12, v8, v8 3403; CHECK-NEXT: vmand.mm v12, v16, v12 3404; CHECK-NEXT: vmv1r.v v0, v12 3405; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3406; CHECK-NEXT: vmv1r.v v0, v12 3407; CHECK-NEXT: ret 3408 %head = insertelement <32 x half> poison, half %b, i32 0 3409 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3410 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 3411 ret <32 x i1> %1 3412} 3413 3414define <32 x i1> @fcmp_ole_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3415; CHECK-LABEL: fcmp_ole_vv_v32f16: 3416; CHECK: # %bb.0: 3417; CHECK-NEXT: li a0, 32 3418; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3419; CHECK-NEXT: vmfeq.vv v16, v12, v12 3420; CHECK-NEXT: vmfeq.vv v17, v8, v8 3421; CHECK-NEXT: vmand.mm v16, v17, v16 3422; CHECK-NEXT: vmv1r.v v0, v16 3423; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 3424; CHECK-NEXT: vmv1r.v v0, v16 3425; CHECK-NEXT: ret 3426 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 3427 ret <32 x i1> %1 3428} 3429 3430define <32 x i1> @fcmp_ole_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3431; CHECK-LABEL: fcmp_ole_vf_v32f16: 3432; CHECK: # %bb.0: 3433; CHECK-NEXT: li a0, 32 3434; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3435; CHECK-NEXT: vfmv.v.f v12, fa0 3436; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3437; CHECK-NEXT: vmfeq.vv v12, v8, v8 3438; CHECK-NEXT: vmand.mm v12, v12, v16 3439; CHECK-NEXT: vmv1r.v v0, v12 3440; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3441; CHECK-NEXT: vmv1r.v v0, v12 3442; CHECK-NEXT: ret 3443 %head = insertelement <32 x half> poison, half %b, i32 0 3444 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3445 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 3446 ret <32 x i1> %1 3447} 3448 3449define <32 x i1> @fcmp_ole_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3450; CHECK-LABEL: fcmp_ole_fv_v32f16: 3451; CHECK: # %bb.0: 3452; CHECK-NEXT: li a0, 32 3453; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3454; CHECK-NEXT: vfmv.v.f v12, fa0 3455; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3456; CHECK-NEXT: vmfeq.vv v12, v8, v8 3457; CHECK-NEXT: vmand.mm v12, v16, v12 3458; CHECK-NEXT: vmv1r.v v0, v12 3459; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3460; CHECK-NEXT: vmv1r.v v0, v12 3461; CHECK-NEXT: ret 3462 %head = insertelement <32 x half> poison, half %b, i32 0 3463 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3464 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 3465 ret <32 x i1> %1 3466} 3467 3468define <32 x i1> @fcmp_one_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3469; CHECK-LABEL: fcmp_one_vv_v32f16: 3470; CHECK: # %bb.0: 3471; CHECK-NEXT: li a0, 32 3472; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3473; CHECK-NEXT: vmfeq.vv v16, v12, v12 3474; CHECK-NEXT: vmfeq.vv v17, v8, v8 3475; CHECK-NEXT: vmand.mm v16, v17, v16 3476; CHECK-NEXT: vmv1r.v v17, v16 3477; CHECK-NEXT: vmv1r.v v0, v16 3478; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 3479; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 3480; CHECK-NEXT: vmor.mm v0, v16, v17 3481; CHECK-NEXT: ret 3482 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 3483 ret <32 x i1> %1 3484} 3485 3486define <32 x i1> @fcmp_one_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3487; CHECK-LABEL: fcmp_one_vf_v32f16: 3488; CHECK: # %bb.0: 3489; CHECK-NEXT: li a0, 32 3490; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3491; CHECK-NEXT: vfmv.v.f v12, fa0 3492; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3493; CHECK-NEXT: vmfeq.vv v12, v8, v8 3494; CHECK-NEXT: vmand.mm v12, v12, v16 3495; CHECK-NEXT: vmv1r.v v13, v12 3496; CHECK-NEXT: vmv1r.v v0, v12 3497; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 3498; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3499; CHECK-NEXT: vmor.mm v0, v12, v13 3500; CHECK-NEXT: ret 3501 %head = insertelement <32 x half> poison, half %b, i32 0 3502 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3503 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 3504 ret <32 x i1> %1 3505} 3506 3507define <32 x i1> @fcmp_one_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3508; CHECK-LABEL: fcmp_one_fv_v32f16: 3509; CHECK: # %bb.0: 3510; CHECK-NEXT: li a0, 32 3511; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3512; CHECK-NEXT: vfmv.v.f v12, fa0 3513; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3514; CHECK-NEXT: vmfeq.vv v12, v8, v8 3515; CHECK-NEXT: vmand.mm v12, v16, v12 3516; CHECK-NEXT: vmv1r.v v13, v12 3517; CHECK-NEXT: vmv1r.v v0, v12 3518; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 3519; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3520; CHECK-NEXT: vmor.mm v0, v12, v13 3521; CHECK-NEXT: ret 3522 %head = insertelement <32 x half> poison, half %b, i32 0 3523 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3524 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 3525 ret <32 x i1> %1 3526} 3527 3528define <32 x i1> @fcmp_ord_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3529; CHECK-LABEL: fcmp_ord_vv_v32f16: 3530; CHECK: # %bb.0: 3531; CHECK-NEXT: li a0, 32 3532; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3533; CHECK-NEXT: vmfeq.vv v16, v12, v12 3534; CHECK-NEXT: vmfeq.vv v12, v8, v8 3535; CHECK-NEXT: vmand.mm v0, v12, v16 3536; CHECK-NEXT: ret 3537 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 3538 ret <32 x i1> %1 3539} 3540 3541define <32 x i1> @fcmp_ord_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3542; CHECK-LABEL: fcmp_ord_vf_v32f16: 3543; CHECK: # %bb.0: 3544; CHECK-NEXT: li a0, 32 3545; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3546; CHECK-NEXT: vfmv.v.f v12, fa0 3547; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3548; CHECK-NEXT: vmfeq.vv v12, v8, v8 3549; CHECK-NEXT: vmand.mm v0, v12, v16 3550; CHECK-NEXT: ret 3551 %head = insertelement <32 x half> poison, half %b, i32 0 3552 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3553 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 3554 ret <32 x i1> %1 3555} 3556 3557define <32 x i1> @fcmp_ord_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3558; CHECK-LABEL: fcmp_ord_fv_v32f16: 3559; CHECK: # %bb.0: 3560; CHECK-NEXT: li a0, 32 3561; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3562; CHECK-NEXT: vfmv.v.f v12, fa0 3563; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3564; CHECK-NEXT: vmfeq.vv v12, v8, v8 3565; CHECK-NEXT: vmand.mm v0, v16, v12 3566; CHECK-NEXT: ret 3567 %head = insertelement <32 x half> poison, half %b, i32 0 3568 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3569 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 3570 ret <32 x i1> %1 3571} 3572 3573define <32 x i1> @fcmp_ueq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3574; CHECK-LABEL: fcmp_ueq_vv_v32f16: 3575; CHECK: # %bb.0: 3576; CHECK-NEXT: li a0, 32 3577; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3578; CHECK-NEXT: vmfeq.vv v16, v12, v12 3579; CHECK-NEXT: vmfeq.vv v17, v8, v8 3580; CHECK-NEXT: vmand.mm v16, v17, v16 3581; CHECK-NEXT: vmv1r.v v17, v16 3582; CHECK-NEXT: vmv1r.v v0, v16 3583; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 3584; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 3585; CHECK-NEXT: vmnor.mm v0, v16, v17 3586; CHECK-NEXT: ret 3587 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3588 ret <32 x i1> %1 3589} 3590 3591define <32 x i1> @fcmp_ueq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3592; CHECK-LABEL: fcmp_ueq_vf_v32f16: 3593; CHECK: # %bb.0: 3594; CHECK-NEXT: li a0, 32 3595; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3596; CHECK-NEXT: vfmv.v.f v12, fa0 3597; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3598; CHECK-NEXT: vmfeq.vv v12, v8, v8 3599; CHECK-NEXT: vmand.mm v12, v12, v16 3600; CHECK-NEXT: vmv1r.v v13, v12 3601; CHECK-NEXT: vmv1r.v v0, v12 3602; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 3603; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3604; CHECK-NEXT: vmnor.mm v0, v12, v13 3605; CHECK-NEXT: ret 3606 %head = insertelement <32 x half> poison, half %b, i32 0 3607 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3608 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3609 ret <32 x i1> %1 3610} 3611 3612define <32 x i1> @fcmp_ueq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3613; CHECK-LABEL: fcmp_ueq_fv_v32f16: 3614; CHECK: # %bb.0: 3615; CHECK-NEXT: li a0, 32 3616; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3617; CHECK-NEXT: vfmv.v.f v12, fa0 3618; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3619; CHECK-NEXT: vmfeq.vv v12, v8, v8 3620; CHECK-NEXT: vmand.mm v12, v16, v12 3621; CHECK-NEXT: vmv1r.v v13, v12 3622; CHECK-NEXT: vmv1r.v v0, v12 3623; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 3624; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3625; CHECK-NEXT: vmnor.mm v0, v12, v13 3626; CHECK-NEXT: ret 3627 %head = insertelement <32 x half> poison, half %b, i32 0 3628 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3629 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3630 ret <32 x i1> %1 3631} 3632 3633define <32 x i1> @fcmp_ugt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3634; CHECK-LABEL: fcmp_ugt_vv_v32f16: 3635; CHECK: # %bb.0: 3636; CHECK-NEXT: li a0, 32 3637; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3638; CHECK-NEXT: vmfeq.vv v16, v12, v12 3639; CHECK-NEXT: vmfeq.vv v17, v8, v8 3640; CHECK-NEXT: vmand.mm v16, v17, v16 3641; CHECK-NEXT: vmv1r.v v0, v16 3642; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 3643; CHECK-NEXT: vmnot.m v0, v16 3644; CHECK-NEXT: ret 3645 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3646 ret <32 x i1> %1 3647} 3648 3649define <32 x i1> @fcmp_ugt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3650; CHECK-LABEL: fcmp_ugt_vf_v32f16: 3651; CHECK: # %bb.0: 3652; CHECK-NEXT: li a0, 32 3653; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3654; CHECK-NEXT: vfmv.v.f v12, fa0 3655; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3656; CHECK-NEXT: vmfeq.vv v12, v8, v8 3657; CHECK-NEXT: vmand.mm v12, v12, v16 3658; CHECK-NEXT: vmv1r.v v0, v12 3659; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3660; CHECK-NEXT: vmnot.m v0, v12 3661; CHECK-NEXT: ret 3662 %head = insertelement <32 x half> poison, half %b, i32 0 3663 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3664 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3665 ret <32 x i1> %1 3666} 3667 3668define <32 x i1> @fcmp_ugt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3669; CHECK-LABEL: fcmp_ugt_fv_v32f16: 3670; CHECK: # %bb.0: 3671; CHECK-NEXT: li a0, 32 3672; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3673; CHECK-NEXT: vfmv.v.f v12, fa0 3674; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3675; CHECK-NEXT: vmfeq.vv v12, v8, v8 3676; CHECK-NEXT: vmand.mm v12, v16, v12 3677; CHECK-NEXT: vmv1r.v v0, v12 3678; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3679; CHECK-NEXT: vmnot.m v0, v12 3680; CHECK-NEXT: ret 3681 %head = insertelement <32 x half> poison, half %b, i32 0 3682 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3683 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3684 ret <32 x i1> %1 3685} 3686 3687define <32 x i1> @fcmp_uge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3688; CHECK-LABEL: fcmp_uge_vv_v32f16: 3689; CHECK: # %bb.0: 3690; CHECK-NEXT: li a0, 32 3691; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3692; CHECK-NEXT: vmfeq.vv v16, v12, v12 3693; CHECK-NEXT: vmfeq.vv v17, v8, v8 3694; CHECK-NEXT: vmand.mm v16, v17, v16 3695; CHECK-NEXT: vmv1r.v v0, v16 3696; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 3697; CHECK-NEXT: vmnot.m v0, v16 3698; CHECK-NEXT: ret 3699 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 3700 ret <32 x i1> %1 3701} 3702 3703define <32 x i1> @fcmp_uge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3704; CHECK-LABEL: fcmp_uge_vf_v32f16: 3705; CHECK: # %bb.0: 3706; CHECK-NEXT: li a0, 32 3707; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3708; CHECK-NEXT: vfmv.v.f v12, fa0 3709; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3710; CHECK-NEXT: vmfeq.vv v12, v8, v8 3711; CHECK-NEXT: vmand.mm v12, v12, v16 3712; CHECK-NEXT: vmv1r.v v0, v12 3713; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3714; CHECK-NEXT: vmnot.m v0, v12 3715; CHECK-NEXT: ret 3716 %head = insertelement <32 x half> poison, half %b, i32 0 3717 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3718 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3719 ret <32 x i1> %1 3720} 3721 3722define <32 x i1> @fcmp_uge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3723; CHECK-LABEL: fcmp_uge_fv_v32f16: 3724; CHECK: # %bb.0: 3725; CHECK-NEXT: li a0, 32 3726; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3727; CHECK-NEXT: vfmv.v.f v12, fa0 3728; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3729; CHECK-NEXT: vmfeq.vv v12, v8, v8 3730; CHECK-NEXT: vmand.mm v12, v16, v12 3731; CHECK-NEXT: vmv1r.v v0, v12 3732; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3733; CHECK-NEXT: vmnot.m v0, v12 3734; CHECK-NEXT: ret 3735 %head = insertelement <32 x half> poison, half %b, i32 0 3736 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3737 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3738 ret <32 x i1> %1 3739} 3740 3741define <32 x i1> @fcmp_ult_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3742; CHECK-LABEL: fcmp_ult_vv_v32f16: 3743; CHECK: # %bb.0: 3744; CHECK-NEXT: li a0, 32 3745; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3746; CHECK-NEXT: vmfeq.vv v16, v8, v8 3747; CHECK-NEXT: vmfeq.vv v17, v12, v12 3748; CHECK-NEXT: vmand.mm v16, v17, v16 3749; CHECK-NEXT: vmv1r.v v0, v16 3750; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 3751; CHECK-NEXT: vmnot.m v0, v16 3752; CHECK-NEXT: ret 3753 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3754 ret <32 x i1> %1 3755} 3756 3757define <32 x i1> @fcmp_ult_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3758; CHECK-LABEL: fcmp_ult_vf_v32f16: 3759; CHECK: # %bb.0: 3760; CHECK-NEXT: li a0, 32 3761; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3762; CHECK-NEXT: vfmv.v.f v12, fa0 3763; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3764; CHECK-NEXT: vmfeq.vv v12, v8, v8 3765; CHECK-NEXT: vmand.mm v12, v16, v12 3766; CHECK-NEXT: vmv1r.v v0, v12 3767; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 3768; CHECK-NEXT: vmnot.m v0, v12 3769; CHECK-NEXT: ret 3770 %head = insertelement <32 x half> poison, half %b, i32 0 3771 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3772 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3773 ret <32 x i1> %1 3774} 3775 3776define <32 x i1> @fcmp_ult_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3777; CHECK-LABEL: fcmp_ult_fv_v32f16: 3778; CHECK: # %bb.0: 3779; CHECK-NEXT: li a0, 32 3780; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3781; CHECK-NEXT: vfmv.v.f v12, fa0 3782; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3783; CHECK-NEXT: vmfeq.vv v12, v8, v8 3784; CHECK-NEXT: vmand.mm v12, v12, v16 3785; CHECK-NEXT: vmv1r.v v0, v12 3786; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 3787; CHECK-NEXT: vmnot.m v0, v12 3788; CHECK-NEXT: ret 3789 %head = insertelement <32 x half> poison, half %b, i32 0 3790 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3791 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3792 ret <32 x i1> %1 3793} 3794 3795define <32 x i1> @fcmp_ule_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3796; CHECK-LABEL: fcmp_ule_vv_v32f16: 3797; CHECK: # %bb.0: 3798; CHECK-NEXT: li a0, 32 3799; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3800; CHECK-NEXT: vmfeq.vv v16, v8, v8 3801; CHECK-NEXT: vmfeq.vv v17, v12, v12 3802; CHECK-NEXT: vmand.mm v16, v17, v16 3803; CHECK-NEXT: vmv1r.v v0, v16 3804; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 3805; CHECK-NEXT: vmnot.m v0, v16 3806; CHECK-NEXT: ret 3807 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3808 ret <32 x i1> %1 3809} 3810 3811define <32 x i1> @fcmp_ule_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3812; CHECK-LABEL: fcmp_ule_vf_v32f16: 3813; CHECK: # %bb.0: 3814; CHECK-NEXT: li a0, 32 3815; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3816; CHECK-NEXT: vfmv.v.f v12, fa0 3817; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3818; CHECK-NEXT: vmfeq.vv v12, v8, v8 3819; CHECK-NEXT: vmand.mm v12, v16, v12 3820; CHECK-NEXT: vmv1r.v v0, v12 3821; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 3822; CHECK-NEXT: vmnot.m v0, v12 3823; CHECK-NEXT: ret 3824 %head = insertelement <32 x half> poison, half %b, i32 0 3825 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3826 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3827 ret <32 x i1> %1 3828} 3829 3830define <32 x i1> @fcmp_ule_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3831; CHECK-LABEL: fcmp_ule_fv_v32f16: 3832; CHECK: # %bb.0: 3833; CHECK-NEXT: li a0, 32 3834; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 3835; CHECK-NEXT: vfmv.v.f v12, fa0 3836; CHECK-NEXT: vmfeq.vf v16, v12, fa0 3837; CHECK-NEXT: vmfeq.vv v12, v8, v8 3838; CHECK-NEXT: vmand.mm v12, v12, v16 3839; CHECK-NEXT: vmv1r.v v0, v12 3840; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 3841; CHECK-NEXT: vmnot.m v0, v12 3842; CHECK-NEXT: ret 3843 %head = insertelement <32 x half> poison, half %b, i32 0 3844 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3845 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3846 ret <32 x i1> %1 3847} 3848 3849define <32 x i1> @fcmp_une_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3850; CHECK-LABEL: fcmp_une_vv_v32f16: 3851; CHECK: # %bb.0: 3852; CHECK-NEXT: li a0, 32 3853; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3854; CHECK-NEXT: vmfne.vv v0, v8, v12 3855; CHECK-NEXT: ret 3856 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3857 ret <32 x i1> %1 3858} 3859 3860define <32 x i1> @fcmp_une_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3861; CHECK-LABEL: fcmp_une_vf_v32f16: 3862; CHECK: # %bb.0: 3863; CHECK-NEXT: li a0, 32 3864; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3865; CHECK-NEXT: vmfne.vf v0, v8, fa0 3866; CHECK-NEXT: ret 3867 %head = insertelement <32 x half> poison, half %b, i32 0 3868 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3869 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3870 ret <32 x i1> %1 3871} 3872 3873define <32 x i1> @fcmp_une_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3874; CHECK-LABEL: fcmp_une_fv_v32f16: 3875; CHECK: # %bb.0: 3876; CHECK-NEXT: li a0, 32 3877; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3878; CHECK-NEXT: vmfne.vf v0, v8, fa0 3879; CHECK-NEXT: ret 3880 %head = insertelement <32 x half> poison, half %b, i32 0 3881 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3882 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3883 ret <32 x i1> %1 3884} 3885 3886define <32 x i1> @fcmp_uno_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3887; CHECK-LABEL: fcmp_uno_vv_v32f16: 3888; CHECK: # %bb.0: 3889; CHECK-NEXT: li a0, 32 3890; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3891; CHECK-NEXT: vmfne.vv v16, v12, v12 3892; CHECK-NEXT: vmfne.vv v12, v8, v8 3893; CHECK-NEXT: vmor.mm v0, v12, v16 3894; CHECK-NEXT: ret 3895 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3896 ret <32 x i1> %1 3897} 3898 3899define <32 x i1> @fcmp_uno_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3900; CHECK-LABEL: fcmp_uno_vf_v32f16: 3901; CHECK: # %bb.0: 3902; CHECK-NEXT: li a0, 32 3903; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3904; CHECK-NEXT: vfmv.v.f v12, fa0 3905; CHECK-NEXT: vmfne.vf v16, v12, fa0 3906; CHECK-NEXT: vmfne.vv v12, v8, v8 3907; CHECK-NEXT: vmor.mm v0, v12, v16 3908; CHECK-NEXT: ret 3909 %head = insertelement <32 x half> poison, half %b, i32 0 3910 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3911 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3912 ret <32 x i1> %1 3913} 3914 3915define <32 x i1> @fcmp_uno_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3916; CHECK-LABEL: fcmp_uno_fv_v32f16: 3917; CHECK: # %bb.0: 3918; CHECK-NEXT: li a0, 32 3919; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3920; CHECK-NEXT: vfmv.v.f v12, fa0 3921; CHECK-NEXT: vmfne.vf v16, v12, fa0 3922; CHECK-NEXT: vmfne.vv v12, v8, v8 3923; CHECK-NEXT: vmor.mm v0, v16, v12 3924; CHECK-NEXT: ret 3925 %head = insertelement <32 x half> poison, half %b, i32 0 3926 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3927 %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3928 ret <32 x i1> %1 3929} 3930 3931declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float>, <1 x float>, metadata, metadata) 3932define <1 x i1> @fcmp_oeq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3933; CHECK-LABEL: fcmp_oeq_vv_v1f32: 3934; CHECK: # %bb.0: 3935; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3936; CHECK-NEXT: vmfeq.vv v0, v8, v9 3937; CHECK-NEXT: ret 3938 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3939 ret <1 x i1> %1 3940} 3941 3942define <1 x i1> @fcmp_oeq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3943; CHECK-LABEL: fcmp_oeq_vf_v1f32: 3944; CHECK: # %bb.0: 3945; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3946; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3947; CHECK-NEXT: ret 3948 %head = insertelement <1 x float> poison, float %b, i32 0 3949 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3950 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3951 ret <1 x i1> %1 3952} 3953 3954define <1 x i1> @fcmp_oeq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3955; CHECK-LABEL: fcmp_oeq_fv_v1f32: 3956; CHECK: # %bb.0: 3957; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3958; CHECK-NEXT: vmfeq.vf v0, v8, fa0 3959; CHECK-NEXT: ret 3960 %head = insertelement <1 x float> poison, float %b, i32 0 3961 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3962 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3963 ret <1 x i1> %1 3964} 3965 3966define <1 x i1> @fcmp_ogt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3967; CHECK-LABEL: fcmp_ogt_vv_v1f32: 3968; CHECK: # %bb.0: 3969; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 3970; CHECK-NEXT: vmfeq.vv v10, v8, v8 3971; CHECK-NEXT: vmfeq.vv v11, v9, v9 3972; CHECK-NEXT: vmand.mm v0, v11, v10 3973; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 3974; CHECK-NEXT: ret 3975 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3976 ret <1 x i1> %1 3977} 3978 3979define <1 x i1> @fcmp_ogt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3980; CHECK-LABEL: fcmp_ogt_vf_v1f32: 3981; CHECK: # %bb.0: 3982; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 3983; CHECK-NEXT: vfmv.s.f v9, fa0 3984; CHECK-NEXT: vmfeq.vv v10, v8, v8 3985; CHECK-NEXT: vmfeq.vf v9, v9, fa0 3986; CHECK-NEXT: vmand.mm v0, v9, v10 3987; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 3988; CHECK-NEXT: ret 3989 %head = insertelement <1 x float> poison, float %b, i32 0 3990 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3991 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3992 ret <1 x i1> %1 3993} 3994 3995define <1 x i1> @fcmp_ogt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3996; CHECK-LABEL: fcmp_ogt_fv_v1f32: 3997; CHECK: # %bb.0: 3998; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 3999; CHECK-NEXT: vfmv.s.f v9, fa0 4000; CHECK-NEXT: vmfeq.vv v10, v8, v8 4001; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4002; CHECK-NEXT: vmand.mm v0, v10, v9 4003; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4004; CHECK-NEXT: ret 4005 %head = insertelement <1 x float> poison, float %b, i32 0 4006 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4007 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4008 ret <1 x i1> %1 4009} 4010 4011define <1 x i1> @fcmp_oge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4012; CHECK-LABEL: fcmp_oge_vv_v1f32: 4013; CHECK: # %bb.0: 4014; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4015; CHECK-NEXT: vmfeq.vv v10, v8, v8 4016; CHECK-NEXT: vmfeq.vv v11, v9, v9 4017; CHECK-NEXT: vmand.mm v0, v11, v10 4018; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4019; CHECK-NEXT: ret 4020 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4021 ret <1 x i1> %1 4022} 4023 4024define <1 x i1> @fcmp_oge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4025; CHECK-LABEL: fcmp_oge_vf_v1f32: 4026; CHECK: # %bb.0: 4027; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4028; CHECK-NEXT: vfmv.s.f v9, fa0 4029; CHECK-NEXT: vmfeq.vv v10, v8, v8 4030; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4031; CHECK-NEXT: vmand.mm v0, v9, v10 4032; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4033; CHECK-NEXT: ret 4034 %head = insertelement <1 x float> poison, float %b, i32 0 4035 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4036 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4037 ret <1 x i1> %1 4038} 4039 4040define <1 x i1> @fcmp_oge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4041; CHECK-LABEL: fcmp_oge_fv_v1f32: 4042; CHECK: # %bb.0: 4043; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4044; CHECK-NEXT: vfmv.s.f v9, fa0 4045; CHECK-NEXT: vmfeq.vv v10, v8, v8 4046; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4047; CHECK-NEXT: vmand.mm v0, v10, v9 4048; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4049; CHECK-NEXT: ret 4050 %head = insertelement <1 x float> poison, float %b, i32 0 4051 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4052 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4053 ret <1 x i1> %1 4054} 4055 4056define <1 x i1> @fcmp_olt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4057; CHECK-LABEL: fcmp_olt_vv_v1f32: 4058; CHECK: # %bb.0: 4059; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4060; CHECK-NEXT: vmfeq.vv v10, v9, v9 4061; CHECK-NEXT: vmfeq.vv v11, v8, v8 4062; CHECK-NEXT: vmand.mm v0, v11, v10 4063; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4064; CHECK-NEXT: ret 4065 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4066 ret <1 x i1> %1 4067} 4068 4069define <1 x i1> @fcmp_olt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4070; CHECK-LABEL: fcmp_olt_vf_v1f32: 4071; CHECK: # %bb.0: 4072; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4073; CHECK-NEXT: vfmv.s.f v9, fa0 4074; CHECK-NEXT: vmfeq.vv v10, v8, v8 4075; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4076; CHECK-NEXT: vmand.mm v0, v10, v9 4077; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4078; CHECK-NEXT: ret 4079 %head = insertelement <1 x float> poison, float %b, i32 0 4080 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4081 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4082 ret <1 x i1> %1 4083} 4084 4085define <1 x i1> @fcmp_olt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4086; CHECK-LABEL: fcmp_olt_fv_v1f32: 4087; CHECK: # %bb.0: 4088; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4089; CHECK-NEXT: vfmv.s.f v9, fa0 4090; CHECK-NEXT: vmfeq.vv v10, v8, v8 4091; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4092; CHECK-NEXT: vmand.mm v0, v9, v10 4093; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4094; CHECK-NEXT: ret 4095 %head = insertelement <1 x float> poison, float %b, i32 0 4096 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4097 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4098 ret <1 x i1> %1 4099} 4100 4101define <1 x i1> @fcmp_ole_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4102; CHECK-LABEL: fcmp_ole_vv_v1f32: 4103; CHECK: # %bb.0: 4104; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4105; CHECK-NEXT: vmfeq.vv v10, v9, v9 4106; CHECK-NEXT: vmfeq.vv v11, v8, v8 4107; CHECK-NEXT: vmand.mm v0, v11, v10 4108; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4109; CHECK-NEXT: ret 4110 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4111 ret <1 x i1> %1 4112} 4113 4114define <1 x i1> @fcmp_ole_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4115; CHECK-LABEL: fcmp_ole_vf_v1f32: 4116; CHECK: # %bb.0: 4117; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4118; CHECK-NEXT: vfmv.s.f v9, fa0 4119; CHECK-NEXT: vmfeq.vv v10, v8, v8 4120; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4121; CHECK-NEXT: vmand.mm v0, v10, v9 4122; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4123; CHECK-NEXT: ret 4124 %head = insertelement <1 x float> poison, float %b, i32 0 4125 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4126 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4127 ret <1 x i1> %1 4128} 4129 4130define <1 x i1> @fcmp_ole_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4131; CHECK-LABEL: fcmp_ole_fv_v1f32: 4132; CHECK: # %bb.0: 4133; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4134; CHECK-NEXT: vfmv.s.f v9, fa0 4135; CHECK-NEXT: vmfeq.vv v10, v8, v8 4136; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4137; CHECK-NEXT: vmand.mm v0, v9, v10 4138; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4139; CHECK-NEXT: ret 4140 %head = insertelement <1 x float> poison, float %b, i32 0 4141 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4142 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 4143 ret <1 x i1> %1 4144} 4145 4146define <1 x i1> @fcmp_one_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4147; CHECK-LABEL: fcmp_one_vv_v1f32: 4148; CHECK: # %bb.0: 4149; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4150; CHECK-NEXT: vmfeq.vv v10, v9, v9 4151; CHECK-NEXT: vmfeq.vv v11, v8, v8 4152; CHECK-NEXT: vmand.mm v0, v11, v10 4153; CHECK-NEXT: vmv1r.v v10, v0 4154; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4155; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4156; CHECK-NEXT: vmor.mm v0, v0, v10 4157; CHECK-NEXT: ret 4158 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 4159 ret <1 x i1> %1 4160} 4161 4162define <1 x i1> @fcmp_one_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4163; CHECK-LABEL: fcmp_one_vf_v1f32: 4164; CHECK: # %bb.0: 4165; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4166; CHECK-NEXT: vfmv.s.f v9, fa0 4167; CHECK-NEXT: vmfeq.vv v10, v8, v8 4168; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4169; CHECK-NEXT: vmand.mm v0, v10, v9 4170; CHECK-NEXT: vmv1r.v v9, v0 4171; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4172; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4173; CHECK-NEXT: vmor.mm v0, v0, v9 4174; CHECK-NEXT: ret 4175 %head = insertelement <1 x float> poison, float %b, i32 0 4176 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4177 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 4178 ret <1 x i1> %1 4179} 4180 4181define <1 x i1> @fcmp_one_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4182; CHECK-LABEL: fcmp_one_fv_v1f32: 4183; CHECK: # %bb.0: 4184; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4185; CHECK-NEXT: vfmv.s.f v9, fa0 4186; CHECK-NEXT: vmfeq.vv v10, v8, v8 4187; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4188; CHECK-NEXT: vmand.mm v0, v9, v10 4189; CHECK-NEXT: vmv1r.v v9, v0 4190; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4191; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4192; CHECK-NEXT: vmor.mm v0, v0, v9 4193; CHECK-NEXT: ret 4194 %head = insertelement <1 x float> poison, float %b, i32 0 4195 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4196 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 4197 ret <1 x i1> %1 4198} 4199 4200define <1 x i1> @fcmp_ord_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4201; CHECK-LABEL: fcmp_ord_vv_v1f32: 4202; CHECK: # %bb.0: 4203; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4204; CHECK-NEXT: vmfeq.vv v9, v9, v9 4205; CHECK-NEXT: vmfeq.vv v8, v8, v8 4206; CHECK-NEXT: vmand.mm v0, v8, v9 4207; CHECK-NEXT: ret 4208 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 4209 ret <1 x i1> %1 4210} 4211 4212define <1 x i1> @fcmp_ord_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4213; CHECK-LABEL: fcmp_ord_vf_v1f32: 4214; CHECK: # %bb.0: 4215; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4216; CHECK-NEXT: vfmv.s.f v9, fa0 4217; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4218; CHECK-NEXT: vmfeq.vv v8, v8, v8 4219; CHECK-NEXT: vmand.mm v0, v8, v9 4220; CHECK-NEXT: ret 4221 %head = insertelement <1 x float> poison, float %b, i32 0 4222 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4223 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4224 ret <1 x i1> %1 4225} 4226 4227define <1 x i1> @fcmp_ord_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4228; CHECK-LABEL: fcmp_ord_fv_v1f32: 4229; CHECK: # %bb.0: 4230; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4231; CHECK-NEXT: vfmv.s.f v9, fa0 4232; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4233; CHECK-NEXT: vmfeq.vv v8, v8, v8 4234; CHECK-NEXT: vmand.mm v0, v9, v8 4235; CHECK-NEXT: ret 4236 %head = insertelement <1 x float> poison, float %b, i32 0 4237 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4238 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4239 ret <1 x i1> %1 4240} 4241 4242define <1 x i1> @fcmp_ueq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4243; CHECK-LABEL: fcmp_ueq_vv_v1f32: 4244; CHECK: # %bb.0: 4245; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4246; CHECK-NEXT: vmfeq.vv v10, v9, v9 4247; CHECK-NEXT: vmfeq.vv v11, v8, v8 4248; CHECK-NEXT: vmand.mm v0, v11, v10 4249; CHECK-NEXT: vmv1r.v v10, v0 4250; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4251; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4252; CHECK-NEXT: vmnor.mm v0, v0, v10 4253; CHECK-NEXT: ret 4254 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4255 ret <1 x i1> %1 4256} 4257 4258define <1 x i1> @fcmp_ueq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4259; CHECK-LABEL: fcmp_ueq_vf_v1f32: 4260; CHECK: # %bb.0: 4261; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4262; CHECK-NEXT: vfmv.s.f v9, fa0 4263; CHECK-NEXT: vmfeq.vv v10, v8, v8 4264; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4265; CHECK-NEXT: vmand.mm v0, v10, v9 4266; CHECK-NEXT: vmv1r.v v9, v0 4267; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4268; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4269; CHECK-NEXT: vmnor.mm v0, v0, v9 4270; CHECK-NEXT: ret 4271 %head = insertelement <1 x float> poison, float %b, i32 0 4272 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4273 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4274 ret <1 x i1> %1 4275} 4276 4277define <1 x i1> @fcmp_ueq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4278; CHECK-LABEL: fcmp_ueq_fv_v1f32: 4279; CHECK: # %bb.0: 4280; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4281; CHECK-NEXT: vfmv.s.f v9, fa0 4282; CHECK-NEXT: vmfeq.vv v10, v8, v8 4283; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4284; CHECK-NEXT: vmand.mm v0, v9, v10 4285; CHECK-NEXT: vmv1r.v v9, v0 4286; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4287; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4288; CHECK-NEXT: vmnor.mm v0, v0, v9 4289; CHECK-NEXT: ret 4290 %head = insertelement <1 x float> poison, float %b, i32 0 4291 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4292 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4293 ret <1 x i1> %1 4294} 4295 4296define <1 x i1> @fcmp_ugt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4297; CHECK-LABEL: fcmp_ugt_vv_v1f32: 4298; CHECK: # %bb.0: 4299; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4300; CHECK-NEXT: vmfeq.vv v10, v9, v9 4301; CHECK-NEXT: vmfeq.vv v11, v8, v8 4302; CHECK-NEXT: vmand.mm v0, v11, v10 4303; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4304; CHECK-NEXT: vmnot.m v0, v0 4305; CHECK-NEXT: ret 4306 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4307 ret <1 x i1> %1 4308} 4309 4310define <1 x i1> @fcmp_ugt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4311; CHECK-LABEL: fcmp_ugt_vf_v1f32: 4312; CHECK: # %bb.0: 4313; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4314; CHECK-NEXT: vfmv.s.f v9, fa0 4315; CHECK-NEXT: vmfeq.vv v10, v8, v8 4316; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4317; CHECK-NEXT: vmand.mm v0, v10, v9 4318; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4319; CHECK-NEXT: vmnot.m v0, v0 4320; CHECK-NEXT: ret 4321 %head = insertelement <1 x float> poison, float %b, i32 0 4322 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4323 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4324 ret <1 x i1> %1 4325} 4326 4327define <1 x i1> @fcmp_ugt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4328; CHECK-LABEL: fcmp_ugt_fv_v1f32: 4329; CHECK: # %bb.0: 4330; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4331; CHECK-NEXT: vfmv.s.f v9, fa0 4332; CHECK-NEXT: vmfeq.vv v10, v8, v8 4333; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4334; CHECK-NEXT: vmand.mm v0, v9, v10 4335; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4336; CHECK-NEXT: vmnot.m v0, v0 4337; CHECK-NEXT: ret 4338 %head = insertelement <1 x float> poison, float %b, i32 0 4339 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4340 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4341 ret <1 x i1> %1 4342} 4343 4344define <1 x i1> @fcmp_uge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4345; CHECK-LABEL: fcmp_uge_vv_v1f32: 4346; CHECK: # %bb.0: 4347; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4348; CHECK-NEXT: vmfeq.vv v10, v9, v9 4349; CHECK-NEXT: vmfeq.vv v11, v8, v8 4350; CHECK-NEXT: vmand.mm v0, v11, v10 4351; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4352; CHECK-NEXT: vmnot.m v0, v0 4353; CHECK-NEXT: ret 4354 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4355 ret <1 x i1> %1 4356} 4357 4358define <1 x i1> @fcmp_uge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4359; CHECK-LABEL: fcmp_uge_vf_v1f32: 4360; CHECK: # %bb.0: 4361; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4362; CHECK-NEXT: vfmv.s.f v9, fa0 4363; CHECK-NEXT: vmfeq.vv v10, v8, v8 4364; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4365; CHECK-NEXT: vmand.mm v0, v10, v9 4366; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4367; CHECK-NEXT: vmnot.m v0, v0 4368; CHECK-NEXT: ret 4369 %head = insertelement <1 x float> poison, float %b, i32 0 4370 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4371 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 4372 ret <1 x i1> %1 4373} 4374 4375define <1 x i1> @fcmp_uge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4376; CHECK-LABEL: fcmp_uge_fv_v1f32: 4377; CHECK: # %bb.0: 4378; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4379; CHECK-NEXT: vfmv.s.f v9, fa0 4380; CHECK-NEXT: vmfeq.vv v10, v8, v8 4381; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4382; CHECK-NEXT: vmand.mm v0, v9, v10 4383; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4384; CHECK-NEXT: vmnot.m v0, v0 4385; CHECK-NEXT: ret 4386 %head = insertelement <1 x float> poison, float %b, i32 0 4387 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4388 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 4389 ret <1 x i1> %1 4390} 4391 4392define <1 x i1> @fcmp_ult_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4393; CHECK-LABEL: fcmp_ult_vv_v1f32: 4394; CHECK: # %bb.0: 4395; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4396; CHECK-NEXT: vmfeq.vv v10, v8, v8 4397; CHECK-NEXT: vmfeq.vv v11, v9, v9 4398; CHECK-NEXT: vmand.mm v0, v11, v10 4399; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4400; CHECK-NEXT: vmnot.m v0, v0 4401; CHECK-NEXT: ret 4402 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 4403 ret <1 x i1> %1 4404} 4405 4406define <1 x i1> @fcmp_ult_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4407; CHECK-LABEL: fcmp_ult_vf_v1f32: 4408; CHECK: # %bb.0: 4409; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4410; CHECK-NEXT: vfmv.s.f v9, fa0 4411; CHECK-NEXT: vmfeq.vv v10, v8, v8 4412; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4413; CHECK-NEXT: vmand.mm v0, v9, v10 4414; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4415; CHECK-NEXT: vmnot.m v0, v0 4416; CHECK-NEXT: ret 4417 %head = insertelement <1 x float> poison, float %b, i32 0 4418 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4419 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 4420 ret <1 x i1> %1 4421} 4422 4423define <1 x i1> @fcmp_ult_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4424; CHECK-LABEL: fcmp_ult_fv_v1f32: 4425; CHECK: # %bb.0: 4426; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4427; CHECK-NEXT: vfmv.s.f v9, fa0 4428; CHECK-NEXT: vmfeq.vv v10, v8, v8 4429; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4430; CHECK-NEXT: vmand.mm v0, v10, v9 4431; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4432; CHECK-NEXT: vmnot.m v0, v0 4433; CHECK-NEXT: ret 4434 %head = insertelement <1 x float> poison, float %b, i32 0 4435 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4436 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 4437 ret <1 x i1> %1 4438} 4439 4440define <1 x i1> @fcmp_ule_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4441; CHECK-LABEL: fcmp_ule_vv_v1f32: 4442; CHECK: # %bb.0: 4443; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4444; CHECK-NEXT: vmfeq.vv v10, v8, v8 4445; CHECK-NEXT: vmfeq.vv v11, v9, v9 4446; CHECK-NEXT: vmand.mm v0, v11, v10 4447; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4448; CHECK-NEXT: vmnot.m v0, v0 4449; CHECK-NEXT: ret 4450 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 4451 ret <1 x i1> %1 4452} 4453 4454define <1 x i1> @fcmp_ule_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4455; CHECK-LABEL: fcmp_ule_vf_v1f32: 4456; CHECK: # %bb.0: 4457; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4458; CHECK-NEXT: vfmv.s.f v9, fa0 4459; CHECK-NEXT: vmfeq.vv v10, v8, v8 4460; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4461; CHECK-NEXT: vmand.mm v0, v9, v10 4462; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4463; CHECK-NEXT: vmnot.m v0, v0 4464; CHECK-NEXT: ret 4465 %head = insertelement <1 x float> poison, float %b, i32 0 4466 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4467 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 4468 ret <1 x i1> %1 4469} 4470 4471define <1 x i1> @fcmp_ule_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4472; CHECK-LABEL: fcmp_ule_fv_v1f32: 4473; CHECK: # %bb.0: 4474; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu 4475; CHECK-NEXT: vfmv.s.f v9, fa0 4476; CHECK-NEXT: vmfeq.vv v10, v8, v8 4477; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4478; CHECK-NEXT: vmand.mm v0, v10, v9 4479; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4480; CHECK-NEXT: vmnot.m v0, v0 4481; CHECK-NEXT: ret 4482 %head = insertelement <1 x float> poison, float %b, i32 0 4483 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4484 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 4485 ret <1 x i1> %1 4486} 4487 4488define <1 x i1> @fcmp_une_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4489; CHECK-LABEL: fcmp_une_vv_v1f32: 4490; CHECK: # %bb.0: 4491; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4492; CHECK-NEXT: vmfne.vv v0, v8, v9 4493; CHECK-NEXT: ret 4494 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 4495 ret <1 x i1> %1 4496} 4497 4498define <1 x i1> @fcmp_une_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4499; CHECK-LABEL: fcmp_une_vf_v1f32: 4500; CHECK: # %bb.0: 4501; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4502; CHECK-NEXT: vmfne.vf v0, v8, fa0 4503; CHECK-NEXT: ret 4504 %head = insertelement <1 x float> poison, float %b, i32 0 4505 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4506 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 4507 ret <1 x i1> %1 4508} 4509 4510define <1 x i1> @fcmp_une_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4511; CHECK-LABEL: fcmp_une_fv_v1f32: 4512; CHECK: # %bb.0: 4513; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4514; CHECK-NEXT: vmfne.vf v0, v8, fa0 4515; CHECK-NEXT: ret 4516 %head = insertelement <1 x float> poison, float %b, i32 0 4517 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4518 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 4519 ret <1 x i1> %1 4520} 4521 4522define <1 x i1> @fcmp_uno_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 4523; CHECK-LABEL: fcmp_uno_vv_v1f32: 4524; CHECK: # %bb.0: 4525; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4526; CHECK-NEXT: vmfne.vv v9, v9, v9 4527; CHECK-NEXT: vmfne.vv v8, v8, v8 4528; CHECK-NEXT: vmor.mm v0, v8, v9 4529; CHECK-NEXT: ret 4530 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 4531 ret <1 x i1> %1 4532} 4533 4534define <1 x i1> @fcmp_uno_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4535; CHECK-LABEL: fcmp_uno_vf_v1f32: 4536; CHECK: # %bb.0: 4537; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4538; CHECK-NEXT: vfmv.s.f v9, fa0 4539; CHECK-NEXT: vmfne.vf v9, v9, fa0 4540; CHECK-NEXT: vmfne.vv v8, v8, v8 4541; CHECK-NEXT: vmor.mm v0, v8, v9 4542; CHECK-NEXT: ret 4543 %head = insertelement <1 x float> poison, float %b, i32 0 4544 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4545 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 4546 ret <1 x i1> %1 4547} 4548 4549define <1 x i1> @fcmp_uno_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 4550; CHECK-LABEL: fcmp_uno_fv_v1f32: 4551; CHECK: # %bb.0: 4552; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 4553; CHECK-NEXT: vfmv.s.f v9, fa0 4554; CHECK-NEXT: vmfne.vf v9, v9, fa0 4555; CHECK-NEXT: vmfne.vv v8, v8, v8 4556; CHECK-NEXT: vmor.mm v0, v9, v8 4557; CHECK-NEXT: ret 4558 %head = insertelement <1 x float> poison, float %b, i32 0 4559 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 4560 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 4561 ret <1 x i1> %1 4562} 4563 4564declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float>, <2 x float>, metadata, metadata) 4565define <2 x i1> @fcmp_oeq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4566; CHECK-LABEL: fcmp_oeq_vv_v2f32: 4567; CHECK: # %bb.0: 4568; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4569; CHECK-NEXT: vmfeq.vv v0, v8, v9 4570; CHECK-NEXT: ret 4571 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4572 ret <2 x i1> %1 4573} 4574 4575define <2 x i1> @fcmp_oeq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4576; CHECK-LABEL: fcmp_oeq_vf_v2f32: 4577; CHECK: # %bb.0: 4578; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4579; CHECK-NEXT: vmfeq.vf v0, v8, fa0 4580; CHECK-NEXT: ret 4581 %head = insertelement <2 x float> poison, float %b, i32 0 4582 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4583 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4584 ret <2 x i1> %1 4585} 4586 4587define <2 x i1> @fcmp_oeq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4588; CHECK-LABEL: fcmp_oeq_fv_v2f32: 4589; CHECK: # %bb.0: 4590; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4591; CHECK-NEXT: vmfeq.vf v0, v8, fa0 4592; CHECK-NEXT: ret 4593 %head = insertelement <2 x float> poison, float %b, i32 0 4594 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4595 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4596 ret <2 x i1> %1 4597} 4598 4599define <2 x i1> @fcmp_ogt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4600; CHECK-LABEL: fcmp_ogt_vv_v2f32: 4601; CHECK: # %bb.0: 4602; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4603; CHECK-NEXT: vmfeq.vv v10, v8, v8 4604; CHECK-NEXT: vmfeq.vv v11, v9, v9 4605; CHECK-NEXT: vmand.mm v0, v11, v10 4606; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4607; CHECK-NEXT: ret 4608 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4609 ret <2 x i1> %1 4610} 4611 4612define <2 x i1> @fcmp_ogt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4613; CHECK-LABEL: fcmp_ogt_vf_v2f32: 4614; CHECK: # %bb.0: 4615; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4616; CHECK-NEXT: vfmv.v.f v9, fa0 4617; CHECK-NEXT: vmfeq.vv v10, v8, v8 4618; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4619; CHECK-NEXT: vmand.mm v0, v9, v10 4620; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4621; CHECK-NEXT: ret 4622 %head = insertelement <2 x float> poison, float %b, i32 0 4623 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4624 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4625 ret <2 x i1> %1 4626} 4627 4628define <2 x i1> @fcmp_ogt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4629; CHECK-LABEL: fcmp_ogt_fv_v2f32: 4630; CHECK: # %bb.0: 4631; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4632; CHECK-NEXT: vfmv.v.f v9, fa0 4633; CHECK-NEXT: vmfeq.vv v10, v8, v8 4634; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4635; CHECK-NEXT: vmand.mm v0, v10, v9 4636; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4637; CHECK-NEXT: ret 4638 %head = insertelement <2 x float> poison, float %b, i32 0 4639 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4640 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4641 ret <2 x i1> %1 4642} 4643 4644define <2 x i1> @fcmp_oge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4645; CHECK-LABEL: fcmp_oge_vv_v2f32: 4646; CHECK: # %bb.0: 4647; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4648; CHECK-NEXT: vmfeq.vv v10, v8, v8 4649; CHECK-NEXT: vmfeq.vv v11, v9, v9 4650; CHECK-NEXT: vmand.mm v0, v11, v10 4651; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4652; CHECK-NEXT: ret 4653 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4654 ret <2 x i1> %1 4655} 4656 4657define <2 x i1> @fcmp_oge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4658; CHECK-LABEL: fcmp_oge_vf_v2f32: 4659; CHECK: # %bb.0: 4660; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4661; CHECK-NEXT: vfmv.v.f v9, fa0 4662; CHECK-NEXT: vmfeq.vv v10, v8, v8 4663; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4664; CHECK-NEXT: vmand.mm v0, v9, v10 4665; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4666; CHECK-NEXT: ret 4667 %head = insertelement <2 x float> poison, float %b, i32 0 4668 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4669 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4670 ret <2 x i1> %1 4671} 4672 4673define <2 x i1> @fcmp_oge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4674; CHECK-LABEL: fcmp_oge_fv_v2f32: 4675; CHECK: # %bb.0: 4676; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4677; CHECK-NEXT: vfmv.v.f v9, fa0 4678; CHECK-NEXT: vmfeq.vv v10, v8, v8 4679; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4680; CHECK-NEXT: vmand.mm v0, v10, v9 4681; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4682; CHECK-NEXT: ret 4683 %head = insertelement <2 x float> poison, float %b, i32 0 4684 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4685 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4686 ret <2 x i1> %1 4687} 4688 4689define <2 x i1> @fcmp_olt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4690; CHECK-LABEL: fcmp_olt_vv_v2f32: 4691; CHECK: # %bb.0: 4692; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4693; CHECK-NEXT: vmfeq.vv v10, v9, v9 4694; CHECK-NEXT: vmfeq.vv v11, v8, v8 4695; CHECK-NEXT: vmand.mm v0, v11, v10 4696; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4697; CHECK-NEXT: ret 4698 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4699 ret <2 x i1> %1 4700} 4701 4702define <2 x i1> @fcmp_olt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4703; CHECK-LABEL: fcmp_olt_vf_v2f32: 4704; CHECK: # %bb.0: 4705; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4706; CHECK-NEXT: vfmv.v.f v9, fa0 4707; CHECK-NEXT: vmfeq.vv v10, v8, v8 4708; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4709; CHECK-NEXT: vmand.mm v0, v10, v9 4710; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4711; CHECK-NEXT: ret 4712 %head = insertelement <2 x float> poison, float %b, i32 0 4713 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4714 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4715 ret <2 x i1> %1 4716} 4717 4718define <2 x i1> @fcmp_olt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4719; CHECK-LABEL: fcmp_olt_fv_v2f32: 4720; CHECK: # %bb.0: 4721; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4722; CHECK-NEXT: vfmv.v.f v9, fa0 4723; CHECK-NEXT: vmfeq.vv v10, v8, v8 4724; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4725; CHECK-NEXT: vmand.mm v0, v9, v10 4726; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4727; CHECK-NEXT: ret 4728 %head = insertelement <2 x float> poison, float %b, i32 0 4729 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4730 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4731 ret <2 x i1> %1 4732} 4733 4734define <2 x i1> @fcmp_ole_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4735; CHECK-LABEL: fcmp_ole_vv_v2f32: 4736; CHECK: # %bb.0: 4737; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4738; CHECK-NEXT: vmfeq.vv v10, v9, v9 4739; CHECK-NEXT: vmfeq.vv v11, v8, v8 4740; CHECK-NEXT: vmand.mm v0, v11, v10 4741; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4742; CHECK-NEXT: ret 4743 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4744 ret <2 x i1> %1 4745} 4746 4747define <2 x i1> @fcmp_ole_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4748; CHECK-LABEL: fcmp_ole_vf_v2f32: 4749; CHECK: # %bb.0: 4750; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4751; CHECK-NEXT: vfmv.v.f v9, fa0 4752; CHECK-NEXT: vmfeq.vv v10, v8, v8 4753; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4754; CHECK-NEXT: vmand.mm v0, v10, v9 4755; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4756; CHECK-NEXT: ret 4757 %head = insertelement <2 x float> poison, float %b, i32 0 4758 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4759 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4760 ret <2 x i1> %1 4761} 4762 4763define <2 x i1> @fcmp_ole_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4764; CHECK-LABEL: fcmp_ole_fv_v2f32: 4765; CHECK: # %bb.0: 4766; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4767; CHECK-NEXT: vfmv.v.f v9, fa0 4768; CHECK-NEXT: vmfeq.vv v10, v8, v8 4769; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4770; CHECK-NEXT: vmand.mm v0, v9, v10 4771; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4772; CHECK-NEXT: ret 4773 %head = insertelement <2 x float> poison, float %b, i32 0 4774 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4775 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 4776 ret <2 x i1> %1 4777} 4778 4779define <2 x i1> @fcmp_one_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4780; CHECK-LABEL: fcmp_one_vv_v2f32: 4781; CHECK: # %bb.0: 4782; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4783; CHECK-NEXT: vmfeq.vv v10, v9, v9 4784; CHECK-NEXT: vmfeq.vv v11, v8, v8 4785; CHECK-NEXT: vmand.mm v0, v11, v10 4786; CHECK-NEXT: vmv1r.v v10, v0 4787; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4788; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4789; CHECK-NEXT: vmor.mm v0, v0, v10 4790; CHECK-NEXT: ret 4791 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 4792 ret <2 x i1> %1 4793} 4794 4795define <2 x i1> @fcmp_one_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4796; CHECK-LABEL: fcmp_one_vf_v2f32: 4797; CHECK: # %bb.0: 4798; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4799; CHECK-NEXT: vfmv.v.f v9, fa0 4800; CHECK-NEXT: vmfeq.vv v10, v8, v8 4801; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4802; CHECK-NEXT: vmand.mm v0, v10, v9 4803; CHECK-NEXT: vmv1r.v v9, v0 4804; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4805; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4806; CHECK-NEXT: vmor.mm v0, v0, v9 4807; CHECK-NEXT: ret 4808 %head = insertelement <2 x float> poison, float %b, i32 0 4809 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4810 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 4811 ret <2 x i1> %1 4812} 4813 4814define <2 x i1> @fcmp_one_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4815; CHECK-LABEL: fcmp_one_fv_v2f32: 4816; CHECK: # %bb.0: 4817; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4818; CHECK-NEXT: vfmv.v.f v9, fa0 4819; CHECK-NEXT: vmfeq.vv v10, v8, v8 4820; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4821; CHECK-NEXT: vmand.mm v0, v9, v10 4822; CHECK-NEXT: vmv1r.v v9, v0 4823; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4824; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4825; CHECK-NEXT: vmor.mm v0, v0, v9 4826; CHECK-NEXT: ret 4827 %head = insertelement <2 x float> poison, float %b, i32 0 4828 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4829 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 4830 ret <2 x i1> %1 4831} 4832 4833define <2 x i1> @fcmp_ord_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4834; CHECK-LABEL: fcmp_ord_vv_v2f32: 4835; CHECK: # %bb.0: 4836; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4837; CHECK-NEXT: vmfeq.vv v9, v9, v9 4838; CHECK-NEXT: vmfeq.vv v8, v8, v8 4839; CHECK-NEXT: vmand.mm v0, v8, v9 4840; CHECK-NEXT: ret 4841 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 4842 ret <2 x i1> %1 4843} 4844 4845define <2 x i1> @fcmp_ord_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4846; CHECK-LABEL: fcmp_ord_vf_v2f32: 4847; CHECK: # %bb.0: 4848; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4849; CHECK-NEXT: vfmv.v.f v9, fa0 4850; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4851; CHECK-NEXT: vmfeq.vv v8, v8, v8 4852; CHECK-NEXT: vmand.mm v0, v8, v9 4853; CHECK-NEXT: ret 4854 %head = insertelement <2 x float> poison, float %b, i32 0 4855 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4856 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4857 ret <2 x i1> %1 4858} 4859 4860define <2 x i1> @fcmp_ord_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4861; CHECK-LABEL: fcmp_ord_fv_v2f32: 4862; CHECK: # %bb.0: 4863; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4864; CHECK-NEXT: vfmv.v.f v9, fa0 4865; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4866; CHECK-NEXT: vmfeq.vv v8, v8, v8 4867; CHECK-NEXT: vmand.mm v0, v9, v8 4868; CHECK-NEXT: ret 4869 %head = insertelement <2 x float> poison, float %b, i32 0 4870 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4871 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4872 ret <2 x i1> %1 4873} 4874 4875define <2 x i1> @fcmp_ueq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4876; CHECK-LABEL: fcmp_ueq_vv_v2f32: 4877; CHECK: # %bb.0: 4878; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4879; CHECK-NEXT: vmfeq.vv v10, v9, v9 4880; CHECK-NEXT: vmfeq.vv v11, v8, v8 4881; CHECK-NEXT: vmand.mm v0, v11, v10 4882; CHECK-NEXT: vmv1r.v v10, v0 4883; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4884; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 4885; CHECK-NEXT: vmnor.mm v0, v0, v10 4886; CHECK-NEXT: ret 4887 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4888 ret <2 x i1> %1 4889} 4890 4891define <2 x i1> @fcmp_ueq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4892; CHECK-LABEL: fcmp_ueq_vf_v2f32: 4893; CHECK: # %bb.0: 4894; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4895; CHECK-NEXT: vfmv.v.f v9, fa0 4896; CHECK-NEXT: vmfeq.vv v10, v8, v8 4897; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4898; CHECK-NEXT: vmand.mm v0, v10, v9 4899; CHECK-NEXT: vmv1r.v v9, v0 4900; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4901; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4902; CHECK-NEXT: vmnor.mm v0, v0, v9 4903; CHECK-NEXT: ret 4904 %head = insertelement <2 x float> poison, float %b, i32 0 4905 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4906 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4907 ret <2 x i1> %1 4908} 4909 4910define <2 x i1> @fcmp_ueq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4911; CHECK-LABEL: fcmp_ueq_fv_v2f32: 4912; CHECK: # %bb.0: 4913; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4914; CHECK-NEXT: vfmv.v.f v9, fa0 4915; CHECK-NEXT: vmfeq.vv v10, v8, v8 4916; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4917; CHECK-NEXT: vmand.mm v0, v9, v10 4918; CHECK-NEXT: vmv1r.v v9, v0 4919; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4920; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4921; CHECK-NEXT: vmnor.mm v0, v0, v9 4922; CHECK-NEXT: ret 4923 %head = insertelement <2 x float> poison, float %b, i32 0 4924 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4925 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4926 ret <2 x i1> %1 4927} 4928 4929define <2 x i1> @fcmp_ugt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4930; CHECK-LABEL: fcmp_ugt_vv_v2f32: 4931; CHECK: # %bb.0: 4932; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4933; CHECK-NEXT: vmfeq.vv v10, v9, v9 4934; CHECK-NEXT: vmfeq.vv v11, v8, v8 4935; CHECK-NEXT: vmand.mm v0, v11, v10 4936; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4937; CHECK-NEXT: vmnot.m v0, v0 4938; CHECK-NEXT: ret 4939 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4940 ret <2 x i1> %1 4941} 4942 4943define <2 x i1> @fcmp_ugt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4944; CHECK-LABEL: fcmp_ugt_vf_v2f32: 4945; CHECK: # %bb.0: 4946; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4947; CHECK-NEXT: vfmv.v.f v9, fa0 4948; CHECK-NEXT: vmfeq.vv v10, v8, v8 4949; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4950; CHECK-NEXT: vmand.mm v0, v10, v9 4951; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4952; CHECK-NEXT: vmnot.m v0, v0 4953; CHECK-NEXT: ret 4954 %head = insertelement <2 x float> poison, float %b, i32 0 4955 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4956 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4957 ret <2 x i1> %1 4958} 4959 4960define <2 x i1> @fcmp_ugt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4961; CHECK-LABEL: fcmp_ugt_fv_v2f32: 4962; CHECK: # %bb.0: 4963; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4964; CHECK-NEXT: vfmv.v.f v9, fa0 4965; CHECK-NEXT: vmfeq.vv v10, v8, v8 4966; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4967; CHECK-NEXT: vmand.mm v0, v9, v10 4968; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4969; CHECK-NEXT: vmnot.m v0, v0 4970; CHECK-NEXT: ret 4971 %head = insertelement <2 x float> poison, float %b, i32 0 4972 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4973 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4974 ret <2 x i1> %1 4975} 4976 4977define <2 x i1> @fcmp_uge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4978; CHECK-LABEL: fcmp_uge_vv_v2f32: 4979; CHECK: # %bb.0: 4980; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4981; CHECK-NEXT: vmfeq.vv v10, v9, v9 4982; CHECK-NEXT: vmfeq.vv v11, v8, v8 4983; CHECK-NEXT: vmand.mm v0, v11, v10 4984; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4985; CHECK-NEXT: vmnot.m v0, v0 4986; CHECK-NEXT: ret 4987 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4988 ret <2 x i1> %1 4989} 4990 4991define <2 x i1> @fcmp_uge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4992; CHECK-LABEL: fcmp_uge_vf_v2f32: 4993; CHECK: # %bb.0: 4994; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 4995; CHECK-NEXT: vfmv.v.f v9, fa0 4996; CHECK-NEXT: vmfeq.vv v10, v8, v8 4997; CHECK-NEXT: vmfeq.vf v9, v9, fa0 4998; CHECK-NEXT: vmand.mm v0, v10, v9 4999; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5000; CHECK-NEXT: vmnot.m v0, v0 5001; CHECK-NEXT: ret 5002 %head = insertelement <2 x float> poison, float %b, i32 0 5003 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5004 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5005 ret <2 x i1> %1 5006} 5007 5008define <2 x i1> @fcmp_uge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5009; CHECK-LABEL: fcmp_uge_fv_v2f32: 5010; CHECK: # %bb.0: 5011; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5012; CHECK-NEXT: vfmv.v.f v9, fa0 5013; CHECK-NEXT: vmfeq.vv v10, v8, v8 5014; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5015; CHECK-NEXT: vmand.mm v0, v9, v10 5016; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5017; CHECK-NEXT: vmnot.m v0, v0 5018; CHECK-NEXT: ret 5019 %head = insertelement <2 x float> poison, float %b, i32 0 5020 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5021 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5022 ret <2 x i1> %1 5023} 5024 5025define <2 x i1> @fcmp_ult_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 5026; CHECK-LABEL: fcmp_ult_vv_v2f32: 5027; CHECK: # %bb.0: 5028; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5029; CHECK-NEXT: vmfeq.vv v10, v8, v8 5030; CHECK-NEXT: vmfeq.vv v11, v9, v9 5031; CHECK-NEXT: vmand.mm v0, v11, v10 5032; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 5033; CHECK-NEXT: vmnot.m v0, v0 5034; CHECK-NEXT: ret 5035 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5036 ret <2 x i1> %1 5037} 5038 5039define <2 x i1> @fcmp_ult_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5040; CHECK-LABEL: fcmp_ult_vf_v2f32: 5041; CHECK: # %bb.0: 5042; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5043; CHECK-NEXT: vfmv.v.f v9, fa0 5044; CHECK-NEXT: vmfeq.vv v10, v8, v8 5045; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5046; CHECK-NEXT: vmand.mm v0, v9, v10 5047; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5048; CHECK-NEXT: vmnot.m v0, v0 5049; CHECK-NEXT: ret 5050 %head = insertelement <2 x float> poison, float %b, i32 0 5051 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5052 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5053 ret <2 x i1> %1 5054} 5055 5056define <2 x i1> @fcmp_ult_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5057; CHECK-LABEL: fcmp_ult_fv_v2f32: 5058; CHECK: # %bb.0: 5059; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5060; CHECK-NEXT: vfmv.v.f v9, fa0 5061; CHECK-NEXT: vmfeq.vv v10, v8, v8 5062; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5063; CHECK-NEXT: vmand.mm v0, v10, v9 5064; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5065; CHECK-NEXT: vmnot.m v0, v0 5066; CHECK-NEXT: ret 5067 %head = insertelement <2 x float> poison, float %b, i32 0 5068 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5069 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5070 ret <2 x i1> %1 5071} 5072 5073define <2 x i1> @fcmp_ule_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 5074; CHECK-LABEL: fcmp_ule_vv_v2f32: 5075; CHECK: # %bb.0: 5076; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5077; CHECK-NEXT: vmfeq.vv v10, v8, v8 5078; CHECK-NEXT: vmfeq.vv v11, v9, v9 5079; CHECK-NEXT: vmand.mm v0, v11, v10 5080; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5081; CHECK-NEXT: vmnot.m v0, v0 5082; CHECK-NEXT: ret 5083 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5084 ret <2 x i1> %1 5085} 5086 5087define <2 x i1> @fcmp_ule_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5088; CHECK-LABEL: fcmp_ule_vf_v2f32: 5089; CHECK: # %bb.0: 5090; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5091; CHECK-NEXT: vfmv.v.f v9, fa0 5092; CHECK-NEXT: vmfeq.vv v10, v8, v8 5093; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5094; CHECK-NEXT: vmand.mm v0, v9, v10 5095; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5096; CHECK-NEXT: vmnot.m v0, v0 5097; CHECK-NEXT: ret 5098 %head = insertelement <2 x float> poison, float %b, i32 0 5099 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5100 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5101 ret <2 x i1> %1 5102} 5103 5104define <2 x i1> @fcmp_ule_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5105; CHECK-LABEL: fcmp_ule_fv_v2f32: 5106; CHECK: # %bb.0: 5107; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu 5108; CHECK-NEXT: vfmv.v.f v9, fa0 5109; CHECK-NEXT: vmfeq.vv v10, v8, v8 5110; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5111; CHECK-NEXT: vmand.mm v0, v10, v9 5112; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5113; CHECK-NEXT: vmnot.m v0, v0 5114; CHECK-NEXT: ret 5115 %head = insertelement <2 x float> poison, float %b, i32 0 5116 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5117 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5118 ret <2 x i1> %1 5119} 5120 5121define <2 x i1> @fcmp_une_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 5122; CHECK-LABEL: fcmp_une_vv_v2f32: 5123; CHECK: # %bb.0: 5124; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5125; CHECK-NEXT: vmfne.vv v0, v8, v9 5126; CHECK-NEXT: ret 5127 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5128 ret <2 x i1> %1 5129} 5130 5131define <2 x i1> @fcmp_une_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5132; CHECK-LABEL: fcmp_une_vf_v2f32: 5133; CHECK: # %bb.0: 5134; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5135; CHECK-NEXT: vmfne.vf v0, v8, fa0 5136; CHECK-NEXT: ret 5137 %head = insertelement <2 x float> poison, float %b, i32 0 5138 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5139 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5140 ret <2 x i1> %1 5141} 5142 5143define <2 x i1> @fcmp_une_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5144; CHECK-LABEL: fcmp_une_fv_v2f32: 5145; CHECK: # %bb.0: 5146; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5147; CHECK-NEXT: vmfne.vf v0, v8, fa0 5148; CHECK-NEXT: ret 5149 %head = insertelement <2 x float> poison, float %b, i32 0 5150 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5151 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5152 ret <2 x i1> %1 5153} 5154 5155define <2 x i1> @fcmp_uno_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 5156; CHECK-LABEL: fcmp_uno_vv_v2f32: 5157; CHECK: # %bb.0: 5158; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5159; CHECK-NEXT: vmfne.vv v9, v9, v9 5160; CHECK-NEXT: vmfne.vv v8, v8, v8 5161; CHECK-NEXT: vmor.mm v0, v8, v9 5162; CHECK-NEXT: ret 5163 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5164 ret <2 x i1> %1 5165} 5166 5167define <2 x i1> @fcmp_uno_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5168; CHECK-LABEL: fcmp_uno_vf_v2f32: 5169; CHECK: # %bb.0: 5170; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5171; CHECK-NEXT: vfmv.v.f v9, fa0 5172; CHECK-NEXT: vmfne.vf v9, v9, fa0 5173; CHECK-NEXT: vmfne.vv v8, v8, v8 5174; CHECK-NEXT: vmor.mm v0, v8, v9 5175; CHECK-NEXT: ret 5176 %head = insertelement <2 x float> poison, float %b, i32 0 5177 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5178 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5179 ret <2 x i1> %1 5180} 5181 5182define <2 x i1> @fcmp_uno_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 5183; CHECK-LABEL: fcmp_uno_fv_v2f32: 5184; CHECK: # %bb.0: 5185; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 5186; CHECK-NEXT: vfmv.v.f v9, fa0 5187; CHECK-NEXT: vmfne.vf v9, v9, fa0 5188; CHECK-NEXT: vmfne.vv v8, v8, v8 5189; CHECK-NEXT: vmor.mm v0, v9, v8 5190; CHECK-NEXT: ret 5191 %head = insertelement <2 x float> poison, float %b, i32 0 5192 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 5193 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5194 ret <2 x i1> %1 5195} 5196 5197declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata) 5198define <4 x i1> @fcmp_oeq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5199; CHECK-LABEL: fcmp_oeq_vv_v4f32: 5200; CHECK: # %bb.0: 5201; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5202; CHECK-NEXT: vmfeq.vv v0, v8, v9 5203; CHECK-NEXT: ret 5204 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5205 ret <4 x i1> %1 5206} 5207 5208define <4 x i1> @fcmp_oeq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5209; CHECK-LABEL: fcmp_oeq_vf_v4f32: 5210; CHECK: # %bb.0: 5211; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5212; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5213; CHECK-NEXT: ret 5214 %head = insertelement <4 x float> poison, float %b, i32 0 5215 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5216 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5217 ret <4 x i1> %1 5218} 5219 5220define <4 x i1> @fcmp_oeq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5221; CHECK-LABEL: fcmp_oeq_fv_v4f32: 5222; CHECK: # %bb.0: 5223; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5224; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5225; CHECK-NEXT: ret 5226 %head = insertelement <4 x float> poison, float %b, i32 0 5227 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5228 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5229 ret <4 x i1> %1 5230} 5231 5232define <4 x i1> @fcmp_ogt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5233; CHECK-LABEL: fcmp_ogt_vv_v4f32: 5234; CHECK: # %bb.0: 5235; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5236; CHECK-NEXT: vmfeq.vv v10, v8, v8 5237; CHECK-NEXT: vmfeq.vv v11, v9, v9 5238; CHECK-NEXT: vmand.mm v0, v11, v10 5239; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5240; CHECK-NEXT: ret 5241 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5242 ret <4 x i1> %1 5243} 5244 5245define <4 x i1> @fcmp_ogt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5246; CHECK-LABEL: fcmp_ogt_vf_v4f32: 5247; CHECK: # %bb.0: 5248; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5249; CHECK-NEXT: vfmv.v.f v9, fa0 5250; CHECK-NEXT: vmfeq.vv v10, v8, v8 5251; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5252; CHECK-NEXT: vmand.mm v0, v9, v10 5253; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5254; CHECK-NEXT: ret 5255 %head = insertelement <4 x float> poison, float %b, i32 0 5256 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5257 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5258 ret <4 x i1> %1 5259} 5260 5261define <4 x i1> @fcmp_ogt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5262; CHECK-LABEL: fcmp_ogt_fv_v4f32: 5263; CHECK: # %bb.0: 5264; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5265; CHECK-NEXT: vfmv.v.f v9, fa0 5266; CHECK-NEXT: vmfeq.vv v10, v8, v8 5267; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5268; CHECK-NEXT: vmand.mm v0, v10, v9 5269; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5270; CHECK-NEXT: ret 5271 %head = insertelement <4 x float> poison, float %b, i32 0 5272 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5273 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5274 ret <4 x i1> %1 5275} 5276 5277define <4 x i1> @fcmp_oge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5278; CHECK-LABEL: fcmp_oge_vv_v4f32: 5279; CHECK: # %bb.0: 5280; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5281; CHECK-NEXT: vmfeq.vv v10, v8, v8 5282; CHECK-NEXT: vmfeq.vv v11, v9, v9 5283; CHECK-NEXT: vmand.mm v0, v11, v10 5284; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 5285; CHECK-NEXT: ret 5286 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5287 ret <4 x i1> %1 5288} 5289 5290define <4 x i1> @fcmp_oge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5291; CHECK-LABEL: fcmp_oge_vf_v4f32: 5292; CHECK: # %bb.0: 5293; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5294; CHECK-NEXT: vfmv.v.f v9, fa0 5295; CHECK-NEXT: vmfeq.vv v10, v8, v8 5296; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5297; CHECK-NEXT: vmand.mm v0, v9, v10 5298; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5299; CHECK-NEXT: ret 5300 %head = insertelement <4 x float> poison, float %b, i32 0 5301 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5302 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5303 ret <4 x i1> %1 5304} 5305 5306define <4 x i1> @fcmp_oge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5307; CHECK-LABEL: fcmp_oge_fv_v4f32: 5308; CHECK: # %bb.0: 5309; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5310; CHECK-NEXT: vfmv.v.f v9, fa0 5311; CHECK-NEXT: vmfeq.vv v10, v8, v8 5312; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5313; CHECK-NEXT: vmand.mm v0, v10, v9 5314; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5315; CHECK-NEXT: ret 5316 %head = insertelement <4 x float> poison, float %b, i32 0 5317 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5318 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 5319 ret <4 x i1> %1 5320} 5321 5322define <4 x i1> @fcmp_olt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5323; CHECK-LABEL: fcmp_olt_vv_v4f32: 5324; CHECK: # %bb.0: 5325; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5326; CHECK-NEXT: vmfeq.vv v10, v9, v9 5327; CHECK-NEXT: vmfeq.vv v11, v8, v8 5328; CHECK-NEXT: vmand.mm v0, v11, v10 5329; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 5330; CHECK-NEXT: ret 5331 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 5332 ret <4 x i1> %1 5333} 5334 5335define <4 x i1> @fcmp_olt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5336; CHECK-LABEL: fcmp_olt_vf_v4f32: 5337; CHECK: # %bb.0: 5338; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5339; CHECK-NEXT: vfmv.v.f v9, fa0 5340; CHECK-NEXT: vmfeq.vv v10, v8, v8 5341; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5342; CHECK-NEXT: vmand.mm v0, v10, v9 5343; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5344; CHECK-NEXT: ret 5345 %head = insertelement <4 x float> poison, float %b, i32 0 5346 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5347 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 5348 ret <4 x i1> %1 5349} 5350 5351define <4 x i1> @fcmp_olt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5352; CHECK-LABEL: fcmp_olt_fv_v4f32: 5353; CHECK: # %bb.0: 5354; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5355; CHECK-NEXT: vfmv.v.f v9, fa0 5356; CHECK-NEXT: vmfeq.vv v10, v8, v8 5357; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5358; CHECK-NEXT: vmand.mm v0, v9, v10 5359; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5360; CHECK-NEXT: ret 5361 %head = insertelement <4 x float> poison, float %b, i32 0 5362 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5363 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 5364 ret <4 x i1> %1 5365} 5366 5367define <4 x i1> @fcmp_ole_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5368; CHECK-LABEL: fcmp_ole_vv_v4f32: 5369; CHECK: # %bb.0: 5370; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5371; CHECK-NEXT: vmfeq.vv v10, v9, v9 5372; CHECK-NEXT: vmfeq.vv v11, v8, v8 5373; CHECK-NEXT: vmand.mm v0, v11, v10 5374; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 5375; CHECK-NEXT: ret 5376 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 5377 ret <4 x i1> %1 5378} 5379 5380define <4 x i1> @fcmp_ole_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5381; CHECK-LABEL: fcmp_ole_vf_v4f32: 5382; CHECK: # %bb.0: 5383; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5384; CHECK-NEXT: vfmv.v.f v9, fa0 5385; CHECK-NEXT: vmfeq.vv v10, v8, v8 5386; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5387; CHECK-NEXT: vmand.mm v0, v10, v9 5388; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5389; CHECK-NEXT: ret 5390 %head = insertelement <4 x float> poison, float %b, i32 0 5391 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5392 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 5393 ret <4 x i1> %1 5394} 5395 5396define <4 x i1> @fcmp_ole_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5397; CHECK-LABEL: fcmp_ole_fv_v4f32: 5398; CHECK: # %bb.0: 5399; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5400; CHECK-NEXT: vfmv.v.f v9, fa0 5401; CHECK-NEXT: vmfeq.vv v10, v8, v8 5402; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5403; CHECK-NEXT: vmand.mm v0, v9, v10 5404; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5405; CHECK-NEXT: ret 5406 %head = insertelement <4 x float> poison, float %b, i32 0 5407 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5408 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 5409 ret <4 x i1> %1 5410} 5411 5412define <4 x i1> @fcmp_one_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5413; CHECK-LABEL: fcmp_one_vv_v4f32: 5414; CHECK: # %bb.0: 5415; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5416; CHECK-NEXT: vmfeq.vv v10, v9, v9 5417; CHECK-NEXT: vmfeq.vv v11, v8, v8 5418; CHECK-NEXT: vmand.mm v0, v11, v10 5419; CHECK-NEXT: vmv.v.v v10, v0 5420; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 5421; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5422; CHECK-NEXT: vmor.mm v0, v0, v10 5423; CHECK-NEXT: ret 5424 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 5425 ret <4 x i1> %1 5426} 5427 5428define <4 x i1> @fcmp_one_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5429; CHECK-LABEL: fcmp_one_vf_v4f32: 5430; CHECK: # %bb.0: 5431; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5432; CHECK-NEXT: vfmv.v.f v9, fa0 5433; CHECK-NEXT: vmfeq.vv v10, v8, v8 5434; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5435; CHECK-NEXT: vmand.mm v0, v10, v9 5436; CHECK-NEXT: vmv.v.v v9, v0 5437; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 5438; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5439; CHECK-NEXT: vmor.mm v0, v0, v9 5440; CHECK-NEXT: ret 5441 %head = insertelement <4 x float> poison, float %b, i32 0 5442 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5443 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 5444 ret <4 x i1> %1 5445} 5446 5447define <4 x i1> @fcmp_one_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5448; CHECK-LABEL: fcmp_one_fv_v4f32: 5449; CHECK: # %bb.0: 5450; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5451; CHECK-NEXT: vfmv.v.f v9, fa0 5452; CHECK-NEXT: vmfeq.vv v10, v8, v8 5453; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5454; CHECK-NEXT: vmand.mm v0, v9, v10 5455; CHECK-NEXT: vmv.v.v v9, v0 5456; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 5457; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5458; CHECK-NEXT: vmor.mm v0, v0, v9 5459; CHECK-NEXT: ret 5460 %head = insertelement <4 x float> poison, float %b, i32 0 5461 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5462 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 5463 ret <4 x i1> %1 5464} 5465 5466define <4 x i1> @fcmp_ord_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5467; CHECK-LABEL: fcmp_ord_vv_v4f32: 5468; CHECK: # %bb.0: 5469; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5470; CHECK-NEXT: vmfeq.vv v9, v9, v9 5471; CHECK-NEXT: vmfeq.vv v8, v8, v8 5472; CHECK-NEXT: vmand.mm v0, v8, v9 5473; CHECK-NEXT: ret 5474 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 5475 ret <4 x i1> %1 5476} 5477 5478define <4 x i1> @fcmp_ord_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5479; CHECK-LABEL: fcmp_ord_vf_v4f32: 5480; CHECK: # %bb.0: 5481; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5482; CHECK-NEXT: vfmv.v.f v9, fa0 5483; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5484; CHECK-NEXT: vmfeq.vv v8, v8, v8 5485; CHECK-NEXT: vmand.mm v0, v8, v9 5486; CHECK-NEXT: ret 5487 %head = insertelement <4 x float> poison, float %b, i32 0 5488 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5489 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 5490 ret <4 x i1> %1 5491} 5492 5493define <4 x i1> @fcmp_ord_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5494; CHECK-LABEL: fcmp_ord_fv_v4f32: 5495; CHECK: # %bb.0: 5496; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5497; CHECK-NEXT: vfmv.v.f v9, fa0 5498; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5499; CHECK-NEXT: vmfeq.vv v8, v8, v8 5500; CHECK-NEXT: vmand.mm v0, v9, v8 5501; CHECK-NEXT: ret 5502 %head = insertelement <4 x float> poison, float %b, i32 0 5503 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5504 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 5505 ret <4 x i1> %1 5506} 5507 5508define <4 x i1> @fcmp_ueq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5509; CHECK-LABEL: fcmp_ueq_vv_v4f32: 5510; CHECK: # %bb.0: 5511; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5512; CHECK-NEXT: vmfeq.vv v10, v9, v9 5513; CHECK-NEXT: vmfeq.vv v11, v8, v8 5514; CHECK-NEXT: vmand.mm v0, v11, v10 5515; CHECK-NEXT: vmv.v.v v10, v0 5516; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 5517; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5518; CHECK-NEXT: vmnor.mm v0, v0, v10 5519; CHECK-NEXT: ret 5520 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5521 ret <4 x i1> %1 5522} 5523 5524define <4 x i1> @fcmp_ueq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5525; CHECK-LABEL: fcmp_ueq_vf_v4f32: 5526; CHECK: # %bb.0: 5527; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5528; CHECK-NEXT: vfmv.v.f v9, fa0 5529; CHECK-NEXT: vmfeq.vv v10, v8, v8 5530; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5531; CHECK-NEXT: vmand.mm v0, v10, v9 5532; CHECK-NEXT: vmv.v.v v9, v0 5533; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 5534; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5535; CHECK-NEXT: vmnor.mm v0, v0, v9 5536; CHECK-NEXT: ret 5537 %head = insertelement <4 x float> poison, float %b, i32 0 5538 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5539 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5540 ret <4 x i1> %1 5541} 5542 5543define <4 x i1> @fcmp_ueq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5544; CHECK-LABEL: fcmp_ueq_fv_v4f32: 5545; CHECK: # %bb.0: 5546; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5547; CHECK-NEXT: vfmv.v.f v9, fa0 5548; CHECK-NEXT: vmfeq.vv v10, v8, v8 5549; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5550; CHECK-NEXT: vmand.mm v0, v9, v10 5551; CHECK-NEXT: vmv.v.v v9, v0 5552; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 5553; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5554; CHECK-NEXT: vmnor.mm v0, v0, v9 5555; CHECK-NEXT: ret 5556 %head = insertelement <4 x float> poison, float %b, i32 0 5557 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5558 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5559 ret <4 x i1> %1 5560} 5561 5562define <4 x i1> @fcmp_ugt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5563; CHECK-LABEL: fcmp_ugt_vv_v4f32: 5564; CHECK: # %bb.0: 5565; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5566; CHECK-NEXT: vmfeq.vv v10, v9, v9 5567; CHECK-NEXT: vmfeq.vv v11, v8, v8 5568; CHECK-NEXT: vmand.mm v0, v11, v10 5569; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 5570; CHECK-NEXT: vmnot.m v0, v0 5571; CHECK-NEXT: ret 5572 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5573 ret <4 x i1> %1 5574} 5575 5576define <4 x i1> @fcmp_ugt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5577; CHECK-LABEL: fcmp_ugt_vf_v4f32: 5578; CHECK: # %bb.0: 5579; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5580; CHECK-NEXT: vfmv.v.f v9, fa0 5581; CHECK-NEXT: vmfeq.vv v10, v8, v8 5582; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5583; CHECK-NEXT: vmand.mm v0, v10, v9 5584; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5585; CHECK-NEXT: vmnot.m v0, v0 5586; CHECK-NEXT: ret 5587 %head = insertelement <4 x float> poison, float %b, i32 0 5588 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5589 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5590 ret <4 x i1> %1 5591} 5592 5593define <4 x i1> @fcmp_ugt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5594; CHECK-LABEL: fcmp_ugt_fv_v4f32: 5595; CHECK: # %bb.0: 5596; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5597; CHECK-NEXT: vfmv.v.f v9, fa0 5598; CHECK-NEXT: vmfeq.vv v10, v8, v8 5599; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5600; CHECK-NEXT: vmand.mm v0, v9, v10 5601; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5602; CHECK-NEXT: vmnot.m v0, v0 5603; CHECK-NEXT: ret 5604 %head = insertelement <4 x float> poison, float %b, i32 0 5605 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5606 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5607 ret <4 x i1> %1 5608} 5609 5610define <4 x i1> @fcmp_uge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5611; CHECK-LABEL: fcmp_uge_vv_v4f32: 5612; CHECK: # %bb.0: 5613; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5614; CHECK-NEXT: vmfeq.vv v10, v9, v9 5615; CHECK-NEXT: vmfeq.vv v11, v8, v8 5616; CHECK-NEXT: vmand.mm v0, v11, v10 5617; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 5618; CHECK-NEXT: vmnot.m v0, v0 5619; CHECK-NEXT: ret 5620 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 5621 ret <4 x i1> %1 5622} 5623 5624define <4 x i1> @fcmp_uge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5625; CHECK-LABEL: fcmp_uge_vf_v4f32: 5626; CHECK: # %bb.0: 5627; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5628; CHECK-NEXT: vfmv.v.f v9, fa0 5629; CHECK-NEXT: vmfeq.vv v10, v8, v8 5630; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5631; CHECK-NEXT: vmand.mm v0, v10, v9 5632; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5633; CHECK-NEXT: vmnot.m v0, v0 5634; CHECK-NEXT: ret 5635 %head = insertelement <4 x float> poison, float %b, i32 0 5636 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5637 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5638 ret <4 x i1> %1 5639} 5640 5641define <4 x i1> @fcmp_uge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5642; CHECK-LABEL: fcmp_uge_fv_v4f32: 5643; CHECK: # %bb.0: 5644; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5645; CHECK-NEXT: vfmv.v.f v9, fa0 5646; CHECK-NEXT: vmfeq.vv v10, v8, v8 5647; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5648; CHECK-NEXT: vmand.mm v0, v9, v10 5649; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5650; CHECK-NEXT: vmnot.m v0, v0 5651; CHECK-NEXT: ret 5652 %head = insertelement <4 x float> poison, float %b, i32 0 5653 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5654 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5655 ret <4 x i1> %1 5656} 5657 5658define <4 x i1> @fcmp_ult_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5659; CHECK-LABEL: fcmp_ult_vv_v4f32: 5660; CHECK: # %bb.0: 5661; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5662; CHECK-NEXT: vmfeq.vv v10, v8, v8 5663; CHECK-NEXT: vmfeq.vv v11, v9, v9 5664; CHECK-NEXT: vmand.mm v0, v11, v10 5665; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 5666; CHECK-NEXT: vmnot.m v0, v0 5667; CHECK-NEXT: ret 5668 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5669 ret <4 x i1> %1 5670} 5671 5672define <4 x i1> @fcmp_ult_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5673; CHECK-LABEL: fcmp_ult_vf_v4f32: 5674; CHECK: # %bb.0: 5675; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5676; CHECK-NEXT: vfmv.v.f v9, fa0 5677; CHECK-NEXT: vmfeq.vv v10, v8, v8 5678; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5679; CHECK-NEXT: vmand.mm v0, v9, v10 5680; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 5681; CHECK-NEXT: vmnot.m v0, v0 5682; CHECK-NEXT: ret 5683 %head = insertelement <4 x float> poison, float %b, i32 0 5684 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5685 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5686 ret <4 x i1> %1 5687} 5688 5689define <4 x i1> @fcmp_ult_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5690; CHECK-LABEL: fcmp_ult_fv_v4f32: 5691; CHECK: # %bb.0: 5692; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5693; CHECK-NEXT: vfmv.v.f v9, fa0 5694; CHECK-NEXT: vmfeq.vv v10, v8, v8 5695; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5696; CHECK-NEXT: vmand.mm v0, v10, v9 5697; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 5698; CHECK-NEXT: vmnot.m v0, v0 5699; CHECK-NEXT: ret 5700 %head = insertelement <4 x float> poison, float %b, i32 0 5701 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5702 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5703 ret <4 x i1> %1 5704} 5705 5706define <4 x i1> @fcmp_ule_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5707; CHECK-LABEL: fcmp_ule_vv_v4f32: 5708; CHECK: # %bb.0: 5709; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5710; CHECK-NEXT: vmfeq.vv v10, v8, v8 5711; CHECK-NEXT: vmfeq.vv v11, v9, v9 5712; CHECK-NEXT: vmand.mm v0, v11, v10 5713; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 5714; CHECK-NEXT: vmnot.m v0, v0 5715; CHECK-NEXT: ret 5716 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5717 ret <4 x i1> %1 5718} 5719 5720define <4 x i1> @fcmp_ule_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5721; CHECK-LABEL: fcmp_ule_vf_v4f32: 5722; CHECK: # %bb.0: 5723; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5724; CHECK-NEXT: vfmv.v.f v9, fa0 5725; CHECK-NEXT: vmfeq.vv v10, v8, v8 5726; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5727; CHECK-NEXT: vmand.mm v0, v9, v10 5728; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 5729; CHECK-NEXT: vmnot.m v0, v0 5730; CHECK-NEXT: ret 5731 %head = insertelement <4 x float> poison, float %b, i32 0 5732 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5733 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5734 ret <4 x i1> %1 5735} 5736 5737define <4 x i1> @fcmp_ule_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5738; CHECK-LABEL: fcmp_ule_fv_v4f32: 5739; CHECK: # %bb.0: 5740; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu 5741; CHECK-NEXT: vfmv.v.f v9, fa0 5742; CHECK-NEXT: vmfeq.vv v10, v8, v8 5743; CHECK-NEXT: vmfeq.vf v9, v9, fa0 5744; CHECK-NEXT: vmand.mm v0, v10, v9 5745; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 5746; CHECK-NEXT: vmnot.m v0, v0 5747; CHECK-NEXT: ret 5748 %head = insertelement <4 x float> poison, float %b, i32 0 5749 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5750 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5751 ret <4 x i1> %1 5752} 5753 5754define <4 x i1> @fcmp_une_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5755; CHECK-LABEL: fcmp_une_vv_v4f32: 5756; CHECK: # %bb.0: 5757; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5758; CHECK-NEXT: vmfne.vv v0, v8, v9 5759; CHECK-NEXT: ret 5760 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5761 ret <4 x i1> %1 5762} 5763 5764define <4 x i1> @fcmp_une_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5765; CHECK-LABEL: fcmp_une_vf_v4f32: 5766; CHECK: # %bb.0: 5767; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5768; CHECK-NEXT: vmfne.vf v0, v8, fa0 5769; CHECK-NEXT: ret 5770 %head = insertelement <4 x float> poison, float %b, i32 0 5771 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5772 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5773 ret <4 x i1> %1 5774} 5775 5776define <4 x i1> @fcmp_une_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5777; CHECK-LABEL: fcmp_une_fv_v4f32: 5778; CHECK: # %bb.0: 5779; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5780; CHECK-NEXT: vmfne.vf v0, v8, fa0 5781; CHECK-NEXT: ret 5782 %head = insertelement <4 x float> poison, float %b, i32 0 5783 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5784 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5785 ret <4 x i1> %1 5786} 5787 5788define <4 x i1> @fcmp_uno_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 5789; CHECK-LABEL: fcmp_uno_vv_v4f32: 5790; CHECK: # %bb.0: 5791; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5792; CHECK-NEXT: vmfne.vv v9, v9, v9 5793; CHECK-NEXT: vmfne.vv v8, v8, v8 5794; CHECK-NEXT: vmor.mm v0, v8, v9 5795; CHECK-NEXT: ret 5796 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5797 ret <4 x i1> %1 5798} 5799 5800define <4 x i1> @fcmp_uno_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5801; CHECK-LABEL: fcmp_uno_vf_v4f32: 5802; CHECK: # %bb.0: 5803; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5804; CHECK-NEXT: vfmv.v.f v9, fa0 5805; CHECK-NEXT: vmfne.vf v9, v9, fa0 5806; CHECK-NEXT: vmfne.vv v8, v8, v8 5807; CHECK-NEXT: vmor.mm v0, v8, v9 5808; CHECK-NEXT: ret 5809 %head = insertelement <4 x float> poison, float %b, i32 0 5810 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5811 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5812 ret <4 x i1> %1 5813} 5814 5815define <4 x i1> @fcmp_uno_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 5816; CHECK-LABEL: fcmp_uno_fv_v4f32: 5817; CHECK: # %bb.0: 5818; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 5819; CHECK-NEXT: vfmv.v.f v9, fa0 5820; CHECK-NEXT: vmfne.vf v9, v9, fa0 5821; CHECK-NEXT: vmfne.vv v8, v8, v8 5822; CHECK-NEXT: vmor.mm v0, v9, v8 5823; CHECK-NEXT: ret 5824 %head = insertelement <4 x float> poison, float %b, i32 0 5825 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 5826 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5827 ret <4 x i1> %1 5828} 5829 5830declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float>, <8 x float>, metadata, metadata) 5831define <8 x i1> @fcmp_oeq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5832; CHECK-LABEL: fcmp_oeq_vv_v8f32: 5833; CHECK: # %bb.0: 5834; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5835; CHECK-NEXT: vmfeq.vv v0, v8, v10 5836; CHECK-NEXT: ret 5837 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5838 ret <8 x i1> %1 5839} 5840 5841define <8 x i1> @fcmp_oeq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5842; CHECK-LABEL: fcmp_oeq_vf_v8f32: 5843; CHECK: # %bb.0: 5844; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5845; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5846; CHECK-NEXT: ret 5847 %head = insertelement <8 x float> poison, float %b, i32 0 5848 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5849 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5850 ret <8 x i1> %1 5851} 5852 5853define <8 x i1> @fcmp_oeq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5854; CHECK-LABEL: fcmp_oeq_fv_v8f32: 5855; CHECK: # %bb.0: 5856; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5857; CHECK-NEXT: vmfeq.vf v0, v8, fa0 5858; CHECK-NEXT: ret 5859 %head = insertelement <8 x float> poison, float %b, i32 0 5860 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5861 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5862 ret <8 x i1> %1 5863} 5864 5865define <8 x i1> @fcmp_ogt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5866; CHECK-LABEL: fcmp_ogt_vv_v8f32: 5867; CHECK: # %bb.0: 5868; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5869; CHECK-NEXT: vmfeq.vv v12, v8, v8 5870; CHECK-NEXT: vmfeq.vv v13, v10, v10 5871; CHECK-NEXT: vmand.mm v12, v13, v12 5872; CHECK-NEXT: vmv1r.v v0, v12 5873; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 5874; CHECK-NEXT: vmv1r.v v0, v12 5875; CHECK-NEXT: ret 5876 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5877 ret <8 x i1> %1 5878} 5879 5880define <8 x i1> @fcmp_ogt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5881; CHECK-LABEL: fcmp_ogt_vf_v8f32: 5882; CHECK: # %bb.0: 5883; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5884; CHECK-NEXT: vfmv.v.f v10, fa0 5885; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5886; CHECK-NEXT: vmfeq.vv v10, v8, v8 5887; CHECK-NEXT: vmand.mm v10, v12, v10 5888; CHECK-NEXT: vmv1r.v v0, v10 5889; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 5890; CHECK-NEXT: vmv1r.v v0, v10 5891; CHECK-NEXT: ret 5892 %head = insertelement <8 x float> poison, float %b, i32 0 5893 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5894 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5895 ret <8 x i1> %1 5896} 5897 5898define <8 x i1> @fcmp_ogt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5899; CHECK-LABEL: fcmp_ogt_fv_v8f32: 5900; CHECK: # %bb.0: 5901; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5902; CHECK-NEXT: vfmv.v.f v10, fa0 5903; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5904; CHECK-NEXT: vmfeq.vv v10, v8, v8 5905; CHECK-NEXT: vmand.mm v10, v10, v12 5906; CHECK-NEXT: vmv1r.v v0, v10 5907; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5908; CHECK-NEXT: vmv1r.v v0, v10 5909; CHECK-NEXT: ret 5910 %head = insertelement <8 x float> poison, float %b, i32 0 5911 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5912 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5913 ret <8 x i1> %1 5914} 5915 5916define <8 x i1> @fcmp_oge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5917; CHECK-LABEL: fcmp_oge_vv_v8f32: 5918; CHECK: # %bb.0: 5919; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5920; CHECK-NEXT: vmfeq.vv v12, v8, v8 5921; CHECK-NEXT: vmfeq.vv v13, v10, v10 5922; CHECK-NEXT: vmand.mm v12, v13, v12 5923; CHECK-NEXT: vmv1r.v v0, v12 5924; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 5925; CHECK-NEXT: vmv1r.v v0, v12 5926; CHECK-NEXT: ret 5927 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5928 ret <8 x i1> %1 5929} 5930 5931define <8 x i1> @fcmp_oge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5932; CHECK-LABEL: fcmp_oge_vf_v8f32: 5933; CHECK: # %bb.0: 5934; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5935; CHECK-NEXT: vfmv.v.f v10, fa0 5936; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5937; CHECK-NEXT: vmfeq.vv v10, v8, v8 5938; CHECK-NEXT: vmand.mm v10, v12, v10 5939; CHECK-NEXT: vmv1r.v v0, v10 5940; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 5941; CHECK-NEXT: vmv1r.v v0, v10 5942; CHECK-NEXT: ret 5943 %head = insertelement <8 x float> poison, float %b, i32 0 5944 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5945 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5946 ret <8 x i1> %1 5947} 5948 5949define <8 x i1> @fcmp_oge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5950; CHECK-LABEL: fcmp_oge_fv_v8f32: 5951; CHECK: # %bb.0: 5952; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5953; CHECK-NEXT: vfmv.v.f v10, fa0 5954; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5955; CHECK-NEXT: vmfeq.vv v10, v8, v8 5956; CHECK-NEXT: vmand.mm v10, v10, v12 5957; CHECK-NEXT: vmv1r.v v0, v10 5958; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 5959; CHECK-NEXT: vmv1r.v v0, v10 5960; CHECK-NEXT: ret 5961 %head = insertelement <8 x float> poison, float %b, i32 0 5962 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5963 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 5964 ret <8 x i1> %1 5965} 5966 5967define <8 x i1> @fcmp_olt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5968; CHECK-LABEL: fcmp_olt_vv_v8f32: 5969; CHECK: # %bb.0: 5970; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5971; CHECK-NEXT: vmfeq.vv v12, v10, v10 5972; CHECK-NEXT: vmfeq.vv v13, v8, v8 5973; CHECK-NEXT: vmand.mm v12, v13, v12 5974; CHECK-NEXT: vmv1r.v v0, v12 5975; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 5976; CHECK-NEXT: vmv1r.v v0, v12 5977; CHECK-NEXT: ret 5978 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 5979 ret <8 x i1> %1 5980} 5981 5982define <8 x i1> @fcmp_olt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5983; CHECK-LABEL: fcmp_olt_vf_v8f32: 5984; CHECK: # %bb.0: 5985; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 5986; CHECK-NEXT: vfmv.v.f v10, fa0 5987; CHECK-NEXT: vmfeq.vf v12, v10, fa0 5988; CHECK-NEXT: vmfeq.vv v10, v8, v8 5989; CHECK-NEXT: vmand.mm v10, v10, v12 5990; CHECK-NEXT: vmv1r.v v0, v10 5991; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 5992; CHECK-NEXT: vmv1r.v v0, v10 5993; CHECK-NEXT: ret 5994 %head = insertelement <8 x float> poison, float %b, i32 0 5995 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5996 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 5997 ret <8 x i1> %1 5998} 5999 6000define <8 x i1> @fcmp_olt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6001; CHECK-LABEL: fcmp_olt_fv_v8f32: 6002; CHECK: # %bb.0: 6003; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6004; CHECK-NEXT: vfmv.v.f v10, fa0 6005; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6006; CHECK-NEXT: vmfeq.vv v10, v8, v8 6007; CHECK-NEXT: vmand.mm v10, v12, v10 6008; CHECK-NEXT: vmv1r.v v0, v10 6009; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 6010; CHECK-NEXT: vmv1r.v v0, v10 6011; CHECK-NEXT: ret 6012 %head = insertelement <8 x float> poison, float %b, i32 0 6013 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6014 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6015 ret <8 x i1> %1 6016} 6017 6018define <8 x i1> @fcmp_ole_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6019; CHECK-LABEL: fcmp_ole_vv_v8f32: 6020; CHECK: # %bb.0: 6021; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6022; CHECK-NEXT: vmfeq.vv v12, v10, v10 6023; CHECK-NEXT: vmfeq.vv v13, v8, v8 6024; CHECK-NEXT: vmand.mm v12, v13, v12 6025; CHECK-NEXT: vmv1r.v v0, v12 6026; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 6027; CHECK-NEXT: vmv1r.v v0, v12 6028; CHECK-NEXT: ret 6029 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6030 ret <8 x i1> %1 6031} 6032 6033define <8 x i1> @fcmp_ole_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6034; CHECK-LABEL: fcmp_ole_vf_v8f32: 6035; CHECK: # %bb.0: 6036; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6037; CHECK-NEXT: vfmv.v.f v10, fa0 6038; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6039; CHECK-NEXT: vmfeq.vv v10, v8, v8 6040; CHECK-NEXT: vmand.mm v10, v10, v12 6041; CHECK-NEXT: vmv1r.v v0, v10 6042; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 6043; CHECK-NEXT: vmv1r.v v0, v10 6044; CHECK-NEXT: ret 6045 %head = insertelement <8 x float> poison, float %b, i32 0 6046 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6047 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6048 ret <8 x i1> %1 6049} 6050 6051define <8 x i1> @fcmp_ole_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6052; CHECK-LABEL: fcmp_ole_fv_v8f32: 6053; CHECK: # %bb.0: 6054; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6055; CHECK-NEXT: vfmv.v.f v10, fa0 6056; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6057; CHECK-NEXT: vmfeq.vv v10, v8, v8 6058; CHECK-NEXT: vmand.mm v10, v12, v10 6059; CHECK-NEXT: vmv1r.v v0, v10 6060; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 6061; CHECK-NEXT: vmv1r.v v0, v10 6062; CHECK-NEXT: ret 6063 %head = insertelement <8 x float> poison, float %b, i32 0 6064 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6065 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6066 ret <8 x i1> %1 6067} 6068 6069define <8 x i1> @fcmp_one_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6070; CHECK-LABEL: fcmp_one_vv_v8f32: 6071; CHECK: # %bb.0: 6072; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6073; CHECK-NEXT: vmfeq.vv v12, v10, v10 6074; CHECK-NEXT: vmfeq.vv v13, v8, v8 6075; CHECK-NEXT: vmand.mm v12, v13, v12 6076; CHECK-NEXT: vmv1r.v v13, v12 6077; CHECK-NEXT: vmv1r.v v0, v12 6078; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 6079; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 6080; CHECK-NEXT: vmor.mm v0, v12, v13 6081; CHECK-NEXT: ret 6082 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6083 ret <8 x i1> %1 6084} 6085 6086define <8 x i1> @fcmp_one_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6087; CHECK-LABEL: fcmp_one_vf_v8f32: 6088; CHECK: # %bb.0: 6089; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6090; CHECK-NEXT: vfmv.v.f v10, fa0 6091; CHECK-NEXT: vmfeq.vv v12, v8, v8 6092; CHECK-NEXT: vmfeq.vf v13, v10, fa0 6093; CHECK-NEXT: vmand.mm v10, v12, v13 6094; CHECK-NEXT: vmv1r.v v11, v10 6095; CHECK-NEXT: vmv1r.v v0, v10 6096; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 6097; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 6098; CHECK-NEXT: vmor.mm v0, v10, v11 6099; CHECK-NEXT: ret 6100 %head = insertelement <8 x float> poison, float %b, i32 0 6101 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6102 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6103 ret <8 x i1> %1 6104} 6105 6106define <8 x i1> @fcmp_one_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6107; CHECK-LABEL: fcmp_one_fv_v8f32: 6108; CHECK: # %bb.0: 6109; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6110; CHECK-NEXT: vfmv.v.f v10, fa0 6111; CHECK-NEXT: vmfeq.vv v12, v8, v8 6112; CHECK-NEXT: vmfeq.vf v13, v10, fa0 6113; CHECK-NEXT: vmand.mm v10, v13, v12 6114; CHECK-NEXT: vmv1r.v v11, v10 6115; CHECK-NEXT: vmv1r.v v0, v10 6116; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 6117; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 6118; CHECK-NEXT: vmor.mm v0, v10, v11 6119; CHECK-NEXT: ret 6120 %head = insertelement <8 x float> poison, float %b, i32 0 6121 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6122 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6123 ret <8 x i1> %1 6124} 6125 6126define <8 x i1> @fcmp_ord_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6127; CHECK-LABEL: fcmp_ord_vv_v8f32: 6128; CHECK: # %bb.0: 6129; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6130; CHECK-NEXT: vmfeq.vv v12, v10, v10 6131; CHECK-NEXT: vmfeq.vv v10, v8, v8 6132; CHECK-NEXT: vmand.mm v0, v10, v12 6133; CHECK-NEXT: ret 6134 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6135 ret <8 x i1> %1 6136} 6137 6138define <8 x i1> @fcmp_ord_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6139; CHECK-LABEL: fcmp_ord_vf_v8f32: 6140; CHECK: # %bb.0: 6141; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6142; CHECK-NEXT: vfmv.v.f v10, fa0 6143; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6144; CHECK-NEXT: vmfeq.vv v10, v8, v8 6145; CHECK-NEXT: vmand.mm v0, v10, v12 6146; CHECK-NEXT: ret 6147 %head = insertelement <8 x float> poison, float %b, i32 0 6148 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6149 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6150 ret <8 x i1> %1 6151} 6152 6153define <8 x i1> @fcmp_ord_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6154; CHECK-LABEL: fcmp_ord_fv_v8f32: 6155; CHECK: # %bb.0: 6156; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6157; CHECK-NEXT: vfmv.v.f v10, fa0 6158; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6159; CHECK-NEXT: vmfeq.vv v10, v8, v8 6160; CHECK-NEXT: vmand.mm v0, v12, v10 6161; CHECK-NEXT: ret 6162 %head = insertelement <8 x float> poison, float %b, i32 0 6163 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6164 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6165 ret <8 x i1> %1 6166} 6167 6168define <8 x i1> @fcmp_ueq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6169; CHECK-LABEL: fcmp_ueq_vv_v8f32: 6170; CHECK: # %bb.0: 6171; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6172; CHECK-NEXT: vmfeq.vv v12, v10, v10 6173; CHECK-NEXT: vmfeq.vv v13, v8, v8 6174; CHECK-NEXT: vmand.mm v12, v13, v12 6175; CHECK-NEXT: vmv1r.v v13, v12 6176; CHECK-NEXT: vmv1r.v v0, v12 6177; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 6178; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 6179; CHECK-NEXT: vmnor.mm v0, v12, v13 6180; CHECK-NEXT: ret 6181 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6182 ret <8 x i1> %1 6183} 6184 6185define <8 x i1> @fcmp_ueq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6186; CHECK-LABEL: fcmp_ueq_vf_v8f32: 6187; CHECK: # %bb.0: 6188; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6189; CHECK-NEXT: vfmv.v.f v10, fa0 6190; CHECK-NEXT: vmfeq.vv v12, v8, v8 6191; CHECK-NEXT: vmfeq.vf v13, v10, fa0 6192; CHECK-NEXT: vmand.mm v10, v12, v13 6193; CHECK-NEXT: vmv1r.v v11, v10 6194; CHECK-NEXT: vmv1r.v v0, v10 6195; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 6196; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 6197; CHECK-NEXT: vmnor.mm v0, v10, v11 6198; CHECK-NEXT: ret 6199 %head = insertelement <8 x float> poison, float %b, i32 0 6200 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6201 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6202 ret <8 x i1> %1 6203} 6204 6205define <8 x i1> @fcmp_ueq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6206; CHECK-LABEL: fcmp_ueq_fv_v8f32: 6207; CHECK: # %bb.0: 6208; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6209; CHECK-NEXT: vfmv.v.f v10, fa0 6210; CHECK-NEXT: vmfeq.vv v12, v8, v8 6211; CHECK-NEXT: vmfeq.vf v13, v10, fa0 6212; CHECK-NEXT: vmand.mm v10, v13, v12 6213; CHECK-NEXT: vmv1r.v v11, v10 6214; CHECK-NEXT: vmv1r.v v0, v10 6215; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 6216; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 6217; CHECK-NEXT: vmnor.mm v0, v10, v11 6218; CHECK-NEXT: ret 6219 %head = insertelement <8 x float> poison, float %b, i32 0 6220 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6221 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6222 ret <8 x i1> %1 6223} 6224 6225define <8 x i1> @fcmp_ugt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6226; CHECK-LABEL: fcmp_ugt_vv_v8f32: 6227; CHECK: # %bb.0: 6228; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6229; CHECK-NEXT: vmfeq.vv v12, v10, v10 6230; CHECK-NEXT: vmfeq.vv v13, v8, v8 6231; CHECK-NEXT: vmand.mm v12, v13, v12 6232; CHECK-NEXT: vmv1r.v v0, v12 6233; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 6234; CHECK-NEXT: vmnot.m v0, v12 6235; CHECK-NEXT: ret 6236 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6237 ret <8 x i1> %1 6238} 6239 6240define <8 x i1> @fcmp_ugt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6241; CHECK-LABEL: fcmp_ugt_vf_v8f32: 6242; CHECK: # %bb.0: 6243; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6244; CHECK-NEXT: vfmv.v.f v10, fa0 6245; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6246; CHECK-NEXT: vmfeq.vv v10, v8, v8 6247; CHECK-NEXT: vmand.mm v10, v10, v12 6248; CHECK-NEXT: vmv1r.v v0, v10 6249; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 6250; CHECK-NEXT: vmnot.m v0, v10 6251; CHECK-NEXT: ret 6252 %head = insertelement <8 x float> poison, float %b, i32 0 6253 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6254 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6255 ret <8 x i1> %1 6256} 6257 6258define <8 x i1> @fcmp_ugt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6259; CHECK-LABEL: fcmp_ugt_fv_v8f32: 6260; CHECK: # %bb.0: 6261; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6262; CHECK-NEXT: vfmv.v.f v10, fa0 6263; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6264; CHECK-NEXT: vmfeq.vv v10, v8, v8 6265; CHECK-NEXT: vmand.mm v10, v12, v10 6266; CHECK-NEXT: vmv1r.v v0, v10 6267; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 6268; CHECK-NEXT: vmnot.m v0, v10 6269; CHECK-NEXT: ret 6270 %head = insertelement <8 x float> poison, float %b, i32 0 6271 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6272 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6273 ret <8 x i1> %1 6274} 6275 6276define <8 x i1> @fcmp_uge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6277; CHECK-LABEL: fcmp_uge_vv_v8f32: 6278; CHECK: # %bb.0: 6279; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6280; CHECK-NEXT: vmfeq.vv v12, v10, v10 6281; CHECK-NEXT: vmfeq.vv v13, v8, v8 6282; CHECK-NEXT: vmand.mm v12, v13, v12 6283; CHECK-NEXT: vmv1r.v v0, v12 6284; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 6285; CHECK-NEXT: vmnot.m v0, v12 6286; CHECK-NEXT: ret 6287 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 6288 ret <8 x i1> %1 6289} 6290 6291define <8 x i1> @fcmp_uge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6292; CHECK-LABEL: fcmp_uge_vf_v8f32: 6293; CHECK: # %bb.0: 6294; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6295; CHECK-NEXT: vfmv.v.f v10, fa0 6296; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6297; CHECK-NEXT: vmfeq.vv v10, v8, v8 6298; CHECK-NEXT: vmand.mm v10, v10, v12 6299; CHECK-NEXT: vmv1r.v v0, v10 6300; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 6301; CHECK-NEXT: vmnot.m v0, v10 6302; CHECK-NEXT: ret 6303 %head = insertelement <8 x float> poison, float %b, i32 0 6304 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6305 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 6306 ret <8 x i1> %1 6307} 6308 6309define <8 x i1> @fcmp_uge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6310; CHECK-LABEL: fcmp_uge_fv_v8f32: 6311; CHECK: # %bb.0: 6312; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6313; CHECK-NEXT: vfmv.v.f v10, fa0 6314; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6315; CHECK-NEXT: vmfeq.vv v10, v8, v8 6316; CHECK-NEXT: vmand.mm v10, v12, v10 6317; CHECK-NEXT: vmv1r.v v0, v10 6318; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 6319; CHECK-NEXT: vmnot.m v0, v10 6320; CHECK-NEXT: ret 6321 %head = insertelement <8 x float> poison, float %b, i32 0 6322 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6323 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 6324 ret <8 x i1> %1 6325} 6326 6327define <8 x i1> @fcmp_ult_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6328; CHECK-LABEL: fcmp_ult_vv_v8f32: 6329; CHECK: # %bb.0: 6330; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6331; CHECK-NEXT: vmfeq.vv v12, v8, v8 6332; CHECK-NEXT: vmfeq.vv v13, v10, v10 6333; CHECK-NEXT: vmand.mm v12, v13, v12 6334; CHECK-NEXT: vmv1r.v v0, v12 6335; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 6336; CHECK-NEXT: vmnot.m v0, v12 6337; CHECK-NEXT: ret 6338 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 6339 ret <8 x i1> %1 6340} 6341 6342define <8 x i1> @fcmp_ult_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6343; CHECK-LABEL: fcmp_ult_vf_v8f32: 6344; CHECK: # %bb.0: 6345; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6346; CHECK-NEXT: vfmv.v.f v10, fa0 6347; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6348; CHECK-NEXT: vmfeq.vv v10, v8, v8 6349; CHECK-NEXT: vmand.mm v10, v12, v10 6350; CHECK-NEXT: vmv1r.v v0, v10 6351; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 6352; CHECK-NEXT: vmnot.m v0, v10 6353; CHECK-NEXT: ret 6354 %head = insertelement <8 x float> poison, float %b, i32 0 6355 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6356 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 6357 ret <8 x i1> %1 6358} 6359 6360define <8 x i1> @fcmp_ult_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6361; CHECK-LABEL: fcmp_ult_fv_v8f32: 6362; CHECK: # %bb.0: 6363; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6364; CHECK-NEXT: vfmv.v.f v10, fa0 6365; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6366; CHECK-NEXT: vmfeq.vv v10, v8, v8 6367; CHECK-NEXT: vmand.mm v10, v10, v12 6368; CHECK-NEXT: vmv1r.v v0, v10 6369; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 6370; CHECK-NEXT: vmnot.m v0, v10 6371; CHECK-NEXT: ret 6372 %head = insertelement <8 x float> poison, float %b, i32 0 6373 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6374 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 6375 ret <8 x i1> %1 6376} 6377 6378define <8 x i1> @fcmp_ule_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6379; CHECK-LABEL: fcmp_ule_vv_v8f32: 6380; CHECK: # %bb.0: 6381; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6382; CHECK-NEXT: vmfeq.vv v12, v8, v8 6383; CHECK-NEXT: vmfeq.vv v13, v10, v10 6384; CHECK-NEXT: vmand.mm v12, v13, v12 6385; CHECK-NEXT: vmv1r.v v0, v12 6386; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 6387; CHECK-NEXT: vmnot.m v0, v12 6388; CHECK-NEXT: ret 6389 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 6390 ret <8 x i1> %1 6391} 6392 6393define <8 x i1> @fcmp_ule_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6394; CHECK-LABEL: fcmp_ule_vf_v8f32: 6395; CHECK: # %bb.0: 6396; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6397; CHECK-NEXT: vfmv.v.f v10, fa0 6398; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6399; CHECK-NEXT: vmfeq.vv v10, v8, v8 6400; CHECK-NEXT: vmand.mm v10, v12, v10 6401; CHECK-NEXT: vmv1r.v v0, v10 6402; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 6403; CHECK-NEXT: vmnot.m v0, v10 6404; CHECK-NEXT: ret 6405 %head = insertelement <8 x float> poison, float %b, i32 0 6406 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6407 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 6408 ret <8 x i1> %1 6409} 6410 6411define <8 x i1> @fcmp_ule_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6412; CHECK-LABEL: fcmp_ule_fv_v8f32: 6413; CHECK: # %bb.0: 6414; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6415; CHECK-NEXT: vfmv.v.f v10, fa0 6416; CHECK-NEXT: vmfeq.vf v12, v10, fa0 6417; CHECK-NEXT: vmfeq.vv v10, v8, v8 6418; CHECK-NEXT: vmand.mm v10, v10, v12 6419; CHECK-NEXT: vmv1r.v v0, v10 6420; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 6421; CHECK-NEXT: vmnot.m v0, v10 6422; CHECK-NEXT: ret 6423 %head = insertelement <8 x float> poison, float %b, i32 0 6424 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 6426 ret <8 x i1> %1 6427} 6428 6429define <8 x i1> @fcmp_une_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6430; CHECK-LABEL: fcmp_une_vv_v8f32: 6431; CHECK: # %bb.0: 6432; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6433; CHECK-NEXT: vmfne.vv v0, v8, v10 6434; CHECK-NEXT: ret 6435 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 6436 ret <8 x i1> %1 6437} 6438 6439define <8 x i1> @fcmp_une_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6440; CHECK-LABEL: fcmp_une_vf_v8f32: 6441; CHECK: # %bb.0: 6442; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6443; CHECK-NEXT: vmfne.vf v0, v8, fa0 6444; CHECK-NEXT: ret 6445 %head = insertelement <8 x float> poison, float %b, i32 0 6446 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6447 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 6448 ret <8 x i1> %1 6449} 6450 6451define <8 x i1> @fcmp_une_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6452; CHECK-LABEL: fcmp_une_fv_v8f32: 6453; CHECK: # %bb.0: 6454; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6455; CHECK-NEXT: vmfne.vf v0, v8, fa0 6456; CHECK-NEXT: ret 6457 %head = insertelement <8 x float> poison, float %b, i32 0 6458 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6459 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 6460 ret <8 x i1> %1 6461} 6462 6463define <8 x i1> @fcmp_uno_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 6464; CHECK-LABEL: fcmp_uno_vv_v8f32: 6465; CHECK: # %bb.0: 6466; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6467; CHECK-NEXT: vmfne.vv v12, v10, v10 6468; CHECK-NEXT: vmfne.vv v10, v8, v8 6469; CHECK-NEXT: vmor.mm v0, v10, v12 6470; CHECK-NEXT: ret 6471 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 6472 ret <8 x i1> %1 6473} 6474 6475define <8 x i1> @fcmp_uno_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6476; CHECK-LABEL: fcmp_uno_vf_v8f32: 6477; CHECK: # %bb.0: 6478; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6479; CHECK-NEXT: vfmv.v.f v10, fa0 6480; CHECK-NEXT: vmfne.vf v12, v10, fa0 6481; CHECK-NEXT: vmfne.vv v10, v8, v8 6482; CHECK-NEXT: vmor.mm v0, v10, v12 6483; CHECK-NEXT: ret 6484 %head = insertelement <8 x float> poison, float %b, i32 0 6485 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6486 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 6487 ret <8 x i1> %1 6488} 6489 6490define <8 x i1> @fcmp_uno_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 6491; CHECK-LABEL: fcmp_uno_fv_v8f32: 6492; CHECK: # %bb.0: 6493; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 6494; CHECK-NEXT: vfmv.v.f v10, fa0 6495; CHECK-NEXT: vmfne.vf v12, v10, fa0 6496; CHECK-NEXT: vmfne.vv v10, v8, v8 6497; CHECK-NEXT: vmor.mm v0, v12, v10 6498; CHECK-NEXT: ret 6499 %head = insertelement <8 x float> poison, float %b, i32 0 6500 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 6501 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 6502 ret <8 x i1> %1 6503} 6504 6505declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata) 6506define <16 x i1> @fcmp_oeq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6507; CHECK-LABEL: fcmp_oeq_vv_v16f32: 6508; CHECK: # %bb.0: 6509; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6510; CHECK-NEXT: vmfeq.vv v0, v8, v12 6511; CHECK-NEXT: ret 6512 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6513 ret <16 x i1> %1 6514} 6515 6516define <16 x i1> @fcmp_oeq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6517; CHECK-LABEL: fcmp_oeq_vf_v16f32: 6518; CHECK: # %bb.0: 6519; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6520; CHECK-NEXT: vmfeq.vf v0, v8, fa0 6521; CHECK-NEXT: ret 6522 %head = insertelement <16 x float> poison, float %b, i32 0 6523 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6524 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6525 ret <16 x i1> %1 6526} 6527 6528define <16 x i1> @fcmp_oeq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6529; CHECK-LABEL: fcmp_oeq_fv_v16f32: 6530; CHECK: # %bb.0: 6531; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6532; CHECK-NEXT: vmfeq.vf v0, v8, fa0 6533; CHECK-NEXT: ret 6534 %head = insertelement <16 x float> poison, float %b, i32 0 6535 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6536 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6537 ret <16 x i1> %1 6538} 6539 6540define <16 x i1> @fcmp_ogt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6541; CHECK-LABEL: fcmp_ogt_vv_v16f32: 6542; CHECK: # %bb.0: 6543; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6544; CHECK-NEXT: vmfeq.vv v16, v8, v8 6545; CHECK-NEXT: vmfeq.vv v17, v12, v12 6546; CHECK-NEXT: vmand.mm v16, v17, v16 6547; CHECK-NEXT: vmv1r.v v0, v16 6548; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6549; CHECK-NEXT: vmv1r.v v0, v16 6550; CHECK-NEXT: ret 6551 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6552 ret <16 x i1> %1 6553} 6554 6555define <16 x i1> @fcmp_ogt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6556; CHECK-LABEL: fcmp_ogt_vf_v16f32: 6557; CHECK: # %bb.0: 6558; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6559; CHECK-NEXT: vfmv.v.f v12, fa0 6560; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6561; CHECK-NEXT: vmfeq.vv v12, v8, v8 6562; CHECK-NEXT: vmand.mm v12, v16, v12 6563; CHECK-NEXT: vmv1r.v v0, v12 6564; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6565; CHECK-NEXT: vmv1r.v v0, v12 6566; CHECK-NEXT: ret 6567 %head = insertelement <16 x float> poison, float %b, i32 0 6568 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6569 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6570 ret <16 x i1> %1 6571} 6572 6573define <16 x i1> @fcmp_ogt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6574; CHECK-LABEL: fcmp_ogt_fv_v16f32: 6575; CHECK: # %bb.0: 6576; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6577; CHECK-NEXT: vfmv.v.f v12, fa0 6578; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6579; CHECK-NEXT: vmfeq.vv v12, v8, v8 6580; CHECK-NEXT: vmand.mm v12, v12, v16 6581; CHECK-NEXT: vmv1r.v v0, v12 6582; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6583; CHECK-NEXT: vmv1r.v v0, v12 6584; CHECK-NEXT: ret 6585 %head = insertelement <16 x float> poison, float %b, i32 0 6586 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6587 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6588 ret <16 x i1> %1 6589} 6590 6591define <16 x i1> @fcmp_oge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6592; CHECK-LABEL: fcmp_oge_vv_v16f32: 6593; CHECK: # %bb.0: 6594; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6595; CHECK-NEXT: vmfeq.vv v16, v8, v8 6596; CHECK-NEXT: vmfeq.vv v17, v12, v12 6597; CHECK-NEXT: vmand.mm v16, v17, v16 6598; CHECK-NEXT: vmv1r.v v0, v16 6599; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 6600; CHECK-NEXT: vmv1r.v v0, v16 6601; CHECK-NEXT: ret 6602 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 6603 ret <16 x i1> %1 6604} 6605 6606define <16 x i1> @fcmp_oge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6607; CHECK-LABEL: fcmp_oge_vf_v16f32: 6608; CHECK: # %bb.0: 6609; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6610; CHECK-NEXT: vfmv.v.f v12, fa0 6611; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6612; CHECK-NEXT: vmfeq.vv v12, v8, v8 6613; CHECK-NEXT: vmand.mm v12, v16, v12 6614; CHECK-NEXT: vmv1r.v v0, v12 6615; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6616; CHECK-NEXT: vmv1r.v v0, v12 6617; CHECK-NEXT: ret 6618 %head = insertelement <16 x float> poison, float %b, i32 0 6619 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6620 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 6621 ret <16 x i1> %1 6622} 6623 6624define <16 x i1> @fcmp_oge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6625; CHECK-LABEL: fcmp_oge_fv_v16f32: 6626; CHECK: # %bb.0: 6627; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6628; CHECK-NEXT: vfmv.v.f v12, fa0 6629; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6630; CHECK-NEXT: vmfeq.vv v12, v8, v8 6631; CHECK-NEXT: vmand.mm v12, v12, v16 6632; CHECK-NEXT: vmv1r.v v0, v12 6633; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6634; CHECK-NEXT: vmv1r.v v0, v12 6635; CHECK-NEXT: ret 6636 %head = insertelement <16 x float> poison, float %b, i32 0 6637 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6638 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 6639 ret <16 x i1> %1 6640} 6641 6642define <16 x i1> @fcmp_olt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6643; CHECK-LABEL: fcmp_olt_vv_v16f32: 6644; CHECK: # %bb.0: 6645; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6646; CHECK-NEXT: vmfeq.vv v16, v12, v12 6647; CHECK-NEXT: vmfeq.vv v17, v8, v8 6648; CHECK-NEXT: vmand.mm v16, v17, v16 6649; CHECK-NEXT: vmv1r.v v0, v16 6650; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 6651; CHECK-NEXT: vmv1r.v v0, v16 6652; CHECK-NEXT: ret 6653 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 6654 ret <16 x i1> %1 6655} 6656 6657define <16 x i1> @fcmp_olt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6658; CHECK-LABEL: fcmp_olt_vf_v16f32: 6659; CHECK: # %bb.0: 6660; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6661; CHECK-NEXT: vfmv.v.f v12, fa0 6662; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6663; CHECK-NEXT: vmfeq.vv v12, v8, v8 6664; CHECK-NEXT: vmand.mm v12, v12, v16 6665; CHECK-NEXT: vmv1r.v v0, v12 6666; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6667; CHECK-NEXT: vmv1r.v v0, v12 6668; CHECK-NEXT: ret 6669 %head = insertelement <16 x float> poison, float %b, i32 0 6670 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6671 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 6672 ret <16 x i1> %1 6673} 6674 6675define <16 x i1> @fcmp_olt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6676; CHECK-LABEL: fcmp_olt_fv_v16f32: 6677; CHECK: # %bb.0: 6678; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6679; CHECK-NEXT: vfmv.v.f v12, fa0 6680; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6681; CHECK-NEXT: vmfeq.vv v12, v8, v8 6682; CHECK-NEXT: vmand.mm v12, v16, v12 6683; CHECK-NEXT: vmv1r.v v0, v12 6684; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6685; CHECK-NEXT: vmv1r.v v0, v12 6686; CHECK-NEXT: ret 6687 %head = insertelement <16 x float> poison, float %b, i32 0 6688 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6689 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6690 ret <16 x i1> %1 6691} 6692 6693define <16 x i1> @fcmp_ole_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6694; CHECK-LABEL: fcmp_ole_vv_v16f32: 6695; CHECK: # %bb.0: 6696; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6697; CHECK-NEXT: vmfeq.vv v16, v12, v12 6698; CHECK-NEXT: vmfeq.vv v17, v8, v8 6699; CHECK-NEXT: vmand.mm v16, v17, v16 6700; CHECK-NEXT: vmv1r.v v0, v16 6701; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 6702; CHECK-NEXT: vmv1r.v v0, v16 6703; CHECK-NEXT: ret 6704 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6705 ret <16 x i1> %1 6706} 6707 6708define <16 x i1> @fcmp_ole_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6709; CHECK-LABEL: fcmp_ole_vf_v16f32: 6710; CHECK: # %bb.0: 6711; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6712; CHECK-NEXT: vfmv.v.f v12, fa0 6713; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6714; CHECK-NEXT: vmfeq.vv v12, v8, v8 6715; CHECK-NEXT: vmand.mm v12, v12, v16 6716; CHECK-NEXT: vmv1r.v v0, v12 6717; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6718; CHECK-NEXT: vmv1r.v v0, v12 6719; CHECK-NEXT: ret 6720 %head = insertelement <16 x float> poison, float %b, i32 0 6721 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6722 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6723 ret <16 x i1> %1 6724} 6725 6726define <16 x i1> @fcmp_ole_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6727; CHECK-LABEL: fcmp_ole_fv_v16f32: 6728; CHECK: # %bb.0: 6729; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6730; CHECK-NEXT: vfmv.v.f v12, fa0 6731; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6732; CHECK-NEXT: vmfeq.vv v12, v8, v8 6733; CHECK-NEXT: vmand.mm v12, v16, v12 6734; CHECK-NEXT: vmv1r.v v0, v12 6735; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6736; CHECK-NEXT: vmv1r.v v0, v12 6737; CHECK-NEXT: ret 6738 %head = insertelement <16 x float> poison, float %b, i32 0 6739 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6740 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6741 ret <16 x i1> %1 6742} 6743 6744define <16 x i1> @fcmp_one_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6745; CHECK-LABEL: fcmp_one_vv_v16f32: 6746; CHECK: # %bb.0: 6747; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6748; CHECK-NEXT: vmfeq.vv v16, v12, v12 6749; CHECK-NEXT: vmfeq.vv v17, v8, v8 6750; CHECK-NEXT: vmand.mm v16, v17, v16 6751; CHECK-NEXT: vmv1r.v v17, v16 6752; CHECK-NEXT: vmv1r.v v0, v16 6753; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 6754; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6755; CHECK-NEXT: vmor.mm v0, v16, v17 6756; CHECK-NEXT: ret 6757 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6758 ret <16 x i1> %1 6759} 6760 6761define <16 x i1> @fcmp_one_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6762; CHECK-LABEL: fcmp_one_vf_v16f32: 6763; CHECK: # %bb.0: 6764; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6765; CHECK-NEXT: vfmv.v.f v12, fa0 6766; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6767; CHECK-NEXT: vmfeq.vv v12, v8, v8 6768; CHECK-NEXT: vmand.mm v12, v12, v16 6769; CHECK-NEXT: vmv1r.v v13, v12 6770; CHECK-NEXT: vmv1r.v v0, v12 6771; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 6772; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6773; CHECK-NEXT: vmor.mm v0, v12, v13 6774; CHECK-NEXT: ret 6775 %head = insertelement <16 x float> poison, float %b, i32 0 6776 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6777 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6778 ret <16 x i1> %1 6779} 6780 6781define <16 x i1> @fcmp_one_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6782; CHECK-LABEL: fcmp_one_fv_v16f32: 6783; CHECK: # %bb.0: 6784; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6785; CHECK-NEXT: vfmv.v.f v12, fa0 6786; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6787; CHECK-NEXT: vmfeq.vv v12, v8, v8 6788; CHECK-NEXT: vmand.mm v12, v16, v12 6789; CHECK-NEXT: vmv1r.v v13, v12 6790; CHECK-NEXT: vmv1r.v v0, v12 6791; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 6792; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6793; CHECK-NEXT: vmor.mm v0, v12, v13 6794; CHECK-NEXT: ret 6795 %head = insertelement <16 x float> poison, float %b, i32 0 6796 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6797 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6798 ret <16 x i1> %1 6799} 6800 6801define <16 x i1> @fcmp_ord_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6802; CHECK-LABEL: fcmp_ord_vv_v16f32: 6803; CHECK: # %bb.0: 6804; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6805; CHECK-NEXT: vmfeq.vv v16, v12, v12 6806; CHECK-NEXT: vmfeq.vv v12, v8, v8 6807; CHECK-NEXT: vmand.mm v0, v12, v16 6808; CHECK-NEXT: ret 6809 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6810 ret <16 x i1> %1 6811} 6812 6813define <16 x i1> @fcmp_ord_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6814; CHECK-LABEL: fcmp_ord_vf_v16f32: 6815; CHECK: # %bb.0: 6816; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6817; CHECK-NEXT: vfmv.v.f v12, fa0 6818; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6819; CHECK-NEXT: vmfeq.vv v12, v8, v8 6820; CHECK-NEXT: vmand.mm v0, v12, v16 6821; CHECK-NEXT: ret 6822 %head = insertelement <16 x float> poison, float %b, i32 0 6823 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6824 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6825 ret <16 x i1> %1 6826} 6827 6828define <16 x i1> @fcmp_ord_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6829; CHECK-LABEL: fcmp_ord_fv_v16f32: 6830; CHECK: # %bb.0: 6831; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 6832; CHECK-NEXT: vfmv.v.f v12, fa0 6833; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6834; CHECK-NEXT: vmfeq.vv v12, v8, v8 6835; CHECK-NEXT: vmand.mm v0, v16, v12 6836; CHECK-NEXT: ret 6837 %head = insertelement <16 x float> poison, float %b, i32 0 6838 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6839 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6840 ret <16 x i1> %1 6841} 6842 6843define <16 x i1> @fcmp_ueq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6844; CHECK-LABEL: fcmp_ueq_vv_v16f32: 6845; CHECK: # %bb.0: 6846; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6847; CHECK-NEXT: vmfeq.vv v16, v12, v12 6848; CHECK-NEXT: vmfeq.vv v17, v8, v8 6849; CHECK-NEXT: vmand.mm v16, v17, v16 6850; CHECK-NEXT: vmv1r.v v17, v16 6851; CHECK-NEXT: vmv1r.v v0, v16 6852; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 6853; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 6854; CHECK-NEXT: vmnor.mm v0, v16, v17 6855; CHECK-NEXT: ret 6856 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6857 ret <16 x i1> %1 6858} 6859 6860define <16 x i1> @fcmp_ueq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6861; CHECK-LABEL: fcmp_ueq_vf_v16f32: 6862; CHECK: # %bb.0: 6863; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6864; CHECK-NEXT: vfmv.v.f v12, fa0 6865; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6866; CHECK-NEXT: vmfeq.vv v12, v8, v8 6867; CHECK-NEXT: vmand.mm v12, v12, v16 6868; CHECK-NEXT: vmv1r.v v13, v12 6869; CHECK-NEXT: vmv1r.v v0, v12 6870; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 6871; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6872; CHECK-NEXT: vmnor.mm v0, v12, v13 6873; CHECK-NEXT: ret 6874 %head = insertelement <16 x float> poison, float %b, i32 0 6875 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6876 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6877 ret <16 x i1> %1 6878} 6879 6880define <16 x i1> @fcmp_ueq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6881; CHECK-LABEL: fcmp_ueq_fv_v16f32: 6882; CHECK: # %bb.0: 6883; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6884; CHECK-NEXT: vfmv.v.f v12, fa0 6885; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6886; CHECK-NEXT: vmfeq.vv v12, v8, v8 6887; CHECK-NEXT: vmand.mm v12, v16, v12 6888; CHECK-NEXT: vmv1r.v v13, v12 6889; CHECK-NEXT: vmv1r.v v0, v12 6890; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 6891; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6892; CHECK-NEXT: vmnor.mm v0, v12, v13 6893; CHECK-NEXT: ret 6894 %head = insertelement <16 x float> poison, float %b, i32 0 6895 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6896 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6897 ret <16 x i1> %1 6898} 6899 6900define <16 x i1> @fcmp_ugt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6901; CHECK-LABEL: fcmp_ugt_vv_v16f32: 6902; CHECK: # %bb.0: 6903; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6904; CHECK-NEXT: vmfeq.vv v16, v12, v12 6905; CHECK-NEXT: vmfeq.vv v17, v8, v8 6906; CHECK-NEXT: vmand.mm v16, v17, v16 6907; CHECK-NEXT: vmv1r.v v0, v16 6908; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 6909; CHECK-NEXT: vmnot.m v0, v16 6910; CHECK-NEXT: ret 6911 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6912 ret <16 x i1> %1 6913} 6914 6915define <16 x i1> @fcmp_ugt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6916; CHECK-LABEL: fcmp_ugt_vf_v16f32: 6917; CHECK: # %bb.0: 6918; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6919; CHECK-NEXT: vfmv.v.f v12, fa0 6920; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6921; CHECK-NEXT: vmfeq.vv v12, v8, v8 6922; CHECK-NEXT: vmand.mm v12, v12, v16 6923; CHECK-NEXT: vmv1r.v v0, v12 6924; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 6925; CHECK-NEXT: vmnot.m v0, v12 6926; CHECK-NEXT: ret 6927 %head = insertelement <16 x float> poison, float %b, i32 0 6928 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6929 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6930 ret <16 x i1> %1 6931} 6932 6933define <16 x i1> @fcmp_ugt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6934; CHECK-LABEL: fcmp_ugt_fv_v16f32: 6935; CHECK: # %bb.0: 6936; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6937; CHECK-NEXT: vfmv.v.f v12, fa0 6938; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6939; CHECK-NEXT: vmfeq.vv v12, v8, v8 6940; CHECK-NEXT: vmand.mm v12, v16, v12 6941; CHECK-NEXT: vmv1r.v v0, v12 6942; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 6943; CHECK-NEXT: vmnot.m v0, v12 6944; CHECK-NEXT: ret 6945 %head = insertelement <16 x float> poison, float %b, i32 0 6946 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6947 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6948 ret <16 x i1> %1 6949} 6950 6951define <16 x i1> @fcmp_uge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 6952; CHECK-LABEL: fcmp_uge_vv_v16f32: 6953; CHECK: # %bb.0: 6954; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6955; CHECK-NEXT: vmfeq.vv v16, v12, v12 6956; CHECK-NEXT: vmfeq.vv v17, v8, v8 6957; CHECK-NEXT: vmand.mm v16, v17, v16 6958; CHECK-NEXT: vmv1r.v v0, v16 6959; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 6960; CHECK-NEXT: vmnot.m v0, v16 6961; CHECK-NEXT: ret 6962 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 6963 ret <16 x i1> %1 6964} 6965 6966define <16 x i1> @fcmp_uge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6967; CHECK-LABEL: fcmp_uge_vf_v16f32: 6968; CHECK: # %bb.0: 6969; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6970; CHECK-NEXT: vfmv.v.f v12, fa0 6971; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6972; CHECK-NEXT: vmfeq.vv v12, v8, v8 6973; CHECK-NEXT: vmand.mm v12, v12, v16 6974; CHECK-NEXT: vmv1r.v v0, v12 6975; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 6976; CHECK-NEXT: vmnot.m v0, v12 6977; CHECK-NEXT: ret 6978 %head = insertelement <16 x float> poison, float %b, i32 0 6979 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6980 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 6981 ret <16 x i1> %1 6982} 6983 6984define <16 x i1> @fcmp_uge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 6985; CHECK-LABEL: fcmp_uge_fv_v16f32: 6986; CHECK: # %bb.0: 6987; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 6988; CHECK-NEXT: vfmv.v.f v12, fa0 6989; CHECK-NEXT: vmfeq.vf v16, v12, fa0 6990; CHECK-NEXT: vmfeq.vv v12, v8, v8 6991; CHECK-NEXT: vmand.mm v12, v16, v12 6992; CHECK-NEXT: vmv1r.v v0, v12 6993; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 6994; CHECK-NEXT: vmnot.m v0, v12 6995; CHECK-NEXT: ret 6996 %head = insertelement <16 x float> poison, float %b, i32 0 6997 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 6998 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 6999 ret <16 x i1> %1 7000} 7001 7002define <16 x i1> @fcmp_ult_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 7003; CHECK-LABEL: fcmp_ult_vv_v16f32: 7004; CHECK: # %bb.0: 7005; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7006; CHECK-NEXT: vmfeq.vv v16, v8, v8 7007; CHECK-NEXT: vmfeq.vv v17, v12, v12 7008; CHECK-NEXT: vmand.mm v16, v17, v16 7009; CHECK-NEXT: vmv1r.v v0, v16 7010; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 7011; CHECK-NEXT: vmnot.m v0, v16 7012; CHECK-NEXT: ret 7013 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7014 ret <16 x i1> %1 7015} 7016 7017define <16 x i1> @fcmp_ult_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7018; CHECK-LABEL: fcmp_ult_vf_v16f32: 7019; CHECK: # %bb.0: 7020; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7021; CHECK-NEXT: vfmv.v.f v12, fa0 7022; CHECK-NEXT: vmfeq.vf v16, v12, fa0 7023; CHECK-NEXT: vmfeq.vv v12, v8, v8 7024; CHECK-NEXT: vmand.mm v12, v16, v12 7025; CHECK-NEXT: vmv1r.v v0, v12 7026; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 7027; CHECK-NEXT: vmnot.m v0, v12 7028; CHECK-NEXT: ret 7029 %head = insertelement <16 x float> poison, float %b, i32 0 7030 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7031 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7032 ret <16 x i1> %1 7033} 7034 7035define <16 x i1> @fcmp_ult_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7036; CHECK-LABEL: fcmp_ult_fv_v16f32: 7037; CHECK: # %bb.0: 7038; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7039; CHECK-NEXT: vfmv.v.f v12, fa0 7040; CHECK-NEXT: vmfeq.vf v16, v12, fa0 7041; CHECK-NEXT: vmfeq.vv v12, v8, v8 7042; CHECK-NEXT: vmand.mm v12, v12, v16 7043; CHECK-NEXT: vmv1r.v v0, v12 7044; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 7045; CHECK-NEXT: vmnot.m v0, v12 7046; CHECK-NEXT: ret 7047 %head = insertelement <16 x float> poison, float %b, i32 0 7048 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7049 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7050 ret <16 x i1> %1 7051} 7052 7053define <16 x i1> @fcmp_ule_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 7054; CHECK-LABEL: fcmp_ule_vv_v16f32: 7055; CHECK: # %bb.0: 7056; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7057; CHECK-NEXT: vmfeq.vv v16, v8, v8 7058; CHECK-NEXT: vmfeq.vv v17, v12, v12 7059; CHECK-NEXT: vmand.mm v16, v17, v16 7060; CHECK-NEXT: vmv1r.v v0, v16 7061; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 7062; CHECK-NEXT: vmnot.m v0, v16 7063; CHECK-NEXT: ret 7064 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7065 ret <16 x i1> %1 7066} 7067 7068define <16 x i1> @fcmp_ule_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7069; CHECK-LABEL: fcmp_ule_vf_v16f32: 7070; CHECK: # %bb.0: 7071; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7072; CHECK-NEXT: vfmv.v.f v12, fa0 7073; CHECK-NEXT: vmfeq.vf v16, v12, fa0 7074; CHECK-NEXT: vmfeq.vv v12, v8, v8 7075; CHECK-NEXT: vmand.mm v12, v16, v12 7076; CHECK-NEXT: vmv1r.v v0, v12 7077; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 7078; CHECK-NEXT: vmnot.m v0, v12 7079; CHECK-NEXT: ret 7080 %head = insertelement <16 x float> poison, float %b, i32 0 7081 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7082 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7083 ret <16 x i1> %1 7084} 7085 7086define <16 x i1> @fcmp_ule_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7087; CHECK-LABEL: fcmp_ule_fv_v16f32: 7088; CHECK: # %bb.0: 7089; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu 7090; CHECK-NEXT: vfmv.v.f v12, fa0 7091; CHECK-NEXT: vmfeq.vf v16, v12, fa0 7092; CHECK-NEXT: vmfeq.vv v12, v8, v8 7093; CHECK-NEXT: vmand.mm v12, v12, v16 7094; CHECK-NEXT: vmv1r.v v0, v12 7095; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 7096; CHECK-NEXT: vmnot.m v0, v12 7097; CHECK-NEXT: ret 7098 %head = insertelement <16 x float> poison, float %b, i32 0 7099 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7100 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7101 ret <16 x i1> %1 7102} 7103 7104define <16 x i1> @fcmp_une_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 7105; CHECK-LABEL: fcmp_une_vv_v16f32: 7106; CHECK: # %bb.0: 7107; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7108; CHECK-NEXT: vmfne.vv v0, v8, v12 7109; CHECK-NEXT: ret 7110 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7111 ret <16 x i1> %1 7112} 7113 7114define <16 x i1> @fcmp_une_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7115; CHECK-LABEL: fcmp_une_vf_v16f32: 7116; CHECK: # %bb.0: 7117; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7118; CHECK-NEXT: vmfne.vf v0, v8, fa0 7119; CHECK-NEXT: ret 7120 %head = insertelement <16 x float> poison, float %b, i32 0 7121 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7122 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7123 ret <16 x i1> %1 7124} 7125 7126define <16 x i1> @fcmp_une_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7127; CHECK-LABEL: fcmp_une_fv_v16f32: 7128; CHECK: # %bb.0: 7129; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7130; CHECK-NEXT: vmfne.vf v0, v8, fa0 7131; CHECK-NEXT: ret 7132 %head = insertelement <16 x float> poison, float %b, i32 0 7133 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7134 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7135 ret <16 x i1> %1 7136} 7137 7138define <16 x i1> @fcmp_uno_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 7139; CHECK-LABEL: fcmp_uno_vv_v16f32: 7140; CHECK: # %bb.0: 7141; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7142; CHECK-NEXT: vmfne.vv v16, v12, v12 7143; CHECK-NEXT: vmfne.vv v12, v8, v8 7144; CHECK-NEXT: vmor.mm v0, v12, v16 7145; CHECK-NEXT: ret 7146 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7147 ret <16 x i1> %1 7148} 7149 7150define <16 x i1> @fcmp_uno_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7151; CHECK-LABEL: fcmp_uno_vf_v16f32: 7152; CHECK: # %bb.0: 7153; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7154; CHECK-NEXT: vfmv.v.f v12, fa0 7155; CHECK-NEXT: vmfne.vf v16, v12, fa0 7156; CHECK-NEXT: vmfne.vv v12, v8, v8 7157; CHECK-NEXT: vmor.mm v0, v12, v16 7158; CHECK-NEXT: ret 7159 %head = insertelement <16 x float> poison, float %b, i32 0 7160 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7161 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 7162 ret <16 x i1> %1 7163} 7164 7165define <16 x i1> @fcmp_uno_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 7166; CHECK-LABEL: fcmp_uno_fv_v16f32: 7167; CHECK: # %bb.0: 7168; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 7169; CHECK-NEXT: vfmv.v.f v12, fa0 7170; CHECK-NEXT: vmfne.vf v16, v12, fa0 7171; CHECK-NEXT: vmfne.vv v12, v8, v8 7172; CHECK-NEXT: vmor.mm v0, v16, v12 7173; CHECK-NEXT: ret 7174 %head = insertelement <16 x float> poison, float %b, i32 0 7175 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 7176 %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 7177 ret <16 x i1> %1 7178} 7179 7180declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double>, <1 x double>, metadata, metadata) 7181define <1 x i1> @fcmp_oeq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7182; CHECK-LABEL: fcmp_oeq_vv_v1f64: 7183; CHECK: # %bb.0: 7184; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7185; CHECK-NEXT: vmfeq.vv v0, v8, v9 7186; CHECK-NEXT: ret 7187 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7188 ret <1 x i1> %1 7189} 7190 7191define <1 x i1> @fcmp_oeq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7192; CHECK-LABEL: fcmp_oeq_vf_v1f64: 7193; CHECK: # %bb.0: 7194; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7195; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7196; CHECK-NEXT: ret 7197 %head = insertelement <1 x double> poison, double %b, i32 0 7198 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7199 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7200 ret <1 x i1> %1 7201} 7202 7203define <1 x i1> @fcmp_oeq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7204; CHECK-LABEL: fcmp_oeq_fv_v1f64: 7205; CHECK: # %bb.0: 7206; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7207; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7208; CHECK-NEXT: ret 7209 %head = insertelement <1 x double> poison, double %b, i32 0 7210 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7211 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7212 ret <1 x i1> %1 7213} 7214 7215define <1 x i1> @fcmp_ogt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7216; CHECK-LABEL: fcmp_ogt_vv_v1f64: 7217; CHECK: # %bb.0: 7218; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7219; CHECK-NEXT: vmfeq.vv v10, v8, v8 7220; CHECK-NEXT: vmfeq.vv v11, v9, v9 7221; CHECK-NEXT: vmand.mm v0, v11, v10 7222; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7223; CHECK-NEXT: ret 7224 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7225 ret <1 x i1> %1 7226} 7227 7228define <1 x i1> @fcmp_ogt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7229; CHECK-LABEL: fcmp_ogt_vf_v1f64: 7230; CHECK: # %bb.0: 7231; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7232; CHECK-NEXT: vfmv.s.f v9, fa0 7233; CHECK-NEXT: vmfeq.vv v10, v8, v8 7234; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7235; CHECK-NEXT: vmand.mm v0, v9, v10 7236; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7237; CHECK-NEXT: ret 7238 %head = insertelement <1 x double> poison, double %b, i32 0 7239 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7240 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7241 ret <1 x i1> %1 7242} 7243 7244define <1 x i1> @fcmp_ogt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7245; CHECK-LABEL: fcmp_ogt_fv_v1f64: 7246; CHECK: # %bb.0: 7247; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7248; CHECK-NEXT: vfmv.s.f v9, fa0 7249; CHECK-NEXT: vmfeq.vv v10, v8, v8 7250; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7251; CHECK-NEXT: vmand.mm v0, v10, v9 7252; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7253; CHECK-NEXT: ret 7254 %head = insertelement <1 x double> poison, double %b, i32 0 7255 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7256 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7257 ret <1 x i1> %1 7258} 7259 7260define <1 x i1> @fcmp_oge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7261; CHECK-LABEL: fcmp_oge_vv_v1f64: 7262; CHECK: # %bb.0: 7263; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7264; CHECK-NEXT: vmfeq.vv v10, v8, v8 7265; CHECK-NEXT: vmfeq.vv v11, v9, v9 7266; CHECK-NEXT: vmand.mm v0, v11, v10 7267; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 7268; CHECK-NEXT: ret 7269 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7270 ret <1 x i1> %1 7271} 7272 7273define <1 x i1> @fcmp_oge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7274; CHECK-LABEL: fcmp_oge_vf_v1f64: 7275; CHECK: # %bb.0: 7276; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7277; CHECK-NEXT: vfmv.s.f v9, fa0 7278; CHECK-NEXT: vmfeq.vv v10, v8, v8 7279; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7280; CHECK-NEXT: vmand.mm v0, v9, v10 7281; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7282; CHECK-NEXT: ret 7283 %head = insertelement <1 x double> poison, double %b, i32 0 7284 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7285 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7286 ret <1 x i1> %1 7287} 7288 7289define <1 x i1> @fcmp_oge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7290; CHECK-LABEL: fcmp_oge_fv_v1f64: 7291; CHECK: # %bb.0: 7292; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7293; CHECK-NEXT: vfmv.s.f v9, fa0 7294; CHECK-NEXT: vmfeq.vv v10, v8, v8 7295; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7296; CHECK-NEXT: vmand.mm v0, v10, v9 7297; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7298; CHECK-NEXT: ret 7299 %head = insertelement <1 x double> poison, double %b, i32 0 7300 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7301 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7302 ret <1 x i1> %1 7303} 7304 7305define <1 x i1> @fcmp_olt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7306; CHECK-LABEL: fcmp_olt_vv_v1f64: 7307; CHECK: # %bb.0: 7308; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7309; CHECK-NEXT: vmfeq.vv v10, v9, v9 7310; CHECK-NEXT: vmfeq.vv v11, v8, v8 7311; CHECK-NEXT: vmand.mm v0, v11, v10 7312; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 7313; CHECK-NEXT: ret 7314 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 7315 ret <1 x i1> %1 7316} 7317 7318define <1 x i1> @fcmp_olt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7319; CHECK-LABEL: fcmp_olt_vf_v1f64: 7320; CHECK: # %bb.0: 7321; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7322; CHECK-NEXT: vfmv.s.f v9, fa0 7323; CHECK-NEXT: vmfeq.vv v10, v8, v8 7324; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7325; CHECK-NEXT: vmand.mm v0, v10, v9 7326; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7327; CHECK-NEXT: ret 7328 %head = insertelement <1 x double> poison, double %b, i32 0 7329 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7330 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 7331 ret <1 x i1> %1 7332} 7333 7334define <1 x i1> @fcmp_olt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7335; CHECK-LABEL: fcmp_olt_fv_v1f64: 7336; CHECK: # %bb.0: 7337; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7338; CHECK-NEXT: vfmv.s.f v9, fa0 7339; CHECK-NEXT: vmfeq.vv v10, v8, v8 7340; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7341; CHECK-NEXT: vmand.mm v0, v9, v10 7342; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7343; CHECK-NEXT: ret 7344 %head = insertelement <1 x double> poison, double %b, i32 0 7345 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7346 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 7347 ret <1 x i1> %1 7348} 7349 7350define <1 x i1> @fcmp_ole_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7351; CHECK-LABEL: fcmp_ole_vv_v1f64: 7352; CHECK: # %bb.0: 7353; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7354; CHECK-NEXT: vmfeq.vv v10, v9, v9 7355; CHECK-NEXT: vmfeq.vv v11, v8, v8 7356; CHECK-NEXT: vmand.mm v0, v11, v10 7357; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 7358; CHECK-NEXT: ret 7359 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 7360 ret <1 x i1> %1 7361} 7362 7363define <1 x i1> @fcmp_ole_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7364; CHECK-LABEL: fcmp_ole_vf_v1f64: 7365; CHECK: # %bb.0: 7366; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7367; CHECK-NEXT: vfmv.s.f v9, fa0 7368; CHECK-NEXT: vmfeq.vv v10, v8, v8 7369; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7370; CHECK-NEXT: vmand.mm v0, v10, v9 7371; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7372; CHECK-NEXT: ret 7373 %head = insertelement <1 x double> poison, double %b, i32 0 7374 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7375 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 7376 ret <1 x i1> %1 7377} 7378 7379define <1 x i1> @fcmp_ole_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7380; CHECK-LABEL: fcmp_ole_fv_v1f64: 7381; CHECK: # %bb.0: 7382; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7383; CHECK-NEXT: vfmv.s.f v9, fa0 7384; CHECK-NEXT: vmfeq.vv v10, v8, v8 7385; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7386; CHECK-NEXT: vmand.mm v0, v9, v10 7387; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7388; CHECK-NEXT: ret 7389 %head = insertelement <1 x double> poison, double %b, i32 0 7390 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7391 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 7392 ret <1 x i1> %1 7393} 7394 7395define <1 x i1> @fcmp_one_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7396; CHECK-LABEL: fcmp_one_vv_v1f64: 7397; CHECK: # %bb.0: 7398; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7399; CHECK-NEXT: vmfeq.vv v10, v9, v9 7400; CHECK-NEXT: vmfeq.vv v11, v8, v8 7401; CHECK-NEXT: vmand.mm v0, v11, v10 7402; CHECK-NEXT: vmv.v.v v10, v0 7403; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 7404; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7405; CHECK-NEXT: vmor.mm v0, v0, v10 7406; CHECK-NEXT: ret 7407 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 7408 ret <1 x i1> %1 7409} 7410 7411define <1 x i1> @fcmp_one_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7412; CHECK-LABEL: fcmp_one_vf_v1f64: 7413; CHECK: # %bb.0: 7414; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7415; CHECK-NEXT: vfmv.s.f v9, fa0 7416; CHECK-NEXT: vmfeq.vv v10, v8, v8 7417; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7418; CHECK-NEXT: vmand.mm v0, v10, v9 7419; CHECK-NEXT: vmv.v.v v9, v0 7420; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 7421; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7422; CHECK-NEXT: vmor.mm v0, v0, v9 7423; CHECK-NEXT: ret 7424 %head = insertelement <1 x double> poison, double %b, i32 0 7425 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7426 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 7427 ret <1 x i1> %1 7428} 7429 7430define <1 x i1> @fcmp_one_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7431; CHECK-LABEL: fcmp_one_fv_v1f64: 7432; CHECK: # %bb.0: 7433; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7434; CHECK-NEXT: vfmv.s.f v9, fa0 7435; CHECK-NEXT: vmfeq.vv v10, v8, v8 7436; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7437; CHECK-NEXT: vmand.mm v0, v9, v10 7438; CHECK-NEXT: vmv.v.v v9, v0 7439; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 7440; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7441; CHECK-NEXT: vmor.mm v0, v0, v9 7442; CHECK-NEXT: ret 7443 %head = insertelement <1 x double> poison, double %b, i32 0 7444 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7445 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 7446 ret <1 x i1> %1 7447} 7448 7449define <1 x i1> @fcmp_ord_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7450; CHECK-LABEL: fcmp_ord_vv_v1f64: 7451; CHECK: # %bb.0: 7452; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7453; CHECK-NEXT: vmfeq.vv v9, v9, v9 7454; CHECK-NEXT: vmfeq.vv v8, v8, v8 7455; CHECK-NEXT: vmand.mm v0, v8, v9 7456; CHECK-NEXT: ret 7457 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 7458 ret <1 x i1> %1 7459} 7460 7461define <1 x i1> @fcmp_ord_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7462; CHECK-LABEL: fcmp_ord_vf_v1f64: 7463; CHECK: # %bb.0: 7464; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7465; CHECK-NEXT: vfmv.s.f v9, fa0 7466; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7467; CHECK-NEXT: vmfeq.vv v8, v8, v8 7468; CHECK-NEXT: vmand.mm v0, v8, v9 7469; CHECK-NEXT: ret 7470 %head = insertelement <1 x double> poison, double %b, i32 0 7471 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7472 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 7473 ret <1 x i1> %1 7474} 7475 7476define <1 x i1> @fcmp_ord_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7477; CHECK-LABEL: fcmp_ord_fv_v1f64: 7478; CHECK: # %bb.0: 7479; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7480; CHECK-NEXT: vfmv.s.f v9, fa0 7481; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7482; CHECK-NEXT: vmfeq.vv v8, v8, v8 7483; CHECK-NEXT: vmand.mm v0, v9, v8 7484; CHECK-NEXT: ret 7485 %head = insertelement <1 x double> poison, double %b, i32 0 7486 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7487 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 7488 ret <1 x i1> %1 7489} 7490 7491define <1 x i1> @fcmp_ueq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7492; CHECK-LABEL: fcmp_ueq_vv_v1f64: 7493; CHECK: # %bb.0: 7494; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7495; CHECK-NEXT: vmfeq.vv v10, v9, v9 7496; CHECK-NEXT: vmfeq.vv v11, v8, v8 7497; CHECK-NEXT: vmand.mm v0, v11, v10 7498; CHECK-NEXT: vmv.v.v v10, v0 7499; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 7500; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7501; CHECK-NEXT: vmnor.mm v0, v0, v10 7502; CHECK-NEXT: ret 7503 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7504 ret <1 x i1> %1 7505} 7506 7507define <1 x i1> @fcmp_ueq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7508; CHECK-LABEL: fcmp_ueq_vf_v1f64: 7509; CHECK: # %bb.0: 7510; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7511; CHECK-NEXT: vfmv.s.f v9, fa0 7512; CHECK-NEXT: vmfeq.vv v10, v8, v8 7513; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7514; CHECK-NEXT: vmand.mm v0, v10, v9 7515; CHECK-NEXT: vmv.v.v v9, v0 7516; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 7517; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7518; CHECK-NEXT: vmnor.mm v0, v0, v9 7519; CHECK-NEXT: ret 7520 %head = insertelement <1 x double> poison, double %b, i32 0 7521 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7522 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7523 ret <1 x i1> %1 7524} 7525 7526define <1 x i1> @fcmp_ueq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7527; CHECK-LABEL: fcmp_ueq_fv_v1f64: 7528; CHECK: # %bb.0: 7529; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7530; CHECK-NEXT: vfmv.s.f v9, fa0 7531; CHECK-NEXT: vmfeq.vv v10, v8, v8 7532; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7533; CHECK-NEXT: vmand.mm v0, v9, v10 7534; CHECK-NEXT: vmv.v.v v9, v0 7535; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 7536; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7537; CHECK-NEXT: vmnor.mm v0, v0, v9 7538; CHECK-NEXT: ret 7539 %head = insertelement <1 x double> poison, double %b, i32 0 7540 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7541 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7542 ret <1 x i1> %1 7543} 7544 7545define <1 x i1> @fcmp_ugt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7546; CHECK-LABEL: fcmp_ugt_vv_v1f64: 7547; CHECK: # %bb.0: 7548; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7549; CHECK-NEXT: vmfeq.vv v10, v9, v9 7550; CHECK-NEXT: vmfeq.vv v11, v8, v8 7551; CHECK-NEXT: vmand.mm v0, v11, v10 7552; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 7553; CHECK-NEXT: vmnot.m v0, v0 7554; CHECK-NEXT: ret 7555 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7556 ret <1 x i1> %1 7557} 7558 7559define <1 x i1> @fcmp_ugt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7560; CHECK-LABEL: fcmp_ugt_vf_v1f64: 7561; CHECK: # %bb.0: 7562; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7563; CHECK-NEXT: vfmv.s.f v9, fa0 7564; CHECK-NEXT: vmfeq.vv v10, v8, v8 7565; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7566; CHECK-NEXT: vmand.mm v0, v10, v9 7567; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7568; CHECK-NEXT: vmnot.m v0, v0 7569; CHECK-NEXT: ret 7570 %head = insertelement <1 x double> poison, double %b, i32 0 7571 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7572 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7573 ret <1 x i1> %1 7574} 7575 7576define <1 x i1> @fcmp_ugt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7577; CHECK-LABEL: fcmp_ugt_fv_v1f64: 7578; CHECK: # %bb.0: 7579; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7580; CHECK-NEXT: vfmv.s.f v9, fa0 7581; CHECK-NEXT: vmfeq.vv v10, v8, v8 7582; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7583; CHECK-NEXT: vmand.mm v0, v9, v10 7584; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7585; CHECK-NEXT: vmnot.m v0, v0 7586; CHECK-NEXT: ret 7587 %head = insertelement <1 x double> poison, double %b, i32 0 7588 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7589 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7590 ret <1 x i1> %1 7591} 7592 7593define <1 x i1> @fcmp_uge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7594; CHECK-LABEL: fcmp_uge_vv_v1f64: 7595; CHECK: # %bb.0: 7596; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7597; CHECK-NEXT: vmfeq.vv v10, v9, v9 7598; CHECK-NEXT: vmfeq.vv v11, v8, v8 7599; CHECK-NEXT: vmand.mm v0, v11, v10 7600; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 7601; CHECK-NEXT: vmnot.m v0, v0 7602; CHECK-NEXT: ret 7603 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 7604 ret <1 x i1> %1 7605} 7606 7607define <1 x i1> @fcmp_uge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7608; CHECK-LABEL: fcmp_uge_vf_v1f64: 7609; CHECK: # %bb.0: 7610; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7611; CHECK-NEXT: vfmv.s.f v9, fa0 7612; CHECK-NEXT: vmfeq.vv v10, v8, v8 7613; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7614; CHECK-NEXT: vmand.mm v0, v10, v9 7615; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7616; CHECK-NEXT: vmnot.m v0, v0 7617; CHECK-NEXT: ret 7618 %head = insertelement <1 x double> poison, double %b, i32 0 7619 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7620 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 7621 ret <1 x i1> %1 7622} 7623 7624define <1 x i1> @fcmp_uge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7625; CHECK-LABEL: fcmp_uge_fv_v1f64: 7626; CHECK: # %bb.0: 7627; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7628; CHECK-NEXT: vfmv.s.f v9, fa0 7629; CHECK-NEXT: vmfeq.vv v10, v8, v8 7630; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7631; CHECK-NEXT: vmand.mm v0, v9, v10 7632; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7633; CHECK-NEXT: vmnot.m v0, v0 7634; CHECK-NEXT: ret 7635 %head = insertelement <1 x double> poison, double %b, i32 0 7636 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7637 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 7638 ret <1 x i1> %1 7639} 7640 7641define <1 x i1> @fcmp_ult_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7642; CHECK-LABEL: fcmp_ult_vv_v1f64: 7643; CHECK: # %bb.0: 7644; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7645; CHECK-NEXT: vmfeq.vv v10, v8, v8 7646; CHECK-NEXT: vmfeq.vv v11, v9, v9 7647; CHECK-NEXT: vmand.mm v0, v11, v10 7648; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 7649; CHECK-NEXT: vmnot.m v0, v0 7650; CHECK-NEXT: ret 7651 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7652 ret <1 x i1> %1 7653} 7654 7655define <1 x i1> @fcmp_ult_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7656; CHECK-LABEL: fcmp_ult_vf_v1f64: 7657; CHECK: # %bb.0: 7658; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7659; CHECK-NEXT: vfmv.s.f v9, fa0 7660; CHECK-NEXT: vmfeq.vv v10, v8, v8 7661; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7662; CHECK-NEXT: vmand.mm v0, v9, v10 7663; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7664; CHECK-NEXT: vmnot.m v0, v0 7665; CHECK-NEXT: ret 7666 %head = insertelement <1 x double> poison, double %b, i32 0 7667 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7668 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7669 ret <1 x i1> %1 7670} 7671 7672define <1 x i1> @fcmp_ult_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7673; CHECK-LABEL: fcmp_ult_fv_v1f64: 7674; CHECK: # %bb.0: 7675; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7676; CHECK-NEXT: vfmv.s.f v9, fa0 7677; CHECK-NEXT: vmfeq.vv v10, v8, v8 7678; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7679; CHECK-NEXT: vmand.mm v0, v10, v9 7680; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7681; CHECK-NEXT: vmnot.m v0, v0 7682; CHECK-NEXT: ret 7683 %head = insertelement <1 x double> poison, double %b, i32 0 7684 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7685 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7686 ret <1 x i1> %1 7687} 7688 7689define <1 x i1> @fcmp_ule_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7690; CHECK-LABEL: fcmp_ule_vv_v1f64: 7691; CHECK: # %bb.0: 7692; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7693; CHECK-NEXT: vmfeq.vv v10, v8, v8 7694; CHECK-NEXT: vmfeq.vv v11, v9, v9 7695; CHECK-NEXT: vmand.mm v0, v11, v10 7696; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7697; CHECK-NEXT: vmnot.m v0, v0 7698; CHECK-NEXT: ret 7699 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7700 ret <1 x i1> %1 7701} 7702 7703define <1 x i1> @fcmp_ule_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7704; CHECK-LABEL: fcmp_ule_vf_v1f64: 7705; CHECK: # %bb.0: 7706; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7707; CHECK-NEXT: vfmv.s.f v9, fa0 7708; CHECK-NEXT: vmfeq.vv v10, v8, v8 7709; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7710; CHECK-NEXT: vmand.mm v0, v9, v10 7711; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7712; CHECK-NEXT: vmnot.m v0, v0 7713; CHECK-NEXT: ret 7714 %head = insertelement <1 x double> poison, double %b, i32 0 7715 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7716 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7717 ret <1 x i1> %1 7718} 7719 7720define <1 x i1> @fcmp_ule_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7721; CHECK-LABEL: fcmp_ule_fv_v1f64: 7722; CHECK: # %bb.0: 7723; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu 7724; CHECK-NEXT: vfmv.s.f v9, fa0 7725; CHECK-NEXT: vmfeq.vv v10, v8, v8 7726; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7727; CHECK-NEXT: vmand.mm v0, v10, v9 7728; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7729; CHECK-NEXT: vmnot.m v0, v0 7730; CHECK-NEXT: ret 7731 %head = insertelement <1 x double> poison, double %b, i32 0 7732 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7733 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7734 ret <1 x i1> %1 7735} 7736 7737define <1 x i1> @fcmp_une_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7738; CHECK-LABEL: fcmp_une_vv_v1f64: 7739; CHECK: # %bb.0: 7740; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7741; CHECK-NEXT: vmfne.vv v0, v8, v9 7742; CHECK-NEXT: ret 7743 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7744 ret <1 x i1> %1 7745} 7746 7747define <1 x i1> @fcmp_une_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7748; CHECK-LABEL: fcmp_une_vf_v1f64: 7749; CHECK: # %bb.0: 7750; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7751; CHECK-NEXT: vmfne.vf v0, v8, fa0 7752; CHECK-NEXT: ret 7753 %head = insertelement <1 x double> poison, double %b, i32 0 7754 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7755 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7756 ret <1 x i1> %1 7757} 7758 7759define <1 x i1> @fcmp_une_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7760; CHECK-LABEL: fcmp_une_fv_v1f64: 7761; CHECK: # %bb.0: 7762; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7763; CHECK-NEXT: vmfne.vf v0, v8, fa0 7764; CHECK-NEXT: ret 7765 %head = insertelement <1 x double> poison, double %b, i32 0 7766 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7767 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7768 ret <1 x i1> %1 7769} 7770 7771define <1 x i1> @fcmp_uno_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 7772; CHECK-LABEL: fcmp_uno_vv_v1f64: 7773; CHECK: # %bb.0: 7774; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7775; CHECK-NEXT: vmfne.vv v9, v9, v9 7776; CHECK-NEXT: vmfne.vv v8, v8, v8 7777; CHECK-NEXT: vmor.mm v0, v8, v9 7778; CHECK-NEXT: ret 7779 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7780 ret <1 x i1> %1 7781} 7782 7783define <1 x i1> @fcmp_uno_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7784; CHECK-LABEL: fcmp_uno_vf_v1f64: 7785; CHECK: # %bb.0: 7786; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7787; CHECK-NEXT: vfmv.s.f v9, fa0 7788; CHECK-NEXT: vmfne.vf v9, v9, fa0 7789; CHECK-NEXT: vmfne.vv v8, v8, v8 7790; CHECK-NEXT: vmor.mm v0, v8, v9 7791; CHECK-NEXT: ret 7792 %head = insertelement <1 x double> poison, double %b, i32 0 7793 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7794 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 7795 ret <1 x i1> %1 7796} 7797 7798define <1 x i1> @fcmp_uno_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 7799; CHECK-LABEL: fcmp_uno_fv_v1f64: 7800; CHECK: # %bb.0: 7801; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 7802; CHECK-NEXT: vfmv.s.f v9, fa0 7803; CHECK-NEXT: vmfne.vf v9, v9, fa0 7804; CHECK-NEXT: vmfne.vv v8, v8, v8 7805; CHECK-NEXT: vmor.mm v0, v9, v8 7806; CHECK-NEXT: ret 7807 %head = insertelement <1 x double> poison, double %b, i32 0 7808 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 7809 %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 7810 ret <1 x i1> %1 7811} 7812 7813declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double>, <2 x double>, metadata, metadata) 7814define <2 x i1> @fcmp_oeq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 7815; CHECK-LABEL: fcmp_oeq_vv_v2f64: 7816; CHECK: # %bb.0: 7817; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 7818; CHECK-NEXT: vmfeq.vv v0, v8, v9 7819; CHECK-NEXT: ret 7820 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7821 ret <2 x i1> %1 7822} 7823 7824define <2 x i1> @fcmp_oeq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7825; CHECK-LABEL: fcmp_oeq_vf_v2f64: 7826; CHECK: # %bb.0: 7827; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 7828; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7829; CHECK-NEXT: ret 7830 %head = insertelement <2 x double> poison, double %b, i32 0 7831 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7832 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7833 ret <2 x i1> %1 7834} 7835 7836define <2 x i1> @fcmp_oeq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7837; CHECK-LABEL: fcmp_oeq_fv_v2f64: 7838; CHECK: # %bb.0: 7839; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 7840; CHECK-NEXT: vmfeq.vf v0, v8, fa0 7841; CHECK-NEXT: ret 7842 %head = insertelement <2 x double> poison, double %b, i32 0 7843 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7844 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7845 ret <2 x i1> %1 7846} 7847 7848define <2 x i1> @fcmp_ogt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 7849; CHECK-LABEL: fcmp_ogt_vv_v2f64: 7850; CHECK: # %bb.0: 7851; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7852; CHECK-NEXT: vmfeq.vv v10, v8, v8 7853; CHECK-NEXT: vmfeq.vv v11, v9, v9 7854; CHECK-NEXT: vmand.mm v0, v11, v10 7855; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 7856; CHECK-NEXT: ret 7857 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7858 ret <2 x i1> %1 7859} 7860 7861define <2 x i1> @fcmp_ogt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7862; CHECK-LABEL: fcmp_ogt_vf_v2f64: 7863; CHECK: # %bb.0: 7864; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7865; CHECK-NEXT: vfmv.v.f v9, fa0 7866; CHECK-NEXT: vmfeq.vv v10, v8, v8 7867; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7868; CHECK-NEXT: vmand.mm v0, v9, v10 7869; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7870; CHECK-NEXT: ret 7871 %head = insertelement <2 x double> poison, double %b, i32 0 7872 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7873 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7874 ret <2 x i1> %1 7875} 7876 7877define <2 x i1> @fcmp_ogt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7878; CHECK-LABEL: fcmp_ogt_fv_v2f64: 7879; CHECK: # %bb.0: 7880; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7881; CHECK-NEXT: vfmv.v.f v9, fa0 7882; CHECK-NEXT: vmfeq.vv v10, v8, v8 7883; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7884; CHECK-NEXT: vmand.mm v0, v10, v9 7885; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7886; CHECK-NEXT: ret 7887 %head = insertelement <2 x double> poison, double %b, i32 0 7888 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7889 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7890 ret <2 x i1> %1 7891} 7892 7893define <2 x i1> @fcmp_oge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 7894; CHECK-LABEL: fcmp_oge_vv_v2f64: 7895; CHECK: # %bb.0: 7896; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7897; CHECK-NEXT: vmfeq.vv v10, v8, v8 7898; CHECK-NEXT: vmfeq.vv v11, v9, v9 7899; CHECK-NEXT: vmand.mm v0, v11, v10 7900; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 7901; CHECK-NEXT: ret 7902 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7903 ret <2 x i1> %1 7904} 7905 7906define <2 x i1> @fcmp_oge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7907; CHECK-LABEL: fcmp_oge_vf_v2f64: 7908; CHECK: # %bb.0: 7909; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7910; CHECK-NEXT: vfmv.v.f v9, fa0 7911; CHECK-NEXT: vmfeq.vv v10, v8, v8 7912; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7913; CHECK-NEXT: vmand.mm v0, v9, v10 7914; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 7915; CHECK-NEXT: ret 7916 %head = insertelement <2 x double> poison, double %b, i32 0 7917 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7918 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7919 ret <2 x i1> %1 7920} 7921 7922define <2 x i1> @fcmp_oge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7923; CHECK-LABEL: fcmp_oge_fv_v2f64: 7924; CHECK: # %bb.0: 7925; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7926; CHECK-NEXT: vfmv.v.f v9, fa0 7927; CHECK-NEXT: vmfeq.vv v10, v8, v8 7928; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7929; CHECK-NEXT: vmand.mm v0, v10, v9 7930; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 7931; CHECK-NEXT: ret 7932 %head = insertelement <2 x double> poison, double %b, i32 0 7933 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7934 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7935 ret <2 x i1> %1 7936} 7937 7938define <2 x i1> @fcmp_olt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 7939; CHECK-LABEL: fcmp_olt_vv_v2f64: 7940; CHECK: # %bb.0: 7941; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7942; CHECK-NEXT: vmfeq.vv v10, v9, v9 7943; CHECK-NEXT: vmfeq.vv v11, v8, v8 7944; CHECK-NEXT: vmand.mm v0, v11, v10 7945; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 7946; CHECK-NEXT: ret 7947 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 7948 ret <2 x i1> %1 7949} 7950 7951define <2 x i1> @fcmp_olt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7952; CHECK-LABEL: fcmp_olt_vf_v2f64: 7953; CHECK: # %bb.0: 7954; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7955; CHECK-NEXT: vfmv.v.f v9, fa0 7956; CHECK-NEXT: vmfeq.vv v10, v8, v8 7957; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7958; CHECK-NEXT: vmand.mm v0, v10, v9 7959; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 7960; CHECK-NEXT: ret 7961 %head = insertelement <2 x double> poison, double %b, i32 0 7962 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7963 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 7964 ret <2 x i1> %1 7965} 7966 7967define <2 x i1> @fcmp_olt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7968; CHECK-LABEL: fcmp_olt_fv_v2f64: 7969; CHECK: # %bb.0: 7970; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7971; CHECK-NEXT: vfmv.v.f v9, fa0 7972; CHECK-NEXT: vmfeq.vv v10, v8, v8 7973; CHECK-NEXT: vmfeq.vf v9, v9, fa0 7974; CHECK-NEXT: vmand.mm v0, v9, v10 7975; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 7976; CHECK-NEXT: ret 7977 %head = insertelement <2 x double> poison, double %b, i32 0 7978 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 7979 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 7980 ret <2 x i1> %1 7981} 7982 7983define <2 x i1> @fcmp_ole_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 7984; CHECK-LABEL: fcmp_ole_vv_v2f64: 7985; CHECK: # %bb.0: 7986; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7987; CHECK-NEXT: vmfeq.vv v10, v9, v9 7988; CHECK-NEXT: vmfeq.vv v11, v8, v8 7989; CHECK-NEXT: vmand.mm v0, v11, v10 7990; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 7991; CHECK-NEXT: ret 7992 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 7993 ret <2 x i1> %1 7994} 7995 7996define <2 x i1> @fcmp_ole_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 7997; CHECK-LABEL: fcmp_ole_vf_v2f64: 7998; CHECK: # %bb.0: 7999; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8000; CHECK-NEXT: vfmv.v.f v9, fa0 8001; CHECK-NEXT: vmfeq.vv v10, v8, v8 8002; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8003; CHECK-NEXT: vmand.mm v0, v10, v9 8004; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 8005; CHECK-NEXT: ret 8006 %head = insertelement <2 x double> poison, double %b, i32 0 8007 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8008 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 8009 ret <2 x i1> %1 8010} 8011 8012define <2 x i1> @fcmp_ole_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8013; CHECK-LABEL: fcmp_ole_fv_v2f64: 8014; CHECK: # %bb.0: 8015; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8016; CHECK-NEXT: vfmv.v.f v9, fa0 8017; CHECK-NEXT: vmfeq.vv v10, v8, v8 8018; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8019; CHECK-NEXT: vmand.mm v0, v9, v10 8020; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 8021; CHECK-NEXT: ret 8022 %head = insertelement <2 x double> poison, double %b, i32 0 8023 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8024 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 8025 ret <2 x i1> %1 8026} 8027 8028define <2 x i1> @fcmp_one_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8029; CHECK-LABEL: fcmp_one_vv_v2f64: 8030; CHECK: # %bb.0: 8031; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8032; CHECK-NEXT: vmfeq.vv v10, v9, v9 8033; CHECK-NEXT: vmfeq.vv v11, v8, v8 8034; CHECK-NEXT: vmand.mm v0, v11, v10 8035; CHECK-NEXT: vmv.v.v v10, v0 8036; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 8037; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 8038; CHECK-NEXT: vmor.mm v0, v0, v10 8039; CHECK-NEXT: ret 8040 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 8041 ret <2 x i1> %1 8042} 8043 8044define <2 x i1> @fcmp_one_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8045; CHECK-LABEL: fcmp_one_vf_v2f64: 8046; CHECK: # %bb.0: 8047; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8048; CHECK-NEXT: vfmv.v.f v9, fa0 8049; CHECK-NEXT: vmfeq.vv v10, v8, v8 8050; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8051; CHECK-NEXT: vmand.mm v0, v10, v9 8052; CHECK-NEXT: vmv.v.v v9, v0 8053; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 8054; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 8055; CHECK-NEXT: vmor.mm v0, v0, v9 8056; CHECK-NEXT: ret 8057 %head = insertelement <2 x double> poison, double %b, i32 0 8058 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8059 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 8060 ret <2 x i1> %1 8061} 8062 8063define <2 x i1> @fcmp_one_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8064; CHECK-LABEL: fcmp_one_fv_v2f64: 8065; CHECK: # %bb.0: 8066; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8067; CHECK-NEXT: vfmv.v.f v9, fa0 8068; CHECK-NEXT: vmfeq.vv v10, v8, v8 8069; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8070; CHECK-NEXT: vmand.mm v0, v9, v10 8071; CHECK-NEXT: vmv.v.v v9, v0 8072; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 8073; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 8074; CHECK-NEXT: vmor.mm v0, v0, v9 8075; CHECK-NEXT: ret 8076 %head = insertelement <2 x double> poison, double %b, i32 0 8077 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8078 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 8079 ret <2 x i1> %1 8080} 8081 8082define <2 x i1> @fcmp_ord_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8083; CHECK-LABEL: fcmp_ord_vv_v2f64: 8084; CHECK: # %bb.0: 8085; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8086; CHECK-NEXT: vmfeq.vv v9, v9, v9 8087; CHECK-NEXT: vmfeq.vv v8, v8, v8 8088; CHECK-NEXT: vmand.mm v0, v8, v9 8089; CHECK-NEXT: ret 8090 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 8091 ret <2 x i1> %1 8092} 8093 8094define <2 x i1> @fcmp_ord_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8095; CHECK-LABEL: fcmp_ord_vf_v2f64: 8096; CHECK: # %bb.0: 8097; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8098; CHECK-NEXT: vfmv.v.f v9, fa0 8099; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8100; CHECK-NEXT: vmfeq.vv v8, v8, v8 8101; CHECK-NEXT: vmand.mm v0, v8, v9 8102; CHECK-NEXT: ret 8103 %head = insertelement <2 x double> poison, double %b, i32 0 8104 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8105 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 8106 ret <2 x i1> %1 8107} 8108 8109define <2 x i1> @fcmp_ord_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8110; CHECK-LABEL: fcmp_ord_fv_v2f64: 8111; CHECK: # %bb.0: 8112; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8113; CHECK-NEXT: vfmv.v.f v9, fa0 8114; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8115; CHECK-NEXT: vmfeq.vv v8, v8, v8 8116; CHECK-NEXT: vmand.mm v0, v9, v8 8117; CHECK-NEXT: ret 8118 %head = insertelement <2 x double> poison, double %b, i32 0 8119 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8120 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 8121 ret <2 x i1> %1 8122} 8123 8124define <2 x i1> @fcmp_ueq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8125; CHECK-LABEL: fcmp_ueq_vv_v2f64: 8126; CHECK: # %bb.0: 8127; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8128; CHECK-NEXT: vmfeq.vv v10, v9, v9 8129; CHECK-NEXT: vmfeq.vv v11, v8, v8 8130; CHECK-NEXT: vmand.mm v0, v11, v10 8131; CHECK-NEXT: vmv.v.v v10, v0 8132; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 8133; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 8134; CHECK-NEXT: vmnor.mm v0, v0, v10 8135; CHECK-NEXT: ret 8136 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8137 ret <2 x i1> %1 8138} 8139 8140define <2 x i1> @fcmp_ueq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8141; CHECK-LABEL: fcmp_ueq_vf_v2f64: 8142; CHECK: # %bb.0: 8143; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8144; CHECK-NEXT: vfmv.v.f v9, fa0 8145; CHECK-NEXT: vmfeq.vv v10, v8, v8 8146; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8147; CHECK-NEXT: vmand.mm v0, v10, v9 8148; CHECK-NEXT: vmv.v.v v9, v0 8149; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 8150; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 8151; CHECK-NEXT: vmnor.mm v0, v0, v9 8152; CHECK-NEXT: ret 8153 %head = insertelement <2 x double> poison, double %b, i32 0 8154 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8155 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8156 ret <2 x i1> %1 8157} 8158 8159define <2 x i1> @fcmp_ueq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8160; CHECK-LABEL: fcmp_ueq_fv_v2f64: 8161; CHECK: # %bb.0: 8162; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8163; CHECK-NEXT: vfmv.v.f v9, fa0 8164; CHECK-NEXT: vmfeq.vv v10, v8, v8 8165; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8166; CHECK-NEXT: vmand.mm v0, v9, v10 8167; CHECK-NEXT: vmv.v.v v9, v0 8168; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 8169; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 8170; CHECK-NEXT: vmnor.mm v0, v0, v9 8171; CHECK-NEXT: ret 8172 %head = insertelement <2 x double> poison, double %b, i32 0 8173 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8174 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8175 ret <2 x i1> %1 8176} 8177 8178define <2 x i1> @fcmp_ugt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8179; CHECK-LABEL: fcmp_ugt_vv_v2f64: 8180; CHECK: # %bb.0: 8181; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8182; CHECK-NEXT: vmfeq.vv v10, v9, v9 8183; CHECK-NEXT: vmfeq.vv v11, v8, v8 8184; CHECK-NEXT: vmand.mm v0, v11, v10 8185; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 8186; CHECK-NEXT: vmnot.m v0, v0 8187; CHECK-NEXT: ret 8188 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8189 ret <2 x i1> %1 8190} 8191 8192define <2 x i1> @fcmp_ugt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8193; CHECK-LABEL: fcmp_ugt_vf_v2f64: 8194; CHECK: # %bb.0: 8195; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8196; CHECK-NEXT: vfmv.v.f v9, fa0 8197; CHECK-NEXT: vmfeq.vv v10, v8, v8 8198; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8199; CHECK-NEXT: vmand.mm v0, v10, v9 8200; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 8201; CHECK-NEXT: vmnot.m v0, v0 8202; CHECK-NEXT: ret 8203 %head = insertelement <2 x double> poison, double %b, i32 0 8204 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8205 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8206 ret <2 x i1> %1 8207} 8208 8209define <2 x i1> @fcmp_ugt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8210; CHECK-LABEL: fcmp_ugt_fv_v2f64: 8211; CHECK: # %bb.0: 8212; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8213; CHECK-NEXT: vfmv.v.f v9, fa0 8214; CHECK-NEXT: vmfeq.vv v10, v8, v8 8215; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8216; CHECK-NEXT: vmand.mm v0, v9, v10 8217; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 8218; CHECK-NEXT: vmnot.m v0, v0 8219; CHECK-NEXT: ret 8220 %head = insertelement <2 x double> poison, double %b, i32 0 8221 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8222 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8223 ret <2 x i1> %1 8224} 8225 8226define <2 x i1> @fcmp_uge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8227; CHECK-LABEL: fcmp_uge_vv_v2f64: 8228; CHECK: # %bb.0: 8229; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8230; CHECK-NEXT: vmfeq.vv v10, v9, v9 8231; CHECK-NEXT: vmfeq.vv v11, v8, v8 8232; CHECK-NEXT: vmand.mm v0, v11, v10 8233; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 8234; CHECK-NEXT: vmnot.m v0, v0 8235; CHECK-NEXT: ret 8236 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 8237 ret <2 x i1> %1 8238} 8239 8240define <2 x i1> @fcmp_uge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8241; CHECK-LABEL: fcmp_uge_vf_v2f64: 8242; CHECK: # %bb.0: 8243; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8244; CHECK-NEXT: vfmv.v.f v9, fa0 8245; CHECK-NEXT: vmfeq.vv v10, v8, v8 8246; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8247; CHECK-NEXT: vmand.mm v0, v10, v9 8248; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 8249; CHECK-NEXT: vmnot.m v0, v0 8250; CHECK-NEXT: ret 8251 %head = insertelement <2 x double> poison, double %b, i32 0 8252 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8253 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 8254 ret <2 x i1> %1 8255} 8256 8257define <2 x i1> @fcmp_uge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8258; CHECK-LABEL: fcmp_uge_fv_v2f64: 8259; CHECK: # %bb.0: 8260; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8261; CHECK-NEXT: vfmv.v.f v9, fa0 8262; CHECK-NEXT: vmfeq.vv v10, v8, v8 8263; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8264; CHECK-NEXT: vmand.mm v0, v9, v10 8265; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 8266; CHECK-NEXT: vmnot.m v0, v0 8267; CHECK-NEXT: ret 8268 %head = insertelement <2 x double> poison, double %b, i32 0 8269 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8270 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 8271 ret <2 x i1> %1 8272} 8273 8274define <2 x i1> @fcmp_ult_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8275; CHECK-LABEL: fcmp_ult_vv_v2f64: 8276; CHECK: # %bb.0: 8277; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8278; CHECK-NEXT: vmfeq.vv v10, v8, v8 8279; CHECK-NEXT: vmfeq.vv v11, v9, v9 8280; CHECK-NEXT: vmand.mm v0, v11, v10 8281; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 8282; CHECK-NEXT: vmnot.m v0, v0 8283; CHECK-NEXT: ret 8284 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 8285 ret <2 x i1> %1 8286} 8287 8288define <2 x i1> @fcmp_ult_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8289; CHECK-LABEL: fcmp_ult_vf_v2f64: 8290; CHECK: # %bb.0: 8291; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8292; CHECK-NEXT: vfmv.v.f v9, fa0 8293; CHECK-NEXT: vmfeq.vv v10, v8, v8 8294; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8295; CHECK-NEXT: vmand.mm v0, v9, v10 8296; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 8297; CHECK-NEXT: vmnot.m v0, v0 8298; CHECK-NEXT: ret 8299 %head = insertelement <2 x double> poison, double %b, i32 0 8300 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8301 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 8302 ret <2 x i1> %1 8303} 8304 8305define <2 x i1> @fcmp_ult_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8306; CHECK-LABEL: fcmp_ult_fv_v2f64: 8307; CHECK: # %bb.0: 8308; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8309; CHECK-NEXT: vfmv.v.f v9, fa0 8310; CHECK-NEXT: vmfeq.vv v10, v8, v8 8311; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8312; CHECK-NEXT: vmand.mm v0, v10, v9 8313; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 8314; CHECK-NEXT: vmnot.m v0, v0 8315; CHECK-NEXT: ret 8316 %head = insertelement <2 x double> poison, double %b, i32 0 8317 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8318 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 8319 ret <2 x i1> %1 8320} 8321 8322define <2 x i1> @fcmp_ule_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8323; CHECK-LABEL: fcmp_ule_vv_v2f64: 8324; CHECK: # %bb.0: 8325; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8326; CHECK-NEXT: vmfeq.vv v10, v8, v8 8327; CHECK-NEXT: vmfeq.vv v11, v9, v9 8328; CHECK-NEXT: vmand.mm v0, v11, v10 8329; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 8330; CHECK-NEXT: vmnot.m v0, v0 8331; CHECK-NEXT: ret 8332 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 8333 ret <2 x i1> %1 8334} 8335 8336define <2 x i1> @fcmp_ule_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8337; CHECK-LABEL: fcmp_ule_vf_v2f64: 8338; CHECK: # %bb.0: 8339; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8340; CHECK-NEXT: vfmv.v.f v9, fa0 8341; CHECK-NEXT: vmfeq.vv v10, v8, v8 8342; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8343; CHECK-NEXT: vmand.mm v0, v9, v10 8344; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 8345; CHECK-NEXT: vmnot.m v0, v0 8346; CHECK-NEXT: ret 8347 %head = insertelement <2 x double> poison, double %b, i32 0 8348 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8349 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 8350 ret <2 x i1> %1 8351} 8352 8353define <2 x i1> @fcmp_ule_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8354; CHECK-LABEL: fcmp_ule_fv_v2f64: 8355; CHECK: # %bb.0: 8356; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8357; CHECK-NEXT: vfmv.v.f v9, fa0 8358; CHECK-NEXT: vmfeq.vv v10, v8, v8 8359; CHECK-NEXT: vmfeq.vf v9, v9, fa0 8360; CHECK-NEXT: vmand.mm v0, v10, v9 8361; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 8362; CHECK-NEXT: vmnot.m v0, v0 8363; CHECK-NEXT: ret 8364 %head = insertelement <2 x double> poison, double %b, i32 0 8365 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8366 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 8367 ret <2 x i1> %1 8368} 8369 8370define <2 x i1> @fcmp_une_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8371; CHECK-LABEL: fcmp_une_vv_v2f64: 8372; CHECK: # %bb.0: 8373; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8374; CHECK-NEXT: vmfne.vv v0, v8, v9 8375; CHECK-NEXT: ret 8376 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 8377 ret <2 x i1> %1 8378} 8379 8380define <2 x i1> @fcmp_une_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8381; CHECK-LABEL: fcmp_une_vf_v2f64: 8382; CHECK: # %bb.0: 8383; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8384; CHECK-NEXT: vmfne.vf v0, v8, fa0 8385; CHECK-NEXT: ret 8386 %head = insertelement <2 x double> poison, double %b, i32 0 8387 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8388 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 8389 ret <2 x i1> %1 8390} 8391 8392define <2 x i1> @fcmp_une_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8393; CHECK-LABEL: fcmp_une_fv_v2f64: 8394; CHECK: # %bb.0: 8395; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8396; CHECK-NEXT: vmfne.vf v0, v8, fa0 8397; CHECK-NEXT: ret 8398 %head = insertelement <2 x double> poison, double %b, i32 0 8399 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8400 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 8401 ret <2 x i1> %1 8402} 8403 8404define <2 x i1> @fcmp_uno_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 8405; CHECK-LABEL: fcmp_uno_vv_v2f64: 8406; CHECK: # %bb.0: 8407; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8408; CHECK-NEXT: vmfne.vv v9, v9, v9 8409; CHECK-NEXT: vmfne.vv v8, v8, v8 8410; CHECK-NEXT: vmor.mm v0, v8, v9 8411; CHECK-NEXT: ret 8412 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 8413 ret <2 x i1> %1 8414} 8415 8416define <2 x i1> @fcmp_uno_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8417; CHECK-LABEL: fcmp_uno_vf_v2f64: 8418; CHECK: # %bb.0: 8419; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8420; CHECK-NEXT: vfmv.v.f v9, fa0 8421; CHECK-NEXT: vmfne.vf v9, v9, fa0 8422; CHECK-NEXT: vmfne.vv v8, v8, v8 8423; CHECK-NEXT: vmor.mm v0, v8, v9 8424; CHECK-NEXT: ret 8425 %head = insertelement <2 x double> poison, double %b, i32 0 8426 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8427 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 8428 ret <2 x i1> %1 8429} 8430 8431define <2 x i1> @fcmp_uno_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 8432; CHECK-LABEL: fcmp_uno_fv_v2f64: 8433; CHECK: # %bb.0: 8434; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 8435; CHECK-NEXT: vfmv.v.f v9, fa0 8436; CHECK-NEXT: vmfne.vf v9, v9, fa0 8437; CHECK-NEXT: vmfne.vv v8, v8, v8 8438; CHECK-NEXT: vmor.mm v0, v9, v8 8439; CHECK-NEXT: ret 8440 %head = insertelement <2 x double> poison, double %b, i32 0 8441 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 8442 %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 8443 ret <2 x i1> %1 8444} 8445 8446declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8447define <4 x i1> @fcmp_oeq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8448; CHECK-LABEL: fcmp_oeq_vv_v4f64: 8449; CHECK: # %bb.0: 8450; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8451; CHECK-NEXT: vmfeq.vv v0, v8, v10 8452; CHECK-NEXT: ret 8453 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8454 ret <4 x i1> %1 8455} 8456 8457define <4 x i1> @fcmp_oeq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8458; CHECK-LABEL: fcmp_oeq_vf_v4f64: 8459; CHECK: # %bb.0: 8460; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8461; CHECK-NEXT: vmfeq.vf v0, v8, fa0 8462; CHECK-NEXT: ret 8463 %head = insertelement <4 x double> poison, double %b, i32 0 8464 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8465 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8466 ret <4 x i1> %1 8467} 8468 8469define <4 x i1> @fcmp_oeq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8470; CHECK-LABEL: fcmp_oeq_fv_v4f64: 8471; CHECK: # %bb.0: 8472; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8473; CHECK-NEXT: vmfeq.vf v0, v8, fa0 8474; CHECK-NEXT: ret 8475 %head = insertelement <4 x double> poison, double %b, i32 0 8476 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8477 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 8478 ret <4 x i1> %1 8479} 8480 8481define <4 x i1> @fcmp_ogt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8482; CHECK-LABEL: fcmp_ogt_vv_v4f64: 8483; CHECK: # %bb.0: 8484; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8485; CHECK-NEXT: vmfeq.vv v12, v8, v8 8486; CHECK-NEXT: vmfeq.vv v13, v10, v10 8487; CHECK-NEXT: vmand.mm v12, v13, v12 8488; CHECK-NEXT: vmv1r.v v0, v12 8489; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8490; CHECK-NEXT: vmv1r.v v0, v12 8491; CHECK-NEXT: ret 8492 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8493 ret <4 x i1> %1 8494} 8495 8496define <4 x i1> @fcmp_ogt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8497; CHECK-LABEL: fcmp_ogt_vf_v4f64: 8498; CHECK: # %bb.0: 8499; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8500; CHECK-NEXT: vfmv.v.f v10, fa0 8501; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8502; CHECK-NEXT: vmfeq.vv v10, v8, v8 8503; CHECK-NEXT: vmand.mm v10, v12, v10 8504; CHECK-NEXT: vmv1r.v v0, v10 8505; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8506; CHECK-NEXT: vmv1r.v v0, v10 8507; CHECK-NEXT: ret 8508 %head = insertelement <4 x double> poison, double %b, i32 0 8509 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8510 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8511 ret <4 x i1> %1 8512} 8513 8514define <4 x i1> @fcmp_ogt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8515; CHECK-LABEL: fcmp_ogt_fv_v4f64: 8516; CHECK: # %bb.0: 8517; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8518; CHECK-NEXT: vfmv.v.f v10, fa0 8519; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8520; CHECK-NEXT: vmfeq.vv v10, v8, v8 8521; CHECK-NEXT: vmand.mm v10, v10, v12 8522; CHECK-NEXT: vmv1r.v v0, v10 8523; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8524; CHECK-NEXT: vmv1r.v v0, v10 8525; CHECK-NEXT: ret 8526 %head = insertelement <4 x double> poison, double %b, i32 0 8527 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8528 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 8529 ret <4 x i1> %1 8530} 8531 8532define <4 x i1> @fcmp_oge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8533; CHECK-LABEL: fcmp_oge_vv_v4f64: 8534; CHECK: # %bb.0: 8535; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8536; CHECK-NEXT: vmfeq.vv v12, v8, v8 8537; CHECK-NEXT: vmfeq.vv v13, v10, v10 8538; CHECK-NEXT: vmand.mm v12, v13, v12 8539; CHECK-NEXT: vmv1r.v v0, v12 8540; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 8541; CHECK-NEXT: vmv1r.v v0, v12 8542; CHECK-NEXT: ret 8543 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 8544 ret <4 x i1> %1 8545} 8546 8547define <4 x i1> @fcmp_oge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8548; CHECK-LABEL: fcmp_oge_vf_v4f64: 8549; CHECK: # %bb.0: 8550; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8551; CHECK-NEXT: vfmv.v.f v10, fa0 8552; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8553; CHECK-NEXT: vmfeq.vv v10, v8, v8 8554; CHECK-NEXT: vmand.mm v10, v12, v10 8555; CHECK-NEXT: vmv1r.v v0, v10 8556; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8557; CHECK-NEXT: vmv1r.v v0, v10 8558; CHECK-NEXT: ret 8559 %head = insertelement <4 x double> poison, double %b, i32 0 8560 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8561 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 8562 ret <4 x i1> %1 8563} 8564 8565define <4 x i1> @fcmp_oge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8566; CHECK-LABEL: fcmp_oge_fv_v4f64: 8567; CHECK: # %bb.0: 8568; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8569; CHECK-NEXT: vfmv.v.f v10, fa0 8570; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8571; CHECK-NEXT: vmfeq.vv v10, v8, v8 8572; CHECK-NEXT: vmand.mm v10, v10, v12 8573; CHECK-NEXT: vmv1r.v v0, v10 8574; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8575; CHECK-NEXT: vmv1r.v v0, v10 8576; CHECK-NEXT: ret 8577 %head = insertelement <4 x double> poison, double %b, i32 0 8578 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8579 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 8580 ret <4 x i1> %1 8581} 8582 8583define <4 x i1> @fcmp_olt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8584; CHECK-LABEL: fcmp_olt_vv_v4f64: 8585; CHECK: # %bb.0: 8586; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8587; CHECK-NEXT: vmfeq.vv v12, v10, v10 8588; CHECK-NEXT: vmfeq.vv v13, v8, v8 8589; CHECK-NEXT: vmand.mm v12, v13, v12 8590; CHECK-NEXT: vmv1r.v v0, v12 8591; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 8592; CHECK-NEXT: vmv1r.v v0, v12 8593; CHECK-NEXT: ret 8594 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 8595 ret <4 x i1> %1 8596} 8597 8598define <4 x i1> @fcmp_olt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8599; CHECK-LABEL: fcmp_olt_vf_v4f64: 8600; CHECK: # %bb.0: 8601; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8602; CHECK-NEXT: vfmv.v.f v10, fa0 8603; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8604; CHECK-NEXT: vmfeq.vv v10, v8, v8 8605; CHECK-NEXT: vmand.mm v10, v10, v12 8606; CHECK-NEXT: vmv1r.v v0, v10 8607; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8608; CHECK-NEXT: vmv1r.v v0, v10 8609; CHECK-NEXT: ret 8610 %head = insertelement <4 x double> poison, double %b, i32 0 8611 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8612 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 8613 ret <4 x i1> %1 8614} 8615 8616define <4 x i1> @fcmp_olt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8617; CHECK-LABEL: fcmp_olt_fv_v4f64: 8618; CHECK: # %bb.0: 8619; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8620; CHECK-NEXT: vfmv.v.f v10, fa0 8621; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8622; CHECK-NEXT: vmfeq.vv v10, v8, v8 8623; CHECK-NEXT: vmand.mm v10, v12, v10 8624; CHECK-NEXT: vmv1r.v v0, v10 8625; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8626; CHECK-NEXT: vmv1r.v v0, v10 8627; CHECK-NEXT: ret 8628 %head = insertelement <4 x double> poison, double %b, i32 0 8629 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8630 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 8631 ret <4 x i1> %1 8632} 8633 8634define <4 x i1> @fcmp_ole_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8635; CHECK-LABEL: fcmp_ole_vv_v4f64: 8636; CHECK: # %bb.0: 8637; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8638; CHECK-NEXT: vmfeq.vv v12, v10, v10 8639; CHECK-NEXT: vmfeq.vv v13, v8, v8 8640; CHECK-NEXT: vmand.mm v12, v13, v12 8641; CHECK-NEXT: vmv1r.v v0, v12 8642; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 8643; CHECK-NEXT: vmv1r.v v0, v12 8644; CHECK-NEXT: ret 8645 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 8646 ret <4 x i1> %1 8647} 8648 8649define <4 x i1> @fcmp_ole_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8650; CHECK-LABEL: fcmp_ole_vf_v4f64: 8651; CHECK: # %bb.0: 8652; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8653; CHECK-NEXT: vfmv.v.f v10, fa0 8654; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8655; CHECK-NEXT: vmfeq.vv v10, v8, v8 8656; CHECK-NEXT: vmand.mm v10, v10, v12 8657; CHECK-NEXT: vmv1r.v v0, v10 8658; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8659; CHECK-NEXT: vmv1r.v v0, v10 8660; CHECK-NEXT: ret 8661 %head = insertelement <4 x double> poison, double %b, i32 0 8662 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8663 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 8664 ret <4 x i1> %1 8665} 8666 8667define <4 x i1> @fcmp_ole_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8668; CHECK-LABEL: fcmp_ole_fv_v4f64: 8669; CHECK: # %bb.0: 8670; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8671; CHECK-NEXT: vfmv.v.f v10, fa0 8672; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8673; CHECK-NEXT: vmfeq.vv v10, v8, v8 8674; CHECK-NEXT: vmand.mm v10, v12, v10 8675; CHECK-NEXT: vmv1r.v v0, v10 8676; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8677; CHECK-NEXT: vmv1r.v v0, v10 8678; CHECK-NEXT: ret 8679 %head = insertelement <4 x double> poison, double %b, i32 0 8680 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8681 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 8682 ret <4 x i1> %1 8683} 8684 8685define <4 x i1> @fcmp_one_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8686; CHECK-LABEL: fcmp_one_vv_v4f64: 8687; CHECK: # %bb.0: 8688; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8689; CHECK-NEXT: vmfeq.vv v12, v10, v10 8690; CHECK-NEXT: vmfeq.vv v13, v8, v8 8691; CHECK-NEXT: vmand.mm v12, v13, v12 8692; CHECK-NEXT: vmv1r.v v13, v12 8693; CHECK-NEXT: vmv1r.v v0, v12 8694; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 8695; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8696; CHECK-NEXT: vmor.mm v0, v12, v13 8697; CHECK-NEXT: ret 8698 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 8699 ret <4 x i1> %1 8700} 8701 8702define <4 x i1> @fcmp_one_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8703; CHECK-LABEL: fcmp_one_vf_v4f64: 8704; CHECK: # %bb.0: 8705; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8706; CHECK-NEXT: vfmv.v.f v10, fa0 8707; CHECK-NEXT: vmfeq.vv v12, v8, v8 8708; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8709; CHECK-NEXT: vmand.mm v10, v12, v13 8710; CHECK-NEXT: vmv1r.v v11, v10 8711; CHECK-NEXT: vmv1r.v v0, v10 8712; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 8713; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8714; CHECK-NEXT: vmor.mm v0, v10, v11 8715; CHECK-NEXT: ret 8716 %head = insertelement <4 x double> poison, double %b, i32 0 8717 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8718 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 8719 ret <4 x i1> %1 8720} 8721 8722define <4 x i1> @fcmp_one_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8723; CHECK-LABEL: fcmp_one_fv_v4f64: 8724; CHECK: # %bb.0: 8725; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8726; CHECK-NEXT: vfmv.v.f v10, fa0 8727; CHECK-NEXT: vmfeq.vv v12, v8, v8 8728; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8729; CHECK-NEXT: vmand.mm v10, v13, v12 8730; CHECK-NEXT: vmv1r.v v11, v10 8731; CHECK-NEXT: vmv1r.v v0, v10 8732; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 8733; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8734; CHECK-NEXT: vmor.mm v0, v10, v11 8735; CHECK-NEXT: ret 8736 %head = insertelement <4 x double> poison, double %b, i32 0 8737 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8738 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 8739 ret <4 x i1> %1 8740} 8741 8742define <4 x i1> @fcmp_ord_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8743; CHECK-LABEL: fcmp_ord_vv_v4f64: 8744; CHECK: # %bb.0: 8745; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8746; CHECK-NEXT: vmfeq.vv v12, v10, v10 8747; CHECK-NEXT: vmfeq.vv v10, v8, v8 8748; CHECK-NEXT: vmand.mm v0, v10, v12 8749; CHECK-NEXT: ret 8750 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 8751 ret <4 x i1> %1 8752} 8753 8754define <4 x i1> @fcmp_ord_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8755; CHECK-LABEL: fcmp_ord_vf_v4f64: 8756; CHECK: # %bb.0: 8757; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8758; CHECK-NEXT: vfmv.v.f v10, fa0 8759; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8760; CHECK-NEXT: vmfeq.vv v10, v8, v8 8761; CHECK-NEXT: vmand.mm v0, v10, v12 8762; CHECK-NEXT: ret 8763 %head = insertelement <4 x double> poison, double %b, i32 0 8764 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8765 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 8766 ret <4 x i1> %1 8767} 8768 8769define <4 x i1> @fcmp_ord_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8770; CHECK-LABEL: fcmp_ord_fv_v4f64: 8771; CHECK: # %bb.0: 8772; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 8773; CHECK-NEXT: vfmv.v.f v10, fa0 8774; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8775; CHECK-NEXT: vmfeq.vv v10, v8, v8 8776; CHECK-NEXT: vmand.mm v0, v12, v10 8777; CHECK-NEXT: ret 8778 %head = insertelement <4 x double> poison, double %b, i32 0 8779 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8780 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 8781 ret <4 x i1> %1 8782} 8783 8784define <4 x i1> @fcmp_ueq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8785; CHECK-LABEL: fcmp_ueq_vv_v4f64: 8786; CHECK: # %bb.0: 8787; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8788; CHECK-NEXT: vmfeq.vv v12, v10, v10 8789; CHECK-NEXT: vmfeq.vv v13, v8, v8 8790; CHECK-NEXT: vmand.mm v12, v13, v12 8791; CHECK-NEXT: vmv1r.v v13, v12 8792; CHECK-NEXT: vmv1r.v v0, v12 8793; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t 8794; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 8795; CHECK-NEXT: vmnor.mm v0, v12, v13 8796; CHECK-NEXT: ret 8797 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8798 ret <4 x i1> %1 8799} 8800 8801define <4 x i1> @fcmp_ueq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8802; CHECK-LABEL: fcmp_ueq_vf_v4f64: 8803; CHECK: # %bb.0: 8804; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8805; CHECK-NEXT: vfmv.v.f v10, fa0 8806; CHECK-NEXT: vmfeq.vv v12, v8, v8 8807; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8808; CHECK-NEXT: vmand.mm v10, v12, v13 8809; CHECK-NEXT: vmv1r.v v11, v10 8810; CHECK-NEXT: vmv1r.v v0, v10 8811; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t 8812; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8813; CHECK-NEXT: vmnor.mm v0, v10, v11 8814; CHECK-NEXT: ret 8815 %head = insertelement <4 x double> poison, double %b, i32 0 8816 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8817 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8818 ret <4 x i1> %1 8819} 8820 8821define <4 x i1> @fcmp_ueq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8822; CHECK-LABEL: fcmp_ueq_fv_v4f64: 8823; CHECK: # %bb.0: 8824; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8825; CHECK-NEXT: vfmv.v.f v10, fa0 8826; CHECK-NEXT: vmfeq.vv v12, v8, v8 8827; CHECK-NEXT: vmfeq.vf v13, v10, fa0 8828; CHECK-NEXT: vmand.mm v10, v13, v12 8829; CHECK-NEXT: vmv1r.v v11, v10 8830; CHECK-NEXT: vmv1r.v v0, v10 8831; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t 8832; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8833; CHECK-NEXT: vmnor.mm v0, v10, v11 8834; CHECK-NEXT: ret 8835 %head = insertelement <4 x double> poison, double %b, i32 0 8836 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8837 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 8838 ret <4 x i1> %1 8839} 8840 8841define <4 x i1> @fcmp_ugt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8842; CHECK-LABEL: fcmp_ugt_vv_v4f64: 8843; CHECK: # %bb.0: 8844; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8845; CHECK-NEXT: vmfeq.vv v12, v10, v10 8846; CHECK-NEXT: vmfeq.vv v13, v8, v8 8847; CHECK-NEXT: vmand.mm v12, v13, v12 8848; CHECK-NEXT: vmv1r.v v0, v12 8849; CHECK-NEXT: vmfle.vv v12, v8, v10, v0.t 8850; CHECK-NEXT: vmnot.m v0, v12 8851; CHECK-NEXT: ret 8852 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8853 ret <4 x i1> %1 8854} 8855 8856define <4 x i1> @fcmp_ugt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8857; CHECK-LABEL: fcmp_ugt_vf_v4f64: 8858; CHECK: # %bb.0: 8859; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8860; CHECK-NEXT: vfmv.v.f v10, fa0 8861; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8862; CHECK-NEXT: vmfeq.vv v10, v8, v8 8863; CHECK-NEXT: vmand.mm v10, v10, v12 8864; CHECK-NEXT: vmv1r.v v0, v10 8865; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8866; CHECK-NEXT: vmnot.m v0, v10 8867; CHECK-NEXT: ret 8868 %head = insertelement <4 x double> poison, double %b, i32 0 8869 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8870 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8871 ret <4 x i1> %1 8872} 8873 8874define <4 x i1> @fcmp_ugt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8875; CHECK-LABEL: fcmp_ugt_fv_v4f64: 8876; CHECK: # %bb.0: 8877; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8878; CHECK-NEXT: vfmv.v.f v10, fa0 8879; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8880; CHECK-NEXT: vmfeq.vv v10, v8, v8 8881; CHECK-NEXT: vmand.mm v10, v12, v10 8882; CHECK-NEXT: vmv1r.v v0, v10 8883; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8884; CHECK-NEXT: vmnot.m v0, v10 8885; CHECK-NEXT: ret 8886 %head = insertelement <4 x double> poison, double %b, i32 0 8887 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8888 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 8889 ret <4 x i1> %1 8890} 8891 8892define <4 x i1> @fcmp_uge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8893; CHECK-LABEL: fcmp_uge_vv_v4f64: 8894; CHECK: # %bb.0: 8895; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8896; CHECK-NEXT: vmfeq.vv v12, v10, v10 8897; CHECK-NEXT: vmfeq.vv v13, v8, v8 8898; CHECK-NEXT: vmand.mm v12, v13, v12 8899; CHECK-NEXT: vmv1r.v v0, v12 8900; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t 8901; CHECK-NEXT: vmnot.m v0, v12 8902; CHECK-NEXT: ret 8903 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 8904 ret <4 x i1> %1 8905} 8906 8907define <4 x i1> @fcmp_uge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8908; CHECK-LABEL: fcmp_uge_vf_v4f64: 8909; CHECK: # %bb.0: 8910; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8911; CHECK-NEXT: vfmv.v.f v10, fa0 8912; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8913; CHECK-NEXT: vmfeq.vv v10, v8, v8 8914; CHECK-NEXT: vmand.mm v10, v10, v12 8915; CHECK-NEXT: vmv1r.v v0, v10 8916; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 8917; CHECK-NEXT: vmnot.m v0, v10 8918; CHECK-NEXT: ret 8919 %head = insertelement <4 x double> poison, double %b, i32 0 8920 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8921 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 8922 ret <4 x i1> %1 8923} 8924 8925define <4 x i1> @fcmp_uge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8926; CHECK-LABEL: fcmp_uge_fv_v4f64: 8927; CHECK: # %bb.0: 8928; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8929; CHECK-NEXT: vfmv.v.f v10, fa0 8930; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8931; CHECK-NEXT: vmfeq.vv v10, v8, v8 8932; CHECK-NEXT: vmand.mm v10, v12, v10 8933; CHECK-NEXT: vmv1r.v v0, v10 8934; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 8935; CHECK-NEXT: vmnot.m v0, v10 8936; CHECK-NEXT: ret 8937 %head = insertelement <4 x double> poison, double %b, i32 0 8938 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8939 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 8940 ret <4 x i1> %1 8941} 8942 8943define <4 x i1> @fcmp_ult_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8944; CHECK-LABEL: fcmp_ult_vv_v4f64: 8945; CHECK: # %bb.0: 8946; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8947; CHECK-NEXT: vmfeq.vv v12, v8, v8 8948; CHECK-NEXT: vmfeq.vv v13, v10, v10 8949; CHECK-NEXT: vmand.mm v12, v13, v12 8950; CHECK-NEXT: vmv1r.v v0, v12 8951; CHECK-NEXT: vmfle.vv v12, v10, v8, v0.t 8952; CHECK-NEXT: vmnot.m v0, v12 8953; CHECK-NEXT: ret 8954 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 8955 ret <4 x i1> %1 8956} 8957 8958define <4 x i1> @fcmp_ult_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8959; CHECK-LABEL: fcmp_ult_vf_v4f64: 8960; CHECK: # %bb.0: 8961; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8962; CHECK-NEXT: vfmv.v.f v10, fa0 8963; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8964; CHECK-NEXT: vmfeq.vv v10, v8, v8 8965; CHECK-NEXT: vmand.mm v10, v12, v10 8966; CHECK-NEXT: vmv1r.v v0, v10 8967; CHECK-NEXT: vmfge.vf v10, v8, fa0, v0.t 8968; CHECK-NEXT: vmnot.m v0, v10 8969; CHECK-NEXT: ret 8970 %head = insertelement <4 x double> poison, double %b, i32 0 8971 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8972 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 8973 ret <4 x i1> %1 8974} 8975 8976define <4 x i1> @fcmp_ult_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 8977; CHECK-LABEL: fcmp_ult_fv_v4f64: 8978; CHECK: # %bb.0: 8979; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8980; CHECK-NEXT: vfmv.v.f v10, fa0 8981; CHECK-NEXT: vmfeq.vf v12, v10, fa0 8982; CHECK-NEXT: vmfeq.vv v10, v8, v8 8983; CHECK-NEXT: vmand.mm v10, v10, v12 8984; CHECK-NEXT: vmv1r.v v0, v10 8985; CHECK-NEXT: vmfle.vf v10, v8, fa0, v0.t 8986; CHECK-NEXT: vmnot.m v0, v10 8987; CHECK-NEXT: ret 8988 %head = insertelement <4 x double> poison, double %b, i32 0 8989 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 8990 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 8991 ret <4 x i1> %1 8992} 8993 8994define <4 x i1> @fcmp_ule_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 8995; CHECK-LABEL: fcmp_ule_vv_v4f64: 8996; CHECK: # %bb.0: 8997; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 8998; CHECK-NEXT: vmfeq.vv v12, v8, v8 8999; CHECK-NEXT: vmfeq.vv v13, v10, v10 9000; CHECK-NEXT: vmand.mm v12, v13, v12 9001; CHECK-NEXT: vmv1r.v v0, v12 9002; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t 9003; CHECK-NEXT: vmnot.m v0, v12 9004; CHECK-NEXT: ret 9005 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 9006 ret <4 x i1> %1 9007} 9008 9009define <4 x i1> @fcmp_ule_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9010; CHECK-LABEL: fcmp_ule_vf_v4f64: 9011; CHECK: # %bb.0: 9012; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 9013; CHECK-NEXT: vfmv.v.f v10, fa0 9014; CHECK-NEXT: vmfeq.vf v12, v10, fa0 9015; CHECK-NEXT: vmfeq.vv v10, v8, v8 9016; CHECK-NEXT: vmand.mm v10, v12, v10 9017; CHECK-NEXT: vmv1r.v v0, v10 9018; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t 9019; CHECK-NEXT: vmnot.m v0, v10 9020; CHECK-NEXT: ret 9021 %head = insertelement <4 x double> poison, double %b, i32 0 9022 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9023 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 9024 ret <4 x i1> %1 9025} 9026 9027define <4 x i1> @fcmp_ule_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9028; CHECK-LABEL: fcmp_ule_fv_v4f64: 9029; CHECK: # %bb.0: 9030; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu 9031; CHECK-NEXT: vfmv.v.f v10, fa0 9032; CHECK-NEXT: vmfeq.vf v12, v10, fa0 9033; CHECK-NEXT: vmfeq.vv v10, v8, v8 9034; CHECK-NEXT: vmand.mm v10, v10, v12 9035; CHECK-NEXT: vmv1r.v v0, v10 9036; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t 9037; CHECK-NEXT: vmnot.m v0, v10 9038; CHECK-NEXT: ret 9039 %head = insertelement <4 x double> poison, double %b, i32 0 9040 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9041 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 9042 ret <4 x i1> %1 9043} 9044 9045define <4 x i1> @fcmp_une_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 9046; CHECK-LABEL: fcmp_une_vv_v4f64: 9047; CHECK: # %bb.0: 9048; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9049; CHECK-NEXT: vmfne.vv v0, v8, v10 9050; CHECK-NEXT: ret 9051 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 9052 ret <4 x i1> %1 9053} 9054 9055define <4 x i1> @fcmp_une_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9056; CHECK-LABEL: fcmp_une_vf_v4f64: 9057; CHECK: # %bb.0: 9058; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9059; CHECK-NEXT: vmfne.vf v0, v8, fa0 9060; CHECK-NEXT: ret 9061 %head = insertelement <4 x double> poison, double %b, i32 0 9062 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9063 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 9064 ret <4 x i1> %1 9065} 9066 9067define <4 x i1> @fcmp_une_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9068; CHECK-LABEL: fcmp_une_fv_v4f64: 9069; CHECK: # %bb.0: 9070; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9071; CHECK-NEXT: vmfne.vf v0, v8, fa0 9072; CHECK-NEXT: ret 9073 %head = insertelement <4 x double> poison, double %b, i32 0 9074 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9075 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 9076 ret <4 x i1> %1 9077} 9078 9079define <4 x i1> @fcmp_uno_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 9080; CHECK-LABEL: fcmp_uno_vv_v4f64: 9081; CHECK: # %bb.0: 9082; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9083; CHECK-NEXT: vmfne.vv v12, v10, v10 9084; CHECK-NEXT: vmfne.vv v10, v8, v8 9085; CHECK-NEXT: vmor.mm v0, v10, v12 9086; CHECK-NEXT: ret 9087 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 9088 ret <4 x i1> %1 9089} 9090 9091define <4 x i1> @fcmp_uno_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9092; CHECK-LABEL: fcmp_uno_vf_v4f64: 9093; CHECK: # %bb.0: 9094; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9095; CHECK-NEXT: vfmv.v.f v10, fa0 9096; CHECK-NEXT: vmfne.vf v12, v10, fa0 9097; CHECK-NEXT: vmfne.vv v10, v8, v8 9098; CHECK-NEXT: vmor.mm v0, v10, v12 9099; CHECK-NEXT: ret 9100 %head = insertelement <4 x double> poison, double %b, i32 0 9101 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9102 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 9103 ret <4 x i1> %1 9104} 9105 9106define <4 x i1> @fcmp_uno_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 9107; CHECK-LABEL: fcmp_uno_fv_v4f64: 9108; CHECK: # %bb.0: 9109; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 9110; CHECK-NEXT: vfmv.v.f v10, fa0 9111; CHECK-NEXT: vmfne.vf v12, v10, fa0 9112; CHECK-NEXT: vmfne.vv v10, v8, v8 9113; CHECK-NEXT: vmor.mm v0, v12, v10 9114; CHECK-NEXT: ret 9115 %head = insertelement <4 x double> poison, double %b, i32 0 9116 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 9117 %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 9118 ret <4 x i1> %1 9119} 9120 9121declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata) 9122define <8 x i1> @fcmp_oeq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9123; CHECK-LABEL: fcmp_oeq_vv_v8f64: 9124; CHECK: # %bb.0: 9125; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9126; CHECK-NEXT: vmfeq.vv v0, v8, v12 9127; CHECK-NEXT: ret 9128 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9129 ret <8 x i1> %1 9130} 9131 9132define <8 x i1> @fcmp_oeq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9133; CHECK-LABEL: fcmp_oeq_vf_v8f64: 9134; CHECK: # %bb.0: 9135; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9136; CHECK-NEXT: vmfeq.vf v0, v8, fa0 9137; CHECK-NEXT: ret 9138 %head = insertelement <8 x double> poison, double %b, i32 0 9139 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9140 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9141 ret <8 x i1> %1 9142} 9143 9144define <8 x i1> @fcmp_oeq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9145; CHECK-LABEL: fcmp_oeq_fv_v8f64: 9146; CHECK: # %bb.0: 9147; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9148; CHECK-NEXT: vmfeq.vf v0, v8, fa0 9149; CHECK-NEXT: ret 9150 %head = insertelement <8 x double> poison, double %b, i32 0 9151 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9152 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 9153 ret <8 x i1> %1 9154} 9155 9156define <8 x i1> @fcmp_ogt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9157; CHECK-LABEL: fcmp_ogt_vv_v8f64: 9158; CHECK: # %bb.0: 9159; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9160; CHECK-NEXT: vmfeq.vv v16, v8, v8 9161; CHECK-NEXT: vmfeq.vv v17, v12, v12 9162; CHECK-NEXT: vmand.mm v16, v17, v16 9163; CHECK-NEXT: vmv1r.v v0, v16 9164; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 9165; CHECK-NEXT: vmv1r.v v0, v16 9166; CHECK-NEXT: ret 9167 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9168 ret <8 x i1> %1 9169} 9170 9171define <8 x i1> @fcmp_ogt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9172; CHECK-LABEL: fcmp_ogt_vf_v8f64: 9173; CHECK: # %bb.0: 9174; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9175; CHECK-NEXT: vfmv.v.f v12, fa0 9176; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9177; CHECK-NEXT: vmfeq.vv v12, v8, v8 9178; CHECK-NEXT: vmand.mm v12, v16, v12 9179; CHECK-NEXT: vmv1r.v v0, v12 9180; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9181; CHECK-NEXT: vmv1r.v v0, v12 9182; CHECK-NEXT: ret 9183 %head = insertelement <8 x double> poison, double %b, i32 0 9184 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9185 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9186 ret <8 x i1> %1 9187} 9188 9189define <8 x i1> @fcmp_ogt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9190; CHECK-LABEL: fcmp_ogt_fv_v8f64: 9191; CHECK: # %bb.0: 9192; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9193; CHECK-NEXT: vfmv.v.f v12, fa0 9194; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9195; CHECK-NEXT: vmfeq.vv v12, v8, v8 9196; CHECK-NEXT: vmand.mm v12, v12, v16 9197; CHECK-NEXT: vmv1r.v v0, v12 9198; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9199; CHECK-NEXT: vmv1r.v v0, v12 9200; CHECK-NEXT: ret 9201 %head = insertelement <8 x double> poison, double %b, i32 0 9202 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9203 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 9204 ret <8 x i1> %1 9205} 9206 9207define <8 x i1> @fcmp_oge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9208; CHECK-LABEL: fcmp_oge_vv_v8f64: 9209; CHECK: # %bb.0: 9210; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9211; CHECK-NEXT: vmfeq.vv v16, v8, v8 9212; CHECK-NEXT: vmfeq.vv v17, v12, v12 9213; CHECK-NEXT: vmand.mm v16, v17, v16 9214; CHECK-NEXT: vmv1r.v v0, v16 9215; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 9216; CHECK-NEXT: vmv1r.v v0, v16 9217; CHECK-NEXT: ret 9218 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 9219 ret <8 x i1> %1 9220} 9221 9222define <8 x i1> @fcmp_oge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9223; CHECK-LABEL: fcmp_oge_vf_v8f64: 9224; CHECK: # %bb.0: 9225; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9226; CHECK-NEXT: vfmv.v.f v12, fa0 9227; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9228; CHECK-NEXT: vmfeq.vv v12, v8, v8 9229; CHECK-NEXT: vmand.mm v12, v16, v12 9230; CHECK-NEXT: vmv1r.v v0, v12 9231; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 9232; CHECK-NEXT: vmv1r.v v0, v12 9233; CHECK-NEXT: ret 9234 %head = insertelement <8 x double> poison, double %b, i32 0 9235 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9236 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 9237 ret <8 x i1> %1 9238} 9239 9240define <8 x i1> @fcmp_oge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9241; CHECK-LABEL: fcmp_oge_fv_v8f64: 9242; CHECK: # %bb.0: 9243; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9244; CHECK-NEXT: vfmv.v.f v12, fa0 9245; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9246; CHECK-NEXT: vmfeq.vv v12, v8, v8 9247; CHECK-NEXT: vmand.mm v12, v12, v16 9248; CHECK-NEXT: vmv1r.v v0, v12 9249; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 9250; CHECK-NEXT: vmv1r.v v0, v12 9251; CHECK-NEXT: ret 9252 %head = insertelement <8 x double> poison, double %b, i32 0 9253 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9254 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 9255 ret <8 x i1> %1 9256} 9257 9258define <8 x i1> @fcmp_olt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9259; CHECK-LABEL: fcmp_olt_vv_v8f64: 9260; CHECK: # %bb.0: 9261; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9262; CHECK-NEXT: vmfeq.vv v16, v12, v12 9263; CHECK-NEXT: vmfeq.vv v17, v8, v8 9264; CHECK-NEXT: vmand.mm v16, v17, v16 9265; CHECK-NEXT: vmv1r.v v0, v16 9266; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 9267; CHECK-NEXT: vmv1r.v v0, v16 9268; CHECK-NEXT: ret 9269 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 9270 ret <8 x i1> %1 9271} 9272 9273define <8 x i1> @fcmp_olt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9274; CHECK-LABEL: fcmp_olt_vf_v8f64: 9275; CHECK: # %bb.0: 9276; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9277; CHECK-NEXT: vfmv.v.f v12, fa0 9278; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9279; CHECK-NEXT: vmfeq.vv v12, v8, v8 9280; CHECK-NEXT: vmand.mm v12, v12, v16 9281; CHECK-NEXT: vmv1r.v v0, v12 9282; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9283; CHECK-NEXT: vmv1r.v v0, v12 9284; CHECK-NEXT: ret 9285 %head = insertelement <8 x double> poison, double %b, i32 0 9286 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9287 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 9288 ret <8 x i1> %1 9289} 9290 9291define <8 x i1> @fcmp_olt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9292; CHECK-LABEL: fcmp_olt_fv_v8f64: 9293; CHECK: # %bb.0: 9294; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9295; CHECK-NEXT: vfmv.v.f v12, fa0 9296; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9297; CHECK-NEXT: vmfeq.vv v12, v8, v8 9298; CHECK-NEXT: vmand.mm v12, v16, v12 9299; CHECK-NEXT: vmv1r.v v0, v12 9300; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9301; CHECK-NEXT: vmv1r.v v0, v12 9302; CHECK-NEXT: ret 9303 %head = insertelement <8 x double> poison, double %b, i32 0 9304 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9305 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 9306 ret <8 x i1> %1 9307} 9308 9309define <8 x i1> @fcmp_ole_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9310; CHECK-LABEL: fcmp_ole_vv_v8f64: 9311; CHECK: # %bb.0: 9312; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9313; CHECK-NEXT: vmfeq.vv v16, v12, v12 9314; CHECK-NEXT: vmfeq.vv v17, v8, v8 9315; CHECK-NEXT: vmand.mm v16, v17, v16 9316; CHECK-NEXT: vmv1r.v v0, v16 9317; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 9318; CHECK-NEXT: vmv1r.v v0, v16 9319; CHECK-NEXT: ret 9320 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 9321 ret <8 x i1> %1 9322} 9323 9324define <8 x i1> @fcmp_ole_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9325; CHECK-LABEL: fcmp_ole_vf_v8f64: 9326; CHECK: # %bb.0: 9327; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9328; CHECK-NEXT: vfmv.v.f v12, fa0 9329; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9330; CHECK-NEXT: vmfeq.vv v12, v8, v8 9331; CHECK-NEXT: vmand.mm v12, v12, v16 9332; CHECK-NEXT: vmv1r.v v0, v12 9333; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 9334; CHECK-NEXT: vmv1r.v v0, v12 9335; CHECK-NEXT: ret 9336 %head = insertelement <8 x double> poison, double %b, i32 0 9337 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9338 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 9339 ret <8 x i1> %1 9340} 9341 9342define <8 x i1> @fcmp_ole_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9343; CHECK-LABEL: fcmp_ole_fv_v8f64: 9344; CHECK: # %bb.0: 9345; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9346; CHECK-NEXT: vfmv.v.f v12, fa0 9347; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9348; CHECK-NEXT: vmfeq.vv v12, v8, v8 9349; CHECK-NEXT: vmand.mm v12, v16, v12 9350; CHECK-NEXT: vmv1r.v v0, v12 9351; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 9352; CHECK-NEXT: vmv1r.v v0, v12 9353; CHECK-NEXT: ret 9354 %head = insertelement <8 x double> poison, double %b, i32 0 9355 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9356 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 9357 ret <8 x i1> %1 9358} 9359 9360define <8 x i1> @fcmp_one_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9361; CHECK-LABEL: fcmp_one_vv_v8f64: 9362; CHECK: # %bb.0: 9363; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9364; CHECK-NEXT: vmfeq.vv v16, v12, v12 9365; CHECK-NEXT: vmfeq.vv v17, v8, v8 9366; CHECK-NEXT: vmand.mm v16, v17, v16 9367; CHECK-NEXT: vmv1r.v v17, v16 9368; CHECK-NEXT: vmv1r.v v0, v16 9369; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 9370; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 9371; CHECK-NEXT: vmor.mm v0, v16, v17 9372; CHECK-NEXT: ret 9373 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 9374 ret <8 x i1> %1 9375} 9376 9377define <8 x i1> @fcmp_one_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9378; CHECK-LABEL: fcmp_one_vf_v8f64: 9379; CHECK: # %bb.0: 9380; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9381; CHECK-NEXT: vfmv.v.f v12, fa0 9382; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9383; CHECK-NEXT: vmfeq.vv v12, v8, v8 9384; CHECK-NEXT: vmand.mm v12, v12, v16 9385; CHECK-NEXT: vmv1r.v v13, v12 9386; CHECK-NEXT: vmv1r.v v0, v12 9387; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 9388; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9389; CHECK-NEXT: vmor.mm v0, v12, v13 9390; CHECK-NEXT: ret 9391 %head = insertelement <8 x double> poison, double %b, i32 0 9392 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9393 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 9394 ret <8 x i1> %1 9395} 9396 9397define <8 x i1> @fcmp_one_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9398; CHECK-LABEL: fcmp_one_fv_v8f64: 9399; CHECK: # %bb.0: 9400; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9401; CHECK-NEXT: vfmv.v.f v12, fa0 9402; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9403; CHECK-NEXT: vmfeq.vv v12, v8, v8 9404; CHECK-NEXT: vmand.mm v12, v16, v12 9405; CHECK-NEXT: vmv1r.v v13, v12 9406; CHECK-NEXT: vmv1r.v v0, v12 9407; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 9408; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9409; CHECK-NEXT: vmor.mm v0, v12, v13 9410; CHECK-NEXT: ret 9411 %head = insertelement <8 x double> poison, double %b, i32 0 9412 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9413 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 9414 ret <8 x i1> %1 9415} 9416 9417define <8 x i1> @fcmp_ord_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9418; CHECK-LABEL: fcmp_ord_vv_v8f64: 9419; CHECK: # %bb.0: 9420; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9421; CHECK-NEXT: vmfeq.vv v16, v12, v12 9422; CHECK-NEXT: vmfeq.vv v12, v8, v8 9423; CHECK-NEXT: vmand.mm v0, v12, v16 9424; CHECK-NEXT: ret 9425 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 9426 ret <8 x i1> %1 9427} 9428 9429define <8 x i1> @fcmp_ord_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9430; CHECK-LABEL: fcmp_ord_vf_v8f64: 9431; CHECK: # %bb.0: 9432; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9433; CHECK-NEXT: vfmv.v.f v12, fa0 9434; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9435; CHECK-NEXT: vmfeq.vv v12, v8, v8 9436; CHECK-NEXT: vmand.mm v0, v12, v16 9437; CHECK-NEXT: ret 9438 %head = insertelement <8 x double> poison, double %b, i32 0 9439 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9440 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 9441 ret <8 x i1> %1 9442} 9443 9444define <8 x i1> @fcmp_ord_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9445; CHECK-LABEL: fcmp_ord_fv_v8f64: 9446; CHECK: # %bb.0: 9447; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9448; CHECK-NEXT: vfmv.v.f v12, fa0 9449; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9450; CHECK-NEXT: vmfeq.vv v12, v8, v8 9451; CHECK-NEXT: vmand.mm v0, v16, v12 9452; CHECK-NEXT: ret 9453 %head = insertelement <8 x double> poison, double %b, i32 0 9454 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9455 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 9456 ret <8 x i1> %1 9457} 9458 9459define <8 x i1> @fcmp_ueq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9460; CHECK-LABEL: fcmp_ueq_vv_v8f64: 9461; CHECK: # %bb.0: 9462; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9463; CHECK-NEXT: vmfeq.vv v16, v12, v12 9464; CHECK-NEXT: vmfeq.vv v17, v8, v8 9465; CHECK-NEXT: vmand.mm v16, v17, v16 9466; CHECK-NEXT: vmv1r.v v17, v16 9467; CHECK-NEXT: vmv1r.v v0, v16 9468; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t 9469; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 9470; CHECK-NEXT: vmnor.mm v0, v16, v17 9471; CHECK-NEXT: ret 9472 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9473 ret <8 x i1> %1 9474} 9475 9476define <8 x i1> @fcmp_ueq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9477; CHECK-LABEL: fcmp_ueq_vf_v8f64: 9478; CHECK: # %bb.0: 9479; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9480; CHECK-NEXT: vfmv.v.f v12, fa0 9481; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9482; CHECK-NEXT: vmfeq.vv v12, v8, v8 9483; CHECK-NEXT: vmand.mm v12, v12, v16 9484; CHECK-NEXT: vmv1r.v v13, v12 9485; CHECK-NEXT: vmv1r.v v0, v12 9486; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t 9487; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9488; CHECK-NEXT: vmnor.mm v0, v12, v13 9489; CHECK-NEXT: ret 9490 %head = insertelement <8 x double> poison, double %b, i32 0 9491 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9492 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9493 ret <8 x i1> %1 9494} 9495 9496define <8 x i1> @fcmp_ueq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9497; CHECK-LABEL: fcmp_ueq_fv_v8f64: 9498; CHECK: # %bb.0: 9499; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9500; CHECK-NEXT: vfmv.v.f v12, fa0 9501; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9502; CHECK-NEXT: vmfeq.vv v12, v8, v8 9503; CHECK-NEXT: vmand.mm v12, v16, v12 9504; CHECK-NEXT: vmv1r.v v13, v12 9505; CHECK-NEXT: vmv1r.v v0, v12 9506; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t 9507; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9508; CHECK-NEXT: vmnor.mm v0, v12, v13 9509; CHECK-NEXT: ret 9510 %head = insertelement <8 x double> poison, double %b, i32 0 9511 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9512 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 9513 ret <8 x i1> %1 9514} 9515 9516define <8 x i1> @fcmp_ugt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9517; CHECK-LABEL: fcmp_ugt_vv_v8f64: 9518; CHECK: # %bb.0: 9519; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9520; CHECK-NEXT: vmfeq.vv v16, v12, v12 9521; CHECK-NEXT: vmfeq.vv v17, v8, v8 9522; CHECK-NEXT: vmand.mm v16, v17, v16 9523; CHECK-NEXT: vmv1r.v v0, v16 9524; CHECK-NEXT: vmfle.vv v16, v8, v12, v0.t 9525; CHECK-NEXT: vmnot.m v0, v16 9526; CHECK-NEXT: ret 9527 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9528 ret <8 x i1> %1 9529} 9530 9531define <8 x i1> @fcmp_ugt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9532; CHECK-LABEL: fcmp_ugt_vf_v8f64: 9533; CHECK: # %bb.0: 9534; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9535; CHECK-NEXT: vfmv.v.f v12, fa0 9536; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9537; CHECK-NEXT: vmfeq.vv v12, v8, v8 9538; CHECK-NEXT: vmand.mm v12, v12, v16 9539; CHECK-NEXT: vmv1r.v v0, v12 9540; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 9541; CHECK-NEXT: vmnot.m v0, v12 9542; CHECK-NEXT: ret 9543 %head = insertelement <8 x double> poison, double %b, i32 0 9544 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9545 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9546 ret <8 x i1> %1 9547} 9548 9549define <8 x i1> @fcmp_ugt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9550; CHECK-LABEL: fcmp_ugt_fv_v8f64: 9551; CHECK: # %bb.0: 9552; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9553; CHECK-NEXT: vfmv.v.f v12, fa0 9554; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9555; CHECK-NEXT: vmfeq.vv v12, v8, v8 9556; CHECK-NEXT: vmand.mm v12, v16, v12 9557; CHECK-NEXT: vmv1r.v v0, v12 9558; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 9559; CHECK-NEXT: vmnot.m v0, v12 9560; CHECK-NEXT: ret 9561 %head = insertelement <8 x double> poison, double %b, i32 0 9562 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9563 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 9564 ret <8 x i1> %1 9565} 9566 9567define <8 x i1> @fcmp_uge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9568; CHECK-LABEL: fcmp_uge_vv_v8f64: 9569; CHECK: # %bb.0: 9570; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9571; CHECK-NEXT: vmfeq.vv v16, v12, v12 9572; CHECK-NEXT: vmfeq.vv v17, v8, v8 9573; CHECK-NEXT: vmand.mm v16, v17, v16 9574; CHECK-NEXT: vmv1r.v v0, v16 9575; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t 9576; CHECK-NEXT: vmnot.m v0, v16 9577; CHECK-NEXT: ret 9578 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 9579 ret <8 x i1> %1 9580} 9581 9582define <8 x i1> @fcmp_uge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9583; CHECK-LABEL: fcmp_uge_vf_v8f64: 9584; CHECK: # %bb.0: 9585; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9586; CHECK-NEXT: vfmv.v.f v12, fa0 9587; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9588; CHECK-NEXT: vmfeq.vv v12, v8, v8 9589; CHECK-NEXT: vmand.mm v12, v12, v16 9590; CHECK-NEXT: vmv1r.v v0, v12 9591; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9592; CHECK-NEXT: vmnot.m v0, v12 9593; CHECK-NEXT: ret 9594 %head = insertelement <8 x double> poison, double %b, i32 0 9595 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9596 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 9597 ret <8 x i1> %1 9598} 9599 9600define <8 x i1> @fcmp_uge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9601; CHECK-LABEL: fcmp_uge_fv_v8f64: 9602; CHECK: # %bb.0: 9603; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9604; CHECK-NEXT: vfmv.v.f v12, fa0 9605; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9606; CHECK-NEXT: vmfeq.vv v12, v8, v8 9607; CHECK-NEXT: vmand.mm v12, v16, v12 9608; CHECK-NEXT: vmv1r.v v0, v12 9609; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9610; CHECK-NEXT: vmnot.m v0, v12 9611; CHECK-NEXT: ret 9612 %head = insertelement <8 x double> poison, double %b, i32 0 9613 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9614 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 9615 ret <8 x i1> %1 9616} 9617 9618define <8 x i1> @fcmp_ult_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9619; CHECK-LABEL: fcmp_ult_vv_v8f64: 9620; CHECK: # %bb.0: 9621; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9622; CHECK-NEXT: vmfeq.vv v16, v8, v8 9623; CHECK-NEXT: vmfeq.vv v17, v12, v12 9624; CHECK-NEXT: vmand.mm v16, v17, v16 9625; CHECK-NEXT: vmv1r.v v0, v16 9626; CHECK-NEXT: vmfle.vv v16, v12, v8, v0.t 9627; CHECK-NEXT: vmnot.m v0, v16 9628; CHECK-NEXT: ret 9629 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 9630 ret <8 x i1> %1 9631} 9632 9633define <8 x i1> @fcmp_ult_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9634; CHECK-LABEL: fcmp_ult_vf_v8f64: 9635; CHECK: # %bb.0: 9636; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9637; CHECK-NEXT: vfmv.v.f v12, fa0 9638; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9639; CHECK-NEXT: vmfeq.vv v12, v8, v8 9640; CHECK-NEXT: vmand.mm v12, v16, v12 9641; CHECK-NEXT: vmv1r.v v0, v12 9642; CHECK-NEXT: vmfge.vf v12, v8, fa0, v0.t 9643; CHECK-NEXT: vmnot.m v0, v12 9644; CHECK-NEXT: ret 9645 %head = insertelement <8 x double> poison, double %b, i32 0 9646 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9647 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 9648 ret <8 x i1> %1 9649} 9650 9651define <8 x i1> @fcmp_ult_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9652; CHECK-LABEL: fcmp_ult_fv_v8f64: 9653; CHECK: # %bb.0: 9654; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9655; CHECK-NEXT: vfmv.v.f v12, fa0 9656; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9657; CHECK-NEXT: vmfeq.vv v12, v8, v8 9658; CHECK-NEXT: vmand.mm v12, v12, v16 9659; CHECK-NEXT: vmv1r.v v0, v12 9660; CHECK-NEXT: vmfle.vf v12, v8, fa0, v0.t 9661; CHECK-NEXT: vmnot.m v0, v12 9662; CHECK-NEXT: ret 9663 %head = insertelement <8 x double> poison, double %b, i32 0 9664 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9665 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 9666 ret <8 x i1> %1 9667} 9668 9669define <8 x i1> @fcmp_ule_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9670; CHECK-LABEL: fcmp_ule_vv_v8f64: 9671; CHECK: # %bb.0: 9672; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9673; CHECK-NEXT: vmfeq.vv v16, v8, v8 9674; CHECK-NEXT: vmfeq.vv v17, v12, v12 9675; CHECK-NEXT: vmand.mm v16, v17, v16 9676; CHECK-NEXT: vmv1r.v v0, v16 9677; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t 9678; CHECK-NEXT: vmnot.m v0, v16 9679; CHECK-NEXT: ret 9680 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 9681 ret <8 x i1> %1 9682} 9683 9684define <8 x i1> @fcmp_ule_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9685; CHECK-LABEL: fcmp_ule_vf_v8f64: 9686; CHECK: # %bb.0: 9687; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9688; CHECK-NEXT: vfmv.v.f v12, fa0 9689; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9690; CHECK-NEXT: vmfeq.vv v12, v8, v8 9691; CHECK-NEXT: vmand.mm v12, v16, v12 9692; CHECK-NEXT: vmv1r.v v0, v12 9693; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t 9694; CHECK-NEXT: vmnot.m v0, v12 9695; CHECK-NEXT: ret 9696 %head = insertelement <8 x double> poison, double %b, i32 0 9697 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9698 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 9699 ret <8 x i1> %1 9700} 9701 9702define <8 x i1> @fcmp_ule_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9703; CHECK-LABEL: fcmp_ule_fv_v8f64: 9704; CHECK: # %bb.0: 9705; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu 9706; CHECK-NEXT: vfmv.v.f v12, fa0 9707; CHECK-NEXT: vmfeq.vf v16, v12, fa0 9708; CHECK-NEXT: vmfeq.vv v12, v8, v8 9709; CHECK-NEXT: vmand.mm v12, v12, v16 9710; CHECK-NEXT: vmv1r.v v0, v12 9711; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t 9712; CHECK-NEXT: vmnot.m v0, v12 9713; CHECK-NEXT: ret 9714 %head = insertelement <8 x double> poison, double %b, i32 0 9715 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9716 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 9717 ret <8 x i1> %1 9718} 9719 9720define <8 x i1> @fcmp_une_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9721; CHECK-LABEL: fcmp_une_vv_v8f64: 9722; CHECK: # %bb.0: 9723; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9724; CHECK-NEXT: vmfne.vv v0, v8, v12 9725; CHECK-NEXT: ret 9726 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 9727 ret <8 x i1> %1 9728} 9729 9730define <8 x i1> @fcmp_une_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9731; CHECK-LABEL: fcmp_une_vf_v8f64: 9732; CHECK: # %bb.0: 9733; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9734; CHECK-NEXT: vmfne.vf v0, v8, fa0 9735; CHECK-NEXT: ret 9736 %head = insertelement <8 x double> poison, double %b, i32 0 9737 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9738 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 9739 ret <8 x i1> %1 9740} 9741 9742define <8 x i1> @fcmp_une_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9743; CHECK-LABEL: fcmp_une_fv_v8f64: 9744; CHECK: # %bb.0: 9745; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9746; CHECK-NEXT: vmfne.vf v0, v8, fa0 9747; CHECK-NEXT: ret 9748 %head = insertelement <8 x double> poison, double %b, i32 0 9749 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9750 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 9751 ret <8 x i1> %1 9752} 9753 9754define <8 x i1> @fcmp_uno_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 9755; CHECK-LABEL: fcmp_uno_vv_v8f64: 9756; CHECK: # %bb.0: 9757; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9758; CHECK-NEXT: vmfne.vv v16, v12, v12 9759; CHECK-NEXT: vmfne.vv v12, v8, v8 9760; CHECK-NEXT: vmor.mm v0, v12, v16 9761; CHECK-NEXT: ret 9762 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 9763 ret <8 x i1> %1 9764} 9765 9766define <8 x i1> @fcmp_uno_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9767; CHECK-LABEL: fcmp_uno_vf_v8f64: 9768; CHECK: # %bb.0: 9769; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9770; CHECK-NEXT: vfmv.v.f v12, fa0 9771; CHECK-NEXT: vmfne.vf v16, v12, fa0 9772; CHECK-NEXT: vmfne.vv v12, v8, v8 9773; CHECK-NEXT: vmor.mm v0, v12, v16 9774; CHECK-NEXT: ret 9775 %head = insertelement <8 x double> poison, double %b, i32 0 9776 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9777 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 9778 ret <8 x i1> %1 9779} 9780 9781define <8 x i1> @fcmp_uno_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 9782; CHECK-LABEL: fcmp_uno_fv_v8f64: 9783; CHECK: # %bb.0: 9784; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 9785; CHECK-NEXT: vfmv.v.f v12, fa0 9786; CHECK-NEXT: vmfne.vf v16, v12, fa0 9787; CHECK-NEXT: vmfne.vv v12, v8, v8 9788; CHECK-NEXT: vmor.mm v0, v16, v12 9789; CHECK-NEXT: ret 9790 %head = insertelement <8 x double> poison, double %b, i32 0 9791 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 9792 %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 9793 ret <8 x i1> %1 9794} 9795