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.fcmps.v1f16(<1 x half>, <1 x half>, metadata, metadata) 8define <1 x i1> @fcmps_oeq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 9; CHECK-LABEL: fcmps_oeq_vv_v1f16: 10; CHECK: # %bb.0: 11; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 12; CHECK-NEXT: vmfle.vv v10, v9, v8 13; CHECK-NEXT: vmfle.vv v8, v8, v9 14; CHECK-NEXT: vmand.mm v0, v8, v10 15; CHECK-NEXT: ret 16 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 17 ret <1 x i1> %1 18} 19 20define <1 x i1> @fcmps_oeq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 21; CHECK-LABEL: fcmps_oeq_vf_v1f16: 22; CHECK: # %bb.0: 23; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 24; CHECK-NEXT: vmfge.vf v9, v8, fa0 25; CHECK-NEXT: vmfle.vf v8, v8, fa0 26; CHECK-NEXT: vmand.mm v0, v8, v9 27; CHECK-NEXT: ret 28 %head = insertelement <1 x half> poison, half %b, i32 0 29 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 30 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 31 ret <1 x i1> %1 32} 33 34define <1 x i1> @fcmps_oeq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 35; CHECK-LABEL: fcmps_oeq_fv_v1f16: 36; CHECK: # %bb.0: 37; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 38; CHECK-NEXT: vmfle.vf v9, v8, fa0 39; CHECK-NEXT: vmfge.vf v8, v8, fa0 40; CHECK-NEXT: vmand.mm v0, v8, v9 41; CHECK-NEXT: ret 42 %head = insertelement <1 x half> poison, half %b, i32 0 43 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 44 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 45 ret <1 x i1> %1 46} 47 48define <1 x i1> @fcmps_ogt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 49; CHECK-LABEL: fcmps_ogt_vv_v1f16: 50; CHECK: # %bb.0: 51; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 52; CHECK-NEXT: vmflt.vv v0, v9, v8 53; CHECK-NEXT: ret 54 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 55 ret <1 x i1> %1 56} 57 58define <1 x i1> @fcmps_ogt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 59; CHECK-LABEL: fcmps_ogt_vf_v1f16: 60; CHECK: # %bb.0: 61; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 62; CHECK-NEXT: vmfgt.vf v0, v8, fa0 63; CHECK-NEXT: ret 64 %head = insertelement <1 x half> poison, half %b, i32 0 65 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 66 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 67 ret <1 x i1> %1 68} 69 70define <1 x i1> @fcmps_ogt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 71; CHECK-LABEL: fcmps_ogt_fv_v1f16: 72; CHECK: # %bb.0: 73; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 74; CHECK-NEXT: vmflt.vf v0, v8, fa0 75; CHECK-NEXT: ret 76 %head = insertelement <1 x half> poison, half %b, i32 0 77 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 78 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 79 ret <1 x i1> %1 80} 81 82define <1 x i1> @fcmps_oge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 83; CHECK-LABEL: fcmps_oge_vv_v1f16: 84; CHECK: # %bb.0: 85; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 86; CHECK-NEXT: vmfle.vv v0, v9, v8 87; CHECK-NEXT: ret 88 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 89 ret <1 x i1> %1 90} 91 92define <1 x i1> @fcmps_oge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 93; CHECK-LABEL: fcmps_oge_vf_v1f16: 94; CHECK: # %bb.0: 95; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 96; CHECK-NEXT: vmfge.vf v0, v8, fa0 97; CHECK-NEXT: ret 98 %head = insertelement <1 x half> poison, half %b, i32 0 99 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 100 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 101 ret <1 x i1> %1 102} 103 104define <1 x i1> @fcmps_oge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 105; CHECK-LABEL: fcmps_oge_fv_v1f16: 106; CHECK: # %bb.0: 107; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 108; CHECK-NEXT: vmfle.vf v0, v8, fa0 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.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 113 ret <1 x i1> %1 114} 115 116define <1 x i1> @fcmps_olt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 117; CHECK-LABEL: fcmps_olt_vv_v1f16: 118; CHECK: # %bb.0: 119; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 120; CHECK-NEXT: vmflt.vv v0, v8, v9 121; CHECK-NEXT: ret 122 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 123 ret <1 x i1> %1 124} 125 126define <1 x i1> @fcmps_olt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 127; CHECK-LABEL: fcmps_olt_vf_v1f16: 128; CHECK: # %bb.0: 129; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 130; CHECK-NEXT: vmflt.vf v0, v8, fa0 131; CHECK-NEXT: ret 132 %head = insertelement <1 x half> poison, half %b, i32 0 133 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 134 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 135 ret <1 x i1> %1 136} 137 138define <1 x i1> @fcmps_olt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 139; CHECK-LABEL: fcmps_olt_fv_v1f16: 140; CHECK: # %bb.0: 141; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 142; CHECK-NEXT: vmfgt.vf v0, v8, fa0 143; CHECK-NEXT: ret 144 %head = insertelement <1 x half> poison, half %b, i32 0 145 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 146 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 147 ret <1 x i1> %1 148} 149 150define <1 x i1> @fcmps_ole_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 151; CHECK-LABEL: fcmps_ole_vv_v1f16: 152; CHECK: # %bb.0: 153; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 154; CHECK-NEXT: vmfle.vv v0, v8, v9 155; CHECK-NEXT: ret 156 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 157 ret <1 x i1> %1 158} 159 160define <1 x i1> @fcmps_ole_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 161; CHECK-LABEL: fcmps_ole_vf_v1f16: 162; CHECK: # %bb.0: 163; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 164; CHECK-NEXT: vmfle.vf v0, v8, fa0 165; CHECK-NEXT: ret 166 %head = insertelement <1 x half> poison, half %b, i32 0 167 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 168 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 169 ret <1 x i1> %1 170} 171 172define <1 x i1> @fcmps_ole_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 173; CHECK-LABEL: fcmps_ole_fv_v1f16: 174; CHECK: # %bb.0: 175; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 176; CHECK-NEXT: vmfge.vf v0, v8, fa0 177; CHECK-NEXT: ret 178 %head = insertelement <1 x half> poison, half %b, i32 0 179 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 180 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 181 ret <1 x i1> %1 182} 183 184define <1 x i1> @fcmps_one_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 185; CHECK-LABEL: fcmps_one_vv_v1f16: 186; CHECK: # %bb.0: 187; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 188; CHECK-NEXT: vmflt.vv v10, v8, v9 189; CHECK-NEXT: vmflt.vv v8, v9, v8 190; CHECK-NEXT: vmor.mm v0, v8, v10 191; CHECK-NEXT: ret 192 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 193 ret <1 x i1> %1 194} 195 196define <1 x i1> @fcmps_one_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 197; CHECK-LABEL: fcmps_one_vf_v1f16: 198; CHECK: # %bb.0: 199; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 200; CHECK-NEXT: vmflt.vf v9, v8, fa0 201; CHECK-NEXT: vmfgt.vf v8, v8, fa0 202; CHECK-NEXT: vmor.mm v0, v8, v9 203; CHECK-NEXT: ret 204 %head = insertelement <1 x half> poison, half %b, i32 0 205 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 206 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 207 ret <1 x i1> %1 208} 209 210define <1 x i1> @fcmps_one_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 211; CHECK-LABEL: fcmps_one_fv_v1f16: 212; CHECK: # %bb.0: 213; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 214; CHECK-NEXT: vmfgt.vf v9, v8, fa0 215; CHECK-NEXT: vmflt.vf v8, v8, fa0 216; CHECK-NEXT: vmor.mm v0, v8, v9 217; CHECK-NEXT: ret 218 %head = insertelement <1 x half> poison, half %b, i32 0 219 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 220 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 221 ret <1 x i1> %1 222} 223 224define <1 x i1> @fcmps_ord_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 225; CHECK-LABEL: fcmps_ord_vv_v1f16: 226; CHECK: # %bb.0: 227; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 228; CHECK-NEXT: vmfle.vv v9, v9, v9 229; CHECK-NEXT: vmfle.vv v8, v8, v8 230; CHECK-NEXT: vmand.mm v0, v8, v9 231; CHECK-NEXT: ret 232 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 233 ret <1 x i1> %1 234} 235 236define <1 x i1> @fcmps_ord_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 237; CHECK-LABEL: fcmps_ord_vf_v1f16: 238; CHECK: # %bb.0: 239; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 240; CHECK-NEXT: vfmv.s.f v9, fa0 241; CHECK-NEXT: vmfle.vf v9, v9, fa0 242; CHECK-NEXT: vmfle.vv v8, v8, v8 243; CHECK-NEXT: vmand.mm v0, v8, v9 244; CHECK-NEXT: ret 245 %head = insertelement <1 x half> poison, half %b, i32 0 246 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 247 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 248 ret <1 x i1> %1 249} 250 251define <1 x i1> @fcmps_ord_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 252; CHECK-LABEL: fcmps_ord_fv_v1f16: 253; CHECK: # %bb.0: 254; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 255; CHECK-NEXT: vfmv.s.f v9, fa0 256; CHECK-NEXT: vmfle.vf v9, v9, fa0 257; CHECK-NEXT: vmfle.vv v8, v8, v8 258; CHECK-NEXT: vmand.mm v0, v9, v8 259; CHECK-NEXT: ret 260 %head = insertelement <1 x half> poison, half %b, i32 0 261 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 262 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 263 ret <1 x i1> %1 264} 265 266define <1 x i1> @fcmps_ueq_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 267; CHECK-LABEL: fcmps_ueq_vv_v1f16: 268; CHECK: # %bb.0: 269; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 270; CHECK-NEXT: vmflt.vv v10, v8, v9 271; CHECK-NEXT: vmflt.vv v8, v9, v8 272; CHECK-NEXT: vmnor.mm v0, v8, v10 273; CHECK-NEXT: ret 274 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 275 ret <1 x i1> %1 276} 277 278define <1 x i1> @fcmps_ueq_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 279; CHECK-LABEL: fcmps_ueq_vf_v1f16: 280; CHECK: # %bb.0: 281; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 282; CHECK-NEXT: vmflt.vf v9, v8, fa0 283; CHECK-NEXT: vmfgt.vf v8, v8, fa0 284; CHECK-NEXT: vmnor.mm v0, v8, v9 285; CHECK-NEXT: ret 286 %head = insertelement <1 x half> poison, half %b, i32 0 287 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 288 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 289 ret <1 x i1> %1 290} 291 292define <1 x i1> @fcmps_ueq_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 293; CHECK-LABEL: fcmps_ueq_fv_v1f16: 294; CHECK: # %bb.0: 295; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 296; CHECK-NEXT: vmfgt.vf v9, v8, fa0 297; CHECK-NEXT: vmflt.vf v8, v8, fa0 298; CHECK-NEXT: vmnor.mm v0, v8, v9 299; CHECK-NEXT: ret 300 %head = insertelement <1 x half> poison, half %b, i32 0 301 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 302 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 303 ret <1 x i1> %1 304} 305 306define <1 x i1> @fcmps_ugt_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 307; CHECK-LABEL: fcmps_ugt_vv_v1f16: 308; CHECK: # %bb.0: 309; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 310; CHECK-NEXT: vmfle.vv v8, v8, v9 311; CHECK-NEXT: vmnot.m v0, v8 312; CHECK-NEXT: ret 313 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 314 ret <1 x i1> %1 315} 316 317define <1 x i1> @fcmps_ugt_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 318; CHECK-LABEL: fcmps_ugt_vf_v1f16: 319; CHECK: # %bb.0: 320; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 321; CHECK-NEXT: vmfle.vf v8, v8, fa0 322; CHECK-NEXT: vmnot.m v0, v8 323; CHECK-NEXT: ret 324 %head = insertelement <1 x half> poison, half %b, i32 0 325 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 326 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 327 ret <1 x i1> %1 328} 329 330define <1 x i1> @fcmps_ugt_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 331; CHECK-LABEL: fcmps_ugt_fv_v1f16: 332; CHECK: # %bb.0: 333; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 334; CHECK-NEXT: vmfge.vf v8, v8, fa0 335; CHECK-NEXT: vmnot.m v0, v8 336; CHECK-NEXT: ret 337 %head = insertelement <1 x half> poison, half %b, i32 0 338 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 339 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 340 ret <1 x i1> %1 341} 342 343define <1 x i1> @fcmps_uge_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 344; CHECK-LABEL: fcmps_uge_vv_v1f16: 345; CHECK: # %bb.0: 346; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 347; CHECK-NEXT: vmflt.vv v8, v8, v9 348; CHECK-NEXT: vmnot.m v0, v8 349; CHECK-NEXT: ret 350 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 351 ret <1 x i1> %1 352} 353 354define <1 x i1> @fcmps_uge_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 355; CHECK-LABEL: fcmps_uge_vf_v1f16: 356; CHECK: # %bb.0: 357; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 358; CHECK-NEXT: vmflt.vf v8, v8, fa0 359; CHECK-NEXT: vmnot.m v0, v8 360; CHECK-NEXT: ret 361 %head = insertelement <1 x half> poison, half %b, i32 0 362 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 363 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 364 ret <1 x i1> %1 365} 366 367define <1 x i1> @fcmps_uge_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 368; CHECK-LABEL: fcmps_uge_fv_v1f16: 369; CHECK: # %bb.0: 370; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 371; CHECK-NEXT: vmfgt.vf v8, v8, fa0 372; CHECK-NEXT: vmnot.m v0, v8 373; CHECK-NEXT: ret 374 %head = insertelement <1 x half> poison, half %b, i32 0 375 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 376 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 377 ret <1 x i1> %1 378} 379 380define <1 x i1> @fcmps_ult_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 381; CHECK-LABEL: fcmps_ult_vv_v1f16: 382; CHECK: # %bb.0: 383; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 384; CHECK-NEXT: vmfle.vv v8, v9, v8 385; CHECK-NEXT: vmnot.m v0, v8 386; CHECK-NEXT: ret 387 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 388 ret <1 x i1> %1 389} 390 391define <1 x i1> @fcmps_ult_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 392; CHECK-LABEL: fcmps_ult_vf_v1f16: 393; CHECK: # %bb.0: 394; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 395; CHECK-NEXT: vmfge.vf v8, v8, fa0 396; CHECK-NEXT: vmnot.m v0, v8 397; CHECK-NEXT: ret 398 %head = insertelement <1 x half> poison, half %b, i32 0 399 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 400 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 401 ret <1 x i1> %1 402} 403 404define <1 x i1> @fcmps_ult_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 405; CHECK-LABEL: fcmps_ult_fv_v1f16: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 408; CHECK-NEXT: vmfle.vf v8, v8, fa0 409; CHECK-NEXT: vmnot.m v0, v8 410; CHECK-NEXT: ret 411 %head = insertelement <1 x half> poison, half %b, i32 0 412 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 413 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 414 ret <1 x i1> %1 415} 416 417define <1 x i1> @fcmps_ule_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 418; CHECK-LABEL: fcmps_ule_vv_v1f16: 419; CHECK: # %bb.0: 420; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 421; CHECK-NEXT: vmflt.vv v8, v9, v8 422; CHECK-NEXT: vmnot.m v0, v8 423; CHECK-NEXT: ret 424 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 425 ret <1 x i1> %1 426} 427 428define <1 x i1> @fcmps_ule_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 429; CHECK-LABEL: fcmps_ule_vf_v1f16: 430; CHECK: # %bb.0: 431; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 432; CHECK-NEXT: vmfgt.vf v8, v8, fa0 433; CHECK-NEXT: vmnot.m v0, v8 434; CHECK-NEXT: ret 435 %head = insertelement <1 x half> poison, half %b, i32 0 436 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 437 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 438 ret <1 x i1> %1 439} 440 441define <1 x i1> @fcmps_ule_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 442; CHECK-LABEL: fcmps_ule_fv_v1f16: 443; CHECK: # %bb.0: 444; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 445; CHECK-NEXT: vmflt.vf v8, v8, fa0 446; CHECK-NEXT: vmnot.m v0, v8 447; CHECK-NEXT: ret 448 %head = insertelement <1 x half> poison, half %b, i32 0 449 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 450 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 451 ret <1 x i1> %1 452} 453 454define <1 x i1> @fcmps_une_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 455; CHECK-LABEL: fcmps_une_vv_v1f16: 456; CHECK: # %bb.0: 457; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 458; CHECK-NEXT: vmfle.vv v10, v9, v8 459; CHECK-NEXT: vmfle.vv v8, v8, v9 460; CHECK-NEXT: vmnand.mm v0, v8, v10 461; CHECK-NEXT: ret 462 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 463 ret <1 x i1> %1 464} 465 466define <1 x i1> @fcmps_une_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 467; CHECK-LABEL: fcmps_une_vf_v1f16: 468; CHECK: # %bb.0: 469; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 470; CHECK-NEXT: vmfge.vf v9, v8, fa0 471; CHECK-NEXT: vmfle.vf v8, v8, fa0 472; CHECK-NEXT: vmnand.mm v0, v8, v9 473; CHECK-NEXT: ret 474 %head = insertelement <1 x half> poison, half %b, i32 0 475 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 476 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 477 ret <1 x i1> %1 478} 479 480define <1 x i1> @fcmps_une_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 481; CHECK-LABEL: fcmps_une_fv_v1f16: 482; CHECK: # %bb.0: 483; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 484; CHECK-NEXT: vmfle.vf v9, v8, fa0 485; CHECK-NEXT: vmfge.vf v8, v8, fa0 486; CHECK-NEXT: vmnand.mm v0, v8, v9 487; CHECK-NEXT: ret 488 %head = insertelement <1 x half> poison, half %b, i32 0 489 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 490 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 491 ret <1 x i1> %1 492} 493 494define <1 x i1> @fcmps_uno_vv_v1f16(<1 x half> %va, <1 x half> %vb) nounwind strictfp { 495; CHECK-LABEL: fcmps_uno_vv_v1f16: 496; CHECK: # %bb.0: 497; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 498; CHECK-NEXT: vmfle.vv v9, v9, v9 499; CHECK-NEXT: vmfle.vv v8, v8, v8 500; CHECK-NEXT: vmnot.m v8, v8 501; CHECK-NEXT: vmorn.mm v0, v8, v9 502; CHECK-NEXT: ret 503 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 504 ret <1 x i1> %1 505} 506 507define <1 x i1> @fcmps_uno_vf_v1f16(<1 x half> %va, half %b) nounwind strictfp { 508; CHECK-LABEL: fcmps_uno_vf_v1f16: 509; CHECK: # %bb.0: 510; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 511; CHECK-NEXT: vfmv.s.f v9, fa0 512; CHECK-NEXT: vmfle.vv v8, v8, v8 513; CHECK-NEXT: vmfle.vf v9, v9, fa0 514; CHECK-NEXT: vmnot.m v8, v8 515; CHECK-NEXT: vmorn.mm v0, v8, v9 516; CHECK-NEXT: ret 517 %head = insertelement <1 x half> poison, half %b, i32 0 518 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 519 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 520 ret <1 x i1> %1 521} 522 523define <1 x i1> @fcmps_uno_fv_v1f16(<1 x half> %va, half %b) nounwind strictfp { 524; CHECK-LABEL: fcmps_uno_fv_v1f16: 525; CHECK: # %bb.0: 526; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 527; CHECK-NEXT: vfmv.s.f v9, fa0 528; CHECK-NEXT: vmfle.vf v9, v9, fa0 529; CHECK-NEXT: vmnot.m v9, v9 530; CHECK-NEXT: vmfle.vv v8, v8, v8 531; CHECK-NEXT: vmorn.mm v0, v9, v8 532; CHECK-NEXT: ret 533 %head = insertelement <1 x half> poison, half %b, i32 0 534 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer 535 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f16(<1 x half> %splat, <1 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 536 ret <1 x i1> %1 537} 538 539declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half>, <2 x half>, metadata, metadata) 540define <2 x i1> @fcmps_oeq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 541; CHECK-LABEL: fcmps_oeq_vv_v2f16: 542; CHECK: # %bb.0: 543; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 544; CHECK-NEXT: vmfle.vv v10, v9, v8 545; CHECK-NEXT: vmfle.vv v8, v8, v9 546; CHECK-NEXT: vmand.mm v0, v8, v10 547; CHECK-NEXT: ret 548 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 549 ret <2 x i1> %1 550} 551 552define <2 x i1> @fcmps_oeq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 553; CHECK-LABEL: fcmps_oeq_vf_v2f16: 554; CHECK: # %bb.0: 555; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 556; CHECK-NEXT: vmfge.vf v9, v8, fa0 557; CHECK-NEXT: vmfle.vf v8, v8, fa0 558; CHECK-NEXT: vmand.mm v0, v8, v9 559; CHECK-NEXT: ret 560 %head = insertelement <2 x half> poison, half %b, i32 0 561 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 562 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 563 ret <2 x i1> %1 564} 565 566define <2 x i1> @fcmps_oeq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 567; CHECK-LABEL: fcmps_oeq_fv_v2f16: 568; CHECK: # %bb.0: 569; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 570; CHECK-NEXT: vmfle.vf v9, v8, fa0 571; CHECK-NEXT: vmfge.vf v8, v8, fa0 572; CHECK-NEXT: vmand.mm v0, v8, v9 573; CHECK-NEXT: ret 574 %head = insertelement <2 x half> poison, half %b, i32 0 575 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 576 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 577 ret <2 x i1> %1 578} 579 580define <2 x i1> @fcmps_ogt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 581; CHECK-LABEL: fcmps_ogt_vv_v2f16: 582; CHECK: # %bb.0: 583; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 584; CHECK-NEXT: vmflt.vv v0, v9, v8 585; CHECK-NEXT: ret 586 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 587 ret <2 x i1> %1 588} 589 590define <2 x i1> @fcmps_ogt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 591; CHECK-LABEL: fcmps_ogt_vf_v2f16: 592; CHECK: # %bb.0: 593; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 594; CHECK-NEXT: vmfgt.vf v0, v8, fa0 595; CHECK-NEXT: ret 596 %head = insertelement <2 x half> poison, half %b, i32 0 597 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 598 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 599 ret <2 x i1> %1 600} 601 602define <2 x i1> @fcmps_ogt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 603; CHECK-LABEL: fcmps_ogt_fv_v2f16: 604; CHECK: # %bb.0: 605; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 606; CHECK-NEXT: vmflt.vf v0, v8, fa0 607; CHECK-NEXT: ret 608 %head = insertelement <2 x half> poison, half %b, i32 0 609 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 610 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 611 ret <2 x i1> %1 612} 613 614define <2 x i1> @fcmps_oge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 615; CHECK-LABEL: fcmps_oge_vv_v2f16: 616; CHECK: # %bb.0: 617; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 618; CHECK-NEXT: vmfle.vv v0, v9, v8 619; CHECK-NEXT: ret 620 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 621 ret <2 x i1> %1 622} 623 624define <2 x i1> @fcmps_oge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 625; CHECK-LABEL: fcmps_oge_vf_v2f16: 626; CHECK: # %bb.0: 627; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 628; CHECK-NEXT: vmfge.vf v0, v8, fa0 629; CHECK-NEXT: ret 630 %head = insertelement <2 x half> poison, half %b, i32 0 631 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 632 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 633 ret <2 x i1> %1 634} 635 636define <2 x i1> @fcmps_oge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 637; CHECK-LABEL: fcmps_oge_fv_v2f16: 638; CHECK: # %bb.0: 639; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 640; CHECK-NEXT: vmfle.vf v0, v8, fa0 641; CHECK-NEXT: ret 642 %head = insertelement <2 x half> poison, half %b, i32 0 643 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 644 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 645 ret <2 x i1> %1 646} 647 648define <2 x i1> @fcmps_olt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 649; CHECK-LABEL: fcmps_olt_vv_v2f16: 650; CHECK: # %bb.0: 651; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 652; CHECK-NEXT: vmflt.vv v0, v8, v9 653; CHECK-NEXT: ret 654 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 655 ret <2 x i1> %1 656} 657 658define <2 x i1> @fcmps_olt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 659; CHECK-LABEL: fcmps_olt_vf_v2f16: 660; CHECK: # %bb.0: 661; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 662; CHECK-NEXT: vmflt.vf v0, v8, fa0 663; CHECK-NEXT: ret 664 %head = insertelement <2 x half> poison, half %b, i32 0 665 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 666 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 667 ret <2 x i1> %1 668} 669 670define <2 x i1> @fcmps_olt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 671; CHECK-LABEL: fcmps_olt_fv_v2f16: 672; CHECK: # %bb.0: 673; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 674; CHECK-NEXT: vmfgt.vf v0, v8, fa0 675; CHECK-NEXT: ret 676 %head = insertelement <2 x half> poison, half %b, i32 0 677 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 678 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 679 ret <2 x i1> %1 680} 681 682define <2 x i1> @fcmps_ole_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 683; CHECK-LABEL: fcmps_ole_vv_v2f16: 684; CHECK: # %bb.0: 685; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 686; CHECK-NEXT: vmfle.vv v0, v8, v9 687; CHECK-NEXT: ret 688 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 689 ret <2 x i1> %1 690} 691 692define <2 x i1> @fcmps_ole_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 693; CHECK-LABEL: fcmps_ole_vf_v2f16: 694; CHECK: # %bb.0: 695; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 696; CHECK-NEXT: vmfle.vf v0, v8, fa0 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.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 701 ret <2 x i1> %1 702} 703 704define <2 x i1> @fcmps_ole_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 705; CHECK-LABEL: fcmps_ole_fv_v2f16: 706; CHECK: # %bb.0: 707; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 708; CHECK-NEXT: vmfge.vf v0, v8, fa0 709; CHECK-NEXT: ret 710 %head = insertelement <2 x half> poison, half %b, i32 0 711 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 712 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 713 ret <2 x i1> %1 714} 715 716define <2 x i1> @fcmps_one_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 717; CHECK-LABEL: fcmps_one_vv_v2f16: 718; CHECK: # %bb.0: 719; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 720; CHECK-NEXT: vmflt.vv v10, v8, v9 721; CHECK-NEXT: vmflt.vv v8, v9, v8 722; CHECK-NEXT: vmor.mm v0, v8, v10 723; CHECK-NEXT: ret 724 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 725 ret <2 x i1> %1 726} 727 728define <2 x i1> @fcmps_one_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 729; CHECK-LABEL: fcmps_one_vf_v2f16: 730; CHECK: # %bb.0: 731; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 732; CHECK-NEXT: vmflt.vf v9, v8, fa0 733; CHECK-NEXT: vmfgt.vf v8, v8, fa0 734; CHECK-NEXT: vmor.mm v0, v8, v9 735; CHECK-NEXT: ret 736 %head = insertelement <2 x half> poison, half %b, i32 0 737 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 738 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 739 ret <2 x i1> %1 740} 741 742define <2 x i1> @fcmps_one_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 743; CHECK-LABEL: fcmps_one_fv_v2f16: 744; CHECK: # %bb.0: 745; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 746; CHECK-NEXT: vmfgt.vf v9, v8, fa0 747; CHECK-NEXT: vmflt.vf v8, v8, fa0 748; CHECK-NEXT: vmor.mm v0, v8, v9 749; CHECK-NEXT: ret 750 %head = insertelement <2 x half> poison, half %b, i32 0 751 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 752 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 753 ret <2 x i1> %1 754} 755 756define <2 x i1> @fcmps_ord_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 757; CHECK-LABEL: fcmps_ord_vv_v2f16: 758; CHECK: # %bb.0: 759; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 760; CHECK-NEXT: vmfle.vv v9, v9, v9 761; CHECK-NEXT: vmfle.vv v8, v8, v8 762; CHECK-NEXT: vmand.mm v0, v8, v9 763; CHECK-NEXT: ret 764 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 765 ret <2 x i1> %1 766} 767 768define <2 x i1> @fcmps_ord_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 769; CHECK-LABEL: fcmps_ord_vf_v2f16: 770; CHECK: # %bb.0: 771; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 772; CHECK-NEXT: vfmv.v.f v9, fa0 773; CHECK-NEXT: vmfle.vf v9, v9, fa0 774; CHECK-NEXT: vmfle.vv v8, v8, v8 775; CHECK-NEXT: vmand.mm v0, v8, v9 776; CHECK-NEXT: ret 777 %head = insertelement <2 x half> poison, half %b, i32 0 778 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 779 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 780 ret <2 x i1> %1 781} 782 783define <2 x i1> @fcmps_ord_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 784; CHECK-LABEL: fcmps_ord_fv_v2f16: 785; CHECK: # %bb.0: 786; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 787; CHECK-NEXT: vfmv.v.f v9, fa0 788; CHECK-NEXT: vmfle.vf v9, v9, fa0 789; CHECK-NEXT: vmfle.vv v8, v8, v8 790; CHECK-NEXT: vmand.mm v0, v9, v8 791; CHECK-NEXT: ret 792 %head = insertelement <2 x half> poison, half %b, i32 0 793 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 794 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 795 ret <2 x i1> %1 796} 797 798define <2 x i1> @fcmps_ueq_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 799; CHECK-LABEL: fcmps_ueq_vv_v2f16: 800; CHECK: # %bb.0: 801; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 802; CHECK-NEXT: vmflt.vv v10, v8, v9 803; CHECK-NEXT: vmflt.vv v8, v9, v8 804; CHECK-NEXT: vmnor.mm v0, v8, v10 805; CHECK-NEXT: ret 806 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 807 ret <2 x i1> %1 808} 809 810define <2 x i1> @fcmps_ueq_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 811; CHECK-LABEL: fcmps_ueq_vf_v2f16: 812; CHECK: # %bb.0: 813; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 814; CHECK-NEXT: vmflt.vf v9, v8, fa0 815; CHECK-NEXT: vmfgt.vf v8, v8, fa0 816; CHECK-NEXT: vmnor.mm v0, v8, v9 817; CHECK-NEXT: ret 818 %head = insertelement <2 x half> poison, half %b, i32 0 819 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 820 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 821 ret <2 x i1> %1 822} 823 824define <2 x i1> @fcmps_ueq_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 825; CHECK-LABEL: fcmps_ueq_fv_v2f16: 826; CHECK: # %bb.0: 827; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 828; CHECK-NEXT: vmfgt.vf v9, v8, fa0 829; CHECK-NEXT: vmflt.vf v8, v8, fa0 830; CHECK-NEXT: vmnor.mm v0, v8, v9 831; CHECK-NEXT: ret 832 %head = insertelement <2 x half> poison, half %b, i32 0 833 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 834 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 835 ret <2 x i1> %1 836} 837 838define <2 x i1> @fcmps_ugt_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 839; CHECK-LABEL: fcmps_ugt_vv_v2f16: 840; CHECK: # %bb.0: 841; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 842; CHECK-NEXT: vmfle.vv v8, v8, v9 843; CHECK-NEXT: vmnot.m v0, v8 844; CHECK-NEXT: ret 845 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 846 ret <2 x i1> %1 847} 848 849define <2 x i1> @fcmps_ugt_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 850; CHECK-LABEL: fcmps_ugt_vf_v2f16: 851; CHECK: # %bb.0: 852; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 853; CHECK-NEXT: vmfle.vf v8, v8, fa0 854; CHECK-NEXT: vmnot.m v0, v8 855; CHECK-NEXT: ret 856 %head = insertelement <2 x half> poison, half %b, i32 0 857 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 858 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 859 ret <2 x i1> %1 860} 861 862define <2 x i1> @fcmps_ugt_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 863; CHECK-LABEL: fcmps_ugt_fv_v2f16: 864; CHECK: # %bb.0: 865; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 866; CHECK-NEXT: vmfge.vf v8, v8, fa0 867; CHECK-NEXT: vmnot.m v0, v8 868; CHECK-NEXT: ret 869 %head = insertelement <2 x half> poison, half %b, i32 0 870 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 871 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 872 ret <2 x i1> %1 873} 874 875define <2 x i1> @fcmps_uge_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 876; CHECK-LABEL: fcmps_uge_vv_v2f16: 877; CHECK: # %bb.0: 878; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 879; CHECK-NEXT: vmflt.vv v8, v8, v9 880; CHECK-NEXT: vmnot.m v0, v8 881; CHECK-NEXT: ret 882 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 883 ret <2 x i1> %1 884} 885 886define <2 x i1> @fcmps_uge_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 887; CHECK-LABEL: fcmps_uge_vf_v2f16: 888; CHECK: # %bb.0: 889; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 890; CHECK-NEXT: vmflt.vf v8, v8, fa0 891; CHECK-NEXT: vmnot.m v0, v8 892; CHECK-NEXT: ret 893 %head = insertelement <2 x half> poison, half %b, i32 0 894 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 895 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 896 ret <2 x i1> %1 897} 898 899define <2 x i1> @fcmps_uge_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 900; CHECK-LABEL: fcmps_uge_fv_v2f16: 901; CHECK: # %bb.0: 902; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 903; CHECK-NEXT: vmfgt.vf v8, v8, fa0 904; CHECK-NEXT: vmnot.m v0, v8 905; CHECK-NEXT: ret 906 %head = insertelement <2 x half> poison, half %b, i32 0 907 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 908 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 909 ret <2 x i1> %1 910} 911 912define <2 x i1> @fcmps_ult_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 913; CHECK-LABEL: fcmps_ult_vv_v2f16: 914; CHECK: # %bb.0: 915; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 916; CHECK-NEXT: vmfle.vv v8, v9, v8 917; CHECK-NEXT: vmnot.m v0, v8 918; CHECK-NEXT: ret 919 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 920 ret <2 x i1> %1 921} 922 923define <2 x i1> @fcmps_ult_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 924; CHECK-LABEL: fcmps_ult_vf_v2f16: 925; CHECK: # %bb.0: 926; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 927; CHECK-NEXT: vmfge.vf v8, v8, fa0 928; CHECK-NEXT: vmnot.m v0, v8 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.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 933 ret <2 x i1> %1 934} 935 936define <2 x i1> @fcmps_ult_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 937; CHECK-LABEL: fcmps_ult_fv_v2f16: 938; CHECK: # %bb.0: 939; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 940; CHECK-NEXT: vmfle.vf v8, v8, fa0 941; CHECK-NEXT: vmnot.m v0, v8 942; CHECK-NEXT: ret 943 %head = insertelement <2 x half> poison, half %b, i32 0 944 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 945 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 946 ret <2 x i1> %1 947} 948 949define <2 x i1> @fcmps_ule_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 950; CHECK-LABEL: fcmps_ule_vv_v2f16: 951; CHECK: # %bb.0: 952; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 953; CHECK-NEXT: vmflt.vv v8, v9, v8 954; CHECK-NEXT: vmnot.m v0, v8 955; CHECK-NEXT: ret 956 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 957 ret <2 x i1> %1 958} 959 960define <2 x i1> @fcmps_ule_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 961; CHECK-LABEL: fcmps_ule_vf_v2f16: 962; CHECK: # %bb.0: 963; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 964; CHECK-NEXT: vmfgt.vf v8, v8, fa0 965; CHECK-NEXT: vmnot.m v0, v8 966; CHECK-NEXT: ret 967 %head = insertelement <2 x half> poison, half %b, i32 0 968 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 969 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 970 ret <2 x i1> %1 971} 972 973define <2 x i1> @fcmps_ule_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 974; CHECK-LABEL: fcmps_ule_fv_v2f16: 975; CHECK: # %bb.0: 976; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 977; CHECK-NEXT: vmflt.vf v8, v8, fa0 978; CHECK-NEXT: vmnot.m v0, v8 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.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 983 ret <2 x i1> %1 984} 985 986define <2 x i1> @fcmps_une_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 987; CHECK-LABEL: fcmps_une_vv_v2f16: 988; CHECK: # %bb.0: 989; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 990; CHECK-NEXT: vmfle.vv v10, v9, v8 991; CHECK-NEXT: vmfle.vv v8, v8, v9 992; CHECK-NEXT: vmnand.mm v0, v8, v10 993; CHECK-NEXT: ret 994 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 995 ret <2 x i1> %1 996} 997 998define <2 x i1> @fcmps_une_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 999; CHECK-LABEL: fcmps_une_vf_v2f16: 1000; CHECK: # %bb.0: 1001; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1002; CHECK-NEXT: vmfge.vf v9, v8, fa0 1003; CHECK-NEXT: vmfle.vf v8, v8, fa0 1004; CHECK-NEXT: vmnand.mm v0, v8, v9 1005; CHECK-NEXT: ret 1006 %head = insertelement <2 x half> poison, half %b, i32 0 1007 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1008 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1009 ret <2 x i1> %1 1010} 1011 1012define <2 x i1> @fcmps_une_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1013; CHECK-LABEL: fcmps_une_fv_v2f16: 1014; CHECK: # %bb.0: 1015; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1016; CHECK-NEXT: vmfle.vf v9, v8, fa0 1017; CHECK-NEXT: vmfge.vf v8, v8, fa0 1018; CHECK-NEXT: vmnand.mm v0, v8, v9 1019; CHECK-NEXT: ret 1020 %head = insertelement <2 x half> poison, half %b, i32 0 1021 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1022 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1023 ret <2 x i1> %1 1024} 1025 1026define <2 x i1> @fcmps_uno_vv_v2f16(<2 x half> %va, <2 x half> %vb) nounwind strictfp { 1027; CHECK-LABEL: fcmps_uno_vv_v2f16: 1028; CHECK: # %bb.0: 1029; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1030; CHECK-NEXT: vmfle.vv v9, v9, v9 1031; CHECK-NEXT: vmfle.vv v8, v8, v8 1032; CHECK-NEXT: vmnot.m v8, v8 1033; CHECK-NEXT: vmorn.mm v0, v8, v9 1034; CHECK-NEXT: ret 1035 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1036 ret <2 x i1> %1 1037} 1038 1039define <2 x i1> @fcmps_uno_vf_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1040; CHECK-LABEL: fcmps_uno_vf_v2f16: 1041; CHECK: # %bb.0: 1042; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1043; CHECK-NEXT: vfmv.v.f v9, fa0 1044; CHECK-NEXT: vmfle.vv v8, v8, v8 1045; CHECK-NEXT: vmfle.vf v9, v9, fa0 1046; CHECK-NEXT: vmnot.m v8, v8 1047; CHECK-NEXT: vmorn.mm v0, v8, v9 1048; CHECK-NEXT: ret 1049 %head = insertelement <2 x half> poison, half %b, i32 0 1050 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1051 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1052 ret <2 x i1> %1 1053} 1054 1055define <2 x i1> @fcmps_uno_fv_v2f16(<2 x half> %va, half %b) nounwind strictfp { 1056; CHECK-LABEL: fcmps_uno_fv_v2f16: 1057; CHECK: # %bb.0: 1058; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 1059; CHECK-NEXT: vfmv.v.f v9, fa0 1060; CHECK-NEXT: vmfle.vf v9, v9, fa0 1061; CHECK-NEXT: vmnot.m v9, v9 1062; CHECK-NEXT: vmfle.vv v8, v8, v8 1063; CHECK-NEXT: vmorn.mm v0, v9, v8 1064; CHECK-NEXT: ret 1065 %head = insertelement <2 x half> poison, half %b, i32 0 1066 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer 1067 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half> %splat, <2 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1068 ret <2 x i1> %1 1069} 1070 1071declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half>, <4 x half>, metadata, metadata) 1072define <4 x i1> @fcmps_oeq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1073; CHECK-LABEL: fcmps_oeq_vv_v4f16: 1074; CHECK: # %bb.0: 1075; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1076; CHECK-NEXT: vmfle.vv v10, v9, v8 1077; CHECK-NEXT: vmfle.vv v8, v8, v9 1078; CHECK-NEXT: vmand.mm v0, v8, v10 1079; CHECK-NEXT: ret 1080 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1081 ret <4 x i1> %1 1082} 1083 1084define <4 x i1> @fcmps_oeq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1085; CHECK-LABEL: fcmps_oeq_vf_v4f16: 1086; CHECK: # %bb.0: 1087; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1088; CHECK-NEXT: vmfge.vf v9, v8, fa0 1089; CHECK-NEXT: vmfle.vf v8, v8, fa0 1090; CHECK-NEXT: vmand.mm v0, v8, v9 1091; CHECK-NEXT: ret 1092 %head = insertelement <4 x half> poison, half %b, i32 0 1093 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1094 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1095 ret <4 x i1> %1 1096} 1097 1098define <4 x i1> @fcmps_oeq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1099; CHECK-LABEL: fcmps_oeq_fv_v4f16: 1100; CHECK: # %bb.0: 1101; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1102; CHECK-NEXT: vmfle.vf v9, v8, fa0 1103; CHECK-NEXT: vmfge.vf v8, v8, fa0 1104; CHECK-NEXT: vmand.mm v0, v8, v9 1105; CHECK-NEXT: ret 1106 %head = insertelement <4 x half> poison, half %b, i32 0 1107 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1108 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1109 ret <4 x i1> %1 1110} 1111 1112define <4 x i1> @fcmps_ogt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1113; CHECK-LABEL: fcmps_ogt_vv_v4f16: 1114; CHECK: # %bb.0: 1115; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1116; CHECK-NEXT: vmflt.vv v0, v9, v8 1117; CHECK-NEXT: ret 1118 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1119 ret <4 x i1> %1 1120} 1121 1122define <4 x i1> @fcmps_ogt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1123; CHECK-LABEL: fcmps_ogt_vf_v4f16: 1124; CHECK: # %bb.0: 1125; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1126; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1127; CHECK-NEXT: ret 1128 %head = insertelement <4 x half> poison, half %b, i32 0 1129 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1130 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1131 ret <4 x i1> %1 1132} 1133 1134define <4 x i1> @fcmps_ogt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1135; CHECK-LABEL: fcmps_ogt_fv_v4f16: 1136; CHECK: # %bb.0: 1137; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1138; CHECK-NEXT: vmflt.vf v0, v8, fa0 1139; CHECK-NEXT: ret 1140 %head = insertelement <4 x half> poison, half %b, i32 0 1141 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1142 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1143 ret <4 x i1> %1 1144} 1145 1146define <4 x i1> @fcmps_oge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1147; CHECK-LABEL: fcmps_oge_vv_v4f16: 1148; CHECK: # %bb.0: 1149; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1150; CHECK-NEXT: vmfle.vv v0, v9, v8 1151; CHECK-NEXT: ret 1152 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 1153 ret <4 x i1> %1 1154} 1155 1156define <4 x i1> @fcmps_oge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1157; CHECK-LABEL: fcmps_oge_vf_v4f16: 1158; CHECK: # %bb.0: 1159; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1160; CHECK-NEXT: vmfge.vf v0, v8, fa0 1161; CHECK-NEXT: ret 1162 %head = insertelement <4 x half> poison, half %b, i32 0 1163 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1164 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 1165 ret <4 x i1> %1 1166} 1167 1168define <4 x i1> @fcmps_oge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1169; CHECK-LABEL: fcmps_oge_fv_v4f16: 1170; CHECK: # %bb.0: 1171; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1172; CHECK-NEXT: vmfle.vf v0, v8, fa0 1173; CHECK-NEXT: ret 1174 %head = insertelement <4 x half> poison, half %b, i32 0 1175 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1176 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 1177 ret <4 x i1> %1 1178} 1179 1180define <4 x i1> @fcmps_olt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1181; CHECK-LABEL: fcmps_olt_vv_v4f16: 1182; CHECK: # %bb.0: 1183; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1184; CHECK-NEXT: vmflt.vv v0, v8, v9 1185; CHECK-NEXT: ret 1186 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 1187 ret <4 x i1> %1 1188} 1189 1190define <4 x i1> @fcmps_olt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1191; CHECK-LABEL: fcmps_olt_vf_v4f16: 1192; CHECK: # %bb.0: 1193; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1194; CHECK-NEXT: vmflt.vf v0, v8, fa0 1195; CHECK-NEXT: ret 1196 %head = insertelement <4 x half> poison, half %b, i32 0 1197 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1198 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 1199 ret <4 x i1> %1 1200} 1201 1202define <4 x i1> @fcmps_olt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1203; CHECK-LABEL: fcmps_olt_fv_v4f16: 1204; CHECK: # %bb.0: 1205; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1206; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1207; CHECK-NEXT: ret 1208 %head = insertelement <4 x half> poison, half %b, i32 0 1209 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1210 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 1211 ret <4 x i1> %1 1212} 1213 1214define <4 x i1> @fcmps_ole_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1215; CHECK-LABEL: fcmps_ole_vv_v4f16: 1216; CHECK: # %bb.0: 1217; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1218; CHECK-NEXT: vmfle.vv v0, v8, v9 1219; CHECK-NEXT: ret 1220 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 1221 ret <4 x i1> %1 1222} 1223 1224define <4 x i1> @fcmps_ole_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1225; CHECK-LABEL: fcmps_ole_vf_v4f16: 1226; CHECK: # %bb.0: 1227; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1228; CHECK-NEXT: vmfle.vf v0, v8, fa0 1229; CHECK-NEXT: ret 1230 %head = insertelement <4 x half> poison, half %b, i32 0 1231 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1232 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 1233 ret <4 x i1> %1 1234} 1235 1236define <4 x i1> @fcmps_ole_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1237; CHECK-LABEL: fcmps_ole_fv_v4f16: 1238; CHECK: # %bb.0: 1239; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1240; CHECK-NEXT: vmfge.vf v0, v8, fa0 1241; CHECK-NEXT: ret 1242 %head = insertelement <4 x half> poison, half %b, i32 0 1243 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1244 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 1245 ret <4 x i1> %1 1246} 1247 1248define <4 x i1> @fcmps_one_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1249; CHECK-LABEL: fcmps_one_vv_v4f16: 1250; CHECK: # %bb.0: 1251; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1252; CHECK-NEXT: vmflt.vv v10, v8, v9 1253; CHECK-NEXT: vmflt.vv v8, v9, v8 1254; CHECK-NEXT: vmor.mm v0, v8, v10 1255; CHECK-NEXT: ret 1256 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 1257 ret <4 x i1> %1 1258} 1259 1260define <4 x i1> @fcmps_one_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1261; CHECK-LABEL: fcmps_one_vf_v4f16: 1262; CHECK: # %bb.0: 1263; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1264; CHECK-NEXT: vmflt.vf v9, v8, fa0 1265; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1266; CHECK-NEXT: vmor.mm v0, v8, v9 1267; CHECK-NEXT: ret 1268 %head = insertelement <4 x half> poison, half %b, i32 0 1269 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1270 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 1271 ret <4 x i1> %1 1272} 1273 1274define <4 x i1> @fcmps_one_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1275; CHECK-LABEL: fcmps_one_fv_v4f16: 1276; CHECK: # %bb.0: 1277; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1278; CHECK-NEXT: vmfgt.vf v9, v8, fa0 1279; CHECK-NEXT: vmflt.vf v8, v8, fa0 1280; CHECK-NEXT: vmor.mm v0, v8, v9 1281; CHECK-NEXT: ret 1282 %head = insertelement <4 x half> poison, half %b, i32 0 1283 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1284 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 1285 ret <4 x i1> %1 1286} 1287 1288define <4 x i1> @fcmps_ord_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1289; CHECK-LABEL: fcmps_ord_vv_v4f16: 1290; CHECK: # %bb.0: 1291; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1292; CHECK-NEXT: vmfle.vv v9, v9, v9 1293; CHECK-NEXT: vmfle.vv v8, v8, v8 1294; CHECK-NEXT: vmand.mm v0, v8, v9 1295; CHECK-NEXT: ret 1296 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 1297 ret <4 x i1> %1 1298} 1299 1300define <4 x i1> @fcmps_ord_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1301; CHECK-LABEL: fcmps_ord_vf_v4f16: 1302; CHECK: # %bb.0: 1303; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1304; CHECK-NEXT: vfmv.v.f v9, fa0 1305; CHECK-NEXT: vmfle.vf v9, v9, fa0 1306; CHECK-NEXT: vmfle.vv v8, v8, v8 1307; CHECK-NEXT: vmand.mm v0, v8, v9 1308; CHECK-NEXT: ret 1309 %head = insertelement <4 x half> poison, half %b, i32 0 1310 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1311 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 1312 ret <4 x i1> %1 1313} 1314 1315define <4 x i1> @fcmps_ord_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1316; CHECK-LABEL: fcmps_ord_fv_v4f16: 1317; CHECK: # %bb.0: 1318; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1319; CHECK-NEXT: vfmv.v.f v9, fa0 1320; CHECK-NEXT: vmfle.vf v9, v9, fa0 1321; CHECK-NEXT: vmfle.vv v8, v8, v8 1322; CHECK-NEXT: vmand.mm v0, v9, v8 1323; CHECK-NEXT: ret 1324 %head = insertelement <4 x half> poison, half %b, i32 0 1325 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1326 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 1327 ret <4 x i1> %1 1328} 1329 1330define <4 x i1> @fcmps_ueq_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1331; CHECK-LABEL: fcmps_ueq_vv_v4f16: 1332; CHECK: # %bb.0: 1333; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1334; CHECK-NEXT: vmflt.vv v10, v8, v9 1335; CHECK-NEXT: vmflt.vv v8, v9, v8 1336; CHECK-NEXT: vmnor.mm v0, v8, v10 1337; CHECK-NEXT: ret 1338 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1339 ret <4 x i1> %1 1340} 1341 1342define <4 x i1> @fcmps_ueq_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1343; CHECK-LABEL: fcmps_ueq_vf_v4f16: 1344; CHECK: # %bb.0: 1345; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1346; CHECK-NEXT: vmflt.vf v9, v8, fa0 1347; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1348; CHECK-NEXT: vmnor.mm v0, v8, v9 1349; CHECK-NEXT: ret 1350 %head = insertelement <4 x half> poison, half %b, i32 0 1351 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1352 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1353 ret <4 x i1> %1 1354} 1355 1356define <4 x i1> @fcmps_ueq_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1357; CHECK-LABEL: fcmps_ueq_fv_v4f16: 1358; CHECK: # %bb.0: 1359; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1360; CHECK-NEXT: vmfgt.vf v9, v8, fa0 1361; CHECK-NEXT: vmflt.vf v8, v8, fa0 1362; CHECK-NEXT: vmnor.mm v0, v8, v9 1363; CHECK-NEXT: ret 1364 %head = insertelement <4 x half> poison, half %b, i32 0 1365 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1366 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1367 ret <4 x i1> %1 1368} 1369 1370define <4 x i1> @fcmps_ugt_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1371; CHECK-LABEL: fcmps_ugt_vv_v4f16: 1372; CHECK: # %bb.0: 1373; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1374; CHECK-NEXT: vmfle.vv v8, v8, v9 1375; CHECK-NEXT: vmnot.m v0, v8 1376; CHECK-NEXT: ret 1377 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1378 ret <4 x i1> %1 1379} 1380 1381define <4 x i1> @fcmps_ugt_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1382; CHECK-LABEL: fcmps_ugt_vf_v4f16: 1383; CHECK: # %bb.0: 1384; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1385; CHECK-NEXT: vmfle.vf v8, v8, fa0 1386; CHECK-NEXT: vmnot.m v0, v8 1387; CHECK-NEXT: ret 1388 %head = insertelement <4 x half> poison, half %b, i32 0 1389 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1390 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1391 ret <4 x i1> %1 1392} 1393 1394define <4 x i1> @fcmps_ugt_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1395; CHECK-LABEL: fcmps_ugt_fv_v4f16: 1396; CHECK: # %bb.0: 1397; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1398; CHECK-NEXT: vmfge.vf v8, v8, fa0 1399; CHECK-NEXT: vmnot.m v0, v8 1400; CHECK-NEXT: ret 1401 %head = insertelement <4 x half> poison, half %b, i32 0 1402 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1403 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1404 ret <4 x i1> %1 1405} 1406 1407define <4 x i1> @fcmps_uge_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1408; CHECK-LABEL: fcmps_uge_vv_v4f16: 1409; CHECK: # %bb.0: 1410; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1411; CHECK-NEXT: vmflt.vv v8, v8, v9 1412; CHECK-NEXT: vmnot.m v0, v8 1413; CHECK-NEXT: ret 1414 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1415 ret <4 x i1> %1 1416} 1417 1418define <4 x i1> @fcmps_uge_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1419; CHECK-LABEL: fcmps_uge_vf_v4f16: 1420; CHECK: # %bb.0: 1421; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1422; CHECK-NEXT: vmflt.vf v8, v8, fa0 1423; CHECK-NEXT: vmnot.m v0, v8 1424; CHECK-NEXT: ret 1425 %head = insertelement <4 x half> poison, half %b, i32 0 1426 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1427 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1428 ret <4 x i1> %1 1429} 1430 1431define <4 x i1> @fcmps_uge_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1432; CHECK-LABEL: fcmps_uge_fv_v4f16: 1433; CHECK: # %bb.0: 1434; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1435; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1436; CHECK-NEXT: vmnot.m v0, v8 1437; CHECK-NEXT: ret 1438 %head = insertelement <4 x half> poison, half %b, i32 0 1439 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1440 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1441 ret <4 x i1> %1 1442} 1443 1444define <4 x i1> @fcmps_ult_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1445; CHECK-LABEL: fcmps_ult_vv_v4f16: 1446; CHECK: # %bb.0: 1447; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1448; CHECK-NEXT: vmfle.vv v8, v9, v8 1449; CHECK-NEXT: vmnot.m v0, v8 1450; CHECK-NEXT: ret 1451 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1452 ret <4 x i1> %1 1453} 1454 1455define <4 x i1> @fcmps_ult_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1456; CHECK-LABEL: fcmps_ult_vf_v4f16: 1457; CHECK: # %bb.0: 1458; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1459; CHECK-NEXT: vmfge.vf v8, v8, fa0 1460; CHECK-NEXT: vmnot.m v0, v8 1461; CHECK-NEXT: ret 1462 %head = insertelement <4 x half> poison, half %b, i32 0 1463 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1464 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1465 ret <4 x i1> %1 1466} 1467 1468define <4 x i1> @fcmps_ult_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1469; CHECK-LABEL: fcmps_ult_fv_v4f16: 1470; CHECK: # %bb.0: 1471; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1472; CHECK-NEXT: vmfle.vf v8, v8, fa0 1473; CHECK-NEXT: vmnot.m v0, v8 1474; CHECK-NEXT: ret 1475 %head = insertelement <4 x half> poison, half %b, i32 0 1476 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1477 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 1478 ret <4 x i1> %1 1479} 1480 1481define <4 x i1> @fcmps_ule_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1482; CHECK-LABEL: fcmps_ule_vv_v4f16: 1483; CHECK: # %bb.0: 1484; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1485; CHECK-NEXT: vmflt.vv v8, v9, v8 1486; CHECK-NEXT: vmnot.m v0, v8 1487; CHECK-NEXT: ret 1488 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 1489 ret <4 x i1> %1 1490} 1491 1492define <4 x i1> @fcmps_ule_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1493; CHECK-LABEL: fcmps_ule_vf_v4f16: 1494; CHECK: # %bb.0: 1495; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1496; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1497; CHECK-NEXT: vmnot.m v0, v8 1498; CHECK-NEXT: ret 1499 %head = insertelement <4 x half> poison, half %b, i32 0 1500 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1501 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 1502 ret <4 x i1> %1 1503} 1504 1505define <4 x i1> @fcmps_ule_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1506; CHECK-LABEL: fcmps_ule_fv_v4f16: 1507; CHECK: # %bb.0: 1508; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1509; CHECK-NEXT: vmflt.vf v8, v8, fa0 1510; CHECK-NEXT: vmnot.m v0, v8 1511; CHECK-NEXT: ret 1512 %head = insertelement <4 x half> poison, half %b, i32 0 1513 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1514 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 1515 ret <4 x i1> %1 1516} 1517 1518define <4 x i1> @fcmps_une_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1519; CHECK-LABEL: fcmps_une_vv_v4f16: 1520; CHECK: # %bb.0: 1521; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1522; CHECK-NEXT: vmfle.vv v10, v9, v8 1523; CHECK-NEXT: vmfle.vv v8, v8, v9 1524; CHECK-NEXT: vmnand.mm v0, v8, v10 1525; CHECK-NEXT: ret 1526 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 1527 ret <4 x i1> %1 1528} 1529 1530define <4 x i1> @fcmps_une_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1531; CHECK-LABEL: fcmps_une_vf_v4f16: 1532; CHECK: # %bb.0: 1533; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1534; CHECK-NEXT: vmfge.vf v9, v8, fa0 1535; CHECK-NEXT: vmfle.vf v8, v8, fa0 1536; CHECK-NEXT: vmnand.mm v0, v8, v9 1537; CHECK-NEXT: ret 1538 %head = insertelement <4 x half> poison, half %b, i32 0 1539 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1540 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 1541 ret <4 x i1> %1 1542} 1543 1544define <4 x i1> @fcmps_une_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1545; CHECK-LABEL: fcmps_une_fv_v4f16: 1546; CHECK: # %bb.0: 1547; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1548; CHECK-NEXT: vmfle.vf v9, v8, fa0 1549; CHECK-NEXT: vmfge.vf v8, v8, fa0 1550; CHECK-NEXT: vmnand.mm v0, v8, v9 1551; CHECK-NEXT: ret 1552 %head = insertelement <4 x half> poison, half %b, i32 0 1553 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1554 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 1555 ret <4 x i1> %1 1556} 1557 1558define <4 x i1> @fcmps_uno_vv_v4f16(<4 x half> %va, <4 x half> %vb) nounwind strictfp { 1559; CHECK-LABEL: fcmps_uno_vv_v4f16: 1560; CHECK: # %bb.0: 1561; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1562; CHECK-NEXT: vmfle.vv v9, v9, v9 1563; CHECK-NEXT: vmfle.vv v8, v8, v8 1564; CHECK-NEXT: vmnot.m v8, v8 1565; CHECK-NEXT: vmorn.mm v0, v8, v9 1566; CHECK-NEXT: ret 1567 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 1568 ret <4 x i1> %1 1569} 1570 1571define <4 x i1> @fcmps_uno_vf_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1572; CHECK-LABEL: fcmps_uno_vf_v4f16: 1573; CHECK: # %bb.0: 1574; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1575; CHECK-NEXT: vfmv.v.f v9, fa0 1576; CHECK-NEXT: vmfle.vv v8, v8, v8 1577; CHECK-NEXT: vmfle.vf v9, v9, fa0 1578; CHECK-NEXT: vmnot.m v8, v8 1579; CHECK-NEXT: vmorn.mm v0, v8, v9 1580; CHECK-NEXT: ret 1581 %head = insertelement <4 x half> poison, half %b, i32 0 1582 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1583 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 1584 ret <4 x i1> %1 1585} 1586 1587define <4 x i1> @fcmps_uno_fv_v4f16(<4 x half> %va, half %b) nounwind strictfp { 1588; CHECK-LABEL: fcmps_uno_fv_v4f16: 1589; CHECK: # %bb.0: 1590; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1591; CHECK-NEXT: vfmv.v.f v9, fa0 1592; CHECK-NEXT: vmfle.vf v9, v9, fa0 1593; CHECK-NEXT: vmnot.m v9, v9 1594; CHECK-NEXT: vmfle.vv v8, v8, v8 1595; CHECK-NEXT: vmorn.mm v0, v9, v8 1596; CHECK-NEXT: ret 1597 %head = insertelement <4 x half> poison, half %b, i32 0 1598 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer 1599 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half> %splat, <4 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 1600 ret <4 x i1> %1 1601} 1602 1603declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half>, <8 x half>, metadata, metadata) 1604define <8 x i1> @fcmps_oeq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1605; CHECK-LABEL: fcmps_oeq_vv_v8f16: 1606; CHECK: # %bb.0: 1607; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1608; CHECK-NEXT: vmfle.vv v10, v9, v8 1609; CHECK-NEXT: vmfle.vv v8, v8, v9 1610; CHECK-NEXT: vmand.mm v0, v8, v10 1611; CHECK-NEXT: ret 1612 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1613 ret <8 x i1> %1 1614} 1615 1616define <8 x i1> @fcmps_oeq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1617; CHECK-LABEL: fcmps_oeq_vf_v8f16: 1618; CHECK: # %bb.0: 1619; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1620; CHECK-NEXT: vmfge.vf v9, v8, fa0 1621; CHECK-NEXT: vmfle.vf v8, v8, fa0 1622; CHECK-NEXT: vmand.mm v0, v8, v9 1623; CHECK-NEXT: ret 1624 %head = insertelement <8 x half> poison, half %b, i32 0 1625 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1626 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1627 ret <8 x i1> %1 1628} 1629 1630define <8 x i1> @fcmps_oeq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1631; CHECK-LABEL: fcmps_oeq_fv_v8f16: 1632; CHECK: # %bb.0: 1633; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1634; CHECK-NEXT: vmfle.vf v9, v8, fa0 1635; CHECK-NEXT: vmfge.vf v8, v8, fa0 1636; CHECK-NEXT: vmand.mm v0, v8, v9 1637; CHECK-NEXT: ret 1638 %head = insertelement <8 x half> poison, half %b, i32 0 1639 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1640 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 1641 ret <8 x i1> %1 1642} 1643 1644define <8 x i1> @fcmps_ogt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1645; CHECK-LABEL: fcmps_ogt_vv_v8f16: 1646; CHECK: # %bb.0: 1647; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1648; CHECK-NEXT: vmflt.vv v0, v9, v8 1649; CHECK-NEXT: ret 1650 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1651 ret <8 x i1> %1 1652} 1653 1654define <8 x i1> @fcmps_ogt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1655; CHECK-LABEL: fcmps_ogt_vf_v8f16: 1656; CHECK: # %bb.0: 1657; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1658; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1659; CHECK-NEXT: ret 1660 %head = insertelement <8 x half> poison, half %b, i32 0 1661 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1662 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1663 ret <8 x i1> %1 1664} 1665 1666define <8 x i1> @fcmps_ogt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1667; CHECK-LABEL: fcmps_ogt_fv_v8f16: 1668; CHECK: # %bb.0: 1669; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1670; CHECK-NEXT: vmflt.vf v0, v8, fa0 1671; CHECK-NEXT: ret 1672 %head = insertelement <8 x half> poison, half %b, i32 0 1673 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1674 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 1675 ret <8 x i1> %1 1676} 1677 1678define <8 x i1> @fcmps_oge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1679; CHECK-LABEL: fcmps_oge_vv_v8f16: 1680; CHECK: # %bb.0: 1681; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1682; CHECK-NEXT: vmfle.vv v0, v9, v8 1683; CHECK-NEXT: ret 1684 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 1685 ret <8 x i1> %1 1686} 1687 1688define <8 x i1> @fcmps_oge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1689; CHECK-LABEL: fcmps_oge_vf_v8f16: 1690; CHECK: # %bb.0: 1691; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1692; CHECK-NEXT: vmfge.vf v0, v8, fa0 1693; CHECK-NEXT: ret 1694 %head = insertelement <8 x half> poison, half %b, i32 0 1695 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1696 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 1697 ret <8 x i1> %1 1698} 1699 1700define <8 x i1> @fcmps_oge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1701; CHECK-LABEL: fcmps_oge_fv_v8f16: 1702; CHECK: # %bb.0: 1703; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1704; CHECK-NEXT: vmfle.vf v0, v8, fa0 1705; CHECK-NEXT: ret 1706 %head = insertelement <8 x half> poison, half %b, i32 0 1707 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1708 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 1709 ret <8 x i1> %1 1710} 1711 1712define <8 x i1> @fcmps_olt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1713; CHECK-LABEL: fcmps_olt_vv_v8f16: 1714; CHECK: # %bb.0: 1715; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1716; CHECK-NEXT: vmflt.vv v0, v8, v9 1717; CHECK-NEXT: ret 1718 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 1719 ret <8 x i1> %1 1720} 1721 1722define <8 x i1> @fcmps_olt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1723; CHECK-LABEL: fcmps_olt_vf_v8f16: 1724; CHECK: # %bb.0: 1725; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1726; CHECK-NEXT: vmflt.vf v0, v8, fa0 1727; CHECK-NEXT: ret 1728 %head = insertelement <8 x half> poison, half %b, i32 0 1729 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1730 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 1731 ret <8 x i1> %1 1732} 1733 1734define <8 x i1> @fcmps_olt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1735; CHECK-LABEL: fcmps_olt_fv_v8f16: 1736; CHECK: # %bb.0: 1737; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1738; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1739; CHECK-NEXT: ret 1740 %head = insertelement <8 x half> poison, half %b, i32 0 1741 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1742 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 1743 ret <8 x i1> %1 1744} 1745 1746define <8 x i1> @fcmps_ole_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1747; CHECK-LABEL: fcmps_ole_vv_v8f16: 1748; CHECK: # %bb.0: 1749; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1750; CHECK-NEXT: vmfle.vv v0, v8, v9 1751; CHECK-NEXT: ret 1752 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 1753 ret <8 x i1> %1 1754} 1755 1756define <8 x i1> @fcmps_ole_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1757; CHECK-LABEL: fcmps_ole_vf_v8f16: 1758; CHECK: # %bb.0: 1759; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1760; CHECK-NEXT: vmfle.vf v0, v8, fa0 1761; CHECK-NEXT: ret 1762 %head = insertelement <8 x half> poison, half %b, i32 0 1763 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1764 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 1765 ret <8 x i1> %1 1766} 1767 1768define <8 x i1> @fcmps_ole_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1769; CHECK-LABEL: fcmps_ole_fv_v8f16: 1770; CHECK: # %bb.0: 1771; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1772; CHECK-NEXT: vmfge.vf v0, v8, fa0 1773; CHECK-NEXT: ret 1774 %head = insertelement <8 x half> poison, half %b, i32 0 1775 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1776 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 1777 ret <8 x i1> %1 1778} 1779 1780define <8 x i1> @fcmps_one_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1781; CHECK-LABEL: fcmps_one_vv_v8f16: 1782; CHECK: # %bb.0: 1783; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1784; CHECK-NEXT: vmflt.vv v10, v8, v9 1785; CHECK-NEXT: vmflt.vv v8, v9, v8 1786; CHECK-NEXT: vmor.mm v0, v8, v10 1787; CHECK-NEXT: ret 1788 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 1789 ret <8 x i1> %1 1790} 1791 1792define <8 x i1> @fcmps_one_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1793; CHECK-LABEL: fcmps_one_vf_v8f16: 1794; CHECK: # %bb.0: 1795; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1796; CHECK-NEXT: vmflt.vf v9, v8, fa0 1797; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1798; CHECK-NEXT: vmor.mm v0, v8, v9 1799; CHECK-NEXT: ret 1800 %head = insertelement <8 x half> poison, half %b, i32 0 1801 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1802 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 1803 ret <8 x i1> %1 1804} 1805 1806define <8 x i1> @fcmps_one_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1807; CHECK-LABEL: fcmps_one_fv_v8f16: 1808; CHECK: # %bb.0: 1809; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1810; CHECK-NEXT: vmfgt.vf v9, v8, fa0 1811; CHECK-NEXT: vmflt.vf v8, v8, fa0 1812; CHECK-NEXT: vmor.mm v0, v8, v9 1813; CHECK-NEXT: ret 1814 %head = insertelement <8 x half> poison, half %b, i32 0 1815 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1816 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 1817 ret <8 x i1> %1 1818} 1819 1820define <8 x i1> @fcmps_ord_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1821; CHECK-LABEL: fcmps_ord_vv_v8f16: 1822; CHECK: # %bb.0: 1823; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1824; CHECK-NEXT: vmfle.vv v9, v9, v9 1825; CHECK-NEXT: vmfle.vv v8, v8, v8 1826; CHECK-NEXT: vmand.mm v0, v8, v9 1827; CHECK-NEXT: ret 1828 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 1829 ret <8 x i1> %1 1830} 1831 1832define <8 x i1> @fcmps_ord_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1833; CHECK-LABEL: fcmps_ord_vf_v8f16: 1834; CHECK: # %bb.0: 1835; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1836; CHECK-NEXT: vfmv.v.f v9, fa0 1837; CHECK-NEXT: vmfle.vf v9, v9, fa0 1838; CHECK-NEXT: vmfle.vv v8, v8, v8 1839; CHECK-NEXT: vmand.mm v0, v8, v9 1840; CHECK-NEXT: ret 1841 %head = insertelement <8 x half> poison, half %b, i32 0 1842 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1843 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 1844 ret <8 x i1> %1 1845} 1846 1847define <8 x i1> @fcmps_ord_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1848; CHECK-LABEL: fcmps_ord_fv_v8f16: 1849; CHECK: # %bb.0: 1850; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1851; CHECK-NEXT: vfmv.v.f v9, fa0 1852; CHECK-NEXT: vmfle.vf v9, v9, fa0 1853; CHECK-NEXT: vmfle.vv v8, v8, v8 1854; CHECK-NEXT: vmand.mm v0, v9, v8 1855; CHECK-NEXT: ret 1856 %head = insertelement <8 x half> poison, half %b, i32 0 1857 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1858 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 1859 ret <8 x i1> %1 1860} 1861 1862define <8 x i1> @fcmps_ueq_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1863; CHECK-LABEL: fcmps_ueq_vv_v8f16: 1864; CHECK: # %bb.0: 1865; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1866; CHECK-NEXT: vmflt.vv v10, v8, v9 1867; CHECK-NEXT: vmflt.vv v8, v9, v8 1868; CHECK-NEXT: vmnor.mm v0, v8, v10 1869; CHECK-NEXT: ret 1870 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1871 ret <8 x i1> %1 1872} 1873 1874define <8 x i1> @fcmps_ueq_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1875; CHECK-LABEL: fcmps_ueq_vf_v8f16: 1876; CHECK: # %bb.0: 1877; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1878; CHECK-NEXT: vmflt.vf v9, v8, fa0 1879; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1880; CHECK-NEXT: vmnor.mm v0, v8, v9 1881; CHECK-NEXT: ret 1882 %head = insertelement <8 x half> poison, half %b, i32 0 1883 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1884 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1885 ret <8 x i1> %1 1886} 1887 1888define <8 x i1> @fcmps_ueq_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1889; CHECK-LABEL: fcmps_ueq_fv_v8f16: 1890; CHECK: # %bb.0: 1891; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1892; CHECK-NEXT: vmfgt.vf v9, v8, fa0 1893; CHECK-NEXT: vmflt.vf v8, v8, fa0 1894; CHECK-NEXT: vmnor.mm v0, v8, v9 1895; CHECK-NEXT: ret 1896 %head = insertelement <8 x half> poison, half %b, i32 0 1897 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1898 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 1899 ret <8 x i1> %1 1900} 1901 1902define <8 x i1> @fcmps_ugt_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1903; CHECK-LABEL: fcmps_ugt_vv_v8f16: 1904; CHECK: # %bb.0: 1905; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1906; CHECK-NEXT: vmfle.vv v8, v8, v9 1907; CHECK-NEXT: vmnot.m v0, v8 1908; CHECK-NEXT: ret 1909 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1910 ret <8 x i1> %1 1911} 1912 1913define <8 x i1> @fcmps_ugt_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1914; CHECK-LABEL: fcmps_ugt_vf_v8f16: 1915; CHECK: # %bb.0: 1916; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1917; CHECK-NEXT: vmfle.vf v8, v8, fa0 1918; CHECK-NEXT: vmnot.m v0, v8 1919; CHECK-NEXT: ret 1920 %head = insertelement <8 x half> poison, half %b, i32 0 1921 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1922 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1923 ret <8 x i1> %1 1924} 1925 1926define <8 x i1> @fcmps_ugt_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1927; CHECK-LABEL: fcmps_ugt_fv_v8f16: 1928; CHECK: # %bb.0: 1929; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1930; CHECK-NEXT: vmfge.vf v8, v8, fa0 1931; CHECK-NEXT: vmnot.m v0, v8 1932; CHECK-NEXT: ret 1933 %head = insertelement <8 x half> poison, half %b, i32 0 1934 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1935 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 1936 ret <8 x i1> %1 1937} 1938 1939define <8 x i1> @fcmps_uge_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1940; CHECK-LABEL: fcmps_uge_vv_v8f16: 1941; CHECK: # %bb.0: 1942; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1943; CHECK-NEXT: vmflt.vv v8, v8, v9 1944; CHECK-NEXT: vmnot.m v0, v8 1945; CHECK-NEXT: ret 1946 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 1947 ret <8 x i1> %1 1948} 1949 1950define <8 x i1> @fcmps_uge_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1951; CHECK-LABEL: fcmps_uge_vf_v8f16: 1952; CHECK: # %bb.0: 1953; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1954; CHECK-NEXT: vmflt.vf v8, v8, fa0 1955; CHECK-NEXT: vmnot.m v0, v8 1956; CHECK-NEXT: ret 1957 %head = insertelement <8 x half> poison, half %b, i32 0 1958 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1959 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 1960 ret <8 x i1> %1 1961} 1962 1963define <8 x i1> @fcmps_uge_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1964; CHECK-LABEL: fcmps_uge_fv_v8f16: 1965; CHECK: # %bb.0: 1966; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1967; CHECK-NEXT: vmfgt.vf v8, v8, fa0 1968; CHECK-NEXT: vmnot.m v0, v8 1969; CHECK-NEXT: ret 1970 %head = insertelement <8 x half> poison, half %b, i32 0 1971 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1972 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 1973 ret <8 x i1> %1 1974} 1975 1976define <8 x i1> @fcmps_ult_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 1977; CHECK-LABEL: fcmps_ult_vv_v8f16: 1978; CHECK: # %bb.0: 1979; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1980; CHECK-NEXT: vmfle.vv v8, v9, v8 1981; CHECK-NEXT: vmnot.m v0, v8 1982; CHECK-NEXT: ret 1983 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 1984 ret <8 x i1> %1 1985} 1986 1987define <8 x i1> @fcmps_ult_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 1988; CHECK-LABEL: fcmps_ult_vf_v8f16: 1989; CHECK: # %bb.0: 1990; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1991; CHECK-NEXT: vmfge.vf v8, v8, fa0 1992; CHECK-NEXT: vmnot.m v0, v8 1993; CHECK-NEXT: ret 1994 %head = insertelement <8 x half> poison, half %b, i32 0 1995 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 1996 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 1997 ret <8 x i1> %1 1998} 1999 2000define <8 x i1> @fcmps_ult_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2001; CHECK-LABEL: fcmps_ult_fv_v8f16: 2002; CHECK: # %bb.0: 2003; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2004; CHECK-NEXT: vmfle.vf v8, v8, fa0 2005; CHECK-NEXT: vmnot.m v0, v8 2006; CHECK-NEXT: ret 2007 %head = insertelement <8 x half> poison, half %b, i32 0 2008 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2009 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 2010 ret <8 x i1> %1 2011} 2012 2013define <8 x i1> @fcmps_ule_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2014; CHECK-LABEL: fcmps_ule_vv_v8f16: 2015; CHECK: # %bb.0: 2016; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2017; CHECK-NEXT: vmflt.vv v8, v9, v8 2018; CHECK-NEXT: vmnot.m v0, v8 2019; CHECK-NEXT: ret 2020 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 2021 ret <8 x i1> %1 2022} 2023 2024define <8 x i1> @fcmps_ule_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2025; CHECK-LABEL: fcmps_ule_vf_v8f16: 2026; CHECK: # %bb.0: 2027; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2028; CHECK-NEXT: vmfgt.vf v8, v8, fa0 2029; CHECK-NEXT: vmnot.m v0, v8 2030; CHECK-NEXT: ret 2031 %head = insertelement <8 x half> poison, half %b, i32 0 2032 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2033 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 2034 ret <8 x i1> %1 2035} 2036 2037define <8 x i1> @fcmps_ule_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2038; CHECK-LABEL: fcmps_ule_fv_v8f16: 2039; CHECK: # %bb.0: 2040; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2041; CHECK-NEXT: vmflt.vf v8, v8, fa0 2042; CHECK-NEXT: vmnot.m v0, v8 2043; CHECK-NEXT: ret 2044 %head = insertelement <8 x half> poison, half %b, i32 0 2045 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2046 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 2047 ret <8 x i1> %1 2048} 2049 2050define <8 x i1> @fcmps_une_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2051; CHECK-LABEL: fcmps_une_vv_v8f16: 2052; CHECK: # %bb.0: 2053; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2054; CHECK-NEXT: vmfle.vv v10, v9, v8 2055; CHECK-NEXT: vmfle.vv v8, v8, v9 2056; CHECK-NEXT: vmnand.mm v0, v8, v10 2057; CHECK-NEXT: ret 2058 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 2059 ret <8 x i1> %1 2060} 2061 2062define <8 x i1> @fcmps_une_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2063; CHECK-LABEL: fcmps_une_vf_v8f16: 2064; CHECK: # %bb.0: 2065; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2066; CHECK-NEXT: vmfge.vf v9, v8, fa0 2067; CHECK-NEXT: vmfle.vf v8, v8, fa0 2068; CHECK-NEXT: vmnand.mm v0, v8, v9 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.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 2073 ret <8 x i1> %1 2074} 2075 2076define <8 x i1> @fcmps_une_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2077; CHECK-LABEL: fcmps_une_fv_v8f16: 2078; CHECK: # %bb.0: 2079; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2080; CHECK-NEXT: vmfle.vf v9, v8, fa0 2081; CHECK-NEXT: vmfge.vf v8, v8, fa0 2082; CHECK-NEXT: vmnand.mm v0, v8, v9 2083; CHECK-NEXT: ret 2084 %head = insertelement <8 x half> poison, half %b, i32 0 2085 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2086 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 2087 ret <8 x i1> %1 2088} 2089 2090define <8 x i1> @fcmps_uno_vv_v8f16(<8 x half> %va, <8 x half> %vb) nounwind strictfp { 2091; CHECK-LABEL: fcmps_uno_vv_v8f16: 2092; CHECK: # %bb.0: 2093; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2094; CHECK-NEXT: vmfle.vv v9, v9, v9 2095; CHECK-NEXT: vmfle.vv v8, v8, v8 2096; CHECK-NEXT: vmnot.m v8, v8 2097; CHECK-NEXT: vmorn.mm v0, v8, v9 2098; CHECK-NEXT: ret 2099 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 2100 ret <8 x i1> %1 2101} 2102 2103define <8 x i1> @fcmps_uno_vf_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2104; CHECK-LABEL: fcmps_uno_vf_v8f16: 2105; CHECK: # %bb.0: 2106; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2107; CHECK-NEXT: vfmv.v.f v9, fa0 2108; CHECK-NEXT: vmfle.vv v8, v8, v8 2109; CHECK-NEXT: vmfle.vf v9, v9, fa0 2110; CHECK-NEXT: vmnot.m v8, v8 2111; CHECK-NEXT: vmorn.mm v0, v8, v9 2112; CHECK-NEXT: ret 2113 %head = insertelement <8 x half> poison, half %b, i32 0 2114 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2115 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 2116 ret <8 x i1> %1 2117} 2118 2119define <8 x i1> @fcmps_uno_fv_v8f16(<8 x half> %va, half %b) nounwind strictfp { 2120; CHECK-LABEL: fcmps_uno_fv_v8f16: 2121; CHECK: # %bb.0: 2122; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 2123; CHECK-NEXT: vfmv.v.f v9, fa0 2124; CHECK-NEXT: vmfle.vf v9, v9, fa0 2125; CHECK-NEXT: vmnot.m v9, v9 2126; CHECK-NEXT: vmfle.vv v8, v8, v8 2127; CHECK-NEXT: vmorn.mm v0, v9, v8 2128; CHECK-NEXT: ret 2129 %head = insertelement <8 x half> poison, half %b, i32 0 2130 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer 2131 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 2132 ret <8 x i1> %1 2133} 2134 2135declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half>, <16 x half>, metadata, metadata) 2136define <16 x i1> @fcmps_oeq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2137; CHECK-LABEL: fcmps_oeq_vv_v16f16: 2138; CHECK: # %bb.0: 2139; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2140; CHECK-NEXT: vmfle.vv v12, v10, v8 2141; CHECK-NEXT: vmfle.vv v13, v8, v10 2142; CHECK-NEXT: vmand.mm v0, v13, v12 2143; CHECK-NEXT: ret 2144 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2145 ret <16 x i1> %1 2146} 2147 2148define <16 x i1> @fcmps_oeq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2149; CHECK-LABEL: fcmps_oeq_vf_v16f16: 2150; CHECK: # %bb.0: 2151; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2152; CHECK-NEXT: vmfge.vf v10, v8, fa0 2153; CHECK-NEXT: vmfle.vf v11, v8, fa0 2154; CHECK-NEXT: vmand.mm v0, v11, v10 2155; CHECK-NEXT: ret 2156 %head = insertelement <16 x half> poison, half %b, i32 0 2157 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2158 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2159 ret <16 x i1> %1 2160} 2161 2162define <16 x i1> @fcmps_oeq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2163; CHECK-LABEL: fcmps_oeq_fv_v16f16: 2164; CHECK: # %bb.0: 2165; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2166; CHECK-NEXT: vmfle.vf v10, v8, fa0 2167; CHECK-NEXT: vmfge.vf v11, v8, fa0 2168; CHECK-NEXT: vmand.mm v0, v11, v10 2169; CHECK-NEXT: ret 2170 %head = insertelement <16 x half> poison, half %b, i32 0 2171 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2172 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2173 ret <16 x i1> %1 2174} 2175 2176define <16 x i1> @fcmps_ogt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2177; CHECK-LABEL: fcmps_ogt_vv_v16f16: 2178; CHECK: # %bb.0: 2179; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2180; CHECK-NEXT: vmflt.vv v0, v10, v8 2181; CHECK-NEXT: ret 2182 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2183 ret <16 x i1> %1 2184} 2185 2186define <16 x i1> @fcmps_ogt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2187; CHECK-LABEL: fcmps_ogt_vf_v16f16: 2188; CHECK: # %bb.0: 2189; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2190; CHECK-NEXT: vmfgt.vf v0, v8, fa0 2191; CHECK-NEXT: ret 2192 %head = insertelement <16 x half> poison, half %b, i32 0 2193 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2194 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2195 ret <16 x i1> %1 2196} 2197 2198define <16 x i1> @fcmps_ogt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2199; CHECK-LABEL: fcmps_ogt_fv_v16f16: 2200; CHECK: # %bb.0: 2201; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2202; CHECK-NEXT: vmflt.vf v0, v8, fa0 2203; CHECK-NEXT: ret 2204 %head = insertelement <16 x half> poison, half %b, i32 0 2205 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2206 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2207 ret <16 x i1> %1 2208} 2209 2210define <16 x i1> @fcmps_oge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2211; CHECK-LABEL: fcmps_oge_vv_v16f16: 2212; CHECK: # %bb.0: 2213; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2214; CHECK-NEXT: vmfle.vv v0, v10, v8 2215; CHECK-NEXT: ret 2216 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 2217 ret <16 x i1> %1 2218} 2219 2220define <16 x i1> @fcmps_oge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2221; CHECK-LABEL: fcmps_oge_vf_v16f16: 2222; CHECK: # %bb.0: 2223; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2224; CHECK-NEXT: vmfge.vf v0, v8, fa0 2225; CHECK-NEXT: ret 2226 %head = insertelement <16 x half> poison, half %b, i32 0 2227 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2228 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2229 ret <16 x i1> %1 2230} 2231 2232define <16 x i1> @fcmps_oge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2233; CHECK-LABEL: fcmps_oge_fv_v16f16: 2234; CHECK: # %bb.0: 2235; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2236; CHECK-NEXT: vmfle.vf v0, v8, fa0 2237; CHECK-NEXT: ret 2238 %head = insertelement <16 x half> poison, half %b, i32 0 2239 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2240 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2241 ret <16 x i1> %1 2242} 2243 2244define <16 x i1> @fcmps_olt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2245; CHECK-LABEL: fcmps_olt_vv_v16f16: 2246; CHECK: # %bb.0: 2247; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2248; CHECK-NEXT: vmflt.vv v0, v8, v10 2249; CHECK-NEXT: ret 2250 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2251 ret <16 x i1> %1 2252} 2253 2254define <16 x i1> @fcmps_olt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2255; CHECK-LABEL: fcmps_olt_vf_v16f16: 2256; CHECK: # %bb.0: 2257; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2258; CHECK-NEXT: vmflt.vf v0, v8, fa0 2259; CHECK-NEXT: ret 2260 %head = insertelement <16 x half> poison, half %b, i32 0 2261 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2262 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2263 ret <16 x i1> %1 2264} 2265 2266define <16 x i1> @fcmps_olt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2267; CHECK-LABEL: fcmps_olt_fv_v16f16: 2268; CHECK: # %bb.0: 2269; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2270; CHECK-NEXT: vmfgt.vf v0, v8, fa0 2271; CHECK-NEXT: ret 2272 %head = insertelement <16 x half> poison, half %b, i32 0 2273 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2274 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2275 ret <16 x i1> %1 2276} 2277 2278define <16 x i1> @fcmps_ole_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2279; CHECK-LABEL: fcmps_ole_vv_v16f16: 2280; CHECK: # %bb.0: 2281; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2282; CHECK-NEXT: vmfle.vv v0, v8, v10 2283; CHECK-NEXT: ret 2284 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2285 ret <16 x i1> %1 2286} 2287 2288define <16 x i1> @fcmps_ole_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2289; CHECK-LABEL: fcmps_ole_vf_v16f16: 2290; CHECK: # %bb.0: 2291; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2292; CHECK-NEXT: vmfle.vf v0, v8, fa0 2293; CHECK-NEXT: ret 2294 %head = insertelement <16 x half> poison, half %b, i32 0 2295 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2296 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2297 ret <16 x i1> %1 2298} 2299 2300define <16 x i1> @fcmps_ole_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2301; CHECK-LABEL: fcmps_ole_fv_v16f16: 2302; CHECK: # %bb.0: 2303; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2304; CHECK-NEXT: vmfge.vf v0, v8, fa0 2305; CHECK-NEXT: ret 2306 %head = insertelement <16 x half> poison, half %b, i32 0 2307 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2308 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2309 ret <16 x i1> %1 2310} 2311 2312define <16 x i1> @fcmps_one_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2313; CHECK-LABEL: fcmps_one_vv_v16f16: 2314; CHECK: # %bb.0: 2315; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2316; CHECK-NEXT: vmflt.vv v12, v8, v10 2317; CHECK-NEXT: vmflt.vv v13, v10, v8 2318; CHECK-NEXT: vmor.mm v0, v13, v12 2319; CHECK-NEXT: ret 2320 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2321 ret <16 x i1> %1 2322} 2323 2324define <16 x i1> @fcmps_one_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2325; CHECK-LABEL: fcmps_one_vf_v16f16: 2326; CHECK: # %bb.0: 2327; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2328; CHECK-NEXT: vmflt.vf v10, v8, fa0 2329; CHECK-NEXT: vmfgt.vf v11, v8, fa0 2330; CHECK-NEXT: vmor.mm v0, v11, v10 2331; CHECK-NEXT: ret 2332 %head = insertelement <16 x half> poison, half %b, i32 0 2333 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2334 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2335 ret <16 x i1> %1 2336} 2337 2338define <16 x i1> @fcmps_one_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2339; CHECK-LABEL: fcmps_one_fv_v16f16: 2340; CHECK: # %bb.0: 2341; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2342; CHECK-NEXT: vmfgt.vf v10, v8, fa0 2343; CHECK-NEXT: vmflt.vf v11, v8, fa0 2344; CHECK-NEXT: vmor.mm v0, v11, v10 2345; CHECK-NEXT: ret 2346 %head = insertelement <16 x half> poison, half %b, i32 0 2347 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2348 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2349 ret <16 x i1> %1 2350} 2351 2352define <16 x i1> @fcmps_ord_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2353; CHECK-LABEL: fcmps_ord_vv_v16f16: 2354; CHECK: # %bb.0: 2355; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2356; CHECK-NEXT: vmfle.vv v12, v10, v10 2357; CHECK-NEXT: vmfle.vv v10, v8, v8 2358; CHECK-NEXT: vmand.mm v0, v10, v12 2359; CHECK-NEXT: ret 2360 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2361 ret <16 x i1> %1 2362} 2363 2364define <16 x i1> @fcmps_ord_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2365; CHECK-LABEL: fcmps_ord_vf_v16f16: 2366; CHECK: # %bb.0: 2367; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2368; CHECK-NEXT: vfmv.v.f v10, fa0 2369; CHECK-NEXT: vmfle.vf v12, v10, fa0 2370; CHECK-NEXT: vmfle.vv v10, v8, v8 2371; CHECK-NEXT: vmand.mm v0, v10, v12 2372; CHECK-NEXT: ret 2373 %head = insertelement <16 x half> poison, half %b, i32 0 2374 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2375 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2376 ret <16 x i1> %1 2377} 2378 2379define <16 x i1> @fcmps_ord_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2380; CHECK-LABEL: fcmps_ord_fv_v16f16: 2381; CHECK: # %bb.0: 2382; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2383; CHECK-NEXT: vfmv.v.f v10, fa0 2384; CHECK-NEXT: vmfle.vf v12, v10, fa0 2385; CHECK-NEXT: vmfle.vv v10, v8, v8 2386; CHECK-NEXT: vmand.mm v0, v12, v10 2387; CHECK-NEXT: ret 2388 %head = insertelement <16 x half> poison, half %b, i32 0 2389 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2390 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2391 ret <16 x i1> %1 2392} 2393 2394define <16 x i1> @fcmps_ueq_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2395; CHECK-LABEL: fcmps_ueq_vv_v16f16: 2396; CHECK: # %bb.0: 2397; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2398; CHECK-NEXT: vmflt.vv v12, v8, v10 2399; CHECK-NEXT: vmflt.vv v13, v10, v8 2400; CHECK-NEXT: vmnor.mm v0, v13, v12 2401; CHECK-NEXT: ret 2402 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2403 ret <16 x i1> %1 2404} 2405 2406define <16 x i1> @fcmps_ueq_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2407; CHECK-LABEL: fcmps_ueq_vf_v16f16: 2408; CHECK: # %bb.0: 2409; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2410; CHECK-NEXT: vmflt.vf v10, v8, fa0 2411; CHECK-NEXT: vmfgt.vf v11, v8, fa0 2412; CHECK-NEXT: vmnor.mm v0, v11, v10 2413; CHECK-NEXT: ret 2414 %head = insertelement <16 x half> poison, half %b, i32 0 2415 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2416 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2417 ret <16 x i1> %1 2418} 2419 2420define <16 x i1> @fcmps_ueq_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2421; CHECK-LABEL: fcmps_ueq_fv_v16f16: 2422; CHECK: # %bb.0: 2423; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2424; CHECK-NEXT: vmfgt.vf v10, v8, fa0 2425; CHECK-NEXT: vmflt.vf v11, v8, fa0 2426; CHECK-NEXT: vmnor.mm v0, v11, v10 2427; CHECK-NEXT: ret 2428 %head = insertelement <16 x half> poison, half %b, i32 0 2429 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2430 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2431 ret <16 x i1> %1 2432} 2433 2434define <16 x i1> @fcmps_ugt_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2435; CHECK-LABEL: fcmps_ugt_vv_v16f16: 2436; CHECK: # %bb.0: 2437; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2438; CHECK-NEXT: vmfle.vv v12, v8, v10 2439; CHECK-NEXT: vmnot.m v0, v12 2440; CHECK-NEXT: ret 2441 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2442 ret <16 x i1> %1 2443} 2444 2445define <16 x i1> @fcmps_ugt_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2446; CHECK-LABEL: fcmps_ugt_vf_v16f16: 2447; CHECK: # %bb.0: 2448; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2449; CHECK-NEXT: vmfle.vf v10, v8, fa0 2450; CHECK-NEXT: vmnot.m v0, v10 2451; CHECK-NEXT: ret 2452 %head = insertelement <16 x half> poison, half %b, i32 0 2453 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2454 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2455 ret <16 x i1> %1 2456} 2457 2458define <16 x i1> @fcmps_ugt_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2459; CHECK-LABEL: fcmps_ugt_fv_v16f16: 2460; CHECK: # %bb.0: 2461; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2462; CHECK-NEXT: vmfge.vf v10, v8, fa0 2463; CHECK-NEXT: vmnot.m v0, v10 2464; CHECK-NEXT: ret 2465 %head = insertelement <16 x half> poison, half %b, i32 0 2466 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2467 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2468 ret <16 x i1> %1 2469} 2470 2471define <16 x i1> @fcmps_uge_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2472; CHECK-LABEL: fcmps_uge_vv_v16f16: 2473; CHECK: # %bb.0: 2474; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2475; CHECK-NEXT: vmflt.vv v12, v8, v10 2476; CHECK-NEXT: vmnot.m v0, v12 2477; CHECK-NEXT: ret 2478 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 2479 ret <16 x i1> %1 2480} 2481 2482define <16 x i1> @fcmps_uge_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2483; CHECK-LABEL: fcmps_uge_vf_v16f16: 2484; CHECK: # %bb.0: 2485; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2486; CHECK-NEXT: vmflt.vf v10, v8, fa0 2487; CHECK-NEXT: vmnot.m v0, v10 2488; CHECK-NEXT: ret 2489 %head = insertelement <16 x half> poison, half %b, i32 0 2490 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2491 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 2492 ret <16 x i1> %1 2493} 2494 2495define <16 x i1> @fcmps_uge_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2496; CHECK-LABEL: fcmps_uge_fv_v16f16: 2497; CHECK: # %bb.0: 2498; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2499; CHECK-NEXT: vmfgt.vf v10, v8, fa0 2500; CHECK-NEXT: vmnot.m v0, v10 2501; CHECK-NEXT: ret 2502 %head = insertelement <16 x half> poison, half %b, i32 0 2503 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2504 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 2505 ret <16 x i1> %1 2506} 2507 2508define <16 x i1> @fcmps_ult_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2509; CHECK-LABEL: fcmps_ult_vv_v16f16: 2510; CHECK: # %bb.0: 2511; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2512; CHECK-NEXT: vmfle.vv v12, v10, v8 2513; CHECK-NEXT: vmnot.m v0, v12 2514; CHECK-NEXT: ret 2515 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 2516 ret <16 x i1> %1 2517} 2518 2519define <16 x i1> @fcmps_ult_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2520; CHECK-LABEL: fcmps_ult_vf_v16f16: 2521; CHECK: # %bb.0: 2522; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2523; CHECK-NEXT: vmfge.vf v10, v8, fa0 2524; CHECK-NEXT: vmnot.m v0, v10 2525; CHECK-NEXT: ret 2526 %head = insertelement <16 x half> poison, half %b, i32 0 2527 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2528 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 2529 ret <16 x i1> %1 2530} 2531 2532define <16 x i1> @fcmps_ult_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2533; CHECK-LABEL: fcmps_ult_fv_v16f16: 2534; CHECK: # %bb.0: 2535; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2536; CHECK-NEXT: vmfle.vf v10, v8, fa0 2537; CHECK-NEXT: vmnot.m v0, v10 2538; CHECK-NEXT: ret 2539 %head = insertelement <16 x half> poison, half %b, i32 0 2540 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2541 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 2542 ret <16 x i1> %1 2543} 2544 2545define <16 x i1> @fcmps_ule_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2546; CHECK-LABEL: fcmps_ule_vv_v16f16: 2547; CHECK: # %bb.0: 2548; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2549; CHECK-NEXT: vmflt.vv v12, v10, v8 2550; CHECK-NEXT: vmnot.m v0, v12 2551; CHECK-NEXT: ret 2552 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 2553 ret <16 x i1> %1 2554} 2555 2556define <16 x i1> @fcmps_ule_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2557; CHECK-LABEL: fcmps_ule_vf_v16f16: 2558; CHECK: # %bb.0: 2559; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2560; CHECK-NEXT: vmfgt.vf v10, v8, fa0 2561; CHECK-NEXT: vmnot.m v0, v10 2562; CHECK-NEXT: ret 2563 %head = insertelement <16 x half> poison, half %b, i32 0 2564 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2565 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 2566 ret <16 x i1> %1 2567} 2568 2569define <16 x i1> @fcmps_ule_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2570; CHECK-LABEL: fcmps_ule_fv_v16f16: 2571; CHECK: # %bb.0: 2572; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2573; CHECK-NEXT: vmflt.vf v10, v8, fa0 2574; CHECK-NEXT: vmnot.m v0, v10 2575; CHECK-NEXT: ret 2576 %head = insertelement <16 x half> poison, half %b, i32 0 2577 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2578 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 2579 ret <16 x i1> %1 2580} 2581 2582define <16 x i1> @fcmps_une_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2583; CHECK-LABEL: fcmps_une_vv_v16f16: 2584; CHECK: # %bb.0: 2585; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2586; CHECK-NEXT: vmfle.vv v12, v10, v8 2587; CHECK-NEXT: vmfle.vv v13, v8, v10 2588; CHECK-NEXT: vmnand.mm v0, v13, v12 2589; CHECK-NEXT: ret 2590 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 2591 ret <16 x i1> %1 2592} 2593 2594define <16 x i1> @fcmps_une_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2595; CHECK-LABEL: fcmps_une_vf_v16f16: 2596; CHECK: # %bb.0: 2597; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2598; CHECK-NEXT: vmfge.vf v10, v8, fa0 2599; CHECK-NEXT: vmfle.vf v11, v8, fa0 2600; CHECK-NEXT: vmnand.mm v0, v11, v10 2601; CHECK-NEXT: ret 2602 %head = insertelement <16 x half> poison, half %b, i32 0 2603 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2604 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 2605 ret <16 x i1> %1 2606} 2607 2608define <16 x i1> @fcmps_une_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2609; CHECK-LABEL: fcmps_une_fv_v16f16: 2610; CHECK: # %bb.0: 2611; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2612; CHECK-NEXT: vmfle.vf v10, v8, fa0 2613; CHECK-NEXT: vmfge.vf v11, v8, fa0 2614; CHECK-NEXT: vmnand.mm v0, v11, v10 2615; CHECK-NEXT: ret 2616 %head = insertelement <16 x half> poison, half %b, i32 0 2617 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2618 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 2619 ret <16 x i1> %1 2620} 2621 2622define <16 x i1> @fcmps_uno_vv_v16f16(<16 x half> %va, <16 x half> %vb) nounwind strictfp { 2623; CHECK-LABEL: fcmps_uno_vv_v16f16: 2624; CHECK: # %bb.0: 2625; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2626; CHECK-NEXT: vmfle.vv v12, v10, v10 2627; CHECK-NEXT: vmfle.vv v10, v8, v8 2628; CHECK-NEXT: vmnot.m v8, v10 2629; CHECK-NEXT: vmorn.mm v0, v8, v12 2630; CHECK-NEXT: ret 2631 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 2632 ret <16 x i1> %1 2633} 2634 2635define <16 x i1> @fcmps_uno_vf_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2636; CHECK-LABEL: fcmps_uno_vf_v16f16: 2637; CHECK: # %bb.0: 2638; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2639; CHECK-NEXT: vfmv.v.f v10, fa0 2640; CHECK-NEXT: vmfle.vv v12, v8, v8 2641; CHECK-NEXT: vmfle.vf v8, v10, fa0 2642; CHECK-NEXT: vmnot.m v9, v12 2643; CHECK-NEXT: vmorn.mm v0, v9, v8 2644; CHECK-NEXT: ret 2645 %head = insertelement <16 x half> poison, half %b, i32 0 2646 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2647 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 2648 ret <16 x i1> %1 2649} 2650 2651define <16 x i1> @fcmps_uno_fv_v16f16(<16 x half> %va, half %b) nounwind strictfp { 2652; CHECK-LABEL: fcmps_uno_fv_v16f16: 2653; CHECK: # %bb.0: 2654; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 2655; CHECK-NEXT: vfmv.v.f v10, fa0 2656; CHECK-NEXT: vmfle.vf v12, v10, fa0 2657; CHECK-NEXT: vmnot.m v10, v12 2658; CHECK-NEXT: vmfle.vv v11, v8, v8 2659; CHECK-NEXT: vmorn.mm v0, v10, v11 2660; CHECK-NEXT: ret 2661 %head = insertelement <16 x half> poison, half %b, i32 0 2662 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer 2663 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half> %splat, <16 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 2664 ret <16 x i1> %1 2665} 2666 2667declare <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half>, <32 x half>, metadata, metadata) 2668define <32 x i1> @fcmps_oeq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2669; CHECK-LABEL: fcmps_oeq_vv_v32f16: 2670; CHECK: # %bb.0: 2671; CHECK-NEXT: li a0, 32 2672; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2673; CHECK-NEXT: vmfle.vv v16, v12, v8 2674; CHECK-NEXT: vmfle.vv v17, v8, v12 2675; CHECK-NEXT: vmand.mm v0, v17, v16 2676; CHECK-NEXT: ret 2677 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2678 ret <32 x i1> %1 2679} 2680 2681define <32 x i1> @fcmps_oeq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2682; CHECK-LABEL: fcmps_oeq_vf_v32f16: 2683; CHECK: # %bb.0: 2684; CHECK-NEXT: li a0, 32 2685; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2686; CHECK-NEXT: vmfge.vf v12, v8, fa0 2687; CHECK-NEXT: vmfle.vf v13, v8, fa0 2688; CHECK-NEXT: vmand.mm v0, v13, v12 2689; CHECK-NEXT: ret 2690 %head = insertelement <32 x half> poison, half %b, i32 0 2691 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2692 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2693 ret <32 x i1> %1 2694} 2695 2696define <32 x i1> @fcmps_oeq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2697; CHECK-LABEL: fcmps_oeq_fv_v32f16: 2698; CHECK: # %bb.0: 2699; CHECK-NEXT: li a0, 32 2700; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2701; CHECK-NEXT: vmfle.vf v12, v8, fa0 2702; CHECK-NEXT: vmfge.vf v13, v8, fa0 2703; CHECK-NEXT: vmand.mm v0, v13, v12 2704; CHECK-NEXT: ret 2705 %head = insertelement <32 x half> poison, half %b, i32 0 2706 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2707 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 2708 ret <32 x i1> %1 2709} 2710 2711define <32 x i1> @fcmps_ogt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2712; CHECK-LABEL: fcmps_ogt_vv_v32f16: 2713; CHECK: # %bb.0: 2714; CHECK-NEXT: li a0, 32 2715; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2716; CHECK-NEXT: vmflt.vv v0, v12, v8 2717; CHECK-NEXT: ret 2718 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2719 ret <32 x i1> %1 2720} 2721 2722define <32 x i1> @fcmps_ogt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2723; CHECK-LABEL: fcmps_ogt_vf_v32f16: 2724; CHECK: # %bb.0: 2725; CHECK-NEXT: li a0, 32 2726; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2727; CHECK-NEXT: vmfgt.vf v0, v8, fa0 2728; CHECK-NEXT: ret 2729 %head = insertelement <32 x half> poison, half %b, i32 0 2730 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2731 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2732 ret <32 x i1> %1 2733} 2734 2735define <32 x i1> @fcmps_ogt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2736; CHECK-LABEL: fcmps_ogt_fv_v32f16: 2737; CHECK: # %bb.0: 2738; CHECK-NEXT: li a0, 32 2739; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2740; CHECK-NEXT: vmflt.vf v0, v8, fa0 2741; CHECK-NEXT: ret 2742 %head = insertelement <32 x half> poison, half %b, i32 0 2743 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2744 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 2745 ret <32 x i1> %1 2746} 2747 2748define <32 x i1> @fcmps_oge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2749; CHECK-LABEL: fcmps_oge_vv_v32f16: 2750; CHECK: # %bb.0: 2751; CHECK-NEXT: li a0, 32 2752; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2753; CHECK-NEXT: vmfle.vv v0, v12, v8 2754; CHECK-NEXT: ret 2755 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 2756 ret <32 x i1> %1 2757} 2758 2759define <32 x i1> @fcmps_oge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2760; CHECK-LABEL: fcmps_oge_vf_v32f16: 2761; CHECK: # %bb.0: 2762; CHECK-NEXT: li a0, 32 2763; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2764; CHECK-NEXT: vmfge.vf v0, v8, fa0 2765; CHECK-NEXT: ret 2766 %head = insertelement <32 x half> poison, half %b, i32 0 2767 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2768 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 2769 ret <32 x i1> %1 2770} 2771 2772define <32 x i1> @fcmps_oge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2773; CHECK-LABEL: fcmps_oge_fv_v32f16: 2774; CHECK: # %bb.0: 2775; CHECK-NEXT: li a0, 32 2776; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2777; CHECK-NEXT: vmfle.vf v0, v8, fa0 2778; CHECK-NEXT: ret 2779 %head = insertelement <32 x half> poison, half %b, i32 0 2780 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2781 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 2782 ret <32 x i1> %1 2783} 2784 2785define <32 x i1> @fcmps_olt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2786; CHECK-LABEL: fcmps_olt_vv_v32f16: 2787; CHECK: # %bb.0: 2788; CHECK-NEXT: li a0, 32 2789; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2790; CHECK-NEXT: vmflt.vv v0, v8, v12 2791; CHECK-NEXT: ret 2792 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 2793 ret <32 x i1> %1 2794} 2795 2796define <32 x i1> @fcmps_olt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2797; CHECK-LABEL: fcmps_olt_vf_v32f16: 2798; CHECK: # %bb.0: 2799; CHECK-NEXT: li a0, 32 2800; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2801; CHECK-NEXT: vmflt.vf v0, v8, fa0 2802; CHECK-NEXT: ret 2803 %head = insertelement <32 x half> poison, half %b, i32 0 2804 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2805 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 2806 ret <32 x i1> %1 2807} 2808 2809define <32 x i1> @fcmps_olt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2810; CHECK-LABEL: fcmps_olt_fv_v32f16: 2811; CHECK: # %bb.0: 2812; CHECK-NEXT: li a0, 32 2813; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2814; CHECK-NEXT: vmfgt.vf v0, v8, fa0 2815; CHECK-NEXT: ret 2816 %head = insertelement <32 x half> poison, half %b, i32 0 2817 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2818 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 2819 ret <32 x i1> %1 2820} 2821 2822define <32 x i1> @fcmps_ole_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2823; CHECK-LABEL: fcmps_ole_vv_v32f16: 2824; CHECK: # %bb.0: 2825; CHECK-NEXT: li a0, 32 2826; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2827; CHECK-NEXT: vmfle.vv v0, v8, v12 2828; CHECK-NEXT: ret 2829 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 2830 ret <32 x i1> %1 2831} 2832 2833define <32 x i1> @fcmps_ole_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2834; CHECK-LABEL: fcmps_ole_vf_v32f16: 2835; CHECK: # %bb.0: 2836; CHECK-NEXT: li a0, 32 2837; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2838; CHECK-NEXT: vmfle.vf v0, v8, fa0 2839; CHECK-NEXT: ret 2840 %head = insertelement <32 x half> poison, half %b, i32 0 2841 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2842 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 2843 ret <32 x i1> %1 2844} 2845 2846define <32 x i1> @fcmps_ole_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2847; CHECK-LABEL: fcmps_ole_fv_v32f16: 2848; CHECK: # %bb.0: 2849; CHECK-NEXT: li a0, 32 2850; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2851; CHECK-NEXT: vmfge.vf v0, v8, fa0 2852; CHECK-NEXT: ret 2853 %head = insertelement <32 x half> poison, half %b, i32 0 2854 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2855 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 2856 ret <32 x i1> %1 2857} 2858 2859define <32 x i1> @fcmps_one_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2860; CHECK-LABEL: fcmps_one_vv_v32f16: 2861; CHECK: # %bb.0: 2862; CHECK-NEXT: li a0, 32 2863; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2864; CHECK-NEXT: vmflt.vv v16, v8, v12 2865; CHECK-NEXT: vmflt.vv v17, v12, v8 2866; CHECK-NEXT: vmor.mm v0, v17, v16 2867; CHECK-NEXT: ret 2868 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 2869 ret <32 x i1> %1 2870} 2871 2872define <32 x i1> @fcmps_one_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2873; CHECK-LABEL: fcmps_one_vf_v32f16: 2874; CHECK: # %bb.0: 2875; CHECK-NEXT: li a0, 32 2876; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2877; CHECK-NEXT: vmflt.vf v12, v8, fa0 2878; CHECK-NEXT: vmfgt.vf v13, v8, fa0 2879; CHECK-NEXT: vmor.mm v0, v13, v12 2880; CHECK-NEXT: ret 2881 %head = insertelement <32 x half> poison, half %b, i32 0 2882 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2883 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 2884 ret <32 x i1> %1 2885} 2886 2887define <32 x i1> @fcmps_one_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2888; CHECK-LABEL: fcmps_one_fv_v32f16: 2889; CHECK: # %bb.0: 2890; CHECK-NEXT: li a0, 32 2891; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2892; CHECK-NEXT: vmfgt.vf v12, v8, fa0 2893; CHECK-NEXT: vmflt.vf v13, v8, fa0 2894; CHECK-NEXT: vmor.mm v0, v13, v12 2895; CHECK-NEXT: ret 2896 %head = insertelement <32 x half> poison, half %b, i32 0 2897 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2898 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 2899 ret <32 x i1> %1 2900} 2901 2902define <32 x i1> @fcmps_ord_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2903; CHECK-LABEL: fcmps_ord_vv_v32f16: 2904; CHECK: # %bb.0: 2905; CHECK-NEXT: li a0, 32 2906; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2907; CHECK-NEXT: vmfle.vv v16, v12, v12 2908; CHECK-NEXT: vmfle.vv v12, v8, v8 2909; CHECK-NEXT: vmand.mm v0, v12, v16 2910; CHECK-NEXT: ret 2911 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 2912 ret <32 x i1> %1 2913} 2914 2915define <32 x i1> @fcmps_ord_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2916; CHECK-LABEL: fcmps_ord_vf_v32f16: 2917; CHECK: # %bb.0: 2918; CHECK-NEXT: li a0, 32 2919; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2920; CHECK-NEXT: vfmv.v.f v12, fa0 2921; CHECK-NEXT: vmfle.vf v16, v12, fa0 2922; CHECK-NEXT: vmfle.vv v12, v8, v8 2923; CHECK-NEXT: vmand.mm v0, v12, v16 2924; CHECK-NEXT: ret 2925 %head = insertelement <32 x half> poison, half %b, i32 0 2926 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2927 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 2928 ret <32 x i1> %1 2929} 2930 2931define <32 x i1> @fcmps_ord_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2932; CHECK-LABEL: fcmps_ord_fv_v32f16: 2933; CHECK: # %bb.0: 2934; CHECK-NEXT: li a0, 32 2935; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2936; CHECK-NEXT: vfmv.v.f v12, fa0 2937; CHECK-NEXT: vmfle.vf v16, v12, fa0 2938; CHECK-NEXT: vmfle.vv v12, v8, v8 2939; CHECK-NEXT: vmand.mm v0, v16, v12 2940; CHECK-NEXT: ret 2941 %head = insertelement <32 x half> poison, half %b, i32 0 2942 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2943 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 2944 ret <32 x i1> %1 2945} 2946 2947define <32 x i1> @fcmps_ueq_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2948; CHECK-LABEL: fcmps_ueq_vv_v32f16: 2949; CHECK: # %bb.0: 2950; CHECK-NEXT: li a0, 32 2951; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2952; CHECK-NEXT: vmflt.vv v16, v8, v12 2953; CHECK-NEXT: vmflt.vv v17, v12, v8 2954; CHECK-NEXT: vmnor.mm v0, v17, v16 2955; CHECK-NEXT: ret 2956 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2957 ret <32 x i1> %1 2958} 2959 2960define <32 x i1> @fcmps_ueq_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2961; CHECK-LABEL: fcmps_ueq_vf_v32f16: 2962; CHECK: # %bb.0: 2963; CHECK-NEXT: li a0, 32 2964; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2965; CHECK-NEXT: vmflt.vf v12, v8, fa0 2966; CHECK-NEXT: vmfgt.vf v13, v8, fa0 2967; CHECK-NEXT: vmnor.mm v0, v13, v12 2968; CHECK-NEXT: ret 2969 %head = insertelement <32 x half> poison, half %b, i32 0 2970 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2971 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2972 ret <32 x i1> %1 2973} 2974 2975define <32 x i1> @fcmps_ueq_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 2976; CHECK-LABEL: fcmps_ueq_fv_v32f16: 2977; CHECK: # %bb.0: 2978; CHECK-NEXT: li a0, 32 2979; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2980; CHECK-NEXT: vmfgt.vf v12, v8, fa0 2981; CHECK-NEXT: vmflt.vf v13, v8, fa0 2982; CHECK-NEXT: vmnor.mm v0, v13, v12 2983; CHECK-NEXT: ret 2984 %head = insertelement <32 x half> poison, half %b, i32 0 2985 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 2986 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2987 ret <32 x i1> %1 2988} 2989 2990define <32 x i1> @fcmps_ugt_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 2991; CHECK-LABEL: fcmps_ugt_vv_v32f16: 2992; CHECK: # %bb.0: 2993; CHECK-NEXT: li a0, 32 2994; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2995; CHECK-NEXT: vmfle.vv v16, v8, v12 2996; CHECK-NEXT: vmnot.m v0, v16 2997; CHECK-NEXT: ret 2998 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 2999 ret <32 x i1> %1 3000} 3001 3002define <32 x i1> @fcmps_ugt_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3003; CHECK-LABEL: fcmps_ugt_vf_v32f16: 3004; CHECK: # %bb.0: 3005; CHECK-NEXT: li a0, 32 3006; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3007; CHECK-NEXT: vmfle.vf v12, v8, fa0 3008; CHECK-NEXT: vmnot.m v0, v12 3009; CHECK-NEXT: ret 3010 %head = insertelement <32 x half> poison, half %b, i32 0 3011 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3012 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3013 ret <32 x i1> %1 3014} 3015 3016define <32 x i1> @fcmps_ugt_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3017; CHECK-LABEL: fcmps_ugt_fv_v32f16: 3018; CHECK: # %bb.0: 3019; CHECK-NEXT: li a0, 32 3020; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3021; CHECK-NEXT: vmfge.vf v12, v8, fa0 3022; CHECK-NEXT: vmnot.m v0, v12 3023; CHECK-NEXT: ret 3024 %head = insertelement <32 x half> poison, half %b, i32 0 3025 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3026 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3027 ret <32 x i1> %1 3028} 3029 3030define <32 x i1> @fcmps_uge_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3031; CHECK-LABEL: fcmps_uge_vv_v32f16: 3032; CHECK: # %bb.0: 3033; CHECK-NEXT: li a0, 32 3034; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3035; CHECK-NEXT: vmflt.vv v16, v8, v12 3036; CHECK-NEXT: vmnot.m v0, v16 3037; CHECK-NEXT: ret 3038 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 3039 ret <32 x i1> %1 3040} 3041 3042define <32 x i1> @fcmps_uge_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3043; CHECK-LABEL: fcmps_uge_vf_v32f16: 3044; CHECK: # %bb.0: 3045; CHECK-NEXT: li a0, 32 3046; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3047; CHECK-NEXT: vmflt.vf v12, v8, fa0 3048; CHECK-NEXT: vmnot.m v0, v12 3049; CHECK-NEXT: ret 3050 %head = insertelement <32 x half> poison, half %b, i32 0 3051 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3052 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3053 ret <32 x i1> %1 3054} 3055 3056define <32 x i1> @fcmps_uge_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3057; CHECK-LABEL: fcmps_uge_fv_v32f16: 3058; CHECK: # %bb.0: 3059; CHECK-NEXT: li a0, 32 3060; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3061; CHECK-NEXT: vmfgt.vf v12, v8, fa0 3062; CHECK-NEXT: vmnot.m v0, v12 3063; CHECK-NEXT: ret 3064 %head = insertelement <32 x half> poison, half %b, i32 0 3065 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3066 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3067 ret <32 x i1> %1 3068} 3069 3070define <32 x i1> @fcmps_ult_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3071; CHECK-LABEL: fcmps_ult_vv_v32f16: 3072; CHECK: # %bb.0: 3073; CHECK-NEXT: li a0, 32 3074; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3075; CHECK-NEXT: vmfle.vv v16, v12, v8 3076; CHECK-NEXT: vmnot.m v0, v16 3077; CHECK-NEXT: ret 3078 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3079 ret <32 x i1> %1 3080} 3081 3082define <32 x i1> @fcmps_ult_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3083; CHECK-LABEL: fcmps_ult_vf_v32f16: 3084; CHECK: # %bb.0: 3085; CHECK-NEXT: li a0, 32 3086; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3087; CHECK-NEXT: vmfge.vf v12, v8, fa0 3088; CHECK-NEXT: vmnot.m v0, v12 3089; CHECK-NEXT: ret 3090 %head = insertelement <32 x half> poison, half %b, i32 0 3091 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3092 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3093 ret <32 x i1> %1 3094} 3095 3096define <32 x i1> @fcmps_ult_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3097; CHECK-LABEL: fcmps_ult_fv_v32f16: 3098; CHECK: # %bb.0: 3099; CHECK-NEXT: li a0, 32 3100; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3101; CHECK-NEXT: vmfle.vf v12, v8, fa0 3102; CHECK-NEXT: vmnot.m v0, v12 3103; CHECK-NEXT: ret 3104 %head = insertelement <32 x half> poison, half %b, i32 0 3105 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3106 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3107 ret <32 x i1> %1 3108} 3109 3110define <32 x i1> @fcmps_ule_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3111; CHECK-LABEL: fcmps_ule_vv_v32f16: 3112; CHECK: # %bb.0: 3113; CHECK-NEXT: li a0, 32 3114; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3115; CHECK-NEXT: vmflt.vv v16, v12, v8 3116; CHECK-NEXT: vmnot.m v0, v16 3117; CHECK-NEXT: ret 3118 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3119 ret <32 x i1> %1 3120} 3121 3122define <32 x i1> @fcmps_ule_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3123; CHECK-LABEL: fcmps_ule_vf_v32f16: 3124; CHECK: # %bb.0: 3125; CHECK-NEXT: li a0, 32 3126; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3127; CHECK-NEXT: vmfgt.vf v12, v8, fa0 3128; CHECK-NEXT: vmnot.m v0, v12 3129; CHECK-NEXT: ret 3130 %head = insertelement <32 x half> poison, half %b, i32 0 3131 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3132 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3133 ret <32 x i1> %1 3134} 3135 3136define <32 x i1> @fcmps_ule_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3137; CHECK-LABEL: fcmps_ule_fv_v32f16: 3138; CHECK: # %bb.0: 3139; CHECK-NEXT: li a0, 32 3140; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3141; CHECK-NEXT: vmflt.vf v12, v8, fa0 3142; CHECK-NEXT: vmnot.m v0, v12 3143; CHECK-NEXT: ret 3144 %head = insertelement <32 x half> poison, half %b, i32 0 3145 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3146 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3147 ret <32 x i1> %1 3148} 3149 3150define <32 x i1> @fcmps_une_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3151; CHECK-LABEL: fcmps_une_vv_v32f16: 3152; CHECK: # %bb.0: 3153; CHECK-NEXT: li a0, 32 3154; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3155; CHECK-NEXT: vmfle.vv v16, v12, v8 3156; CHECK-NEXT: vmfle.vv v17, v8, v12 3157; CHECK-NEXT: vmnand.mm v0, v17, v16 3158; CHECK-NEXT: ret 3159 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3160 ret <32 x i1> %1 3161} 3162 3163define <32 x i1> @fcmps_une_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3164; CHECK-LABEL: fcmps_une_vf_v32f16: 3165; CHECK: # %bb.0: 3166; CHECK-NEXT: li a0, 32 3167; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3168; CHECK-NEXT: vmfge.vf v12, v8, fa0 3169; CHECK-NEXT: vmfle.vf v13, v8, fa0 3170; CHECK-NEXT: vmnand.mm v0, v13, v12 3171; CHECK-NEXT: ret 3172 %head = insertelement <32 x half> poison, half %b, i32 0 3173 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3174 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3175 ret <32 x i1> %1 3176} 3177 3178define <32 x i1> @fcmps_une_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3179; CHECK-LABEL: fcmps_une_fv_v32f16: 3180; CHECK: # %bb.0: 3181; CHECK-NEXT: li a0, 32 3182; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3183; CHECK-NEXT: vmfle.vf v12, v8, fa0 3184; CHECK-NEXT: vmfge.vf v13, v8, fa0 3185; CHECK-NEXT: vmnand.mm v0, v13, v12 3186; CHECK-NEXT: ret 3187 %head = insertelement <32 x half> poison, half %b, i32 0 3188 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3189 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3190 ret <32 x i1> %1 3191} 3192 3193define <32 x i1> @fcmps_uno_vv_v32f16(<32 x half> %va, <32 x half> %vb) nounwind strictfp { 3194; CHECK-LABEL: fcmps_uno_vv_v32f16: 3195; CHECK: # %bb.0: 3196; CHECK-NEXT: li a0, 32 3197; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3198; CHECK-NEXT: vmfle.vv v16, v12, v12 3199; CHECK-NEXT: vmfle.vv v12, v8, v8 3200; CHECK-NEXT: vmnot.m v8, v12 3201; CHECK-NEXT: vmorn.mm v0, v8, v16 3202; CHECK-NEXT: ret 3203 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3204 ret <32 x i1> %1 3205} 3206 3207define <32 x i1> @fcmps_uno_vf_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3208; CHECK-LABEL: fcmps_uno_vf_v32f16: 3209; CHECK: # %bb.0: 3210; CHECK-NEXT: li a0, 32 3211; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3212; CHECK-NEXT: vfmv.v.f v12, fa0 3213; CHECK-NEXT: vmfle.vv v16, v8, v8 3214; CHECK-NEXT: vmfle.vf v8, v12, fa0 3215; CHECK-NEXT: vmnot.m v9, v16 3216; CHECK-NEXT: vmorn.mm v0, v9, v8 3217; CHECK-NEXT: ret 3218 %head = insertelement <32 x half> poison, half %b, i32 0 3219 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3220 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3221 ret <32 x i1> %1 3222} 3223 3224define <32 x i1> @fcmps_uno_fv_v32f16(<32 x half> %va, half %b) nounwind strictfp { 3225; CHECK-LABEL: fcmps_uno_fv_v32f16: 3226; CHECK: # %bb.0: 3227; CHECK-NEXT: li a0, 32 3228; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3229; CHECK-NEXT: vfmv.v.f v12, fa0 3230; CHECK-NEXT: vmfle.vv v16, v8, v8 3231; CHECK-NEXT: vmfle.vf v8, v12, fa0 3232; CHECK-NEXT: vmnot.m v8, v8 3233; CHECK-NEXT: vmorn.mm v0, v8, v16 3234; CHECK-NEXT: ret 3235 %head = insertelement <32 x half> poison, half %b, i32 0 3236 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer 3237 %1 = call <32 x i1> @llvm.experimental.constrained.fcmps.v32f16(<32 x half> %splat, <32 x half> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3238 ret <32 x i1> %1 3239} 3240 3241declare <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float>, <1 x float>, metadata, metadata) 3242define <1 x i1> @fcmps_oeq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3243; CHECK-LABEL: fcmps_oeq_vv_v1f32: 3244; CHECK: # %bb.0: 3245; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3246; CHECK-NEXT: vmfle.vv v10, v9, v8 3247; CHECK-NEXT: vmfle.vv v8, v8, v9 3248; CHECK-NEXT: vmand.mm v0, v8, v10 3249; CHECK-NEXT: ret 3250 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3251 ret <1 x i1> %1 3252} 3253 3254define <1 x i1> @fcmps_oeq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3255; CHECK-LABEL: fcmps_oeq_vf_v1f32: 3256; CHECK: # %bb.0: 3257; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3258; CHECK-NEXT: vmfge.vf v9, v8, fa0 3259; CHECK-NEXT: vmfle.vf v8, v8, fa0 3260; CHECK-NEXT: vmand.mm v0, v8, v9 3261; CHECK-NEXT: ret 3262 %head = insertelement <1 x float> poison, float %b, i32 0 3263 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3264 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3265 ret <1 x i1> %1 3266} 3267 3268define <1 x i1> @fcmps_oeq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3269; CHECK-LABEL: fcmps_oeq_fv_v1f32: 3270; CHECK: # %bb.0: 3271; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3272; CHECK-NEXT: vmfle.vf v9, v8, fa0 3273; CHECK-NEXT: vmfge.vf v8, v8, fa0 3274; CHECK-NEXT: vmand.mm v0, v8, v9 3275; CHECK-NEXT: ret 3276 %head = insertelement <1 x float> poison, float %b, i32 0 3277 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3278 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3279 ret <1 x i1> %1 3280} 3281 3282define <1 x i1> @fcmps_ogt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3283; CHECK-LABEL: fcmps_ogt_vv_v1f32: 3284; CHECK: # %bb.0: 3285; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3286; CHECK-NEXT: vmflt.vv v0, v9, v8 3287; CHECK-NEXT: ret 3288 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3289 ret <1 x i1> %1 3290} 3291 3292define <1 x i1> @fcmps_ogt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3293; CHECK-LABEL: fcmps_ogt_vf_v1f32: 3294; CHECK: # %bb.0: 3295; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3296; CHECK-NEXT: vmfgt.vf v0, v8, fa0 3297; CHECK-NEXT: ret 3298 %head = insertelement <1 x float> poison, float %b, i32 0 3299 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3300 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3301 ret <1 x i1> %1 3302} 3303 3304define <1 x i1> @fcmps_ogt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3305; CHECK-LABEL: fcmps_ogt_fv_v1f32: 3306; CHECK: # %bb.0: 3307; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3308; CHECK-NEXT: vmflt.vf v0, v8, fa0 3309; CHECK-NEXT: ret 3310 %head = insertelement <1 x float> poison, float %b, i32 0 3311 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3312 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3313 ret <1 x i1> %1 3314} 3315 3316define <1 x i1> @fcmps_oge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3317; CHECK-LABEL: fcmps_oge_vv_v1f32: 3318; CHECK: # %bb.0: 3319; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3320; CHECK-NEXT: vmfle.vv v0, v9, v8 3321; CHECK-NEXT: ret 3322 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 3323 ret <1 x i1> %1 3324} 3325 3326define <1 x i1> @fcmps_oge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3327; CHECK-LABEL: fcmps_oge_vf_v1f32: 3328; CHECK: # %bb.0: 3329; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3330; CHECK-NEXT: vmfge.vf v0, v8, fa0 3331; CHECK-NEXT: ret 3332 %head = insertelement <1 x float> poison, float %b, i32 0 3333 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3334 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 3335 ret <1 x i1> %1 3336} 3337 3338define <1 x i1> @fcmps_oge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3339; CHECK-LABEL: fcmps_oge_fv_v1f32: 3340; CHECK: # %bb.0: 3341; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3342; CHECK-NEXT: vmfle.vf v0, v8, fa0 3343; CHECK-NEXT: ret 3344 %head = insertelement <1 x float> poison, float %b, i32 0 3345 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3346 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 3347 ret <1 x i1> %1 3348} 3349 3350define <1 x i1> @fcmps_olt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3351; CHECK-LABEL: fcmps_olt_vv_v1f32: 3352; CHECK: # %bb.0: 3353; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3354; CHECK-NEXT: vmflt.vv v0, v8, v9 3355; CHECK-NEXT: ret 3356 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 3357 ret <1 x i1> %1 3358} 3359 3360define <1 x i1> @fcmps_olt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3361; CHECK-LABEL: fcmps_olt_vf_v1f32: 3362; CHECK: # %bb.0: 3363; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3364; CHECK-NEXT: vmflt.vf v0, v8, fa0 3365; CHECK-NEXT: ret 3366 %head = insertelement <1 x float> poison, float %b, i32 0 3367 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3368 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 3369 ret <1 x i1> %1 3370} 3371 3372define <1 x i1> @fcmps_olt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3373; CHECK-LABEL: fcmps_olt_fv_v1f32: 3374; CHECK: # %bb.0: 3375; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3376; CHECK-NEXT: vmfgt.vf v0, v8, fa0 3377; CHECK-NEXT: ret 3378 %head = insertelement <1 x float> poison, float %b, i32 0 3379 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3380 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 3381 ret <1 x i1> %1 3382} 3383 3384define <1 x i1> @fcmps_ole_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3385; CHECK-LABEL: fcmps_ole_vv_v1f32: 3386; CHECK: # %bb.0: 3387; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3388; CHECK-NEXT: vmfle.vv v0, v8, v9 3389; CHECK-NEXT: ret 3390 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 3391 ret <1 x i1> %1 3392} 3393 3394define <1 x i1> @fcmps_ole_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3395; CHECK-LABEL: fcmps_ole_vf_v1f32: 3396; CHECK: # %bb.0: 3397; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3398; CHECK-NEXT: vmfle.vf v0, v8, fa0 3399; CHECK-NEXT: ret 3400 %head = insertelement <1 x float> poison, float %b, i32 0 3401 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3402 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 3403 ret <1 x i1> %1 3404} 3405 3406define <1 x i1> @fcmps_ole_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3407; CHECK-LABEL: fcmps_ole_fv_v1f32: 3408; CHECK: # %bb.0: 3409; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3410; CHECK-NEXT: vmfge.vf v0, v8, fa0 3411; CHECK-NEXT: ret 3412 %head = insertelement <1 x float> poison, float %b, i32 0 3413 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3414 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 3415 ret <1 x i1> %1 3416} 3417 3418define <1 x i1> @fcmps_one_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3419; CHECK-LABEL: fcmps_one_vv_v1f32: 3420; CHECK: # %bb.0: 3421; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3422; CHECK-NEXT: vmflt.vv v10, v8, v9 3423; CHECK-NEXT: vmflt.vv v8, v9, v8 3424; CHECK-NEXT: vmor.mm v0, v8, v10 3425; CHECK-NEXT: ret 3426 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 3427 ret <1 x i1> %1 3428} 3429 3430define <1 x i1> @fcmps_one_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3431; CHECK-LABEL: fcmps_one_vf_v1f32: 3432; CHECK: # %bb.0: 3433; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3434; CHECK-NEXT: vmflt.vf v9, v8, fa0 3435; CHECK-NEXT: vmfgt.vf v8, v8, fa0 3436; CHECK-NEXT: vmor.mm v0, v8, v9 3437; CHECK-NEXT: ret 3438 %head = insertelement <1 x float> poison, float %b, i32 0 3439 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3440 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 3441 ret <1 x i1> %1 3442} 3443 3444define <1 x i1> @fcmps_one_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3445; CHECK-LABEL: fcmps_one_fv_v1f32: 3446; CHECK: # %bb.0: 3447; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3448; CHECK-NEXT: vmfgt.vf v9, v8, fa0 3449; CHECK-NEXT: vmflt.vf v8, v8, fa0 3450; CHECK-NEXT: vmor.mm v0, v8, v9 3451; CHECK-NEXT: ret 3452 %head = insertelement <1 x float> poison, float %b, i32 0 3453 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3454 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 3455 ret <1 x i1> %1 3456} 3457 3458define <1 x i1> @fcmps_ord_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3459; CHECK-LABEL: fcmps_ord_vv_v1f32: 3460; CHECK: # %bb.0: 3461; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3462; CHECK-NEXT: vmfle.vv v9, v9, v9 3463; CHECK-NEXT: vmfle.vv v8, v8, v8 3464; CHECK-NEXT: vmand.mm v0, v8, v9 3465; CHECK-NEXT: ret 3466 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 3467 ret <1 x i1> %1 3468} 3469 3470define <1 x i1> @fcmps_ord_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3471; CHECK-LABEL: fcmps_ord_vf_v1f32: 3472; CHECK: # %bb.0: 3473; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3474; CHECK-NEXT: vfmv.s.f v9, fa0 3475; CHECK-NEXT: vmfle.vf v9, v9, fa0 3476; CHECK-NEXT: vmfle.vv v8, v8, v8 3477; CHECK-NEXT: vmand.mm v0, v8, v9 3478; CHECK-NEXT: ret 3479 %head = insertelement <1 x float> poison, float %b, i32 0 3480 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3481 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 3482 ret <1 x i1> %1 3483} 3484 3485define <1 x i1> @fcmps_ord_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3486; CHECK-LABEL: fcmps_ord_fv_v1f32: 3487; CHECK: # %bb.0: 3488; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3489; CHECK-NEXT: vfmv.s.f v9, fa0 3490; CHECK-NEXT: vmfle.vf v9, v9, fa0 3491; CHECK-NEXT: vmfle.vv v8, v8, v8 3492; CHECK-NEXT: vmand.mm v0, v9, v8 3493; CHECK-NEXT: ret 3494 %head = insertelement <1 x float> poison, float %b, i32 0 3495 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3496 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 3497 ret <1 x i1> %1 3498} 3499 3500define <1 x i1> @fcmps_ueq_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3501; CHECK-LABEL: fcmps_ueq_vv_v1f32: 3502; CHECK: # %bb.0: 3503; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3504; CHECK-NEXT: vmflt.vv v10, v8, v9 3505; CHECK-NEXT: vmflt.vv v8, v9, v8 3506; CHECK-NEXT: vmnor.mm v0, v8, v10 3507; CHECK-NEXT: ret 3508 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3509 ret <1 x i1> %1 3510} 3511 3512define <1 x i1> @fcmps_ueq_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3513; CHECK-LABEL: fcmps_ueq_vf_v1f32: 3514; CHECK: # %bb.0: 3515; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3516; CHECK-NEXT: vmflt.vf v9, v8, fa0 3517; CHECK-NEXT: vmfgt.vf v8, v8, fa0 3518; CHECK-NEXT: vmnor.mm v0, v8, v9 3519; CHECK-NEXT: ret 3520 %head = insertelement <1 x float> poison, float %b, i32 0 3521 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3522 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3523 ret <1 x i1> %1 3524} 3525 3526define <1 x i1> @fcmps_ueq_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3527; CHECK-LABEL: fcmps_ueq_fv_v1f32: 3528; CHECK: # %bb.0: 3529; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3530; CHECK-NEXT: vmfgt.vf v9, v8, fa0 3531; CHECK-NEXT: vmflt.vf v8, v8, fa0 3532; CHECK-NEXT: vmnor.mm v0, v8, v9 3533; CHECK-NEXT: ret 3534 %head = insertelement <1 x float> poison, float %b, i32 0 3535 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3536 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 3537 ret <1 x i1> %1 3538} 3539 3540define <1 x i1> @fcmps_ugt_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3541; CHECK-LABEL: fcmps_ugt_vv_v1f32: 3542; CHECK: # %bb.0: 3543; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3544; CHECK-NEXT: vmfle.vv v8, v8, v9 3545; CHECK-NEXT: vmnot.m v0, v8 3546; CHECK-NEXT: ret 3547 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3548 ret <1 x i1> %1 3549} 3550 3551define <1 x i1> @fcmps_ugt_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3552; CHECK-LABEL: fcmps_ugt_vf_v1f32: 3553; CHECK: # %bb.0: 3554; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3555; CHECK-NEXT: vmfle.vf v8, v8, fa0 3556; CHECK-NEXT: vmnot.m v0, v8 3557; CHECK-NEXT: ret 3558 %head = insertelement <1 x float> poison, float %b, i32 0 3559 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3560 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3561 ret <1 x i1> %1 3562} 3563 3564define <1 x i1> @fcmps_ugt_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3565; CHECK-LABEL: fcmps_ugt_fv_v1f32: 3566; CHECK: # %bb.0: 3567; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3568; CHECK-NEXT: vmfge.vf v8, v8, fa0 3569; CHECK-NEXT: vmnot.m v0, v8 3570; CHECK-NEXT: ret 3571 %head = insertelement <1 x float> poison, float %b, i32 0 3572 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3573 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 3574 ret <1 x i1> %1 3575} 3576 3577define <1 x i1> @fcmps_uge_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3578; CHECK-LABEL: fcmps_uge_vv_v1f32: 3579; CHECK: # %bb.0: 3580; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3581; CHECK-NEXT: vmflt.vv v8, v8, v9 3582; CHECK-NEXT: vmnot.m v0, v8 3583; CHECK-NEXT: ret 3584 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 3585 ret <1 x i1> %1 3586} 3587 3588define <1 x i1> @fcmps_uge_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3589; CHECK-LABEL: fcmps_uge_vf_v1f32: 3590; CHECK: # %bb.0: 3591; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3592; CHECK-NEXT: vmflt.vf v8, v8, fa0 3593; CHECK-NEXT: vmnot.m v0, v8 3594; CHECK-NEXT: ret 3595 %head = insertelement <1 x float> poison, float %b, i32 0 3596 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3597 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 3598 ret <1 x i1> %1 3599} 3600 3601define <1 x i1> @fcmps_uge_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3602; CHECK-LABEL: fcmps_uge_fv_v1f32: 3603; CHECK: # %bb.0: 3604; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3605; CHECK-NEXT: vmfgt.vf v8, v8, fa0 3606; CHECK-NEXT: vmnot.m v0, v8 3607; CHECK-NEXT: ret 3608 %head = insertelement <1 x float> poison, float %b, i32 0 3609 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3610 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 3611 ret <1 x i1> %1 3612} 3613 3614define <1 x i1> @fcmps_ult_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3615; CHECK-LABEL: fcmps_ult_vv_v1f32: 3616; CHECK: # %bb.0: 3617; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3618; CHECK-NEXT: vmfle.vv v8, v9, v8 3619; CHECK-NEXT: vmnot.m v0, v8 3620; CHECK-NEXT: ret 3621 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 3622 ret <1 x i1> %1 3623} 3624 3625define <1 x i1> @fcmps_ult_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3626; CHECK-LABEL: fcmps_ult_vf_v1f32: 3627; CHECK: # %bb.0: 3628; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3629; CHECK-NEXT: vmfge.vf v8, v8, fa0 3630; CHECK-NEXT: vmnot.m v0, v8 3631; CHECK-NEXT: ret 3632 %head = insertelement <1 x float> poison, float %b, i32 0 3633 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3634 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 3635 ret <1 x i1> %1 3636} 3637 3638define <1 x i1> @fcmps_ult_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3639; CHECK-LABEL: fcmps_ult_fv_v1f32: 3640; CHECK: # %bb.0: 3641; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3642; CHECK-NEXT: vmfle.vf v8, v8, fa0 3643; CHECK-NEXT: vmnot.m v0, v8 3644; CHECK-NEXT: ret 3645 %head = insertelement <1 x float> poison, float %b, i32 0 3646 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3647 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 3648 ret <1 x i1> %1 3649} 3650 3651define <1 x i1> @fcmps_ule_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3652; CHECK-LABEL: fcmps_ule_vv_v1f32: 3653; CHECK: # %bb.0: 3654; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3655; CHECK-NEXT: vmflt.vv v8, v9, v8 3656; CHECK-NEXT: vmnot.m v0, v8 3657; CHECK-NEXT: ret 3658 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 3659 ret <1 x i1> %1 3660} 3661 3662define <1 x i1> @fcmps_ule_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3663; CHECK-LABEL: fcmps_ule_vf_v1f32: 3664; CHECK: # %bb.0: 3665; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3666; CHECK-NEXT: vmfgt.vf v8, v8, fa0 3667; CHECK-NEXT: vmnot.m v0, v8 3668; CHECK-NEXT: ret 3669 %head = insertelement <1 x float> poison, float %b, i32 0 3670 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3671 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 3672 ret <1 x i1> %1 3673} 3674 3675define <1 x i1> @fcmps_ule_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3676; CHECK-LABEL: fcmps_ule_fv_v1f32: 3677; CHECK: # %bb.0: 3678; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3679; CHECK-NEXT: vmflt.vf v8, v8, fa0 3680; CHECK-NEXT: vmnot.m v0, v8 3681; CHECK-NEXT: ret 3682 %head = insertelement <1 x float> poison, float %b, i32 0 3683 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3684 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 3685 ret <1 x i1> %1 3686} 3687 3688define <1 x i1> @fcmps_une_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3689; CHECK-LABEL: fcmps_une_vv_v1f32: 3690; CHECK: # %bb.0: 3691; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3692; CHECK-NEXT: vmfle.vv v10, v9, v8 3693; CHECK-NEXT: vmfle.vv v8, v8, v9 3694; CHECK-NEXT: vmnand.mm v0, v8, v10 3695; CHECK-NEXT: ret 3696 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 3697 ret <1 x i1> %1 3698} 3699 3700define <1 x i1> @fcmps_une_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3701; CHECK-LABEL: fcmps_une_vf_v1f32: 3702; CHECK: # %bb.0: 3703; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3704; CHECK-NEXT: vmfge.vf v9, v8, fa0 3705; CHECK-NEXT: vmfle.vf v8, v8, fa0 3706; CHECK-NEXT: vmnand.mm v0, v8, v9 3707; CHECK-NEXT: ret 3708 %head = insertelement <1 x float> poison, float %b, i32 0 3709 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3710 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 3711 ret <1 x i1> %1 3712} 3713 3714define <1 x i1> @fcmps_une_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3715; CHECK-LABEL: fcmps_une_fv_v1f32: 3716; CHECK: # %bb.0: 3717; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3718; CHECK-NEXT: vmfle.vf v9, v8, fa0 3719; CHECK-NEXT: vmfge.vf v8, v8, fa0 3720; CHECK-NEXT: vmnand.mm v0, v8, v9 3721; CHECK-NEXT: ret 3722 %head = insertelement <1 x float> poison, float %b, i32 0 3723 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3724 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 3725 ret <1 x i1> %1 3726} 3727 3728define <1 x i1> @fcmps_uno_vv_v1f32(<1 x float> %va, <1 x float> %vb) nounwind strictfp { 3729; CHECK-LABEL: fcmps_uno_vv_v1f32: 3730; CHECK: # %bb.0: 3731; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3732; CHECK-NEXT: vmfle.vv v9, v9, v9 3733; CHECK-NEXT: vmfle.vv v8, v8, v8 3734; CHECK-NEXT: vmnot.m v8, v8 3735; CHECK-NEXT: vmorn.mm v0, v8, v9 3736; CHECK-NEXT: ret 3737 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 3738 ret <1 x i1> %1 3739} 3740 3741define <1 x i1> @fcmps_uno_vf_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3742; CHECK-LABEL: fcmps_uno_vf_v1f32: 3743; CHECK: # %bb.0: 3744; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3745; CHECK-NEXT: vfmv.s.f v9, fa0 3746; CHECK-NEXT: vmfle.vv v8, v8, v8 3747; CHECK-NEXT: vmfle.vf v9, v9, fa0 3748; CHECK-NEXT: vmnot.m v8, v8 3749; CHECK-NEXT: vmorn.mm v0, v8, v9 3750; CHECK-NEXT: ret 3751 %head = insertelement <1 x float> poison, float %b, i32 0 3752 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3753 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 3754 ret <1 x i1> %1 3755} 3756 3757define <1 x i1> @fcmps_uno_fv_v1f32(<1 x float> %va, float %b) nounwind strictfp { 3758; CHECK-LABEL: fcmps_uno_fv_v1f32: 3759; CHECK: # %bb.0: 3760; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 3761; CHECK-NEXT: vfmv.s.f v9, fa0 3762; CHECK-NEXT: vmfle.vf v9, v9, fa0 3763; CHECK-NEXT: vmnot.m v9, v9 3764; CHECK-NEXT: vmfle.vv v8, v8, v8 3765; CHECK-NEXT: vmorn.mm v0, v9, v8 3766; CHECK-NEXT: ret 3767 %head = insertelement <1 x float> poison, float %b, i32 0 3768 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer 3769 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f32(<1 x float> %splat, <1 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 3770 ret <1 x i1> %1 3771} 3772 3773declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float>, <2 x float>, metadata, metadata) 3774define <2 x i1> @fcmps_oeq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3775; CHECK-LABEL: fcmps_oeq_vv_v2f32: 3776; CHECK: # %bb.0: 3777; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3778; CHECK-NEXT: vmfle.vv v10, v9, v8 3779; CHECK-NEXT: vmfle.vv v8, v8, v9 3780; CHECK-NEXT: vmand.mm v0, v8, v10 3781; CHECK-NEXT: ret 3782 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3783 ret <2 x i1> %1 3784} 3785 3786define <2 x i1> @fcmps_oeq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3787; CHECK-LABEL: fcmps_oeq_vf_v2f32: 3788; CHECK: # %bb.0: 3789; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3790; CHECK-NEXT: vmfge.vf v9, v8, fa0 3791; CHECK-NEXT: vmfle.vf v8, v8, fa0 3792; CHECK-NEXT: vmand.mm v0, v8, v9 3793; CHECK-NEXT: ret 3794 %head = insertelement <2 x float> poison, float %b, i32 0 3795 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3796 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3797 ret <2 x i1> %1 3798} 3799 3800define <2 x i1> @fcmps_oeq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3801; CHECK-LABEL: fcmps_oeq_fv_v2f32: 3802; CHECK: # %bb.0: 3803; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3804; CHECK-NEXT: vmfle.vf v9, v8, fa0 3805; CHECK-NEXT: vmfge.vf v8, v8, fa0 3806; CHECK-NEXT: vmand.mm v0, v8, v9 3807; CHECK-NEXT: ret 3808 %head = insertelement <2 x float> poison, float %b, i32 0 3809 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3810 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 3811 ret <2 x i1> %1 3812} 3813 3814define <2 x i1> @fcmps_ogt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3815; CHECK-LABEL: fcmps_ogt_vv_v2f32: 3816; CHECK: # %bb.0: 3817; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3818; CHECK-NEXT: vmflt.vv v0, v9, v8 3819; CHECK-NEXT: ret 3820 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3821 ret <2 x i1> %1 3822} 3823 3824define <2 x i1> @fcmps_ogt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3825; CHECK-LABEL: fcmps_ogt_vf_v2f32: 3826; CHECK: # %bb.0: 3827; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3828; CHECK-NEXT: vmfgt.vf v0, v8, fa0 3829; CHECK-NEXT: ret 3830 %head = insertelement <2 x float> poison, float %b, i32 0 3831 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3832 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3833 ret <2 x i1> %1 3834} 3835 3836define <2 x i1> @fcmps_ogt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3837; CHECK-LABEL: fcmps_ogt_fv_v2f32: 3838; CHECK: # %bb.0: 3839; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3840; CHECK-NEXT: vmflt.vf v0, v8, fa0 3841; CHECK-NEXT: ret 3842 %head = insertelement <2 x float> poison, float %b, i32 0 3843 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3844 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 3845 ret <2 x i1> %1 3846} 3847 3848define <2 x i1> @fcmps_oge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3849; CHECK-LABEL: fcmps_oge_vv_v2f32: 3850; CHECK: # %bb.0: 3851; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3852; CHECK-NEXT: vmfle.vv v0, v9, v8 3853; CHECK-NEXT: ret 3854 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 3855 ret <2 x i1> %1 3856} 3857 3858define <2 x i1> @fcmps_oge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3859; CHECK-LABEL: fcmps_oge_vf_v2f32: 3860; CHECK: # %bb.0: 3861; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3862; CHECK-NEXT: vmfge.vf v0, v8, fa0 3863; CHECK-NEXT: ret 3864 %head = insertelement <2 x float> poison, float %b, i32 0 3865 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3866 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 3867 ret <2 x i1> %1 3868} 3869 3870define <2 x i1> @fcmps_oge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3871; CHECK-LABEL: fcmps_oge_fv_v2f32: 3872; CHECK: # %bb.0: 3873; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3874; CHECK-NEXT: vmfle.vf v0, v8, fa0 3875; CHECK-NEXT: ret 3876 %head = insertelement <2 x float> poison, float %b, i32 0 3877 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3878 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 3879 ret <2 x i1> %1 3880} 3881 3882define <2 x i1> @fcmps_olt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3883; CHECK-LABEL: fcmps_olt_vv_v2f32: 3884; CHECK: # %bb.0: 3885; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3886; CHECK-NEXT: vmflt.vv v0, v8, v9 3887; CHECK-NEXT: ret 3888 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 3889 ret <2 x i1> %1 3890} 3891 3892define <2 x i1> @fcmps_olt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3893; CHECK-LABEL: fcmps_olt_vf_v2f32: 3894; CHECK: # %bb.0: 3895; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3896; CHECK-NEXT: vmflt.vf v0, v8, fa0 3897; CHECK-NEXT: ret 3898 %head = insertelement <2 x float> poison, float %b, i32 0 3899 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3900 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 3901 ret <2 x i1> %1 3902} 3903 3904define <2 x i1> @fcmps_olt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3905; CHECK-LABEL: fcmps_olt_fv_v2f32: 3906; CHECK: # %bb.0: 3907; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3908; CHECK-NEXT: vmfgt.vf v0, v8, fa0 3909; CHECK-NEXT: ret 3910 %head = insertelement <2 x float> poison, float %b, i32 0 3911 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3912 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 3913 ret <2 x i1> %1 3914} 3915 3916define <2 x i1> @fcmps_ole_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3917; CHECK-LABEL: fcmps_ole_vv_v2f32: 3918; CHECK: # %bb.0: 3919; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3920; CHECK-NEXT: vmfle.vv v0, v8, v9 3921; CHECK-NEXT: ret 3922 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 3923 ret <2 x i1> %1 3924} 3925 3926define <2 x i1> @fcmps_ole_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3927; CHECK-LABEL: fcmps_ole_vf_v2f32: 3928; CHECK: # %bb.0: 3929; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3930; CHECK-NEXT: vmfle.vf v0, v8, fa0 3931; CHECK-NEXT: ret 3932 %head = insertelement <2 x float> poison, float %b, i32 0 3933 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3934 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 3935 ret <2 x i1> %1 3936} 3937 3938define <2 x i1> @fcmps_ole_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3939; CHECK-LABEL: fcmps_ole_fv_v2f32: 3940; CHECK: # %bb.0: 3941; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3942; CHECK-NEXT: vmfge.vf v0, v8, fa0 3943; CHECK-NEXT: ret 3944 %head = insertelement <2 x float> poison, float %b, i32 0 3945 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3946 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 3947 ret <2 x i1> %1 3948} 3949 3950define <2 x i1> @fcmps_one_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3951; CHECK-LABEL: fcmps_one_vv_v2f32: 3952; CHECK: # %bb.0: 3953; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3954; CHECK-NEXT: vmflt.vv v10, v8, v9 3955; CHECK-NEXT: vmflt.vv v8, v9, v8 3956; CHECK-NEXT: vmor.mm v0, v8, v10 3957; CHECK-NEXT: ret 3958 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 3959 ret <2 x i1> %1 3960} 3961 3962define <2 x i1> @fcmps_one_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3963; CHECK-LABEL: fcmps_one_vf_v2f32: 3964; CHECK: # %bb.0: 3965; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3966; CHECK-NEXT: vmflt.vf v9, v8, fa0 3967; CHECK-NEXT: vmfgt.vf v8, v8, fa0 3968; CHECK-NEXT: vmor.mm v0, v8, v9 3969; CHECK-NEXT: ret 3970 %head = insertelement <2 x float> poison, float %b, i32 0 3971 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3972 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 3973 ret <2 x i1> %1 3974} 3975 3976define <2 x i1> @fcmps_one_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 3977; CHECK-LABEL: fcmps_one_fv_v2f32: 3978; CHECK: # %bb.0: 3979; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3980; CHECK-NEXT: vmfgt.vf v9, v8, fa0 3981; CHECK-NEXT: vmflt.vf v8, v8, fa0 3982; CHECK-NEXT: vmor.mm v0, v8, v9 3983; CHECK-NEXT: ret 3984 %head = insertelement <2 x float> poison, float %b, i32 0 3985 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 3986 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 3987 ret <2 x i1> %1 3988} 3989 3990define <2 x i1> @fcmps_ord_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 3991; CHECK-LABEL: fcmps_ord_vv_v2f32: 3992; CHECK: # %bb.0: 3993; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 3994; CHECK-NEXT: vmfle.vv v9, v9, v9 3995; CHECK-NEXT: vmfle.vv v8, v8, v8 3996; CHECK-NEXT: vmand.mm v0, v8, v9 3997; CHECK-NEXT: ret 3998 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 3999 ret <2 x i1> %1 4000} 4001 4002define <2 x i1> @fcmps_ord_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4003; CHECK-LABEL: fcmps_ord_vf_v2f32: 4004; CHECK: # %bb.0: 4005; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4006; CHECK-NEXT: vfmv.v.f v9, fa0 4007; CHECK-NEXT: vmfle.vf v9, v9, fa0 4008; CHECK-NEXT: vmfle.vv v8, v8, v8 4009; CHECK-NEXT: vmand.mm v0, v8, v9 4010; CHECK-NEXT: ret 4011 %head = insertelement <2 x float> poison, float %b, i32 0 4012 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4013 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4014 ret <2 x i1> %1 4015} 4016 4017define <2 x i1> @fcmps_ord_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4018; CHECK-LABEL: fcmps_ord_fv_v2f32: 4019; CHECK: # %bb.0: 4020; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4021; CHECK-NEXT: vfmv.v.f v9, fa0 4022; CHECK-NEXT: vmfle.vf v9, v9, fa0 4023; CHECK-NEXT: vmfle.vv v8, v8, v8 4024; CHECK-NEXT: vmand.mm v0, v9, v8 4025; CHECK-NEXT: ret 4026 %head = insertelement <2 x float> poison, float %b, i32 0 4027 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4028 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4029 ret <2 x i1> %1 4030} 4031 4032define <2 x i1> @fcmps_ueq_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4033; CHECK-LABEL: fcmps_ueq_vv_v2f32: 4034; CHECK: # %bb.0: 4035; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4036; CHECK-NEXT: vmflt.vv v10, v8, v9 4037; CHECK-NEXT: vmflt.vv v8, v9, v8 4038; CHECK-NEXT: vmnor.mm v0, v8, v10 4039; CHECK-NEXT: ret 4040 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4041 ret <2 x i1> %1 4042} 4043 4044define <2 x i1> @fcmps_ueq_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4045; CHECK-LABEL: fcmps_ueq_vf_v2f32: 4046; CHECK: # %bb.0: 4047; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4048; CHECK-NEXT: vmflt.vf v9, v8, fa0 4049; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4050; CHECK-NEXT: vmnor.mm v0, v8, v9 4051; CHECK-NEXT: ret 4052 %head = insertelement <2 x float> poison, float %b, i32 0 4053 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4054 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4055 ret <2 x i1> %1 4056} 4057 4058define <2 x i1> @fcmps_ueq_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4059; CHECK-LABEL: fcmps_ueq_fv_v2f32: 4060; CHECK: # %bb.0: 4061; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4062; CHECK-NEXT: vmfgt.vf v9, v8, fa0 4063; CHECK-NEXT: vmflt.vf v8, v8, fa0 4064; CHECK-NEXT: vmnor.mm v0, v8, v9 4065; CHECK-NEXT: ret 4066 %head = insertelement <2 x float> poison, float %b, i32 0 4067 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4068 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4069 ret <2 x i1> %1 4070} 4071 4072define <2 x i1> @fcmps_ugt_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4073; CHECK-LABEL: fcmps_ugt_vv_v2f32: 4074; CHECK: # %bb.0: 4075; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4076; CHECK-NEXT: vmfle.vv v8, v8, v9 4077; CHECK-NEXT: vmnot.m v0, v8 4078; CHECK-NEXT: ret 4079 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4080 ret <2 x i1> %1 4081} 4082 4083define <2 x i1> @fcmps_ugt_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4084; CHECK-LABEL: fcmps_ugt_vf_v2f32: 4085; CHECK: # %bb.0: 4086; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4087; CHECK-NEXT: vmfle.vf v8, v8, fa0 4088; CHECK-NEXT: vmnot.m v0, v8 4089; CHECK-NEXT: ret 4090 %head = insertelement <2 x float> poison, float %b, i32 0 4091 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4092 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4093 ret <2 x i1> %1 4094} 4095 4096define <2 x i1> @fcmps_ugt_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4097; CHECK-LABEL: fcmps_ugt_fv_v2f32: 4098; CHECK: # %bb.0: 4099; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4100; CHECK-NEXT: vmfge.vf v8, v8, fa0 4101; CHECK-NEXT: vmnot.m v0, v8 4102; CHECK-NEXT: ret 4103 %head = insertelement <2 x float> poison, float %b, i32 0 4104 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4105 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4106 ret <2 x i1> %1 4107} 4108 4109define <2 x i1> @fcmps_uge_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4110; CHECK-LABEL: fcmps_uge_vv_v2f32: 4111; CHECK: # %bb.0: 4112; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4113; CHECK-NEXT: vmflt.vv v8, v8, v9 4114; CHECK-NEXT: vmnot.m v0, v8 4115; CHECK-NEXT: ret 4116 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4117 ret <2 x i1> %1 4118} 4119 4120define <2 x i1> @fcmps_uge_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4121; CHECK-LABEL: fcmps_uge_vf_v2f32: 4122; CHECK: # %bb.0: 4123; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4124; CHECK-NEXT: vmflt.vf v8, v8, fa0 4125; CHECK-NEXT: vmnot.m v0, v8 4126; CHECK-NEXT: ret 4127 %head = insertelement <2 x float> poison, float %b, i32 0 4128 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4129 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 4130 ret <2 x i1> %1 4131} 4132 4133define <2 x i1> @fcmps_uge_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4134; CHECK-LABEL: fcmps_uge_fv_v2f32: 4135; CHECK: # %bb.0: 4136; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4137; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4138; CHECK-NEXT: vmnot.m v0, v8 4139; CHECK-NEXT: ret 4140 %head = insertelement <2 x float> poison, float %b, i32 0 4141 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4142 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 4143 ret <2 x i1> %1 4144} 4145 4146define <2 x i1> @fcmps_ult_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4147; CHECK-LABEL: fcmps_ult_vv_v2f32: 4148; CHECK: # %bb.0: 4149; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4150; CHECK-NEXT: vmfle.vv v8, v9, v8 4151; CHECK-NEXT: vmnot.m v0, v8 4152; CHECK-NEXT: ret 4153 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 4154 ret <2 x i1> %1 4155} 4156 4157define <2 x i1> @fcmps_ult_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4158; CHECK-LABEL: fcmps_ult_vf_v2f32: 4159; CHECK: # %bb.0: 4160; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4161; CHECK-NEXT: vmfge.vf v8, v8, fa0 4162; CHECK-NEXT: vmnot.m v0, v8 4163; CHECK-NEXT: ret 4164 %head = insertelement <2 x float> poison, float %b, i32 0 4165 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4166 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 4167 ret <2 x i1> %1 4168} 4169 4170define <2 x i1> @fcmps_ult_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4171; CHECK-LABEL: fcmps_ult_fv_v2f32: 4172; CHECK: # %bb.0: 4173; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4174; CHECK-NEXT: vmfle.vf v8, v8, fa0 4175; CHECK-NEXT: vmnot.m v0, v8 4176; CHECK-NEXT: ret 4177 %head = insertelement <2 x float> poison, float %b, i32 0 4178 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4179 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 4180 ret <2 x i1> %1 4181} 4182 4183define <2 x i1> @fcmps_ule_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4184; CHECK-LABEL: fcmps_ule_vv_v2f32: 4185; CHECK: # %bb.0: 4186; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4187; CHECK-NEXT: vmflt.vv v8, v9, v8 4188; CHECK-NEXT: vmnot.m v0, v8 4189; CHECK-NEXT: ret 4190 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 4191 ret <2 x i1> %1 4192} 4193 4194define <2 x i1> @fcmps_ule_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4195; CHECK-LABEL: fcmps_ule_vf_v2f32: 4196; CHECK: # %bb.0: 4197; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4198; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4199; CHECK-NEXT: vmnot.m v0, v8 4200; CHECK-NEXT: ret 4201 %head = insertelement <2 x float> poison, float %b, i32 0 4202 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4203 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 4204 ret <2 x i1> %1 4205} 4206 4207define <2 x i1> @fcmps_ule_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4208; CHECK-LABEL: fcmps_ule_fv_v2f32: 4209; CHECK: # %bb.0: 4210; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4211; CHECK-NEXT: vmflt.vf v8, v8, fa0 4212; CHECK-NEXT: vmnot.m v0, v8 4213; CHECK-NEXT: ret 4214 %head = insertelement <2 x float> poison, float %b, i32 0 4215 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4216 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 4217 ret <2 x i1> %1 4218} 4219 4220define <2 x i1> @fcmps_une_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4221; CHECK-LABEL: fcmps_une_vv_v2f32: 4222; CHECK: # %bb.0: 4223; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4224; CHECK-NEXT: vmfle.vv v10, v9, v8 4225; CHECK-NEXT: vmfle.vv v8, v8, v9 4226; CHECK-NEXT: vmnand.mm v0, v8, v10 4227; CHECK-NEXT: ret 4228 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 4229 ret <2 x i1> %1 4230} 4231 4232define <2 x i1> @fcmps_une_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4233; CHECK-LABEL: fcmps_une_vf_v2f32: 4234; CHECK: # %bb.0: 4235; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4236; CHECK-NEXT: vmfge.vf v9, v8, fa0 4237; CHECK-NEXT: vmfle.vf v8, v8, fa0 4238; CHECK-NEXT: vmnand.mm v0, v8, v9 4239; CHECK-NEXT: ret 4240 %head = insertelement <2 x float> poison, float %b, i32 0 4241 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4242 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 4243 ret <2 x i1> %1 4244} 4245 4246define <2 x i1> @fcmps_une_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4247; CHECK-LABEL: fcmps_une_fv_v2f32: 4248; CHECK: # %bb.0: 4249; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4250; CHECK-NEXT: vmfle.vf v9, v8, fa0 4251; CHECK-NEXT: vmfge.vf v8, v8, fa0 4252; CHECK-NEXT: vmnand.mm v0, v8, v9 4253; CHECK-NEXT: ret 4254 %head = insertelement <2 x float> poison, float %b, i32 0 4255 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4256 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 4257 ret <2 x i1> %1 4258} 4259 4260define <2 x i1> @fcmps_uno_vv_v2f32(<2 x float> %va, <2 x float> %vb) nounwind strictfp { 4261; CHECK-LABEL: fcmps_uno_vv_v2f32: 4262; CHECK: # %bb.0: 4263; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4264; CHECK-NEXT: vmfle.vv v9, v9, v9 4265; CHECK-NEXT: vmfle.vv v8, v8, v8 4266; CHECK-NEXT: vmnot.m v8, v8 4267; CHECK-NEXT: vmorn.mm v0, v8, v9 4268; CHECK-NEXT: ret 4269 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 4270 ret <2 x i1> %1 4271} 4272 4273define <2 x i1> @fcmps_uno_vf_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4274; CHECK-LABEL: fcmps_uno_vf_v2f32: 4275; CHECK: # %bb.0: 4276; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4277; CHECK-NEXT: vfmv.v.f v9, fa0 4278; CHECK-NEXT: vmfle.vv v8, v8, v8 4279; CHECK-NEXT: vmfle.vf v9, v9, fa0 4280; CHECK-NEXT: vmnot.m v8, v8 4281; CHECK-NEXT: vmorn.mm v0, v8, v9 4282; CHECK-NEXT: ret 4283 %head = insertelement <2 x float> poison, float %b, i32 0 4284 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4285 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 4286 ret <2 x i1> %1 4287} 4288 4289define <2 x i1> @fcmps_uno_fv_v2f32(<2 x float> %va, float %b) nounwind strictfp { 4290; CHECK-LABEL: fcmps_uno_fv_v2f32: 4291; CHECK: # %bb.0: 4292; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 4293; CHECK-NEXT: vfmv.v.f v9, fa0 4294; CHECK-NEXT: vmfle.vf v9, v9, fa0 4295; CHECK-NEXT: vmnot.m v9, v9 4296; CHECK-NEXT: vmfle.vv v8, v8, v8 4297; CHECK-NEXT: vmorn.mm v0, v9, v8 4298; CHECK-NEXT: ret 4299 %head = insertelement <2 x float> poison, float %b, i32 0 4300 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer 4301 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> %splat, <2 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 4302 ret <2 x i1> %1 4303} 4304 4305declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float>, <4 x float>, metadata, metadata) 4306define <4 x i1> @fcmps_oeq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4307; CHECK-LABEL: fcmps_oeq_vv_v4f32: 4308; CHECK: # %bb.0: 4309; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4310; CHECK-NEXT: vmfle.vv v10, v9, v8 4311; CHECK-NEXT: vmfle.vv v8, v8, v9 4312; CHECK-NEXT: vmand.mm v0, v8, v10 4313; CHECK-NEXT: ret 4314 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4315 ret <4 x i1> %1 4316} 4317 4318define <4 x i1> @fcmps_oeq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4319; CHECK-LABEL: fcmps_oeq_vf_v4f32: 4320; CHECK: # %bb.0: 4321; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4322; CHECK-NEXT: vmfge.vf v9, v8, fa0 4323; CHECK-NEXT: vmfle.vf v8, v8, fa0 4324; CHECK-NEXT: vmand.mm v0, v8, v9 4325; CHECK-NEXT: ret 4326 %head = insertelement <4 x float> poison, float %b, i32 0 4327 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4328 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4329 ret <4 x i1> %1 4330} 4331 4332define <4 x i1> @fcmps_oeq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4333; CHECK-LABEL: fcmps_oeq_fv_v4f32: 4334; CHECK: # %bb.0: 4335; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4336; CHECK-NEXT: vmfle.vf v9, v8, fa0 4337; CHECK-NEXT: vmfge.vf v8, v8, fa0 4338; CHECK-NEXT: vmand.mm v0, v8, v9 4339; CHECK-NEXT: ret 4340 %head = insertelement <4 x float> poison, float %b, i32 0 4341 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4342 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4343 ret <4 x i1> %1 4344} 4345 4346define <4 x i1> @fcmps_ogt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4347; CHECK-LABEL: fcmps_ogt_vv_v4f32: 4348; CHECK: # %bb.0: 4349; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4350; CHECK-NEXT: vmflt.vv v0, v9, v8 4351; CHECK-NEXT: ret 4352 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4353 ret <4 x i1> %1 4354} 4355 4356define <4 x i1> @fcmps_ogt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4357; CHECK-LABEL: fcmps_ogt_vf_v4f32: 4358; CHECK: # %bb.0: 4359; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4360; CHECK-NEXT: vmfgt.vf v0, v8, fa0 4361; CHECK-NEXT: ret 4362 %head = insertelement <4 x float> poison, float %b, i32 0 4363 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4364 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4365 ret <4 x i1> %1 4366} 4367 4368define <4 x i1> @fcmps_ogt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4369; CHECK-LABEL: fcmps_ogt_fv_v4f32: 4370; CHECK: # %bb.0: 4371; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4372; CHECK-NEXT: vmflt.vf v0, v8, fa0 4373; CHECK-NEXT: ret 4374 %head = insertelement <4 x float> poison, float %b, i32 0 4375 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4376 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4377 ret <4 x i1> %1 4378} 4379 4380define <4 x i1> @fcmps_oge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4381; CHECK-LABEL: fcmps_oge_vv_v4f32: 4382; CHECK: # %bb.0: 4383; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4384; CHECK-NEXT: vmfle.vv v0, v9, v8 4385; CHECK-NEXT: ret 4386 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4387 ret <4 x i1> %1 4388} 4389 4390define <4 x i1> @fcmps_oge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4391; CHECK-LABEL: fcmps_oge_vf_v4f32: 4392; CHECK: # %bb.0: 4393; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4394; CHECK-NEXT: vmfge.vf v0, v8, fa0 4395; CHECK-NEXT: ret 4396 %head = insertelement <4 x float> poison, float %b, i32 0 4397 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4398 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4399 ret <4 x i1> %1 4400} 4401 4402define <4 x i1> @fcmps_oge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4403; CHECK-LABEL: fcmps_oge_fv_v4f32: 4404; CHECK: # %bb.0: 4405; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4406; CHECK-NEXT: vmfle.vf v0, v8, fa0 4407; CHECK-NEXT: ret 4408 %head = insertelement <4 x float> poison, float %b, i32 0 4409 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4410 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4411 ret <4 x i1> %1 4412} 4413 4414define <4 x i1> @fcmps_olt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4415; CHECK-LABEL: fcmps_olt_vv_v4f32: 4416; CHECK: # %bb.0: 4417; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4418; CHECK-NEXT: vmflt.vv v0, v8, v9 4419; CHECK-NEXT: ret 4420 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4421 ret <4 x i1> %1 4422} 4423 4424define <4 x i1> @fcmps_olt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4425; CHECK-LABEL: fcmps_olt_vf_v4f32: 4426; CHECK: # %bb.0: 4427; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4428; CHECK-NEXT: vmflt.vf v0, v8, fa0 4429; CHECK-NEXT: ret 4430 %head = insertelement <4 x float> poison, float %b, i32 0 4431 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4432 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4433 ret <4 x i1> %1 4434} 4435 4436define <4 x i1> @fcmps_olt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4437; CHECK-LABEL: fcmps_olt_fv_v4f32: 4438; CHECK: # %bb.0: 4439; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4440; CHECK-NEXT: vmfgt.vf v0, v8, fa0 4441; CHECK-NEXT: ret 4442 %head = insertelement <4 x float> poison, float %b, i32 0 4443 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4444 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4445 ret <4 x i1> %1 4446} 4447 4448define <4 x i1> @fcmps_ole_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4449; CHECK-LABEL: fcmps_ole_vv_v4f32: 4450; CHECK: # %bb.0: 4451; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4452; CHECK-NEXT: vmfle.vv v0, v8, v9 4453; CHECK-NEXT: ret 4454 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4455 ret <4 x i1> %1 4456} 4457 4458define <4 x i1> @fcmps_ole_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4459; CHECK-LABEL: fcmps_ole_vf_v4f32: 4460; CHECK: # %bb.0: 4461; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4462; CHECK-NEXT: vmfle.vf v0, v8, fa0 4463; CHECK-NEXT: ret 4464 %head = insertelement <4 x float> poison, float %b, i32 0 4465 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4466 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4467 ret <4 x i1> %1 4468} 4469 4470define <4 x i1> @fcmps_ole_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4471; CHECK-LABEL: fcmps_ole_fv_v4f32: 4472; CHECK: # %bb.0: 4473; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4474; CHECK-NEXT: vmfge.vf v0, v8, fa0 4475; CHECK-NEXT: ret 4476 %head = insertelement <4 x float> poison, float %b, i32 0 4477 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4478 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 4479 ret <4 x i1> %1 4480} 4481 4482define <4 x i1> @fcmps_one_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4483; CHECK-LABEL: fcmps_one_vv_v4f32: 4484; CHECK: # %bb.0: 4485; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4486; CHECK-NEXT: vmflt.vv v10, v8, v9 4487; CHECK-NEXT: vmflt.vv v8, v9, v8 4488; CHECK-NEXT: vmor.mm v0, v8, v10 4489; CHECK-NEXT: ret 4490 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 4491 ret <4 x i1> %1 4492} 4493 4494define <4 x i1> @fcmps_one_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4495; CHECK-LABEL: fcmps_one_vf_v4f32: 4496; CHECK: # %bb.0: 4497; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4498; CHECK-NEXT: vmflt.vf v9, v8, fa0 4499; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4500; CHECK-NEXT: vmor.mm v0, v8, v9 4501; CHECK-NEXT: ret 4502 %head = insertelement <4 x float> poison, float %b, i32 0 4503 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4504 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 4505 ret <4 x i1> %1 4506} 4507 4508define <4 x i1> @fcmps_one_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4509; CHECK-LABEL: fcmps_one_fv_v4f32: 4510; CHECK: # %bb.0: 4511; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4512; CHECK-NEXT: vmfgt.vf v9, v8, fa0 4513; CHECK-NEXT: vmflt.vf v8, v8, fa0 4514; CHECK-NEXT: vmor.mm v0, v8, v9 4515; CHECK-NEXT: ret 4516 %head = insertelement <4 x float> poison, float %b, i32 0 4517 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4518 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 4519 ret <4 x i1> %1 4520} 4521 4522define <4 x i1> @fcmps_ord_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4523; CHECK-LABEL: fcmps_ord_vv_v4f32: 4524; CHECK: # %bb.0: 4525; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4526; CHECK-NEXT: vmfle.vv v9, v9, v9 4527; CHECK-NEXT: vmfle.vv v8, v8, v8 4528; CHECK-NEXT: vmand.mm v0, v8, v9 4529; CHECK-NEXT: ret 4530 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 4531 ret <4 x i1> %1 4532} 4533 4534define <4 x i1> @fcmps_ord_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4535; CHECK-LABEL: fcmps_ord_vf_v4f32: 4536; CHECK: # %bb.0: 4537; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4538; CHECK-NEXT: vfmv.v.f v9, fa0 4539; CHECK-NEXT: vmfle.vf v9, v9, fa0 4540; CHECK-NEXT: vmfle.vv v8, v8, v8 4541; CHECK-NEXT: vmand.mm v0, v8, v9 4542; CHECK-NEXT: ret 4543 %head = insertelement <4 x float> poison, float %b, i32 0 4544 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4545 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 4546 ret <4 x i1> %1 4547} 4548 4549define <4 x i1> @fcmps_ord_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4550; CHECK-LABEL: fcmps_ord_fv_v4f32: 4551; CHECK: # %bb.0: 4552; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4553; CHECK-NEXT: vfmv.v.f v9, fa0 4554; CHECK-NEXT: vmfle.vf v9, v9, fa0 4555; CHECK-NEXT: vmfle.vv v8, v8, v8 4556; CHECK-NEXT: vmand.mm v0, v9, v8 4557; CHECK-NEXT: ret 4558 %head = insertelement <4 x float> poison, float %b, i32 0 4559 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4560 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 4561 ret <4 x i1> %1 4562} 4563 4564define <4 x i1> @fcmps_ueq_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4565; CHECK-LABEL: fcmps_ueq_vv_v4f32: 4566; CHECK: # %bb.0: 4567; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4568; CHECK-NEXT: vmflt.vv v10, v8, v9 4569; CHECK-NEXT: vmflt.vv v8, v9, v8 4570; CHECK-NEXT: vmnor.mm v0, v8, v10 4571; CHECK-NEXT: ret 4572 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4573 ret <4 x i1> %1 4574} 4575 4576define <4 x i1> @fcmps_ueq_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4577; CHECK-LABEL: fcmps_ueq_vf_v4f32: 4578; CHECK: # %bb.0: 4579; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4580; CHECK-NEXT: vmflt.vf v9, v8, fa0 4581; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4582; CHECK-NEXT: vmnor.mm v0, v8, v9 4583; CHECK-NEXT: ret 4584 %head = insertelement <4 x float> poison, float %b, i32 0 4585 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4586 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4587 ret <4 x i1> %1 4588} 4589 4590define <4 x i1> @fcmps_ueq_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4591; CHECK-LABEL: fcmps_ueq_fv_v4f32: 4592; CHECK: # %bb.0: 4593; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4594; CHECK-NEXT: vmfgt.vf v9, v8, fa0 4595; CHECK-NEXT: vmflt.vf v8, v8, fa0 4596; CHECK-NEXT: vmnor.mm v0, v8, v9 4597; CHECK-NEXT: ret 4598 %head = insertelement <4 x float> poison, float %b, i32 0 4599 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4600 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 4601 ret <4 x i1> %1 4602} 4603 4604define <4 x i1> @fcmps_ugt_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4605; CHECK-LABEL: fcmps_ugt_vv_v4f32: 4606; CHECK: # %bb.0: 4607; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4608; CHECK-NEXT: vmfle.vv v8, v8, v9 4609; CHECK-NEXT: vmnot.m v0, v8 4610; CHECK-NEXT: ret 4611 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4612 ret <4 x i1> %1 4613} 4614 4615define <4 x i1> @fcmps_ugt_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4616; CHECK-LABEL: fcmps_ugt_vf_v4f32: 4617; CHECK: # %bb.0: 4618; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4619; CHECK-NEXT: vmfle.vf v8, v8, fa0 4620; CHECK-NEXT: vmnot.m v0, v8 4621; CHECK-NEXT: ret 4622 %head = insertelement <4 x float> poison, float %b, i32 0 4623 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4624 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4625 ret <4 x i1> %1 4626} 4627 4628define <4 x i1> @fcmps_ugt_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4629; CHECK-LABEL: fcmps_ugt_fv_v4f32: 4630; CHECK: # %bb.0: 4631; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4632; CHECK-NEXT: vmfge.vf v8, v8, fa0 4633; CHECK-NEXT: vmnot.m v0, v8 4634; CHECK-NEXT: ret 4635 %head = insertelement <4 x float> poison, float %b, i32 0 4636 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4637 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 4638 ret <4 x i1> %1 4639} 4640 4641define <4 x i1> @fcmps_uge_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4642; CHECK-LABEL: fcmps_uge_vv_v4f32: 4643; CHECK: # %bb.0: 4644; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4645; CHECK-NEXT: vmflt.vv v8, v8, v9 4646; CHECK-NEXT: vmnot.m v0, v8 4647; CHECK-NEXT: ret 4648 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 4649 ret <4 x i1> %1 4650} 4651 4652define <4 x i1> @fcmps_uge_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4653; CHECK-LABEL: fcmps_uge_vf_v4f32: 4654; CHECK: # %bb.0: 4655; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4656; CHECK-NEXT: vmflt.vf v8, v8, fa0 4657; CHECK-NEXT: vmnot.m v0, v8 4658; CHECK-NEXT: ret 4659 %head = insertelement <4 x float> poison, float %b, i32 0 4660 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4661 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 4662 ret <4 x i1> %1 4663} 4664 4665define <4 x i1> @fcmps_uge_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4666; CHECK-LABEL: fcmps_uge_fv_v4f32: 4667; CHECK: # %bb.0: 4668; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4669; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4670; CHECK-NEXT: vmnot.m v0, v8 4671; CHECK-NEXT: ret 4672 %head = insertelement <4 x float> poison, float %b, i32 0 4673 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4674 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 4675 ret <4 x i1> %1 4676} 4677 4678define <4 x i1> @fcmps_ult_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4679; CHECK-LABEL: fcmps_ult_vv_v4f32: 4680; CHECK: # %bb.0: 4681; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4682; CHECK-NEXT: vmfle.vv v8, v9, v8 4683; CHECK-NEXT: vmnot.m v0, v8 4684; CHECK-NEXT: ret 4685 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 4686 ret <4 x i1> %1 4687} 4688 4689define <4 x i1> @fcmps_ult_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4690; CHECK-LABEL: fcmps_ult_vf_v4f32: 4691; CHECK: # %bb.0: 4692; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4693; CHECK-NEXT: vmfge.vf v8, v8, fa0 4694; CHECK-NEXT: vmnot.m v0, v8 4695; CHECK-NEXT: ret 4696 %head = insertelement <4 x float> poison, float %b, i32 0 4697 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4698 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 4699 ret <4 x i1> %1 4700} 4701 4702define <4 x i1> @fcmps_ult_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4703; CHECK-LABEL: fcmps_ult_fv_v4f32: 4704; CHECK: # %bb.0: 4705; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4706; CHECK-NEXT: vmfle.vf v8, v8, fa0 4707; CHECK-NEXT: vmnot.m v0, v8 4708; CHECK-NEXT: ret 4709 %head = insertelement <4 x float> poison, float %b, i32 0 4710 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4711 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 4712 ret <4 x i1> %1 4713} 4714 4715define <4 x i1> @fcmps_ule_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4716; CHECK-LABEL: fcmps_ule_vv_v4f32: 4717; CHECK: # %bb.0: 4718; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4719; CHECK-NEXT: vmflt.vv v8, v9, v8 4720; CHECK-NEXT: vmnot.m v0, v8 4721; CHECK-NEXT: ret 4722 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 4723 ret <4 x i1> %1 4724} 4725 4726define <4 x i1> @fcmps_ule_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4727; CHECK-LABEL: fcmps_ule_vf_v4f32: 4728; CHECK: # %bb.0: 4729; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4730; CHECK-NEXT: vmfgt.vf v8, v8, fa0 4731; CHECK-NEXT: vmnot.m v0, v8 4732; CHECK-NEXT: ret 4733 %head = insertelement <4 x float> poison, float %b, i32 0 4734 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4735 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 4736 ret <4 x i1> %1 4737} 4738 4739define <4 x i1> @fcmps_ule_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4740; CHECK-LABEL: fcmps_ule_fv_v4f32: 4741; CHECK: # %bb.0: 4742; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4743; CHECK-NEXT: vmflt.vf v8, v8, fa0 4744; CHECK-NEXT: vmnot.m v0, v8 4745; CHECK-NEXT: ret 4746 %head = insertelement <4 x float> poison, float %b, i32 0 4747 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4748 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 4749 ret <4 x i1> %1 4750} 4751 4752define <4 x i1> @fcmps_une_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4753; CHECK-LABEL: fcmps_une_vv_v4f32: 4754; CHECK: # %bb.0: 4755; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4756; CHECK-NEXT: vmfle.vv v10, v9, v8 4757; CHECK-NEXT: vmfle.vv v8, v8, v9 4758; CHECK-NEXT: vmnand.mm v0, v8, v10 4759; CHECK-NEXT: ret 4760 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 4761 ret <4 x i1> %1 4762} 4763 4764define <4 x i1> @fcmps_une_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4765; CHECK-LABEL: fcmps_une_vf_v4f32: 4766; CHECK: # %bb.0: 4767; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4768; CHECK-NEXT: vmfge.vf v9, v8, fa0 4769; CHECK-NEXT: vmfle.vf v8, v8, fa0 4770; CHECK-NEXT: vmnand.mm v0, v8, v9 4771; CHECK-NEXT: ret 4772 %head = insertelement <4 x float> poison, float %b, i32 0 4773 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4774 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 4775 ret <4 x i1> %1 4776} 4777 4778define <4 x i1> @fcmps_une_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4779; CHECK-LABEL: fcmps_une_fv_v4f32: 4780; CHECK: # %bb.0: 4781; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4782; CHECK-NEXT: vmfle.vf v9, v8, fa0 4783; CHECK-NEXT: vmfge.vf v8, v8, fa0 4784; CHECK-NEXT: vmnand.mm v0, v8, v9 4785; CHECK-NEXT: ret 4786 %head = insertelement <4 x float> poison, float %b, i32 0 4787 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4788 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 4789 ret <4 x i1> %1 4790} 4791 4792define <4 x i1> @fcmps_uno_vv_v4f32(<4 x float> %va, <4 x float> %vb) nounwind strictfp { 4793; CHECK-LABEL: fcmps_uno_vv_v4f32: 4794; CHECK: # %bb.0: 4795; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4796; CHECK-NEXT: vmfle.vv v9, v9, v9 4797; CHECK-NEXT: vmfle.vv v8, v8, v8 4798; CHECK-NEXT: vmnot.m v8, v8 4799; CHECK-NEXT: vmorn.mm v0, v8, v9 4800; CHECK-NEXT: ret 4801 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 4802 ret <4 x i1> %1 4803} 4804 4805define <4 x i1> @fcmps_uno_vf_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4806; CHECK-LABEL: fcmps_uno_vf_v4f32: 4807; CHECK: # %bb.0: 4808; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4809; CHECK-NEXT: vfmv.v.f v9, fa0 4810; CHECK-NEXT: vmfle.vv v8, v8, v8 4811; CHECK-NEXT: vmfle.vf v9, v9, fa0 4812; CHECK-NEXT: vmnot.m v8, v8 4813; CHECK-NEXT: vmorn.mm v0, v8, v9 4814; CHECK-NEXT: ret 4815 %head = insertelement <4 x float> poison, float %b, i32 0 4816 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4817 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 4818 ret <4 x i1> %1 4819} 4820 4821define <4 x i1> @fcmps_uno_fv_v4f32(<4 x float> %va, float %b) nounwind strictfp { 4822; CHECK-LABEL: fcmps_uno_fv_v4f32: 4823; CHECK: # %bb.0: 4824; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 4825; CHECK-NEXT: vfmv.v.f v9, fa0 4826; CHECK-NEXT: vmfle.vf v9, v9, fa0 4827; CHECK-NEXT: vmnot.m v9, v9 4828; CHECK-NEXT: vmfle.vv v8, v8, v8 4829; CHECK-NEXT: vmorn.mm v0, v9, v8 4830; CHECK-NEXT: ret 4831 %head = insertelement <4 x float> poison, float %b, i32 0 4832 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer 4833 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %splat, <4 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 4834 ret <4 x i1> %1 4835} 4836 4837declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float>, <8 x float>, metadata, metadata) 4838define <8 x i1> @fcmps_oeq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 4839; CHECK-LABEL: fcmps_oeq_vv_v8f32: 4840; CHECK: # %bb.0: 4841; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4842; CHECK-NEXT: vmfle.vv v12, v10, v8 4843; CHECK-NEXT: vmfle.vv v13, v8, v10 4844; CHECK-NEXT: vmand.mm v0, v13, v12 4845; CHECK-NEXT: ret 4846 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4847 ret <8 x i1> %1 4848} 4849 4850define <8 x i1> @fcmps_oeq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4851; CHECK-LABEL: fcmps_oeq_vf_v8f32: 4852; CHECK: # %bb.0: 4853; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4854; CHECK-NEXT: vmfge.vf v10, v8, fa0 4855; CHECK-NEXT: vmfle.vf v11, v8, fa0 4856; CHECK-NEXT: vmand.mm v0, v11, v10 4857; CHECK-NEXT: ret 4858 %head = insertelement <8 x float> poison, float %b, i32 0 4859 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4860 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4861 ret <8 x i1> %1 4862} 4863 4864define <8 x i1> @fcmps_oeq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4865; CHECK-LABEL: fcmps_oeq_fv_v8f32: 4866; CHECK: # %bb.0: 4867; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4868; CHECK-NEXT: vmfle.vf v10, v8, fa0 4869; CHECK-NEXT: vmfge.vf v11, v8, fa0 4870; CHECK-NEXT: vmand.mm v0, v11, v10 4871; CHECK-NEXT: ret 4872 %head = insertelement <8 x float> poison, float %b, i32 0 4873 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4874 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 4875 ret <8 x i1> %1 4876} 4877 4878define <8 x i1> @fcmps_ogt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 4879; CHECK-LABEL: fcmps_ogt_vv_v8f32: 4880; CHECK: # %bb.0: 4881; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4882; CHECK-NEXT: vmflt.vv v0, v10, v8 4883; CHECK-NEXT: ret 4884 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4885 ret <8 x i1> %1 4886} 4887 4888define <8 x i1> @fcmps_ogt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4889; CHECK-LABEL: fcmps_ogt_vf_v8f32: 4890; CHECK: # %bb.0: 4891; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4892; CHECK-NEXT: vmfgt.vf v0, v8, fa0 4893; CHECK-NEXT: ret 4894 %head = insertelement <8 x float> poison, float %b, i32 0 4895 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4896 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4897 ret <8 x i1> %1 4898} 4899 4900define <8 x i1> @fcmps_ogt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4901; CHECK-LABEL: fcmps_ogt_fv_v8f32: 4902; CHECK: # %bb.0: 4903; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4904; CHECK-NEXT: vmflt.vf v0, v8, fa0 4905; CHECK-NEXT: ret 4906 %head = insertelement <8 x float> poison, float %b, i32 0 4907 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4908 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 4909 ret <8 x i1> %1 4910} 4911 4912define <8 x i1> @fcmps_oge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 4913; CHECK-LABEL: fcmps_oge_vv_v8f32: 4914; CHECK: # %bb.0: 4915; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4916; CHECK-NEXT: vmfle.vv v0, v10, v8 4917; CHECK-NEXT: ret 4918 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 4919 ret <8 x i1> %1 4920} 4921 4922define <8 x i1> @fcmps_oge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4923; CHECK-LABEL: fcmps_oge_vf_v8f32: 4924; CHECK: # %bb.0: 4925; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4926; CHECK-NEXT: vmfge.vf v0, v8, fa0 4927; CHECK-NEXT: ret 4928 %head = insertelement <8 x float> poison, float %b, i32 0 4929 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4930 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 4931 ret <8 x i1> %1 4932} 4933 4934define <8 x i1> @fcmps_oge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4935; CHECK-LABEL: fcmps_oge_fv_v8f32: 4936; CHECK: # %bb.0: 4937; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4938; CHECK-NEXT: vmfle.vf v0, v8, fa0 4939; CHECK-NEXT: ret 4940 %head = insertelement <8 x float> poison, float %b, i32 0 4941 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4942 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 4943 ret <8 x i1> %1 4944} 4945 4946define <8 x i1> @fcmps_olt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 4947; CHECK-LABEL: fcmps_olt_vv_v8f32: 4948; CHECK: # %bb.0: 4949; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4950; CHECK-NEXT: vmflt.vv v0, v8, v10 4951; CHECK-NEXT: ret 4952 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 4953 ret <8 x i1> %1 4954} 4955 4956define <8 x i1> @fcmps_olt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4957; CHECK-LABEL: fcmps_olt_vf_v8f32: 4958; CHECK: # %bb.0: 4959; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4960; CHECK-NEXT: vmflt.vf v0, v8, fa0 4961; CHECK-NEXT: ret 4962 %head = insertelement <8 x float> poison, float %b, i32 0 4963 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4964 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 4965 ret <8 x i1> %1 4966} 4967 4968define <8 x i1> @fcmps_olt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4969; CHECK-LABEL: fcmps_olt_fv_v8f32: 4970; CHECK: # %bb.0: 4971; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4972; CHECK-NEXT: vmfgt.vf v0, v8, fa0 4973; CHECK-NEXT: ret 4974 %head = insertelement <8 x float> poison, float %b, i32 0 4975 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4976 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 4977 ret <8 x i1> %1 4978} 4979 4980define <8 x i1> @fcmps_ole_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 4981; CHECK-LABEL: fcmps_ole_vv_v8f32: 4982; CHECK: # %bb.0: 4983; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4984; CHECK-NEXT: vmfle.vv v0, v8, v10 4985; CHECK-NEXT: ret 4986 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 4987 ret <8 x i1> %1 4988} 4989 4990define <8 x i1> @fcmps_ole_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 4991; CHECK-LABEL: fcmps_ole_vf_v8f32: 4992; CHECK: # %bb.0: 4993; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 4994; CHECK-NEXT: vmfle.vf v0, v8, fa0 4995; CHECK-NEXT: ret 4996 %head = insertelement <8 x float> poison, float %b, i32 0 4997 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 4998 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 4999 ret <8 x i1> %1 5000} 5001 5002define <8 x i1> @fcmps_ole_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5003; CHECK-LABEL: fcmps_ole_fv_v8f32: 5004; CHECK: # %bb.0: 5005; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5006; CHECK-NEXT: vmfge.vf v0, v8, fa0 5007; CHECK-NEXT: ret 5008 %head = insertelement <8 x float> poison, float %b, i32 0 5009 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5010 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 5011 ret <8 x i1> %1 5012} 5013 5014define <8 x i1> @fcmps_one_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5015; CHECK-LABEL: fcmps_one_vv_v8f32: 5016; CHECK: # %bb.0: 5017; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5018; CHECK-NEXT: vmflt.vv v12, v8, v10 5019; CHECK-NEXT: vmflt.vv v13, v10, v8 5020; CHECK-NEXT: vmor.mm v0, v13, v12 5021; CHECK-NEXT: ret 5022 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 5023 ret <8 x i1> %1 5024} 5025 5026define <8 x i1> @fcmps_one_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5027; CHECK-LABEL: fcmps_one_vf_v8f32: 5028; CHECK: # %bb.0: 5029; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5030; CHECK-NEXT: vmflt.vf v10, v8, fa0 5031; CHECK-NEXT: vmfgt.vf v11, v8, fa0 5032; CHECK-NEXT: vmor.mm v0, v11, v10 5033; CHECK-NEXT: ret 5034 %head = insertelement <8 x float> poison, float %b, i32 0 5035 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5036 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 5037 ret <8 x i1> %1 5038} 5039 5040define <8 x i1> @fcmps_one_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5041; CHECK-LABEL: fcmps_one_fv_v8f32: 5042; CHECK: # %bb.0: 5043; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5044; CHECK-NEXT: vmfgt.vf v10, v8, fa0 5045; CHECK-NEXT: vmflt.vf v11, v8, fa0 5046; CHECK-NEXT: vmor.mm v0, v11, v10 5047; CHECK-NEXT: ret 5048 %head = insertelement <8 x float> poison, float %b, i32 0 5049 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5050 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 5051 ret <8 x i1> %1 5052} 5053 5054define <8 x i1> @fcmps_ord_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5055; CHECK-LABEL: fcmps_ord_vv_v8f32: 5056; CHECK: # %bb.0: 5057; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5058; CHECK-NEXT: vmfle.vv v12, v10, v10 5059; CHECK-NEXT: vmfle.vv v10, v8, v8 5060; CHECK-NEXT: vmand.mm v0, v10, v12 5061; CHECK-NEXT: ret 5062 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 5063 ret <8 x i1> %1 5064} 5065 5066define <8 x i1> @fcmps_ord_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5067; CHECK-LABEL: fcmps_ord_vf_v8f32: 5068; CHECK: # %bb.0: 5069; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5070; CHECK-NEXT: vfmv.v.f v10, fa0 5071; CHECK-NEXT: vmfle.vf v12, v10, fa0 5072; CHECK-NEXT: vmfle.vv v10, v8, v8 5073; CHECK-NEXT: vmand.mm v0, v10, v12 5074; CHECK-NEXT: ret 5075 %head = insertelement <8 x float> poison, float %b, i32 0 5076 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5077 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 5078 ret <8 x i1> %1 5079} 5080 5081define <8 x i1> @fcmps_ord_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5082; CHECK-LABEL: fcmps_ord_fv_v8f32: 5083; CHECK: # %bb.0: 5084; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5085; CHECK-NEXT: vfmv.v.f v10, fa0 5086; CHECK-NEXT: vmfle.vf v12, v10, fa0 5087; CHECK-NEXT: vmfle.vv v10, v8, v8 5088; CHECK-NEXT: vmand.mm v0, v12, v10 5089; CHECK-NEXT: ret 5090 %head = insertelement <8 x float> poison, float %b, i32 0 5091 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5092 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 5093 ret <8 x i1> %1 5094} 5095 5096define <8 x i1> @fcmps_ueq_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5097; CHECK-LABEL: fcmps_ueq_vv_v8f32: 5098; CHECK: # %bb.0: 5099; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5100; CHECK-NEXT: vmflt.vv v12, v8, v10 5101; CHECK-NEXT: vmflt.vv v13, v10, v8 5102; CHECK-NEXT: vmnor.mm v0, v13, v12 5103; CHECK-NEXT: ret 5104 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5105 ret <8 x i1> %1 5106} 5107 5108define <8 x i1> @fcmps_ueq_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5109; CHECK-LABEL: fcmps_ueq_vf_v8f32: 5110; CHECK: # %bb.0: 5111; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5112; CHECK-NEXT: vmflt.vf v10, v8, fa0 5113; CHECK-NEXT: vmfgt.vf v11, v8, fa0 5114; CHECK-NEXT: vmnor.mm v0, v11, v10 5115; CHECK-NEXT: ret 5116 %head = insertelement <8 x float> poison, float %b, i32 0 5117 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5118 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5119 ret <8 x i1> %1 5120} 5121 5122define <8 x i1> @fcmps_ueq_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5123; CHECK-LABEL: fcmps_ueq_fv_v8f32: 5124; CHECK: # %bb.0: 5125; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5126; CHECK-NEXT: vmfgt.vf v10, v8, fa0 5127; CHECK-NEXT: vmflt.vf v11, v8, fa0 5128; CHECK-NEXT: vmnor.mm v0, v11, v10 5129; CHECK-NEXT: ret 5130 %head = insertelement <8 x float> poison, float %b, i32 0 5131 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5132 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5133 ret <8 x i1> %1 5134} 5135 5136define <8 x i1> @fcmps_ugt_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5137; CHECK-LABEL: fcmps_ugt_vv_v8f32: 5138; CHECK: # %bb.0: 5139; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5140; CHECK-NEXT: vmfle.vv v12, v8, v10 5141; CHECK-NEXT: vmnot.m v0, v12 5142; CHECK-NEXT: ret 5143 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5144 ret <8 x i1> %1 5145} 5146 5147define <8 x i1> @fcmps_ugt_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5148; CHECK-LABEL: fcmps_ugt_vf_v8f32: 5149; CHECK: # %bb.0: 5150; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5151; CHECK-NEXT: vmfle.vf v10, v8, fa0 5152; CHECK-NEXT: vmnot.m v0, v10 5153; CHECK-NEXT: ret 5154 %head = insertelement <8 x float> poison, float %b, i32 0 5155 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5156 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5157 ret <8 x i1> %1 5158} 5159 5160define <8 x i1> @fcmps_ugt_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5161; CHECK-LABEL: fcmps_ugt_fv_v8f32: 5162; CHECK: # %bb.0: 5163; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5164; CHECK-NEXT: vmfge.vf v10, v8, fa0 5165; CHECK-NEXT: vmnot.m v0, v10 5166; CHECK-NEXT: ret 5167 %head = insertelement <8 x float> poison, float %b, i32 0 5168 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5169 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5170 ret <8 x i1> %1 5171} 5172 5173define <8 x i1> @fcmps_uge_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5174; CHECK-LABEL: fcmps_uge_vv_v8f32: 5175; CHECK: # %bb.0: 5176; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5177; CHECK-NEXT: vmflt.vv v12, v8, v10 5178; CHECK-NEXT: vmnot.m v0, v12 5179; CHECK-NEXT: ret 5180 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 5181 ret <8 x i1> %1 5182} 5183 5184define <8 x i1> @fcmps_uge_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5185; CHECK-LABEL: fcmps_uge_vf_v8f32: 5186; CHECK: # %bb.0: 5187; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5188; CHECK-NEXT: vmflt.vf v10, v8, fa0 5189; CHECK-NEXT: vmnot.m v0, v10 5190; CHECK-NEXT: ret 5191 %head = insertelement <8 x float> poison, float %b, i32 0 5192 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5193 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5194 ret <8 x i1> %1 5195} 5196 5197define <8 x i1> @fcmps_uge_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5198; CHECK-LABEL: fcmps_uge_fv_v8f32: 5199; CHECK: # %bb.0: 5200; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5201; CHECK-NEXT: vmfgt.vf v10, v8, fa0 5202; CHECK-NEXT: vmnot.m v0, v10 5203; CHECK-NEXT: ret 5204 %head = insertelement <8 x float> poison, float %b, i32 0 5205 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5206 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5207 ret <8 x i1> %1 5208} 5209 5210define <8 x i1> @fcmps_ult_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5211; CHECK-LABEL: fcmps_ult_vv_v8f32: 5212; CHECK: # %bb.0: 5213; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5214; CHECK-NEXT: vmfle.vv v12, v10, v8 5215; CHECK-NEXT: vmnot.m v0, v12 5216; CHECK-NEXT: ret 5217 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5218 ret <8 x i1> %1 5219} 5220 5221define <8 x i1> @fcmps_ult_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5222; CHECK-LABEL: fcmps_ult_vf_v8f32: 5223; CHECK: # %bb.0: 5224; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5225; CHECK-NEXT: vmfge.vf v10, v8, fa0 5226; CHECK-NEXT: vmnot.m v0, v10 5227; CHECK-NEXT: ret 5228 %head = insertelement <8 x float> poison, float %b, i32 0 5229 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5230 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5231 ret <8 x i1> %1 5232} 5233 5234define <8 x i1> @fcmps_ult_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5235; CHECK-LABEL: fcmps_ult_fv_v8f32: 5236; CHECK: # %bb.0: 5237; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5238; CHECK-NEXT: vmfle.vf v10, v8, fa0 5239; CHECK-NEXT: vmnot.m v0, v10 5240; CHECK-NEXT: ret 5241 %head = insertelement <8 x float> poison, float %b, i32 0 5242 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5243 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5244 ret <8 x i1> %1 5245} 5246 5247define <8 x i1> @fcmps_ule_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5248; CHECK-LABEL: fcmps_ule_vv_v8f32: 5249; CHECK: # %bb.0: 5250; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5251; CHECK-NEXT: vmflt.vv v12, v10, v8 5252; CHECK-NEXT: vmnot.m v0, v12 5253; CHECK-NEXT: ret 5254 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5255 ret <8 x i1> %1 5256} 5257 5258define <8 x i1> @fcmps_ule_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5259; CHECK-LABEL: fcmps_ule_vf_v8f32: 5260; CHECK: # %bb.0: 5261; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5262; CHECK-NEXT: vmfgt.vf v10, v8, fa0 5263; CHECK-NEXT: vmnot.m v0, v10 5264; CHECK-NEXT: ret 5265 %head = insertelement <8 x float> poison, float %b, i32 0 5266 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5267 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5268 ret <8 x i1> %1 5269} 5270 5271define <8 x i1> @fcmps_ule_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5272; CHECK-LABEL: fcmps_ule_fv_v8f32: 5273; CHECK: # %bb.0: 5274; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5275; CHECK-NEXT: vmflt.vf v10, v8, fa0 5276; CHECK-NEXT: vmnot.m v0, v10 5277; CHECK-NEXT: ret 5278 %head = insertelement <8 x float> poison, float %b, i32 0 5279 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5280 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5281 ret <8 x i1> %1 5282} 5283 5284define <8 x i1> @fcmps_une_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5285; CHECK-LABEL: fcmps_une_vv_v8f32: 5286; CHECK: # %bb.0: 5287; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5288; CHECK-NEXT: vmfle.vv v12, v10, v8 5289; CHECK-NEXT: vmfle.vv v13, v8, v10 5290; CHECK-NEXT: vmnand.mm v0, v13, v12 5291; CHECK-NEXT: ret 5292 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5293 ret <8 x i1> %1 5294} 5295 5296define <8 x i1> @fcmps_une_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5297; CHECK-LABEL: fcmps_une_vf_v8f32: 5298; CHECK: # %bb.0: 5299; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5300; CHECK-NEXT: vmfge.vf v10, v8, fa0 5301; CHECK-NEXT: vmfle.vf v11, v8, fa0 5302; CHECK-NEXT: vmnand.mm v0, v11, v10 5303; CHECK-NEXT: ret 5304 %head = insertelement <8 x float> poison, float %b, i32 0 5305 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5306 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5307 ret <8 x i1> %1 5308} 5309 5310define <8 x i1> @fcmps_une_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5311; CHECK-LABEL: fcmps_une_fv_v8f32: 5312; CHECK: # %bb.0: 5313; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5314; CHECK-NEXT: vmfle.vf v10, v8, fa0 5315; CHECK-NEXT: vmfge.vf v11, v8, fa0 5316; CHECK-NEXT: vmnand.mm v0, v11, v10 5317; CHECK-NEXT: ret 5318 %head = insertelement <8 x float> poison, float %b, i32 0 5319 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5320 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5321 ret <8 x i1> %1 5322} 5323 5324define <8 x i1> @fcmps_uno_vv_v8f32(<8 x float> %va, <8 x float> %vb) nounwind strictfp { 5325; CHECK-LABEL: fcmps_uno_vv_v8f32: 5326; CHECK: # %bb.0: 5327; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5328; CHECK-NEXT: vmfle.vv v12, v10, v10 5329; CHECK-NEXT: vmfle.vv v10, v8, v8 5330; CHECK-NEXT: vmnot.m v8, v10 5331; CHECK-NEXT: vmorn.mm v0, v8, v12 5332; CHECK-NEXT: ret 5333 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5334 ret <8 x i1> %1 5335} 5336 5337define <8 x i1> @fcmps_uno_vf_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5338; CHECK-LABEL: fcmps_uno_vf_v8f32: 5339; CHECK: # %bb.0: 5340; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5341; CHECK-NEXT: vfmv.v.f v10, fa0 5342; CHECK-NEXT: vmfle.vv v12, v8, v8 5343; CHECK-NEXT: vmfle.vf v8, v10, fa0 5344; CHECK-NEXT: vmnot.m v9, v12 5345; CHECK-NEXT: vmorn.mm v0, v9, v8 5346; CHECK-NEXT: ret 5347 %head = insertelement <8 x float> poison, float %b, i32 0 5348 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5349 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5350 ret <8 x i1> %1 5351} 5352 5353define <8 x i1> @fcmps_uno_fv_v8f32(<8 x float> %va, float %b) nounwind strictfp { 5354; CHECK-LABEL: fcmps_uno_fv_v8f32: 5355; CHECK: # %bb.0: 5356; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 5357; CHECK-NEXT: vfmv.v.f v10, fa0 5358; CHECK-NEXT: vmfle.vf v12, v10, fa0 5359; CHECK-NEXT: vmnot.m v10, v12 5360; CHECK-NEXT: vmfle.vv v11, v8, v8 5361; CHECK-NEXT: vmorn.mm v0, v10, v11 5362; CHECK-NEXT: ret 5363 %head = insertelement <8 x float> poison, float %b, i32 0 5364 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer 5365 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5366 ret <8 x i1> %1 5367} 5368 5369declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float>, <16 x float>, metadata, metadata) 5370define <16 x i1> @fcmps_oeq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5371; CHECK-LABEL: fcmps_oeq_vv_v16f32: 5372; CHECK: # %bb.0: 5373; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5374; CHECK-NEXT: vmfle.vv v16, v12, v8 5375; CHECK-NEXT: vmfle.vv v17, v8, v12 5376; CHECK-NEXT: vmand.mm v0, v17, v16 5377; CHECK-NEXT: ret 5378 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5379 ret <16 x i1> %1 5380} 5381 5382define <16 x i1> @fcmps_oeq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5383; CHECK-LABEL: fcmps_oeq_vf_v16f32: 5384; CHECK: # %bb.0: 5385; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5386; CHECK-NEXT: vmfge.vf v12, v8, fa0 5387; CHECK-NEXT: vmfle.vf v13, v8, fa0 5388; CHECK-NEXT: vmand.mm v0, v13, v12 5389; CHECK-NEXT: ret 5390 %head = insertelement <16 x float> poison, float %b, i32 0 5391 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5392 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5393 ret <16 x i1> %1 5394} 5395 5396define <16 x i1> @fcmps_oeq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5397; CHECK-LABEL: fcmps_oeq_fv_v16f32: 5398; CHECK: # %bb.0: 5399; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5400; CHECK-NEXT: vmfle.vf v12, v8, fa0 5401; CHECK-NEXT: vmfge.vf v13, v8, fa0 5402; CHECK-NEXT: vmand.mm v0, v13, v12 5403; CHECK-NEXT: ret 5404 %head = insertelement <16 x float> poison, float %b, i32 0 5405 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5406 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5407 ret <16 x i1> %1 5408} 5409 5410define <16 x i1> @fcmps_ogt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5411; CHECK-LABEL: fcmps_ogt_vv_v16f32: 5412; CHECK: # %bb.0: 5413; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5414; CHECK-NEXT: vmflt.vv v0, v12, v8 5415; CHECK-NEXT: ret 5416 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5417 ret <16 x i1> %1 5418} 5419 5420define <16 x i1> @fcmps_ogt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5421; CHECK-LABEL: fcmps_ogt_vf_v16f32: 5422; CHECK: # %bb.0: 5423; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5424; CHECK-NEXT: vmfgt.vf v0, v8, fa0 5425; CHECK-NEXT: ret 5426 %head = insertelement <16 x float> poison, float %b, i32 0 5427 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5428 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5429 ret <16 x i1> %1 5430} 5431 5432define <16 x i1> @fcmps_ogt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5433; CHECK-LABEL: fcmps_ogt_fv_v16f32: 5434; CHECK: # %bb.0: 5435; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5436; CHECK-NEXT: vmflt.vf v0, v8, fa0 5437; CHECK-NEXT: ret 5438 %head = insertelement <16 x float> poison, float %b, i32 0 5439 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5440 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5441 ret <16 x i1> %1 5442} 5443 5444define <16 x i1> @fcmps_oge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5445; CHECK-LABEL: fcmps_oge_vv_v16f32: 5446; CHECK: # %bb.0: 5447; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5448; CHECK-NEXT: vmfle.vv v0, v12, v8 5449; CHECK-NEXT: ret 5450 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5451 ret <16 x i1> %1 5452} 5453 5454define <16 x i1> @fcmps_oge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5455; CHECK-LABEL: fcmps_oge_vf_v16f32: 5456; CHECK: # %bb.0: 5457; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5458; CHECK-NEXT: vmfge.vf v0, v8, fa0 5459; CHECK-NEXT: ret 5460 %head = insertelement <16 x float> poison, float %b, i32 0 5461 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5462 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5463 ret <16 x i1> %1 5464} 5465 5466define <16 x i1> @fcmps_oge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5467; CHECK-LABEL: fcmps_oge_fv_v16f32: 5468; CHECK: # %bb.0: 5469; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5470; CHECK-NEXT: vmfle.vf v0, v8, fa0 5471; CHECK-NEXT: ret 5472 %head = insertelement <16 x float> poison, float %b, i32 0 5473 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5474 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 5475 ret <16 x i1> %1 5476} 5477 5478define <16 x i1> @fcmps_olt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5479; CHECK-LABEL: fcmps_olt_vv_v16f32: 5480; CHECK: # %bb.0: 5481; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5482; CHECK-NEXT: vmflt.vv v0, v8, v12 5483; CHECK-NEXT: ret 5484 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 5485 ret <16 x i1> %1 5486} 5487 5488define <16 x i1> @fcmps_olt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5489; CHECK-LABEL: fcmps_olt_vf_v16f32: 5490; CHECK: # %bb.0: 5491; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5492; CHECK-NEXT: vmflt.vf v0, v8, fa0 5493; CHECK-NEXT: ret 5494 %head = insertelement <16 x float> poison, float %b, i32 0 5495 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5496 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 5497 ret <16 x i1> %1 5498} 5499 5500define <16 x i1> @fcmps_olt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5501; CHECK-LABEL: fcmps_olt_fv_v16f32: 5502; CHECK: # %bb.0: 5503; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5504; CHECK-NEXT: vmfgt.vf v0, v8, fa0 5505; CHECK-NEXT: ret 5506 %head = insertelement <16 x float> poison, float %b, i32 0 5507 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5508 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 5509 ret <16 x i1> %1 5510} 5511 5512define <16 x i1> @fcmps_ole_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5513; CHECK-LABEL: fcmps_ole_vv_v16f32: 5514; CHECK: # %bb.0: 5515; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5516; CHECK-NEXT: vmfle.vv v0, v8, v12 5517; CHECK-NEXT: ret 5518 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 5519 ret <16 x i1> %1 5520} 5521 5522define <16 x i1> @fcmps_ole_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5523; CHECK-LABEL: fcmps_ole_vf_v16f32: 5524; CHECK: # %bb.0: 5525; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5526; CHECK-NEXT: vmfle.vf v0, v8, fa0 5527; CHECK-NEXT: ret 5528 %head = insertelement <16 x float> poison, float %b, i32 0 5529 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5530 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 5531 ret <16 x i1> %1 5532} 5533 5534define <16 x i1> @fcmps_ole_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5535; CHECK-LABEL: fcmps_ole_fv_v16f32: 5536; CHECK: # %bb.0: 5537; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5538; CHECK-NEXT: vmfge.vf v0, v8, fa0 5539; CHECK-NEXT: ret 5540 %head = insertelement <16 x float> poison, float %b, i32 0 5541 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5542 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 5543 ret <16 x i1> %1 5544} 5545 5546define <16 x i1> @fcmps_one_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5547; CHECK-LABEL: fcmps_one_vv_v16f32: 5548; CHECK: # %bb.0: 5549; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5550; CHECK-NEXT: vmflt.vv v16, v8, v12 5551; CHECK-NEXT: vmflt.vv v17, v12, v8 5552; CHECK-NEXT: vmor.mm v0, v17, v16 5553; CHECK-NEXT: ret 5554 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 5555 ret <16 x i1> %1 5556} 5557 5558define <16 x i1> @fcmps_one_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5559; CHECK-LABEL: fcmps_one_vf_v16f32: 5560; CHECK: # %bb.0: 5561; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5562; CHECK-NEXT: vmflt.vf v12, v8, fa0 5563; CHECK-NEXT: vmfgt.vf v13, v8, fa0 5564; CHECK-NEXT: vmor.mm v0, v13, v12 5565; CHECK-NEXT: ret 5566 %head = insertelement <16 x float> poison, float %b, i32 0 5567 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5568 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 5569 ret <16 x i1> %1 5570} 5571 5572define <16 x i1> @fcmps_one_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5573; CHECK-LABEL: fcmps_one_fv_v16f32: 5574; CHECK: # %bb.0: 5575; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5576; CHECK-NEXT: vmfgt.vf v12, v8, fa0 5577; CHECK-NEXT: vmflt.vf v13, v8, fa0 5578; CHECK-NEXT: vmor.mm v0, v13, v12 5579; CHECK-NEXT: ret 5580 %head = insertelement <16 x float> poison, float %b, i32 0 5581 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5582 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 5583 ret <16 x i1> %1 5584} 5585 5586define <16 x i1> @fcmps_ord_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5587; CHECK-LABEL: fcmps_ord_vv_v16f32: 5588; CHECK: # %bb.0: 5589; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5590; CHECK-NEXT: vmfle.vv v16, v12, v12 5591; CHECK-NEXT: vmfle.vv v12, v8, v8 5592; CHECK-NEXT: vmand.mm v0, v12, v16 5593; CHECK-NEXT: ret 5594 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 5595 ret <16 x i1> %1 5596} 5597 5598define <16 x i1> @fcmps_ord_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5599; CHECK-LABEL: fcmps_ord_vf_v16f32: 5600; CHECK: # %bb.0: 5601; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5602; CHECK-NEXT: vfmv.v.f v12, fa0 5603; CHECK-NEXT: vmfle.vf v16, v12, fa0 5604; CHECK-NEXT: vmfle.vv v12, v8, v8 5605; CHECK-NEXT: vmand.mm v0, v12, v16 5606; CHECK-NEXT: ret 5607 %head = insertelement <16 x float> poison, float %b, i32 0 5608 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5609 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 5610 ret <16 x i1> %1 5611} 5612 5613define <16 x i1> @fcmps_ord_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5614; CHECK-LABEL: fcmps_ord_fv_v16f32: 5615; CHECK: # %bb.0: 5616; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5617; CHECK-NEXT: vfmv.v.f v12, fa0 5618; CHECK-NEXT: vmfle.vf v16, v12, fa0 5619; CHECK-NEXT: vmfle.vv v12, v8, v8 5620; CHECK-NEXT: vmand.mm v0, v16, v12 5621; CHECK-NEXT: ret 5622 %head = insertelement <16 x float> poison, float %b, i32 0 5623 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5624 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 5625 ret <16 x i1> %1 5626} 5627 5628define <16 x i1> @fcmps_ueq_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5629; CHECK-LABEL: fcmps_ueq_vv_v16f32: 5630; CHECK: # %bb.0: 5631; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5632; CHECK-NEXT: vmflt.vv v16, v8, v12 5633; CHECK-NEXT: vmflt.vv v17, v12, v8 5634; CHECK-NEXT: vmnor.mm v0, v17, v16 5635; CHECK-NEXT: ret 5636 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5637 ret <16 x i1> %1 5638} 5639 5640define <16 x i1> @fcmps_ueq_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5641; CHECK-LABEL: fcmps_ueq_vf_v16f32: 5642; CHECK: # %bb.0: 5643; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5644; CHECK-NEXT: vmflt.vf v12, v8, fa0 5645; CHECK-NEXT: vmfgt.vf v13, v8, fa0 5646; CHECK-NEXT: vmnor.mm v0, v13, v12 5647; CHECK-NEXT: ret 5648 %head = insertelement <16 x float> poison, float %b, i32 0 5649 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5650 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5651 ret <16 x i1> %1 5652} 5653 5654define <16 x i1> @fcmps_ueq_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5655; CHECK-LABEL: fcmps_ueq_fv_v16f32: 5656; CHECK: # %bb.0: 5657; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5658; CHECK-NEXT: vmfgt.vf v12, v8, fa0 5659; CHECK-NEXT: vmflt.vf v13, v8, fa0 5660; CHECK-NEXT: vmnor.mm v0, v13, v12 5661; CHECK-NEXT: ret 5662 %head = insertelement <16 x float> poison, float %b, i32 0 5663 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5664 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 5665 ret <16 x i1> %1 5666} 5667 5668define <16 x i1> @fcmps_ugt_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5669; CHECK-LABEL: fcmps_ugt_vv_v16f32: 5670; CHECK: # %bb.0: 5671; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5672; CHECK-NEXT: vmfle.vv v16, v8, v12 5673; CHECK-NEXT: vmnot.m v0, v16 5674; CHECK-NEXT: ret 5675 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5676 ret <16 x i1> %1 5677} 5678 5679define <16 x i1> @fcmps_ugt_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5680; CHECK-LABEL: fcmps_ugt_vf_v16f32: 5681; CHECK: # %bb.0: 5682; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5683; CHECK-NEXT: vmfle.vf v12, v8, fa0 5684; CHECK-NEXT: vmnot.m v0, v12 5685; CHECK-NEXT: ret 5686 %head = insertelement <16 x float> poison, float %b, i32 0 5687 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5688 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5689 ret <16 x i1> %1 5690} 5691 5692define <16 x i1> @fcmps_ugt_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5693; CHECK-LABEL: fcmps_ugt_fv_v16f32: 5694; CHECK: # %bb.0: 5695; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5696; CHECK-NEXT: vmfge.vf v12, v8, fa0 5697; CHECK-NEXT: vmnot.m v0, v12 5698; CHECK-NEXT: ret 5699 %head = insertelement <16 x float> poison, float %b, i32 0 5700 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5701 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 5702 ret <16 x i1> %1 5703} 5704 5705define <16 x i1> @fcmps_uge_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5706; CHECK-LABEL: fcmps_uge_vv_v16f32: 5707; CHECK: # %bb.0: 5708; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5709; CHECK-NEXT: vmflt.vv v16, v8, v12 5710; CHECK-NEXT: vmnot.m v0, v16 5711; CHECK-NEXT: ret 5712 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 5713 ret <16 x i1> %1 5714} 5715 5716define <16 x i1> @fcmps_uge_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5717; CHECK-LABEL: fcmps_uge_vf_v16f32: 5718; CHECK: # %bb.0: 5719; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5720; CHECK-NEXT: vmflt.vf v12, v8, fa0 5721; CHECK-NEXT: vmnot.m v0, v12 5722; CHECK-NEXT: ret 5723 %head = insertelement <16 x float> poison, float %b, i32 0 5724 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5725 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 5726 ret <16 x i1> %1 5727} 5728 5729define <16 x i1> @fcmps_uge_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5730; CHECK-LABEL: fcmps_uge_fv_v16f32: 5731; CHECK: # %bb.0: 5732; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5733; CHECK-NEXT: vmfgt.vf v12, v8, fa0 5734; CHECK-NEXT: vmnot.m v0, v12 5735; CHECK-NEXT: ret 5736 %head = insertelement <16 x float> poison, float %b, i32 0 5737 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5738 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 5739 ret <16 x i1> %1 5740} 5741 5742define <16 x i1> @fcmps_ult_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5743; CHECK-LABEL: fcmps_ult_vv_v16f32: 5744; CHECK: # %bb.0: 5745; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5746; CHECK-NEXT: vmfle.vv v16, v12, v8 5747; CHECK-NEXT: vmnot.m v0, v16 5748; CHECK-NEXT: ret 5749 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 5750 ret <16 x i1> %1 5751} 5752 5753define <16 x i1> @fcmps_ult_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5754; CHECK-LABEL: fcmps_ult_vf_v16f32: 5755; CHECK: # %bb.0: 5756; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5757; CHECK-NEXT: vmfge.vf v12, v8, fa0 5758; CHECK-NEXT: vmnot.m v0, v12 5759; CHECK-NEXT: ret 5760 %head = insertelement <16 x float> poison, float %b, i32 0 5761 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5762 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 5763 ret <16 x i1> %1 5764} 5765 5766define <16 x i1> @fcmps_ult_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5767; CHECK-LABEL: fcmps_ult_fv_v16f32: 5768; CHECK: # %bb.0: 5769; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5770; CHECK-NEXT: vmfle.vf v12, v8, fa0 5771; CHECK-NEXT: vmnot.m v0, v12 5772; CHECK-NEXT: ret 5773 %head = insertelement <16 x float> poison, float %b, i32 0 5774 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5775 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 5776 ret <16 x i1> %1 5777} 5778 5779define <16 x i1> @fcmps_ule_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5780; CHECK-LABEL: fcmps_ule_vv_v16f32: 5781; CHECK: # %bb.0: 5782; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5783; CHECK-NEXT: vmflt.vv v16, v12, v8 5784; CHECK-NEXT: vmnot.m v0, v16 5785; CHECK-NEXT: ret 5786 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 5787 ret <16 x i1> %1 5788} 5789 5790define <16 x i1> @fcmps_ule_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5791; CHECK-LABEL: fcmps_ule_vf_v16f32: 5792; CHECK: # %bb.0: 5793; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5794; CHECK-NEXT: vmfgt.vf v12, v8, fa0 5795; CHECK-NEXT: vmnot.m v0, v12 5796; CHECK-NEXT: ret 5797 %head = insertelement <16 x float> poison, float %b, i32 0 5798 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5799 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 5800 ret <16 x i1> %1 5801} 5802 5803define <16 x i1> @fcmps_ule_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5804; CHECK-LABEL: fcmps_ule_fv_v16f32: 5805; CHECK: # %bb.0: 5806; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5807; CHECK-NEXT: vmflt.vf v12, v8, fa0 5808; CHECK-NEXT: vmnot.m v0, v12 5809; CHECK-NEXT: ret 5810 %head = insertelement <16 x float> poison, float %b, i32 0 5811 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5812 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 5813 ret <16 x i1> %1 5814} 5815 5816define <16 x i1> @fcmps_une_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5817; CHECK-LABEL: fcmps_une_vv_v16f32: 5818; CHECK: # %bb.0: 5819; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5820; CHECK-NEXT: vmfle.vv v16, v12, v8 5821; CHECK-NEXT: vmfle.vv v17, v8, v12 5822; CHECK-NEXT: vmnand.mm v0, v17, v16 5823; CHECK-NEXT: ret 5824 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 5825 ret <16 x i1> %1 5826} 5827 5828define <16 x i1> @fcmps_une_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5829; CHECK-LABEL: fcmps_une_vf_v16f32: 5830; CHECK: # %bb.0: 5831; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5832; CHECK-NEXT: vmfge.vf v12, v8, fa0 5833; CHECK-NEXT: vmfle.vf v13, v8, fa0 5834; CHECK-NEXT: vmnand.mm v0, v13, v12 5835; CHECK-NEXT: ret 5836 %head = insertelement <16 x float> poison, float %b, i32 0 5837 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5838 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 5839 ret <16 x i1> %1 5840} 5841 5842define <16 x i1> @fcmps_une_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5843; CHECK-LABEL: fcmps_une_fv_v16f32: 5844; CHECK: # %bb.0: 5845; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5846; CHECK-NEXT: vmfle.vf v12, v8, fa0 5847; CHECK-NEXT: vmfge.vf v13, v8, fa0 5848; CHECK-NEXT: vmnand.mm v0, v13, v12 5849; CHECK-NEXT: ret 5850 %head = insertelement <16 x float> poison, float %b, i32 0 5851 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5852 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 5853 ret <16 x i1> %1 5854} 5855 5856define <16 x i1> @fcmps_uno_vv_v16f32(<16 x float> %va, <16 x float> %vb) nounwind strictfp { 5857; CHECK-LABEL: fcmps_uno_vv_v16f32: 5858; CHECK: # %bb.0: 5859; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5860; CHECK-NEXT: vmfle.vv v16, v12, v12 5861; CHECK-NEXT: vmfle.vv v12, v8, v8 5862; CHECK-NEXT: vmnot.m v8, v12 5863; CHECK-NEXT: vmorn.mm v0, v8, v16 5864; CHECK-NEXT: ret 5865 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 5866 ret <16 x i1> %1 5867} 5868 5869define <16 x i1> @fcmps_uno_vf_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5870; CHECK-LABEL: fcmps_uno_vf_v16f32: 5871; CHECK: # %bb.0: 5872; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5873; CHECK-NEXT: vfmv.v.f v12, fa0 5874; CHECK-NEXT: vmfle.vv v16, v8, v8 5875; CHECK-NEXT: vmfle.vf v8, v12, fa0 5876; CHECK-NEXT: vmnot.m v9, v16 5877; CHECK-NEXT: vmorn.mm v0, v9, v8 5878; CHECK-NEXT: ret 5879 %head = insertelement <16 x float> poison, float %b, i32 0 5880 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5881 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 5882 ret <16 x i1> %1 5883} 5884 5885define <16 x i1> @fcmps_uno_fv_v16f32(<16 x float> %va, float %b) nounwind strictfp { 5886; CHECK-LABEL: fcmps_uno_fv_v16f32: 5887; CHECK: # %bb.0: 5888; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 5889; CHECK-NEXT: vfmv.v.f v12, fa0 5890; CHECK-NEXT: vmfle.vf v16, v12, fa0 5891; CHECK-NEXT: vmnot.m v12, v16 5892; CHECK-NEXT: vmfle.vv v13, v8, v8 5893; CHECK-NEXT: vmorn.mm v0, v12, v13 5894; CHECK-NEXT: ret 5895 %head = insertelement <16 x float> poison, float %b, i32 0 5896 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer 5897 %1 = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float> %splat, <16 x float> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 5898 ret <16 x i1> %1 5899} 5900 5901declare <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double>, <1 x double>, metadata, metadata) 5902define <1 x i1> @fcmps_oeq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 5903; CHECK-LABEL: fcmps_oeq_vv_v1f64: 5904; CHECK: # %bb.0: 5905; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5906; CHECK-NEXT: vmfle.vv v10, v9, v8 5907; CHECK-NEXT: vmfle.vv v8, v8, v9 5908; CHECK-NEXT: vmand.mm v0, v8, v10 5909; CHECK-NEXT: ret 5910 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5911 ret <1 x i1> %1 5912} 5913 5914define <1 x i1> @fcmps_oeq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5915; CHECK-LABEL: fcmps_oeq_vf_v1f64: 5916; CHECK: # %bb.0: 5917; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5918; CHECK-NEXT: vmfge.vf v9, v8, fa0 5919; CHECK-NEXT: vmfle.vf v8, v8, fa0 5920; CHECK-NEXT: vmand.mm v0, v8, v9 5921; CHECK-NEXT: ret 5922 %head = insertelement <1 x double> poison, double %b, i32 0 5923 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 5924 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5925 ret <1 x i1> %1 5926} 5927 5928define <1 x i1> @fcmps_oeq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5929; CHECK-LABEL: fcmps_oeq_fv_v1f64: 5930; CHECK: # %bb.0: 5931; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5932; CHECK-NEXT: vmfle.vf v9, v8, fa0 5933; CHECK-NEXT: vmfge.vf v8, v8, fa0 5934; CHECK-NEXT: vmand.mm v0, v8, v9 5935; CHECK-NEXT: ret 5936 %head = insertelement <1 x double> poison, double %b, i32 0 5937 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 5938 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 5939 ret <1 x i1> %1 5940} 5941 5942define <1 x i1> @fcmps_ogt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 5943; CHECK-LABEL: fcmps_ogt_vv_v1f64: 5944; CHECK: # %bb.0: 5945; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5946; CHECK-NEXT: vmflt.vv v0, v9, v8 5947; CHECK-NEXT: ret 5948 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5949 ret <1 x i1> %1 5950} 5951 5952define <1 x i1> @fcmps_ogt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5953; CHECK-LABEL: fcmps_ogt_vf_v1f64: 5954; CHECK: # %bb.0: 5955; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5956; CHECK-NEXT: vmfgt.vf v0, v8, fa0 5957; CHECK-NEXT: ret 5958 %head = insertelement <1 x double> poison, double %b, i32 0 5959 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 5960 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5961 ret <1 x i1> %1 5962} 5963 5964define <1 x i1> @fcmps_ogt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5965; CHECK-LABEL: fcmps_ogt_fv_v1f64: 5966; CHECK: # %bb.0: 5967; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5968; CHECK-NEXT: vmflt.vf v0, v8, fa0 5969; CHECK-NEXT: ret 5970 %head = insertelement <1 x double> poison, double %b, i32 0 5971 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 5972 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 5973 ret <1 x i1> %1 5974} 5975 5976define <1 x i1> @fcmps_oge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 5977; CHECK-LABEL: fcmps_oge_vv_v1f64: 5978; CHECK: # %bb.0: 5979; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5980; CHECK-NEXT: vmfle.vv v0, v9, v8 5981; CHECK-NEXT: ret 5982 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 5983 ret <1 x i1> %1 5984} 5985 5986define <1 x i1> @fcmps_oge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5987; CHECK-LABEL: fcmps_oge_vf_v1f64: 5988; CHECK: # %bb.0: 5989; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 5990; CHECK-NEXT: vmfge.vf v0, v8, fa0 5991; CHECK-NEXT: ret 5992 %head = insertelement <1 x double> poison, double %b, i32 0 5993 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 5994 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 5995 ret <1 x i1> %1 5996} 5997 5998define <1 x i1> @fcmps_oge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 5999; CHECK-LABEL: fcmps_oge_fv_v1f64: 6000; CHECK: # %bb.0: 6001; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6002; CHECK-NEXT: vmfle.vf v0, v8, fa0 6003; CHECK-NEXT: ret 6004 %head = insertelement <1 x double> poison, double %b, i32 0 6005 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6006 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 6007 ret <1 x i1> %1 6008} 6009 6010define <1 x i1> @fcmps_olt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6011; CHECK-LABEL: fcmps_olt_vv_v1f64: 6012; CHECK: # %bb.0: 6013; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6014; CHECK-NEXT: vmflt.vv v0, v8, v9 6015; CHECK-NEXT: ret 6016 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 6017 ret <1 x i1> %1 6018} 6019 6020define <1 x i1> @fcmps_olt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6021; CHECK-LABEL: fcmps_olt_vf_v1f64: 6022; CHECK: # %bb.0: 6023; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6024; CHECK-NEXT: vmflt.vf v0, v8, fa0 6025; CHECK-NEXT: ret 6026 %head = insertelement <1 x double> poison, double %b, i32 0 6027 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6028 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 6029 ret <1 x i1> %1 6030} 6031 6032define <1 x i1> @fcmps_olt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6033; CHECK-LABEL: fcmps_olt_fv_v1f64: 6034; CHECK: # %bb.0: 6035; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6036; CHECK-NEXT: vmfgt.vf v0, v8, fa0 6037; CHECK-NEXT: ret 6038 %head = insertelement <1 x double> poison, double %b, i32 0 6039 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6040 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6041 ret <1 x i1> %1 6042} 6043 6044define <1 x i1> @fcmps_ole_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6045; CHECK-LABEL: fcmps_ole_vv_v1f64: 6046; CHECK: # %bb.0: 6047; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6048; CHECK-NEXT: vmfle.vv v0, v8, v9 6049; CHECK-NEXT: ret 6050 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6051 ret <1 x i1> %1 6052} 6053 6054define <1 x i1> @fcmps_ole_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6055; CHECK-LABEL: fcmps_ole_vf_v1f64: 6056; CHECK: # %bb.0: 6057; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6058; CHECK-NEXT: vmfle.vf v0, v8, fa0 6059; CHECK-NEXT: ret 6060 %head = insertelement <1 x double> poison, double %b, i32 0 6061 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6062 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6063 ret <1 x i1> %1 6064} 6065 6066define <1 x i1> @fcmps_ole_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6067; CHECK-LABEL: fcmps_ole_fv_v1f64: 6068; CHECK: # %bb.0: 6069; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6070; CHECK-NEXT: vmfge.vf v0, v8, fa0 6071; CHECK-NEXT: ret 6072 %head = insertelement <1 x double> poison, double %b, i32 0 6073 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6074 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6075 ret <1 x i1> %1 6076} 6077 6078define <1 x i1> @fcmps_one_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6079; CHECK-LABEL: fcmps_one_vv_v1f64: 6080; CHECK: # %bb.0: 6081; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6082; CHECK-NEXT: vmflt.vv v10, v8, v9 6083; CHECK-NEXT: vmflt.vv v8, v9, v8 6084; CHECK-NEXT: vmor.mm v0, v8, v10 6085; CHECK-NEXT: ret 6086 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6087 ret <1 x i1> %1 6088} 6089 6090define <1 x i1> @fcmps_one_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6091; CHECK-LABEL: fcmps_one_vf_v1f64: 6092; CHECK: # %bb.0: 6093; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6094; CHECK-NEXT: vmflt.vf v9, v8, fa0 6095; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6096; CHECK-NEXT: vmor.mm v0, v8, v9 6097; CHECK-NEXT: ret 6098 %head = insertelement <1 x double> poison, double %b, i32 0 6099 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6100 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6101 ret <1 x i1> %1 6102} 6103 6104define <1 x i1> @fcmps_one_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6105; CHECK-LABEL: fcmps_one_fv_v1f64: 6106; CHECK: # %bb.0: 6107; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6108; CHECK-NEXT: vmfgt.vf v9, v8, fa0 6109; CHECK-NEXT: vmflt.vf v8, v8, fa0 6110; CHECK-NEXT: vmor.mm v0, v8, v9 6111; CHECK-NEXT: ret 6112 %head = insertelement <1 x double> poison, double %b, i32 0 6113 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6114 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6115 ret <1 x i1> %1 6116} 6117 6118define <1 x i1> @fcmps_ord_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6119; CHECK-LABEL: fcmps_ord_vv_v1f64: 6120; CHECK: # %bb.0: 6121; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6122; CHECK-NEXT: vmfle.vv v9, v9, v9 6123; CHECK-NEXT: vmfle.vv v8, v8, v8 6124; CHECK-NEXT: vmand.mm v0, v8, v9 6125; CHECK-NEXT: ret 6126 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6127 ret <1 x i1> %1 6128} 6129 6130define <1 x i1> @fcmps_ord_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6131; CHECK-LABEL: fcmps_ord_vf_v1f64: 6132; CHECK: # %bb.0: 6133; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6134; CHECK-NEXT: vfmv.s.f v9, fa0 6135; CHECK-NEXT: vmfle.vf v9, v9, fa0 6136; CHECK-NEXT: vmfle.vv v8, v8, v8 6137; CHECK-NEXT: vmand.mm v0, v8, v9 6138; CHECK-NEXT: ret 6139 %head = insertelement <1 x double> poison, double %b, i32 0 6140 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6141 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6142 ret <1 x i1> %1 6143} 6144 6145define <1 x i1> @fcmps_ord_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6146; CHECK-LABEL: fcmps_ord_fv_v1f64: 6147; CHECK: # %bb.0: 6148; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6149; CHECK-NEXT: vfmv.s.f v9, fa0 6150; CHECK-NEXT: vmfle.vf v9, v9, fa0 6151; CHECK-NEXT: vmfle.vv v8, v8, v8 6152; CHECK-NEXT: vmand.mm v0, v9, v8 6153; CHECK-NEXT: ret 6154 %head = insertelement <1 x double> poison, double %b, i32 0 6155 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6156 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6157 ret <1 x i1> %1 6158} 6159 6160define <1 x i1> @fcmps_ueq_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6161; CHECK-LABEL: fcmps_ueq_vv_v1f64: 6162; CHECK: # %bb.0: 6163; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6164; CHECK-NEXT: vmflt.vv v10, v8, v9 6165; CHECK-NEXT: vmflt.vv v8, v9, v8 6166; CHECK-NEXT: vmnor.mm v0, v8, v10 6167; CHECK-NEXT: ret 6168 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6169 ret <1 x i1> %1 6170} 6171 6172define <1 x i1> @fcmps_ueq_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6173; CHECK-LABEL: fcmps_ueq_vf_v1f64: 6174; CHECK: # %bb.0: 6175; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6176; CHECK-NEXT: vmflt.vf v9, v8, fa0 6177; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6178; CHECK-NEXT: vmnor.mm v0, v8, v9 6179; CHECK-NEXT: ret 6180 %head = insertelement <1 x double> poison, double %b, i32 0 6181 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6182 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6183 ret <1 x i1> %1 6184} 6185 6186define <1 x i1> @fcmps_ueq_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6187; CHECK-LABEL: fcmps_ueq_fv_v1f64: 6188; CHECK: # %bb.0: 6189; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6190; CHECK-NEXT: vmfgt.vf v9, v8, fa0 6191; CHECK-NEXT: vmflt.vf v8, v8, fa0 6192; CHECK-NEXT: vmnor.mm v0, v8, v9 6193; CHECK-NEXT: ret 6194 %head = insertelement <1 x double> poison, double %b, i32 0 6195 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6196 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6197 ret <1 x i1> %1 6198} 6199 6200define <1 x i1> @fcmps_ugt_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6201; CHECK-LABEL: fcmps_ugt_vv_v1f64: 6202; CHECK: # %bb.0: 6203; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6204; CHECK-NEXT: vmfle.vv v8, v8, v9 6205; CHECK-NEXT: vmnot.m v0, v8 6206; CHECK-NEXT: ret 6207 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6208 ret <1 x i1> %1 6209} 6210 6211define <1 x i1> @fcmps_ugt_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6212; CHECK-LABEL: fcmps_ugt_vf_v1f64: 6213; CHECK: # %bb.0: 6214; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6215; CHECK-NEXT: vmfle.vf v8, v8, fa0 6216; CHECK-NEXT: vmnot.m v0, v8 6217; CHECK-NEXT: ret 6218 %head = insertelement <1 x double> poison, double %b, i32 0 6219 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6220 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6221 ret <1 x i1> %1 6222} 6223 6224define <1 x i1> @fcmps_ugt_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6225; CHECK-LABEL: fcmps_ugt_fv_v1f64: 6226; CHECK: # %bb.0: 6227; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6228; CHECK-NEXT: vmfge.vf v8, v8, fa0 6229; CHECK-NEXT: vmnot.m v0, v8 6230; CHECK-NEXT: ret 6231 %head = insertelement <1 x double> poison, double %b, i32 0 6232 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6233 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6234 ret <1 x i1> %1 6235} 6236 6237define <1 x i1> @fcmps_uge_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6238; CHECK-LABEL: fcmps_uge_vv_v1f64: 6239; CHECK: # %bb.0: 6240; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6241; CHECK-NEXT: vmflt.vv v8, v8, v9 6242; CHECK-NEXT: vmnot.m v0, v8 6243; CHECK-NEXT: ret 6244 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 6245 ret <1 x i1> %1 6246} 6247 6248define <1 x i1> @fcmps_uge_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6249; CHECK-LABEL: fcmps_uge_vf_v1f64: 6250; CHECK: # %bb.0: 6251; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6252; CHECK-NEXT: vmflt.vf v8, v8, fa0 6253; CHECK-NEXT: vmnot.m v0, v8 6254; CHECK-NEXT: ret 6255 %head = insertelement <1 x double> poison, double %b, i32 0 6256 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6257 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 6258 ret <1 x i1> %1 6259} 6260 6261define <1 x i1> @fcmps_uge_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6262; CHECK-LABEL: fcmps_uge_fv_v1f64: 6263; CHECK: # %bb.0: 6264; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6265; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6266; CHECK-NEXT: vmnot.m v0, v8 6267; CHECK-NEXT: ret 6268 %head = insertelement <1 x double> poison, double %b, i32 0 6269 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6270 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 6271 ret <1 x i1> %1 6272} 6273 6274define <1 x i1> @fcmps_ult_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6275; CHECK-LABEL: fcmps_ult_vv_v1f64: 6276; CHECK: # %bb.0: 6277; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6278; CHECK-NEXT: vmfle.vv v8, v9, v8 6279; CHECK-NEXT: vmnot.m v0, v8 6280; CHECK-NEXT: ret 6281 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 6282 ret <1 x i1> %1 6283} 6284 6285define <1 x i1> @fcmps_ult_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6286; CHECK-LABEL: fcmps_ult_vf_v1f64: 6287; CHECK: # %bb.0: 6288; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6289; CHECK-NEXT: vmfge.vf v8, v8, fa0 6290; CHECK-NEXT: vmnot.m v0, v8 6291; CHECK-NEXT: ret 6292 %head = insertelement <1 x double> poison, double %b, i32 0 6293 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6294 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 6295 ret <1 x i1> %1 6296} 6297 6298define <1 x i1> @fcmps_ult_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6299; CHECK-LABEL: fcmps_ult_fv_v1f64: 6300; CHECK: # %bb.0: 6301; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6302; CHECK-NEXT: vmfle.vf v8, v8, fa0 6303; CHECK-NEXT: vmnot.m v0, v8 6304; CHECK-NEXT: ret 6305 %head = insertelement <1 x double> poison, double %b, i32 0 6306 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6307 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 6308 ret <1 x i1> %1 6309} 6310 6311define <1 x i1> @fcmps_ule_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6312; CHECK-LABEL: fcmps_ule_vv_v1f64: 6313; CHECK: # %bb.0: 6314; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6315; CHECK-NEXT: vmflt.vv v8, v9, v8 6316; CHECK-NEXT: vmnot.m v0, v8 6317; CHECK-NEXT: ret 6318 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 6319 ret <1 x i1> %1 6320} 6321 6322define <1 x i1> @fcmps_ule_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6323; CHECK-LABEL: fcmps_ule_vf_v1f64: 6324; CHECK: # %bb.0: 6325; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6326; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6327; CHECK-NEXT: vmnot.m v0, v8 6328; CHECK-NEXT: ret 6329 %head = insertelement <1 x double> poison, double %b, i32 0 6330 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6331 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 6332 ret <1 x i1> %1 6333} 6334 6335define <1 x i1> @fcmps_ule_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6336; CHECK-LABEL: fcmps_ule_fv_v1f64: 6337; CHECK: # %bb.0: 6338; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6339; CHECK-NEXT: vmflt.vf v8, v8, fa0 6340; CHECK-NEXT: vmnot.m v0, v8 6341; CHECK-NEXT: ret 6342 %head = insertelement <1 x double> poison, double %b, i32 0 6343 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6344 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 6345 ret <1 x i1> %1 6346} 6347 6348define <1 x i1> @fcmps_une_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6349; CHECK-LABEL: fcmps_une_vv_v1f64: 6350; CHECK: # %bb.0: 6351; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6352; CHECK-NEXT: vmfle.vv v10, v9, v8 6353; CHECK-NEXT: vmfle.vv v8, v8, v9 6354; CHECK-NEXT: vmnand.mm v0, v8, v10 6355; CHECK-NEXT: ret 6356 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 6357 ret <1 x i1> %1 6358} 6359 6360define <1 x i1> @fcmps_une_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6361; CHECK-LABEL: fcmps_une_vf_v1f64: 6362; CHECK: # %bb.0: 6363; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6364; CHECK-NEXT: vmfge.vf v9, v8, fa0 6365; CHECK-NEXT: vmfle.vf v8, v8, fa0 6366; CHECK-NEXT: vmnand.mm v0, v8, v9 6367; CHECK-NEXT: ret 6368 %head = insertelement <1 x double> poison, double %b, i32 0 6369 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6370 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 6371 ret <1 x i1> %1 6372} 6373 6374define <1 x i1> @fcmps_une_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6375; CHECK-LABEL: fcmps_une_fv_v1f64: 6376; CHECK: # %bb.0: 6377; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6378; CHECK-NEXT: vmfle.vf v9, v8, fa0 6379; CHECK-NEXT: vmfge.vf v8, v8, fa0 6380; CHECK-NEXT: vmnand.mm v0, v8, v9 6381; CHECK-NEXT: ret 6382 %head = insertelement <1 x double> poison, double %b, i32 0 6383 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6384 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 6385 ret <1 x i1> %1 6386} 6387 6388define <1 x i1> @fcmps_uno_vv_v1f64(<1 x double> %va, <1 x double> %vb) nounwind strictfp { 6389; CHECK-LABEL: fcmps_uno_vv_v1f64: 6390; CHECK: # %bb.0: 6391; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6392; CHECK-NEXT: vmfle.vv v9, v9, v9 6393; CHECK-NEXT: vmfle.vv v8, v8, v8 6394; CHECK-NEXT: vmnot.m v8, v8 6395; CHECK-NEXT: vmorn.mm v0, v8, v9 6396; CHECK-NEXT: ret 6397 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 6398 ret <1 x i1> %1 6399} 6400 6401define <1 x i1> @fcmps_uno_vf_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6402; CHECK-LABEL: fcmps_uno_vf_v1f64: 6403; CHECK: # %bb.0: 6404; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6405; CHECK-NEXT: vfmv.s.f v9, fa0 6406; CHECK-NEXT: vmfle.vv v8, v8, v8 6407; CHECK-NEXT: vmfle.vf v9, v9, fa0 6408; CHECK-NEXT: vmnot.m v8, v8 6409; CHECK-NEXT: vmorn.mm v0, v8, v9 6410; CHECK-NEXT: ret 6411 %head = insertelement <1 x double> poison, double %b, i32 0 6412 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6413 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 6414 ret <1 x i1> %1 6415} 6416 6417define <1 x i1> @fcmps_uno_fv_v1f64(<1 x double> %va, double %b) nounwind strictfp { 6418; CHECK-LABEL: fcmps_uno_fv_v1f64: 6419; CHECK: # %bb.0: 6420; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 6421; CHECK-NEXT: vfmv.s.f v9, fa0 6422; CHECK-NEXT: vmfle.vf v9, v9, fa0 6423; CHECK-NEXT: vmnot.m v9, v9 6424; CHECK-NEXT: vmfle.vv v8, v8, v8 6425; CHECK-NEXT: vmorn.mm v0, v9, v8 6426; CHECK-NEXT: ret 6427 %head = insertelement <1 x double> poison, double %b, i32 0 6428 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer 6429 %1 = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %splat, <1 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 6430 ret <1 x i1> %1 6431} 6432 6433declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6434define <2 x i1> @fcmps_oeq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6435; CHECK-LABEL: fcmps_oeq_vv_v2f64: 6436; CHECK: # %bb.0: 6437; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6438; CHECK-NEXT: vmfle.vv v10, v9, v8 6439; CHECK-NEXT: vmfle.vv v8, v8, v9 6440; CHECK-NEXT: vmand.mm v0, v8, v10 6441; CHECK-NEXT: ret 6442 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6443 ret <2 x i1> %1 6444} 6445 6446define <2 x i1> @fcmps_oeq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6447; CHECK-LABEL: fcmps_oeq_vf_v2f64: 6448; CHECK: # %bb.0: 6449; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6450; CHECK-NEXT: vmfge.vf v9, v8, fa0 6451; CHECK-NEXT: vmfle.vf v8, v8, fa0 6452; CHECK-NEXT: vmand.mm v0, v8, v9 6453; CHECK-NEXT: ret 6454 %head = insertelement <2 x double> poison, double %b, i32 0 6455 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6456 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6457 ret <2 x i1> %1 6458} 6459 6460define <2 x i1> @fcmps_oeq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6461; CHECK-LABEL: fcmps_oeq_fv_v2f64: 6462; CHECK: # %bb.0: 6463; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6464; CHECK-NEXT: vmfle.vf v9, v8, fa0 6465; CHECK-NEXT: vmfge.vf v8, v8, fa0 6466; CHECK-NEXT: vmand.mm v0, v8, v9 6467; CHECK-NEXT: ret 6468 %head = insertelement <2 x double> poison, double %b, i32 0 6469 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6470 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6471 ret <2 x i1> %1 6472} 6473 6474define <2 x i1> @fcmps_ogt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6475; CHECK-LABEL: fcmps_ogt_vv_v2f64: 6476; CHECK: # %bb.0: 6477; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6478; CHECK-NEXT: vmflt.vv v0, v9, v8 6479; CHECK-NEXT: ret 6480 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6481 ret <2 x i1> %1 6482} 6483 6484define <2 x i1> @fcmps_ogt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6485; CHECK-LABEL: fcmps_ogt_vf_v2f64: 6486; CHECK: # %bb.0: 6487; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6488; CHECK-NEXT: vmfgt.vf v0, v8, fa0 6489; CHECK-NEXT: ret 6490 %head = insertelement <2 x double> poison, double %b, i32 0 6491 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6492 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6493 ret <2 x i1> %1 6494} 6495 6496define <2 x i1> @fcmps_ogt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6497; CHECK-LABEL: fcmps_ogt_fv_v2f64: 6498; CHECK: # %bb.0: 6499; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6500; CHECK-NEXT: vmflt.vf v0, v8, fa0 6501; CHECK-NEXT: ret 6502 %head = insertelement <2 x double> poison, double %b, i32 0 6503 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6504 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 6505 ret <2 x i1> %1 6506} 6507 6508define <2 x i1> @fcmps_oge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6509; CHECK-LABEL: fcmps_oge_vv_v2f64: 6510; CHECK: # %bb.0: 6511; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6512; CHECK-NEXT: vmfle.vv v0, v9, v8 6513; CHECK-NEXT: ret 6514 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 6515 ret <2 x i1> %1 6516} 6517 6518define <2 x i1> @fcmps_oge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6519; CHECK-LABEL: fcmps_oge_vf_v2f64: 6520; CHECK: # %bb.0: 6521; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6522; CHECK-NEXT: vmfge.vf v0, v8, fa0 6523; CHECK-NEXT: ret 6524 %head = insertelement <2 x double> poison, double %b, i32 0 6525 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6526 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 6527 ret <2 x i1> %1 6528} 6529 6530define <2 x i1> @fcmps_oge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6531; CHECK-LABEL: fcmps_oge_fv_v2f64: 6532; CHECK: # %bb.0: 6533; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6534; CHECK-NEXT: vmfle.vf v0, v8, fa0 6535; CHECK-NEXT: ret 6536 %head = insertelement <2 x double> poison, double %b, i32 0 6537 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6538 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 6539 ret <2 x i1> %1 6540} 6541 6542define <2 x i1> @fcmps_olt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6543; CHECK-LABEL: fcmps_olt_vv_v2f64: 6544; CHECK: # %bb.0: 6545; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6546; CHECK-NEXT: vmflt.vv v0, v8, v9 6547; CHECK-NEXT: ret 6548 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 6549 ret <2 x i1> %1 6550} 6551 6552define <2 x i1> @fcmps_olt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6553; CHECK-LABEL: fcmps_olt_vf_v2f64: 6554; CHECK: # %bb.0: 6555; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6556; CHECK-NEXT: vmflt.vf v0, v8, fa0 6557; CHECK-NEXT: ret 6558 %head = insertelement <2 x double> poison, double %b, i32 0 6559 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6560 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 6561 ret <2 x i1> %1 6562} 6563 6564define <2 x i1> @fcmps_olt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6565; CHECK-LABEL: fcmps_olt_fv_v2f64: 6566; CHECK: # %bb.0: 6567; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6568; CHECK-NEXT: vmfgt.vf v0, v8, fa0 6569; CHECK-NEXT: ret 6570 %head = insertelement <2 x double> poison, double %b, i32 0 6571 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6572 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 6573 ret <2 x i1> %1 6574} 6575 6576define <2 x i1> @fcmps_ole_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6577; CHECK-LABEL: fcmps_ole_vv_v2f64: 6578; CHECK: # %bb.0: 6579; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6580; CHECK-NEXT: vmfle.vv v0, v8, v9 6581; CHECK-NEXT: ret 6582 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 6583 ret <2 x i1> %1 6584} 6585 6586define <2 x i1> @fcmps_ole_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6587; CHECK-LABEL: fcmps_ole_vf_v2f64: 6588; CHECK: # %bb.0: 6589; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6590; CHECK-NEXT: vmfle.vf v0, v8, fa0 6591; CHECK-NEXT: ret 6592 %head = insertelement <2 x double> poison, double %b, i32 0 6593 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6594 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 6595 ret <2 x i1> %1 6596} 6597 6598define <2 x i1> @fcmps_ole_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6599; CHECK-LABEL: fcmps_ole_fv_v2f64: 6600; CHECK: # %bb.0: 6601; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6602; CHECK-NEXT: vmfge.vf v0, v8, fa0 6603; CHECK-NEXT: ret 6604 %head = insertelement <2 x double> poison, double %b, i32 0 6605 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6606 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 6607 ret <2 x i1> %1 6608} 6609 6610define <2 x i1> @fcmps_one_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6611; CHECK-LABEL: fcmps_one_vv_v2f64: 6612; CHECK: # %bb.0: 6613; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6614; CHECK-NEXT: vmflt.vv v10, v8, v9 6615; CHECK-NEXT: vmflt.vv v8, v9, v8 6616; CHECK-NEXT: vmor.mm v0, v8, v10 6617; CHECK-NEXT: ret 6618 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 6619 ret <2 x i1> %1 6620} 6621 6622define <2 x i1> @fcmps_one_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6623; CHECK-LABEL: fcmps_one_vf_v2f64: 6624; CHECK: # %bb.0: 6625; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6626; CHECK-NEXT: vmflt.vf v9, v8, fa0 6627; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6628; CHECK-NEXT: vmor.mm v0, v8, v9 6629; CHECK-NEXT: ret 6630 %head = insertelement <2 x double> poison, double %b, i32 0 6631 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6632 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 6633 ret <2 x i1> %1 6634} 6635 6636define <2 x i1> @fcmps_one_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6637; CHECK-LABEL: fcmps_one_fv_v2f64: 6638; CHECK: # %bb.0: 6639; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6640; CHECK-NEXT: vmfgt.vf v9, v8, fa0 6641; CHECK-NEXT: vmflt.vf v8, v8, fa0 6642; CHECK-NEXT: vmor.mm v0, v8, v9 6643; CHECK-NEXT: ret 6644 %head = insertelement <2 x double> poison, double %b, i32 0 6645 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6646 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 6647 ret <2 x i1> %1 6648} 6649 6650define <2 x i1> @fcmps_ord_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6651; CHECK-LABEL: fcmps_ord_vv_v2f64: 6652; CHECK: # %bb.0: 6653; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6654; CHECK-NEXT: vmfle.vv v9, v9, v9 6655; CHECK-NEXT: vmfle.vv v8, v8, v8 6656; CHECK-NEXT: vmand.mm v0, v8, v9 6657; CHECK-NEXT: ret 6658 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 6659 ret <2 x i1> %1 6660} 6661 6662define <2 x i1> @fcmps_ord_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6663; CHECK-LABEL: fcmps_ord_vf_v2f64: 6664; CHECK: # %bb.0: 6665; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6666; CHECK-NEXT: vfmv.v.f v9, fa0 6667; CHECK-NEXT: vmfle.vf v9, v9, fa0 6668; CHECK-NEXT: vmfle.vv v8, v8, v8 6669; CHECK-NEXT: vmand.mm v0, v8, v9 6670; CHECK-NEXT: ret 6671 %head = insertelement <2 x double> poison, double %b, i32 0 6672 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6673 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 6674 ret <2 x i1> %1 6675} 6676 6677define <2 x i1> @fcmps_ord_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6678; CHECK-LABEL: fcmps_ord_fv_v2f64: 6679; CHECK: # %bb.0: 6680; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6681; CHECK-NEXT: vfmv.v.f v9, fa0 6682; CHECK-NEXT: vmfle.vf v9, v9, fa0 6683; CHECK-NEXT: vmfle.vv v8, v8, v8 6684; CHECK-NEXT: vmand.mm v0, v9, v8 6685; CHECK-NEXT: ret 6686 %head = insertelement <2 x double> poison, double %b, i32 0 6687 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6688 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 6689 ret <2 x i1> %1 6690} 6691 6692define <2 x i1> @fcmps_ueq_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6693; CHECK-LABEL: fcmps_ueq_vv_v2f64: 6694; CHECK: # %bb.0: 6695; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6696; CHECK-NEXT: vmflt.vv v10, v8, v9 6697; CHECK-NEXT: vmflt.vv v8, v9, v8 6698; CHECK-NEXT: vmnor.mm v0, v8, v10 6699; CHECK-NEXT: ret 6700 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6701 ret <2 x i1> %1 6702} 6703 6704define <2 x i1> @fcmps_ueq_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6705; CHECK-LABEL: fcmps_ueq_vf_v2f64: 6706; CHECK: # %bb.0: 6707; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6708; CHECK-NEXT: vmflt.vf v9, v8, fa0 6709; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6710; CHECK-NEXT: vmnor.mm v0, v8, v9 6711; CHECK-NEXT: ret 6712 %head = insertelement <2 x double> poison, double %b, i32 0 6713 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6714 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6715 ret <2 x i1> %1 6716} 6717 6718define <2 x i1> @fcmps_ueq_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6719; CHECK-LABEL: fcmps_ueq_fv_v2f64: 6720; CHECK: # %bb.0: 6721; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6722; CHECK-NEXT: vmfgt.vf v9, v8, fa0 6723; CHECK-NEXT: vmflt.vf v8, v8, fa0 6724; CHECK-NEXT: vmnor.mm v0, v8, v9 6725; CHECK-NEXT: ret 6726 %head = insertelement <2 x double> poison, double %b, i32 0 6727 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6728 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 6729 ret <2 x i1> %1 6730} 6731 6732define <2 x i1> @fcmps_ugt_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6733; CHECK-LABEL: fcmps_ugt_vv_v2f64: 6734; CHECK: # %bb.0: 6735; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6736; CHECK-NEXT: vmfle.vv v8, v8, v9 6737; CHECK-NEXT: vmnot.m v0, v8 6738; CHECK-NEXT: ret 6739 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6740 ret <2 x i1> %1 6741} 6742 6743define <2 x i1> @fcmps_ugt_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6744; CHECK-LABEL: fcmps_ugt_vf_v2f64: 6745; CHECK: # %bb.0: 6746; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6747; CHECK-NEXT: vmfle.vf v8, v8, fa0 6748; CHECK-NEXT: vmnot.m v0, v8 6749; CHECK-NEXT: ret 6750 %head = insertelement <2 x double> poison, double %b, i32 0 6751 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6752 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6753 ret <2 x i1> %1 6754} 6755 6756define <2 x i1> @fcmps_ugt_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6757; CHECK-LABEL: fcmps_ugt_fv_v2f64: 6758; CHECK: # %bb.0: 6759; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6760; CHECK-NEXT: vmfge.vf v8, v8, fa0 6761; CHECK-NEXT: vmnot.m v0, v8 6762; CHECK-NEXT: ret 6763 %head = insertelement <2 x double> poison, double %b, i32 0 6764 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6765 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 6766 ret <2 x i1> %1 6767} 6768 6769define <2 x i1> @fcmps_uge_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6770; CHECK-LABEL: fcmps_uge_vv_v2f64: 6771; CHECK: # %bb.0: 6772; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6773; CHECK-NEXT: vmflt.vv v8, v8, v9 6774; CHECK-NEXT: vmnot.m v0, v8 6775; CHECK-NEXT: ret 6776 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 6777 ret <2 x i1> %1 6778} 6779 6780define <2 x i1> @fcmps_uge_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6781; CHECK-LABEL: fcmps_uge_vf_v2f64: 6782; CHECK: # %bb.0: 6783; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6784; CHECK-NEXT: vmflt.vf v8, v8, fa0 6785; CHECK-NEXT: vmnot.m v0, v8 6786; CHECK-NEXT: ret 6787 %head = insertelement <2 x double> poison, double %b, i32 0 6788 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6789 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 6790 ret <2 x i1> %1 6791} 6792 6793define <2 x i1> @fcmps_uge_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6794; CHECK-LABEL: fcmps_uge_fv_v2f64: 6795; CHECK: # %bb.0: 6796; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6797; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6798; CHECK-NEXT: vmnot.m v0, v8 6799; CHECK-NEXT: ret 6800 %head = insertelement <2 x double> poison, double %b, i32 0 6801 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6802 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 6803 ret <2 x i1> %1 6804} 6805 6806define <2 x i1> @fcmps_ult_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6807; CHECK-LABEL: fcmps_ult_vv_v2f64: 6808; CHECK: # %bb.0: 6809; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6810; CHECK-NEXT: vmfle.vv v8, v9, v8 6811; CHECK-NEXT: vmnot.m v0, v8 6812; CHECK-NEXT: ret 6813 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 6814 ret <2 x i1> %1 6815} 6816 6817define <2 x i1> @fcmps_ult_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6818; CHECK-LABEL: fcmps_ult_vf_v2f64: 6819; CHECK: # %bb.0: 6820; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6821; CHECK-NEXT: vmfge.vf v8, v8, fa0 6822; CHECK-NEXT: vmnot.m v0, v8 6823; CHECK-NEXT: ret 6824 %head = insertelement <2 x double> poison, double %b, i32 0 6825 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6826 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 6827 ret <2 x i1> %1 6828} 6829 6830define <2 x i1> @fcmps_ult_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6831; CHECK-LABEL: fcmps_ult_fv_v2f64: 6832; CHECK: # %bb.0: 6833; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6834; CHECK-NEXT: vmfle.vf v8, v8, fa0 6835; CHECK-NEXT: vmnot.m v0, v8 6836; CHECK-NEXT: ret 6837 %head = insertelement <2 x double> poison, double %b, i32 0 6838 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6839 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 6840 ret <2 x i1> %1 6841} 6842 6843define <2 x i1> @fcmps_ule_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6844; CHECK-LABEL: fcmps_ule_vv_v2f64: 6845; CHECK: # %bb.0: 6846; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6847; CHECK-NEXT: vmflt.vv v8, v9, v8 6848; CHECK-NEXT: vmnot.m v0, v8 6849; CHECK-NEXT: ret 6850 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 6851 ret <2 x i1> %1 6852} 6853 6854define <2 x i1> @fcmps_ule_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6855; CHECK-LABEL: fcmps_ule_vf_v2f64: 6856; CHECK: # %bb.0: 6857; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6858; CHECK-NEXT: vmfgt.vf v8, v8, fa0 6859; CHECK-NEXT: vmnot.m v0, v8 6860; CHECK-NEXT: ret 6861 %head = insertelement <2 x double> poison, double %b, i32 0 6862 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6863 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 6864 ret <2 x i1> %1 6865} 6866 6867define <2 x i1> @fcmps_ule_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6868; CHECK-LABEL: fcmps_ule_fv_v2f64: 6869; CHECK: # %bb.0: 6870; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6871; CHECK-NEXT: vmflt.vf v8, v8, fa0 6872; CHECK-NEXT: vmnot.m v0, v8 6873; CHECK-NEXT: ret 6874 %head = insertelement <2 x double> poison, double %b, i32 0 6875 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6876 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 6877 ret <2 x i1> %1 6878} 6879 6880define <2 x i1> @fcmps_une_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6881; CHECK-LABEL: fcmps_une_vv_v2f64: 6882; CHECK: # %bb.0: 6883; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6884; CHECK-NEXT: vmfle.vv v10, v9, v8 6885; CHECK-NEXT: vmfle.vv v8, v8, v9 6886; CHECK-NEXT: vmnand.mm v0, v8, v10 6887; CHECK-NEXT: ret 6888 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 6889 ret <2 x i1> %1 6890} 6891 6892define <2 x i1> @fcmps_une_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6893; CHECK-LABEL: fcmps_une_vf_v2f64: 6894; CHECK: # %bb.0: 6895; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6896; CHECK-NEXT: vmfge.vf v9, v8, fa0 6897; CHECK-NEXT: vmfle.vf v8, v8, fa0 6898; CHECK-NEXT: vmnand.mm v0, v8, v9 6899; CHECK-NEXT: ret 6900 %head = insertelement <2 x double> poison, double %b, i32 0 6901 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6902 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 6903 ret <2 x i1> %1 6904} 6905 6906define <2 x i1> @fcmps_une_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6907; CHECK-LABEL: fcmps_une_fv_v2f64: 6908; CHECK: # %bb.0: 6909; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6910; CHECK-NEXT: vmfle.vf v9, v8, fa0 6911; CHECK-NEXT: vmfge.vf v8, v8, fa0 6912; CHECK-NEXT: vmnand.mm v0, v8, v9 6913; CHECK-NEXT: ret 6914 %head = insertelement <2 x double> poison, double %b, i32 0 6915 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6916 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 6917 ret <2 x i1> %1 6918} 6919 6920define <2 x i1> @fcmps_uno_vv_v2f64(<2 x double> %va, <2 x double> %vb) nounwind strictfp { 6921; CHECK-LABEL: fcmps_uno_vv_v2f64: 6922; CHECK: # %bb.0: 6923; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6924; CHECK-NEXT: vmfle.vv v9, v9, v9 6925; CHECK-NEXT: vmfle.vv v8, v8, v8 6926; CHECK-NEXT: vmnot.m v8, v8 6927; CHECK-NEXT: vmorn.mm v0, v8, v9 6928; CHECK-NEXT: ret 6929 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 6930 ret <2 x i1> %1 6931} 6932 6933define <2 x i1> @fcmps_uno_vf_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6934; CHECK-LABEL: fcmps_uno_vf_v2f64: 6935; CHECK: # %bb.0: 6936; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6937; CHECK-NEXT: vfmv.v.f v9, fa0 6938; CHECK-NEXT: vmfle.vv v8, v8, v8 6939; CHECK-NEXT: vmfle.vf v9, v9, fa0 6940; CHECK-NEXT: vmnot.m v8, v8 6941; CHECK-NEXT: vmorn.mm v0, v8, v9 6942; CHECK-NEXT: ret 6943 %head = insertelement <2 x double> poison, double %b, i32 0 6944 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6945 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 6946 ret <2 x i1> %1 6947} 6948 6949define <2 x i1> @fcmps_uno_fv_v2f64(<2 x double> %va, double %b) nounwind strictfp { 6950; CHECK-LABEL: fcmps_uno_fv_v2f64: 6951; CHECK: # %bb.0: 6952; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 6953; CHECK-NEXT: vfmv.v.f v9, fa0 6954; CHECK-NEXT: vmfle.vf v9, v9, fa0 6955; CHECK-NEXT: vmnot.m v9, v9 6956; CHECK-NEXT: vmfle.vv v8, v8, v8 6957; CHECK-NEXT: vmorn.mm v0, v9, v8 6958; CHECK-NEXT: ret 6959 %head = insertelement <2 x double> poison, double %b, i32 0 6960 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer 6961 %1 = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %splat, <2 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 6962 ret <2 x i1> %1 6963} 6964 6965declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6966define <4 x i1> @fcmps_oeq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 6967; CHECK-LABEL: fcmps_oeq_vv_v4f64: 6968; CHECK: # %bb.0: 6969; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 6970; CHECK-NEXT: vmfle.vv v12, v10, v8 6971; CHECK-NEXT: vmfle.vv v13, v8, v10 6972; CHECK-NEXT: vmand.mm v0, v13, v12 6973; CHECK-NEXT: ret 6974 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6975 ret <4 x i1> %1 6976} 6977 6978define <4 x i1> @fcmps_oeq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 6979; CHECK-LABEL: fcmps_oeq_vf_v4f64: 6980; CHECK: # %bb.0: 6981; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 6982; CHECK-NEXT: vmfge.vf v10, v8, fa0 6983; CHECK-NEXT: vmfle.vf v11, v8, fa0 6984; CHECK-NEXT: vmand.mm v0, v11, v10 6985; CHECK-NEXT: ret 6986 %head = insertelement <4 x double> poison, double %b, i32 0 6987 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 6988 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 6989 ret <4 x i1> %1 6990} 6991 6992define <4 x i1> @fcmps_oeq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 6993; CHECK-LABEL: fcmps_oeq_fv_v4f64: 6994; CHECK: # %bb.0: 6995; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 6996; CHECK-NEXT: vmfle.vf v10, v8, fa0 6997; CHECK-NEXT: vmfge.vf v11, v8, fa0 6998; CHECK-NEXT: vmand.mm v0, v11, v10 6999; CHECK-NEXT: ret 7000 %head = insertelement <4 x double> poison, double %b, i32 0 7001 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7002 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7003 ret <4 x i1> %1 7004} 7005 7006define <4 x i1> @fcmps_ogt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7007; CHECK-LABEL: fcmps_ogt_vv_v4f64: 7008; CHECK: # %bb.0: 7009; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7010; CHECK-NEXT: vmflt.vv v0, v10, v8 7011; CHECK-NEXT: ret 7012 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7013 ret <4 x i1> %1 7014} 7015 7016define <4 x i1> @fcmps_ogt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7017; CHECK-LABEL: fcmps_ogt_vf_v4f64: 7018; CHECK: # %bb.0: 7019; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7020; CHECK-NEXT: vmfgt.vf v0, v8, fa0 7021; CHECK-NEXT: ret 7022 %head = insertelement <4 x double> poison, double %b, i32 0 7023 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7024 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7025 ret <4 x i1> %1 7026} 7027 7028define <4 x i1> @fcmps_ogt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7029; CHECK-LABEL: fcmps_ogt_fv_v4f64: 7030; CHECK: # %bb.0: 7031; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7032; CHECK-NEXT: vmflt.vf v0, v8, fa0 7033; CHECK-NEXT: ret 7034 %head = insertelement <4 x double> poison, double %b, i32 0 7035 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7036 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7037 ret <4 x i1> %1 7038} 7039 7040define <4 x i1> @fcmps_oge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7041; CHECK-LABEL: fcmps_oge_vv_v4f64: 7042; CHECK: # %bb.0: 7043; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7044; CHECK-NEXT: vmfle.vv v0, v10, v8 7045; CHECK-NEXT: ret 7046 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7047 ret <4 x i1> %1 7048} 7049 7050define <4 x i1> @fcmps_oge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7051; CHECK-LABEL: fcmps_oge_vf_v4f64: 7052; CHECK: # %bb.0: 7053; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7054; CHECK-NEXT: vmfge.vf v0, v8, fa0 7055; CHECK-NEXT: ret 7056 %head = insertelement <4 x double> poison, double %b, i32 0 7057 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7058 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7059 ret <4 x i1> %1 7060} 7061 7062define <4 x i1> @fcmps_oge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7063; CHECK-LABEL: fcmps_oge_fv_v4f64: 7064; CHECK: # %bb.0: 7065; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7066; CHECK-NEXT: vmfle.vf v0, v8, fa0 7067; CHECK-NEXT: ret 7068 %head = insertelement <4 x double> poison, double %b, i32 0 7069 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7070 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7071 ret <4 x i1> %1 7072} 7073 7074define <4 x i1> @fcmps_olt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7075; CHECK-LABEL: fcmps_olt_vv_v4f64: 7076; CHECK: # %bb.0: 7077; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7078; CHECK-NEXT: vmflt.vv v0, v8, v10 7079; CHECK-NEXT: ret 7080 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 7081 ret <4 x i1> %1 7082} 7083 7084define <4 x i1> @fcmps_olt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7085; CHECK-LABEL: fcmps_olt_vf_v4f64: 7086; CHECK: # %bb.0: 7087; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7088; CHECK-NEXT: vmflt.vf v0, v8, fa0 7089; CHECK-NEXT: ret 7090 %head = insertelement <4 x double> poison, double %b, i32 0 7091 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7092 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 7093 ret <4 x i1> %1 7094} 7095 7096define <4 x i1> @fcmps_olt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7097; CHECK-LABEL: fcmps_olt_fv_v4f64: 7098; CHECK: # %bb.0: 7099; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7100; CHECK-NEXT: vmfgt.vf v0, v8, fa0 7101; CHECK-NEXT: ret 7102 %head = insertelement <4 x double> poison, double %b, i32 0 7103 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7104 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 7105 ret <4 x i1> %1 7106} 7107 7108define <4 x i1> @fcmps_ole_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7109; CHECK-LABEL: fcmps_ole_vv_v4f64: 7110; CHECK: # %bb.0: 7111; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7112; CHECK-NEXT: vmfle.vv v0, v8, v10 7113; CHECK-NEXT: ret 7114 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 7115 ret <4 x i1> %1 7116} 7117 7118define <4 x i1> @fcmps_ole_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7119; CHECK-LABEL: fcmps_ole_vf_v4f64: 7120; CHECK: # %bb.0: 7121; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7122; CHECK-NEXT: vmfle.vf v0, v8, fa0 7123; CHECK-NEXT: ret 7124 %head = insertelement <4 x double> poison, double %b, i32 0 7125 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7126 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 7127 ret <4 x i1> %1 7128} 7129 7130define <4 x i1> @fcmps_ole_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7131; CHECK-LABEL: fcmps_ole_fv_v4f64: 7132; CHECK: # %bb.0: 7133; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7134; CHECK-NEXT: vmfge.vf v0, v8, fa0 7135; CHECK-NEXT: ret 7136 %head = insertelement <4 x double> poison, double %b, i32 0 7137 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7138 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 7139 ret <4 x i1> %1 7140} 7141 7142define <4 x i1> @fcmps_one_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7143; CHECK-LABEL: fcmps_one_vv_v4f64: 7144; CHECK: # %bb.0: 7145; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7146; CHECK-NEXT: vmflt.vv v12, v8, v10 7147; CHECK-NEXT: vmflt.vv v13, v10, v8 7148; CHECK-NEXT: vmor.mm v0, v13, v12 7149; CHECK-NEXT: ret 7150 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 7151 ret <4 x i1> %1 7152} 7153 7154define <4 x i1> @fcmps_one_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7155; CHECK-LABEL: fcmps_one_vf_v4f64: 7156; CHECK: # %bb.0: 7157; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7158; CHECK-NEXT: vmflt.vf v10, v8, fa0 7159; CHECK-NEXT: vmfgt.vf v11, v8, fa0 7160; CHECK-NEXT: vmor.mm v0, v11, v10 7161; CHECK-NEXT: ret 7162 %head = insertelement <4 x double> poison, double %b, i32 0 7163 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7164 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 7165 ret <4 x i1> %1 7166} 7167 7168define <4 x i1> @fcmps_one_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7169; CHECK-LABEL: fcmps_one_fv_v4f64: 7170; CHECK: # %bb.0: 7171; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7172; CHECK-NEXT: vmfgt.vf v10, v8, fa0 7173; CHECK-NEXT: vmflt.vf v11, v8, fa0 7174; CHECK-NEXT: vmor.mm v0, v11, v10 7175; CHECK-NEXT: ret 7176 %head = insertelement <4 x double> poison, double %b, i32 0 7177 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7178 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 7179 ret <4 x i1> %1 7180} 7181 7182define <4 x i1> @fcmps_ord_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7183; CHECK-LABEL: fcmps_ord_vv_v4f64: 7184; CHECK: # %bb.0: 7185; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7186; CHECK-NEXT: vmfle.vv v12, v10, v10 7187; CHECK-NEXT: vmfle.vv v10, v8, v8 7188; CHECK-NEXT: vmand.mm v0, v10, v12 7189; CHECK-NEXT: ret 7190 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 7191 ret <4 x i1> %1 7192} 7193 7194define <4 x i1> @fcmps_ord_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7195; CHECK-LABEL: fcmps_ord_vf_v4f64: 7196; CHECK: # %bb.0: 7197; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7198; CHECK-NEXT: vfmv.v.f v10, fa0 7199; CHECK-NEXT: vmfle.vf v12, v10, fa0 7200; CHECK-NEXT: vmfle.vv v10, v8, v8 7201; CHECK-NEXT: vmand.mm v0, v10, v12 7202; CHECK-NEXT: ret 7203 %head = insertelement <4 x double> poison, double %b, i32 0 7204 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7205 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 7206 ret <4 x i1> %1 7207} 7208 7209define <4 x i1> @fcmps_ord_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7210; CHECK-LABEL: fcmps_ord_fv_v4f64: 7211; CHECK: # %bb.0: 7212; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7213; CHECK-NEXT: vfmv.v.f v10, fa0 7214; CHECK-NEXT: vmfle.vf v12, v10, fa0 7215; CHECK-NEXT: vmfle.vv v10, v8, v8 7216; CHECK-NEXT: vmand.mm v0, v12, v10 7217; CHECK-NEXT: ret 7218 %head = insertelement <4 x double> poison, double %b, i32 0 7219 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7220 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 7221 ret <4 x i1> %1 7222} 7223 7224define <4 x i1> @fcmps_ueq_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7225; CHECK-LABEL: fcmps_ueq_vv_v4f64: 7226; CHECK: # %bb.0: 7227; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7228; CHECK-NEXT: vmflt.vv v12, v8, v10 7229; CHECK-NEXT: vmflt.vv v13, v10, v8 7230; CHECK-NEXT: vmnor.mm v0, v13, v12 7231; CHECK-NEXT: ret 7232 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7233 ret <4 x i1> %1 7234} 7235 7236define <4 x i1> @fcmps_ueq_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7237; CHECK-LABEL: fcmps_ueq_vf_v4f64: 7238; CHECK: # %bb.0: 7239; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7240; CHECK-NEXT: vmflt.vf v10, v8, fa0 7241; CHECK-NEXT: vmfgt.vf v11, v8, fa0 7242; CHECK-NEXT: vmnor.mm v0, v11, v10 7243; CHECK-NEXT: ret 7244 %head = insertelement <4 x double> poison, double %b, i32 0 7245 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7246 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7247 ret <4 x i1> %1 7248} 7249 7250define <4 x i1> @fcmps_ueq_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7251; CHECK-LABEL: fcmps_ueq_fv_v4f64: 7252; CHECK: # %bb.0: 7253; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7254; CHECK-NEXT: vmfgt.vf v10, v8, fa0 7255; CHECK-NEXT: vmflt.vf v11, v8, fa0 7256; CHECK-NEXT: vmnor.mm v0, v11, v10 7257; CHECK-NEXT: ret 7258 %head = insertelement <4 x double> poison, double %b, i32 0 7259 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7260 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7261 ret <4 x i1> %1 7262} 7263 7264define <4 x i1> @fcmps_ugt_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7265; CHECK-LABEL: fcmps_ugt_vv_v4f64: 7266; CHECK: # %bb.0: 7267; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7268; CHECK-NEXT: vmfle.vv v12, v8, v10 7269; CHECK-NEXT: vmnot.m v0, v12 7270; CHECK-NEXT: ret 7271 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7272 ret <4 x i1> %1 7273} 7274 7275define <4 x i1> @fcmps_ugt_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7276; CHECK-LABEL: fcmps_ugt_vf_v4f64: 7277; CHECK: # %bb.0: 7278; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7279; CHECK-NEXT: vmfle.vf v10, v8, fa0 7280; CHECK-NEXT: vmnot.m v0, v10 7281; CHECK-NEXT: ret 7282 %head = insertelement <4 x double> poison, double %b, i32 0 7283 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7284 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7285 ret <4 x i1> %1 7286} 7287 7288define <4 x i1> @fcmps_ugt_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7289; CHECK-LABEL: fcmps_ugt_fv_v4f64: 7290; CHECK: # %bb.0: 7291; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7292; CHECK-NEXT: vmfge.vf v10, v8, fa0 7293; CHECK-NEXT: vmnot.m v0, v10 7294; CHECK-NEXT: ret 7295 %head = insertelement <4 x double> poison, double %b, i32 0 7296 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7297 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7298 ret <4 x i1> %1 7299} 7300 7301define <4 x i1> @fcmps_uge_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7302; CHECK-LABEL: fcmps_uge_vv_v4f64: 7303; CHECK: # %bb.0: 7304; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7305; CHECK-NEXT: vmflt.vv v12, v8, v10 7306; CHECK-NEXT: vmnot.m v0, v12 7307; CHECK-NEXT: ret 7308 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 7309 ret <4 x i1> %1 7310} 7311 7312define <4 x i1> @fcmps_uge_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7313; CHECK-LABEL: fcmps_uge_vf_v4f64: 7314; CHECK: # %bb.0: 7315; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7316; CHECK-NEXT: vmflt.vf v10, v8, fa0 7317; CHECK-NEXT: vmnot.m v0, v10 7318; CHECK-NEXT: ret 7319 %head = insertelement <4 x double> poison, double %b, i32 0 7320 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7321 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 7322 ret <4 x i1> %1 7323} 7324 7325define <4 x i1> @fcmps_uge_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7326; CHECK-LABEL: fcmps_uge_fv_v4f64: 7327; CHECK: # %bb.0: 7328; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7329; CHECK-NEXT: vmfgt.vf v10, v8, fa0 7330; CHECK-NEXT: vmnot.m v0, v10 7331; CHECK-NEXT: ret 7332 %head = insertelement <4 x double> poison, double %b, i32 0 7333 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7334 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 7335 ret <4 x i1> %1 7336} 7337 7338define <4 x i1> @fcmps_ult_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7339; CHECK-LABEL: fcmps_ult_vv_v4f64: 7340; CHECK: # %bb.0: 7341; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7342; CHECK-NEXT: vmfle.vv v12, v10, v8 7343; CHECK-NEXT: vmnot.m v0, v12 7344; CHECK-NEXT: ret 7345 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7346 ret <4 x i1> %1 7347} 7348 7349define <4 x i1> @fcmps_ult_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7350; CHECK-LABEL: fcmps_ult_vf_v4f64: 7351; CHECK: # %bb.0: 7352; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7353; CHECK-NEXT: vmfge.vf v10, v8, fa0 7354; CHECK-NEXT: vmnot.m v0, v10 7355; CHECK-NEXT: ret 7356 %head = insertelement <4 x double> poison, double %b, i32 0 7357 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7358 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7359 ret <4 x i1> %1 7360} 7361 7362define <4 x i1> @fcmps_ult_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7363; CHECK-LABEL: fcmps_ult_fv_v4f64: 7364; CHECK: # %bb.0: 7365; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7366; CHECK-NEXT: vmfle.vf v10, v8, fa0 7367; CHECK-NEXT: vmnot.m v0, v10 7368; CHECK-NEXT: ret 7369 %head = insertelement <4 x double> poison, double %b, i32 0 7370 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7371 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7372 ret <4 x i1> %1 7373} 7374 7375define <4 x i1> @fcmps_ule_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7376; CHECK-LABEL: fcmps_ule_vv_v4f64: 7377; CHECK: # %bb.0: 7378; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7379; CHECK-NEXT: vmflt.vv v12, v10, v8 7380; CHECK-NEXT: vmnot.m v0, v12 7381; CHECK-NEXT: ret 7382 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7383 ret <4 x i1> %1 7384} 7385 7386define <4 x i1> @fcmps_ule_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7387; CHECK-LABEL: fcmps_ule_vf_v4f64: 7388; CHECK: # %bb.0: 7389; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7390; CHECK-NEXT: vmfgt.vf v10, v8, fa0 7391; CHECK-NEXT: vmnot.m v0, v10 7392; CHECK-NEXT: ret 7393 %head = insertelement <4 x double> poison, double %b, i32 0 7394 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7395 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7396 ret <4 x i1> %1 7397} 7398 7399define <4 x i1> @fcmps_ule_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7400; CHECK-LABEL: fcmps_ule_fv_v4f64: 7401; CHECK: # %bb.0: 7402; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7403; CHECK-NEXT: vmflt.vf v10, v8, fa0 7404; CHECK-NEXT: vmnot.m v0, v10 7405; CHECK-NEXT: ret 7406 %head = insertelement <4 x double> poison, double %b, i32 0 7407 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7408 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7409 ret <4 x i1> %1 7410} 7411 7412define <4 x i1> @fcmps_une_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7413; CHECK-LABEL: fcmps_une_vv_v4f64: 7414; CHECK: # %bb.0: 7415; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7416; CHECK-NEXT: vmfle.vv v12, v10, v8 7417; CHECK-NEXT: vmfle.vv v13, v8, v10 7418; CHECK-NEXT: vmnand.mm v0, v13, v12 7419; CHECK-NEXT: ret 7420 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7421 ret <4 x i1> %1 7422} 7423 7424define <4 x i1> @fcmps_une_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7425; CHECK-LABEL: fcmps_une_vf_v4f64: 7426; CHECK: # %bb.0: 7427; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7428; CHECK-NEXT: vmfge.vf v10, v8, fa0 7429; CHECK-NEXT: vmfle.vf v11, v8, fa0 7430; CHECK-NEXT: vmnand.mm v0, v11, v10 7431; CHECK-NEXT: ret 7432 %head = insertelement <4 x double> poison, double %b, i32 0 7433 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7434 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7435 ret <4 x i1> %1 7436} 7437 7438define <4 x i1> @fcmps_une_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7439; CHECK-LABEL: fcmps_une_fv_v4f64: 7440; CHECK: # %bb.0: 7441; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7442; CHECK-NEXT: vmfle.vf v10, v8, fa0 7443; CHECK-NEXT: vmfge.vf v11, v8, fa0 7444; CHECK-NEXT: vmnand.mm v0, v11, v10 7445; CHECK-NEXT: ret 7446 %head = insertelement <4 x double> poison, double %b, i32 0 7447 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7448 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7449 ret <4 x i1> %1 7450} 7451 7452define <4 x i1> @fcmps_uno_vv_v4f64(<4 x double> %va, <4 x double> %vb) nounwind strictfp { 7453; CHECK-LABEL: fcmps_uno_vv_v4f64: 7454; CHECK: # %bb.0: 7455; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7456; CHECK-NEXT: vmfle.vv v12, v10, v10 7457; CHECK-NEXT: vmfle.vv v10, v8, v8 7458; CHECK-NEXT: vmnot.m v8, v10 7459; CHECK-NEXT: vmorn.mm v0, v8, v12 7460; CHECK-NEXT: ret 7461 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7462 ret <4 x i1> %1 7463} 7464 7465define <4 x i1> @fcmps_uno_vf_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7466; CHECK-LABEL: fcmps_uno_vf_v4f64: 7467; CHECK: # %bb.0: 7468; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7469; CHECK-NEXT: vfmv.v.f v10, fa0 7470; CHECK-NEXT: vmfle.vv v12, v8, v8 7471; CHECK-NEXT: vmfle.vf v8, v10, fa0 7472; CHECK-NEXT: vmnot.m v9, v12 7473; CHECK-NEXT: vmorn.mm v0, v9, v8 7474; CHECK-NEXT: ret 7475 %head = insertelement <4 x double> poison, double %b, i32 0 7476 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7477 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 7478 ret <4 x i1> %1 7479} 7480 7481define <4 x i1> @fcmps_uno_fv_v4f64(<4 x double> %va, double %b) nounwind strictfp { 7482; CHECK-LABEL: fcmps_uno_fv_v4f64: 7483; CHECK: # %bb.0: 7484; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 7485; CHECK-NEXT: vfmv.v.f v10, fa0 7486; CHECK-NEXT: vmfle.vf v12, v10, fa0 7487; CHECK-NEXT: vmnot.m v10, v12 7488; CHECK-NEXT: vmfle.vv v11, v8, v8 7489; CHECK-NEXT: vmorn.mm v0, v10, v11 7490; CHECK-NEXT: ret 7491 %head = insertelement <4 x double> poison, double %b, i32 0 7492 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer 7493 %1 = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double> %splat, <4 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 7494 ret <4 x i1> %1 7495} 7496 7497declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double>, <8 x double>, metadata, metadata) 7498define <8 x i1> @fcmps_oeq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7499; CHECK-LABEL: fcmps_oeq_vv_v8f64: 7500; CHECK: # %bb.0: 7501; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7502; CHECK-NEXT: vmfle.vv v16, v12, v8 7503; CHECK-NEXT: vmfle.vv v17, v8, v12 7504; CHECK-NEXT: vmand.mm v0, v17, v16 7505; CHECK-NEXT: ret 7506 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7507 ret <8 x i1> %1 7508} 7509 7510define <8 x i1> @fcmps_oeq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7511; CHECK-LABEL: fcmps_oeq_vf_v8f64: 7512; CHECK: # %bb.0: 7513; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7514; CHECK-NEXT: vmfge.vf v12, v8, fa0 7515; CHECK-NEXT: vmfle.vf v13, v8, fa0 7516; CHECK-NEXT: vmand.mm v0, v13, v12 7517; CHECK-NEXT: ret 7518 %head = insertelement <8 x double> poison, double %b, i32 0 7519 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7520 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7521 ret <8 x i1> %1 7522} 7523 7524define <8 x i1> @fcmps_oeq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7525; CHECK-LABEL: fcmps_oeq_fv_v8f64: 7526; CHECK: # %bb.0: 7527; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7528; CHECK-NEXT: vmfle.vf v12, v8, fa0 7529; CHECK-NEXT: vmfge.vf v13, v8, fa0 7530; CHECK-NEXT: vmand.mm v0, v13, v12 7531; CHECK-NEXT: ret 7532 %head = insertelement <8 x double> poison, double %b, i32 0 7533 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7534 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oeq", metadata !"fpexcept.strict") strictfp 7535 ret <8 x i1> %1 7536} 7537 7538define <8 x i1> @fcmps_ogt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7539; CHECK-LABEL: fcmps_ogt_vv_v8f64: 7540; CHECK: # %bb.0: 7541; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7542; CHECK-NEXT: vmflt.vv v0, v12, v8 7543; CHECK-NEXT: ret 7544 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7545 ret <8 x i1> %1 7546} 7547 7548define <8 x i1> @fcmps_ogt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7549; CHECK-LABEL: fcmps_ogt_vf_v8f64: 7550; CHECK: # %bb.0: 7551; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7552; CHECK-NEXT: vmfgt.vf v0, v8, fa0 7553; CHECK-NEXT: ret 7554 %head = insertelement <8 x double> poison, double %b, i32 0 7555 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7556 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7557 ret <8 x i1> %1 7558} 7559 7560define <8 x i1> @fcmps_ogt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7561; CHECK-LABEL: fcmps_ogt_fv_v8f64: 7562; CHECK: # %bb.0: 7563; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7564; CHECK-NEXT: vmflt.vf v0, v8, fa0 7565; CHECK-NEXT: ret 7566 %head = insertelement <8 x double> poison, double %b, i32 0 7567 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7568 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ogt", metadata !"fpexcept.strict") strictfp 7569 ret <8 x i1> %1 7570} 7571 7572define <8 x i1> @fcmps_oge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7573; CHECK-LABEL: fcmps_oge_vv_v8f64: 7574; CHECK: # %bb.0: 7575; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7576; CHECK-NEXT: vmfle.vv v0, v12, v8 7577; CHECK-NEXT: ret 7578 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", metadata !"fpexcept.strict") strictfp 7579 ret <8 x i1> %1 7580} 7581 7582define <8 x i1> @fcmps_oge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7583; CHECK-LABEL: fcmps_oge_vf_v8f64: 7584; CHECK: # %bb.0: 7585; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7586; CHECK-NEXT: vmfge.vf v0, v8, fa0 7587; CHECK-NEXT: ret 7588 %head = insertelement <8 x double> poison, double %b, i32 0 7589 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7590 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"oge", metadata !"fpexcept.strict") strictfp 7591 ret <8 x i1> %1 7592} 7593 7594define <8 x i1> @fcmps_oge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7595; CHECK-LABEL: fcmps_oge_fv_v8f64: 7596; CHECK: # %bb.0: 7597; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7598; CHECK-NEXT: vmfle.vf v0, v8, fa0 7599; CHECK-NEXT: ret 7600 %head = insertelement <8 x double> poison, double %b, i32 0 7601 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7602 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"oge", metadata !"fpexcept.strict") strictfp 7603 ret <8 x i1> %1 7604} 7605 7606define <8 x i1> @fcmps_olt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7607; CHECK-LABEL: fcmps_olt_vv_v8f64: 7608; CHECK: # %bb.0: 7609; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7610; CHECK-NEXT: vmflt.vv v0, v8, v12 7611; CHECK-NEXT: ret 7612 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", metadata !"fpexcept.strict") strictfp 7613 ret <8 x i1> %1 7614} 7615 7616define <8 x i1> @fcmps_olt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7617; CHECK-LABEL: fcmps_olt_vf_v8f64: 7618; CHECK: # %bb.0: 7619; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7620; CHECK-NEXT: vmflt.vf v0, v8, fa0 7621; CHECK-NEXT: ret 7622 %head = insertelement <8 x double> poison, double %b, i32 0 7623 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7624 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"olt", metadata !"fpexcept.strict") strictfp 7625 ret <8 x i1> %1 7626} 7627 7628define <8 x i1> @fcmps_olt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7629; CHECK-LABEL: fcmps_olt_fv_v8f64: 7630; CHECK: # %bb.0: 7631; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7632; CHECK-NEXT: vmfgt.vf v0, v8, fa0 7633; CHECK-NEXT: ret 7634 %head = insertelement <8 x double> poison, double %b, i32 0 7635 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7636 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"olt", metadata !"fpexcept.strict") strictfp 7637 ret <8 x i1> %1 7638} 7639 7640define <8 x i1> @fcmps_ole_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7641; CHECK-LABEL: fcmps_ole_vv_v8f64: 7642; CHECK: # %bb.0: 7643; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7644; CHECK-NEXT: vmfle.vv v0, v8, v12 7645; CHECK-NEXT: ret 7646 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", metadata !"fpexcept.strict") strictfp 7647 ret <8 x i1> %1 7648} 7649 7650define <8 x i1> @fcmps_ole_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7651; CHECK-LABEL: fcmps_ole_vf_v8f64: 7652; CHECK: # %bb.0: 7653; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7654; CHECK-NEXT: vmfle.vf v0, v8, fa0 7655; CHECK-NEXT: ret 7656 %head = insertelement <8 x double> poison, double %b, i32 0 7657 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7658 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ole", metadata !"fpexcept.strict") strictfp 7659 ret <8 x i1> %1 7660} 7661 7662define <8 x i1> @fcmps_ole_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7663; CHECK-LABEL: fcmps_ole_fv_v8f64: 7664; CHECK: # %bb.0: 7665; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7666; CHECK-NEXT: vmfge.vf v0, v8, fa0 7667; CHECK-NEXT: ret 7668 %head = insertelement <8 x double> poison, double %b, i32 0 7669 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7670 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ole", metadata !"fpexcept.strict") strictfp 7671 ret <8 x i1> %1 7672} 7673 7674define <8 x i1> @fcmps_one_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7675; CHECK-LABEL: fcmps_one_vv_v8f64: 7676; CHECK: # %bb.0: 7677; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7678; CHECK-NEXT: vmflt.vv v16, v8, v12 7679; CHECK-NEXT: vmflt.vv v17, v12, v8 7680; CHECK-NEXT: vmor.mm v0, v17, v16 7681; CHECK-NEXT: ret 7682 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp 7683 ret <8 x i1> %1 7684} 7685 7686define <8 x i1> @fcmps_one_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7687; CHECK-LABEL: fcmps_one_vf_v8f64: 7688; CHECK: # %bb.0: 7689; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7690; CHECK-NEXT: vmflt.vf v12, v8, fa0 7691; CHECK-NEXT: vmfgt.vf v13, v8, fa0 7692; CHECK-NEXT: vmor.mm v0, v13, v12 7693; CHECK-NEXT: ret 7694 %head = insertelement <8 x double> poison, double %b, i32 0 7695 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7696 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"one", metadata !"fpexcept.strict") strictfp 7697 ret <8 x i1> %1 7698} 7699 7700define <8 x i1> @fcmps_one_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7701; CHECK-LABEL: fcmps_one_fv_v8f64: 7702; CHECK: # %bb.0: 7703; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7704; CHECK-NEXT: vmfgt.vf v12, v8, fa0 7705; CHECK-NEXT: vmflt.vf v13, v8, fa0 7706; CHECK-NEXT: vmor.mm v0, v13, v12 7707; CHECK-NEXT: ret 7708 %head = insertelement <8 x double> poison, double %b, i32 0 7709 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7710 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"one", metadata !"fpexcept.strict") strictfp 7711 ret <8 x i1> %1 7712} 7713 7714define <8 x i1> @fcmps_ord_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7715; CHECK-LABEL: fcmps_ord_vv_v8f64: 7716; CHECK: # %bb.0: 7717; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7718; CHECK-NEXT: vmfle.vv v16, v12, v12 7719; CHECK-NEXT: vmfle.vv v12, v8, v8 7720; CHECK-NEXT: vmand.mm v0, v12, v16 7721; CHECK-NEXT: ret 7722 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", metadata !"fpexcept.strict") strictfp 7723 ret <8 x i1> %1 7724} 7725 7726define <8 x i1> @fcmps_ord_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7727; CHECK-LABEL: fcmps_ord_vf_v8f64: 7728; CHECK: # %bb.0: 7729; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7730; CHECK-NEXT: vfmv.v.f v12, fa0 7731; CHECK-NEXT: vmfle.vf v16, v12, fa0 7732; CHECK-NEXT: vmfle.vv v12, v8, v8 7733; CHECK-NEXT: vmand.mm v0, v12, v16 7734; CHECK-NEXT: ret 7735 %head = insertelement <8 x double> poison, double %b, i32 0 7736 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7737 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ord", metadata !"fpexcept.strict") strictfp 7738 ret <8 x i1> %1 7739} 7740 7741define <8 x i1> @fcmps_ord_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7742; CHECK-LABEL: fcmps_ord_fv_v8f64: 7743; CHECK: # %bb.0: 7744; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7745; CHECK-NEXT: vfmv.v.f v12, fa0 7746; CHECK-NEXT: vmfle.vf v16, v12, fa0 7747; CHECK-NEXT: vmfle.vv v12, v8, v8 7748; CHECK-NEXT: vmand.mm v0, v16, v12 7749; CHECK-NEXT: ret 7750 %head = insertelement <8 x double> poison, double %b, i32 0 7751 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7752 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ord", metadata !"fpexcept.strict") strictfp 7753 ret <8 x i1> %1 7754} 7755 7756define <8 x i1> @fcmps_ueq_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7757; CHECK-LABEL: fcmps_ueq_vv_v8f64: 7758; CHECK: # %bb.0: 7759; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7760; CHECK-NEXT: vmflt.vv v16, v8, v12 7761; CHECK-NEXT: vmflt.vv v17, v12, v8 7762; CHECK-NEXT: vmnor.mm v0, v17, v16 7763; CHECK-NEXT: ret 7764 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7765 ret <8 x i1> %1 7766} 7767 7768define <8 x i1> @fcmps_ueq_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7769; CHECK-LABEL: fcmps_ueq_vf_v8f64: 7770; CHECK: # %bb.0: 7771; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7772; CHECK-NEXT: vmflt.vf v12, v8, fa0 7773; CHECK-NEXT: vmfgt.vf v13, v8, fa0 7774; CHECK-NEXT: vmnor.mm v0, v13, v12 7775; CHECK-NEXT: ret 7776 %head = insertelement <8 x double> poison, double %b, i32 0 7777 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7778 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7779 ret <8 x i1> %1 7780} 7781 7782define <8 x i1> @fcmps_ueq_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7783; CHECK-LABEL: fcmps_ueq_fv_v8f64: 7784; CHECK: # %bb.0: 7785; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7786; CHECK-NEXT: vmfgt.vf v12, v8, fa0 7787; CHECK-NEXT: vmflt.vf v13, v8, fa0 7788; CHECK-NEXT: vmnor.mm v0, v13, v12 7789; CHECK-NEXT: ret 7790 %head = insertelement <8 x double> poison, double %b, i32 0 7791 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7792 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ueq", metadata !"fpexcept.strict") strictfp 7793 ret <8 x i1> %1 7794} 7795 7796define <8 x i1> @fcmps_ugt_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7797; CHECK-LABEL: fcmps_ugt_vv_v8f64: 7798; CHECK: # %bb.0: 7799; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7800; CHECK-NEXT: vmfle.vv v16, v8, v12 7801; CHECK-NEXT: vmnot.m v0, v16 7802; CHECK-NEXT: ret 7803 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7804 ret <8 x i1> %1 7805} 7806 7807define <8 x i1> @fcmps_ugt_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7808; CHECK-LABEL: fcmps_ugt_vf_v8f64: 7809; CHECK: # %bb.0: 7810; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7811; CHECK-NEXT: vmfle.vf v12, v8, fa0 7812; CHECK-NEXT: vmnot.m v0, v12 7813; CHECK-NEXT: ret 7814 %head = insertelement <8 x double> poison, double %b, i32 0 7815 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7816 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7817 ret <8 x i1> %1 7818} 7819 7820define <8 x i1> @fcmps_ugt_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7821; CHECK-LABEL: fcmps_ugt_fv_v8f64: 7822; CHECK: # %bb.0: 7823; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7824; CHECK-NEXT: vmfge.vf v12, v8, fa0 7825; CHECK-NEXT: vmnot.m v0, v12 7826; CHECK-NEXT: ret 7827 %head = insertelement <8 x double> poison, double %b, i32 0 7828 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7829 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ugt", metadata !"fpexcept.strict") strictfp 7830 ret <8 x i1> %1 7831} 7832 7833define <8 x i1> @fcmps_uge_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7834; CHECK-LABEL: fcmps_uge_vv_v8f64: 7835; CHECK: # %bb.0: 7836; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7837; CHECK-NEXT: vmflt.vv v16, v8, v12 7838; CHECK-NEXT: vmnot.m v0, v16 7839; CHECK-NEXT: ret 7840 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", metadata !"fpexcept.strict") strictfp 7841 ret <8 x i1> %1 7842} 7843 7844define <8 x i1> @fcmps_uge_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7845; CHECK-LABEL: fcmps_uge_vf_v8f64: 7846; CHECK: # %bb.0: 7847; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7848; CHECK-NEXT: vmflt.vf v12, v8, fa0 7849; CHECK-NEXT: vmnot.m v0, v12 7850; CHECK-NEXT: ret 7851 %head = insertelement <8 x double> poison, double %b, i32 0 7852 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7853 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uge", metadata !"fpexcept.strict") strictfp 7854 ret <8 x i1> %1 7855} 7856 7857define <8 x i1> @fcmps_uge_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7858; CHECK-LABEL: fcmps_uge_fv_v8f64: 7859; CHECK: # %bb.0: 7860; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7861; CHECK-NEXT: vmfgt.vf v12, v8, fa0 7862; CHECK-NEXT: vmnot.m v0, v12 7863; CHECK-NEXT: ret 7864 %head = insertelement <8 x double> poison, double %b, i32 0 7865 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7866 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uge", metadata !"fpexcept.strict") strictfp 7867 ret <8 x i1> %1 7868} 7869 7870define <8 x i1> @fcmps_ult_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7871; CHECK-LABEL: fcmps_ult_vv_v8f64: 7872; CHECK: # %bb.0: 7873; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7874; CHECK-NEXT: vmfle.vv v16, v12, v8 7875; CHECK-NEXT: vmnot.m v0, v16 7876; CHECK-NEXT: ret 7877 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", metadata !"fpexcept.strict") strictfp 7878 ret <8 x i1> %1 7879} 7880 7881define <8 x i1> @fcmps_ult_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7882; CHECK-LABEL: fcmps_ult_vf_v8f64: 7883; CHECK: # %bb.0: 7884; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7885; CHECK-NEXT: vmfge.vf v12, v8, fa0 7886; CHECK-NEXT: vmnot.m v0, v12 7887; CHECK-NEXT: ret 7888 %head = insertelement <8 x double> poison, double %b, i32 0 7889 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7890 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ult", metadata !"fpexcept.strict") strictfp 7891 ret <8 x i1> %1 7892} 7893 7894define <8 x i1> @fcmps_ult_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7895; CHECK-LABEL: fcmps_ult_fv_v8f64: 7896; CHECK: # %bb.0: 7897; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7898; CHECK-NEXT: vmfle.vf v12, v8, fa0 7899; CHECK-NEXT: vmnot.m v0, v12 7900; CHECK-NEXT: ret 7901 %head = insertelement <8 x double> poison, double %b, i32 0 7902 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7903 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ult", metadata !"fpexcept.strict") strictfp 7904 ret <8 x i1> %1 7905} 7906 7907define <8 x i1> @fcmps_ule_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7908; CHECK-LABEL: fcmps_ule_vv_v8f64: 7909; CHECK: # %bb.0: 7910; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7911; CHECK-NEXT: vmflt.vv v16, v12, v8 7912; CHECK-NEXT: vmnot.m v0, v16 7913; CHECK-NEXT: ret 7914 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", metadata !"fpexcept.strict") strictfp 7915 ret <8 x i1> %1 7916} 7917 7918define <8 x i1> @fcmps_ule_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7919; CHECK-LABEL: fcmps_ule_vf_v8f64: 7920; CHECK: # %bb.0: 7921; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7922; CHECK-NEXT: vmfgt.vf v12, v8, fa0 7923; CHECK-NEXT: vmnot.m v0, v12 7924; CHECK-NEXT: ret 7925 %head = insertelement <8 x double> poison, double %b, i32 0 7926 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7927 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"ule", metadata !"fpexcept.strict") strictfp 7928 ret <8 x i1> %1 7929} 7930 7931define <8 x i1> @fcmps_ule_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7932; CHECK-LABEL: fcmps_ule_fv_v8f64: 7933; CHECK: # %bb.0: 7934; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7935; CHECK-NEXT: vmflt.vf v12, v8, fa0 7936; CHECK-NEXT: vmnot.m v0, v12 7937; CHECK-NEXT: ret 7938 %head = insertelement <8 x double> poison, double %b, i32 0 7939 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7940 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"ule", metadata !"fpexcept.strict") strictfp 7941 ret <8 x i1> %1 7942} 7943 7944define <8 x i1> @fcmps_une_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7945; CHECK-LABEL: fcmps_une_vv_v8f64: 7946; CHECK: # %bb.0: 7947; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7948; CHECK-NEXT: vmfle.vv v16, v12, v8 7949; CHECK-NEXT: vmfle.vv v17, v8, v12 7950; CHECK-NEXT: vmnand.mm v0, v17, v16 7951; CHECK-NEXT: ret 7952 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", metadata !"fpexcept.strict") strictfp 7953 ret <8 x i1> %1 7954} 7955 7956define <8 x i1> @fcmps_une_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7957; CHECK-LABEL: fcmps_une_vf_v8f64: 7958; CHECK: # %bb.0: 7959; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7960; CHECK-NEXT: vmfge.vf v12, v8, fa0 7961; CHECK-NEXT: vmfle.vf v13, v8, fa0 7962; CHECK-NEXT: vmnand.mm v0, v13, v12 7963; CHECK-NEXT: ret 7964 %head = insertelement <8 x double> poison, double %b, i32 0 7965 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7966 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"une", metadata !"fpexcept.strict") strictfp 7967 ret <8 x i1> %1 7968} 7969 7970define <8 x i1> @fcmps_une_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7971; CHECK-LABEL: fcmps_une_fv_v8f64: 7972; CHECK: # %bb.0: 7973; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7974; CHECK-NEXT: vmfle.vf v12, v8, fa0 7975; CHECK-NEXT: vmfge.vf v13, v8, fa0 7976; CHECK-NEXT: vmnand.mm v0, v13, v12 7977; CHECK-NEXT: ret 7978 %head = insertelement <8 x double> poison, double %b, i32 0 7979 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 7980 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"une", metadata !"fpexcept.strict") strictfp 7981 ret <8 x i1> %1 7982} 7983 7984define <8 x i1> @fcmps_uno_vv_v8f64(<8 x double> %va, <8 x double> %vb) nounwind strictfp { 7985; CHECK-LABEL: fcmps_uno_vv_v8f64: 7986; CHECK: # %bb.0: 7987; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 7988; CHECK-NEXT: vmfle.vv v16, v12, v12 7989; CHECK-NEXT: vmfle.vv v12, v8, v8 7990; CHECK-NEXT: vmnot.m v8, v12 7991; CHECK-NEXT: vmorn.mm v0, v8, v16 7992; CHECK-NEXT: ret 7993 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", metadata !"fpexcept.strict") strictfp 7994 ret <8 x i1> %1 7995} 7996 7997define <8 x i1> @fcmps_uno_vf_v8f64(<8 x double> %va, double %b) nounwind strictfp { 7998; CHECK-LABEL: fcmps_uno_vf_v8f64: 7999; CHECK: # %bb.0: 8000; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 8001; CHECK-NEXT: vfmv.v.f v12, fa0 8002; CHECK-NEXT: vmfle.vv v16, v8, v8 8003; CHECK-NEXT: vmfle.vf v8, v12, fa0 8004; CHECK-NEXT: vmnot.m v9, v16 8005; CHECK-NEXT: vmorn.mm v0, v9, v8 8006; CHECK-NEXT: ret 8007 %head = insertelement <8 x double> poison, double %b, i32 0 8008 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 8009 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"uno", metadata !"fpexcept.strict") strictfp 8010 ret <8 x i1> %1 8011} 8012 8013define <8 x i1> @fcmps_uno_fv_v8f64(<8 x double> %va, double %b) nounwind strictfp { 8014; CHECK-LABEL: fcmps_uno_fv_v8f64: 8015; CHECK: # %bb.0: 8016; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 8017; CHECK-NEXT: vfmv.v.f v12, fa0 8018; CHECK-NEXT: vmfle.vf v16, v12, fa0 8019; CHECK-NEXT: vmnot.m v12, v16 8020; CHECK-NEXT: vmfle.vv v13, v8, v8 8021; CHECK-NEXT: vmorn.mm v0, v12, v13 8022; CHECK-NEXT: ret 8023 %head = insertelement <8 x double> poison, double %b, i32 0 8024 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer 8025 %1 = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"uno", metadata !"fpexcept.strict") strictfp 8026 ret <8 x i1> %1 8027} 8028