1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \ 3; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \ 4; RUN: --check-prefixes=CHECK,ZVFH 5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \ 6; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \ 7; RUN: --check-prefixes=CHECK,ZVFH 8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \ 9; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \ 10; RUN: --check-prefixes=CHECK,ZVFHMIN 11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \ 12; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \ 13; RUN: --check-prefixes=CHECK,ZVFHMIN 14 15declare <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat>, <vscale x 1 x bfloat>, metadata, <vscale x 1 x i1>, i32) 16 17define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 18; CHECK-LABEL: fcmp_oeq_vv_nxv1bf16: 19; CHECK: # %bb.0: 20; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 21; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 22; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 23; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 24; CHECK-NEXT: vmfeq.vv v0, v9, v10, v0.t 25; CHECK-NEXT: ret 26 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 27 ret <vscale x 1 x i1> %v 28} 29 30define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 31; CHECK-LABEL: fcmp_oeq_vf_nxv1bf16: 32; CHECK: # %bb.0: 33; CHECK-NEXT: fmv.x.h a1, fa0 34; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 35; CHECK-NEXT: vmv.v.x v9, a1 36; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 37; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 38; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 39; CHECK-NEXT: vmfeq.vv v0, v10, v8, v0.t 40; CHECK-NEXT: ret 41 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 42 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 43 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 44 ret <vscale x 1 x i1> %v 45} 46 47define <vscale x 1 x i1> @fcmp_oeq_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 48; CHECK-LABEL: fcmp_oeq_vf_swap_nxv1bf16: 49; CHECK: # %bb.0: 50; CHECK-NEXT: fmv.x.h a1, fa0 51; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 52; CHECK-NEXT: vmv.v.x v9, a1 53; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 54; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 55; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 56; CHECK-NEXT: vmfeq.vv v0, v8, v10, v0.t 57; CHECK-NEXT: ret 58 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 59 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 60 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 61 ret <vscale x 1 x i1> %v 62} 63 64define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 65; CHECK-LABEL: fcmp_ogt_vv_nxv1bf16: 66; CHECK: # %bb.0: 67; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 68; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 69; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 70; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 71; CHECK-NEXT: vmflt.vv v0, v8, v10, v0.t 72; CHECK-NEXT: ret 73 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 74 ret <vscale x 1 x i1> %v 75} 76 77define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 78; CHECK-LABEL: fcmp_ogt_vf_nxv1bf16: 79; CHECK: # %bb.0: 80; CHECK-NEXT: fmv.x.h a1, fa0 81; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 82; CHECK-NEXT: vmv.v.x v9, a1 83; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 84; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 85; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 86; CHECK-NEXT: vmflt.vv v0, v8, v10, v0.t 87; CHECK-NEXT: ret 88 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 89 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 90 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 91 ret <vscale x 1 x i1> %v 92} 93 94define <vscale x 1 x i1> @fcmp_ogt_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 95; CHECK-LABEL: fcmp_ogt_vf_swap_nxv1bf16: 96; CHECK: # %bb.0: 97; CHECK-NEXT: fmv.x.h a1, fa0 98; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 99; CHECK-NEXT: vmv.v.x v9, a1 100; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 101; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 102; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 103; CHECK-NEXT: vmflt.vv v0, v10, v8, v0.t 104; CHECK-NEXT: ret 105 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 106 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 107 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 108 ret <vscale x 1 x i1> %v 109} 110 111define <vscale x 1 x i1> @fcmp_oge_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 112; CHECK-LABEL: fcmp_oge_vv_nxv1bf16: 113; CHECK: # %bb.0: 114; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 115; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 116; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 117; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 118; CHECK-NEXT: vmfle.vv v0, v8, v10, v0.t 119; CHECK-NEXT: ret 120 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 121 ret <vscale x 1 x i1> %v 122} 123 124define <vscale x 1 x i1> @fcmp_oge_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 125; CHECK-LABEL: fcmp_oge_vf_nxv1bf16: 126; CHECK: # %bb.0: 127; CHECK-NEXT: fmv.x.h a1, fa0 128; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 129; CHECK-NEXT: vmv.v.x v9, a1 130; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 131; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 132; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 133; CHECK-NEXT: vmfle.vv v0, v8, v10, v0.t 134; CHECK-NEXT: ret 135 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 136 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 137 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 138 ret <vscale x 1 x i1> %v 139} 140 141define <vscale x 1 x i1> @fcmp_oge_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 142; CHECK-LABEL: fcmp_oge_vf_swap_nxv1bf16: 143; CHECK: # %bb.0: 144; CHECK-NEXT: fmv.x.h a1, fa0 145; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 146; CHECK-NEXT: vmv.v.x v9, a1 147; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 148; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 149; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 150; CHECK-NEXT: vmfle.vv v0, v10, v8, v0.t 151; CHECK-NEXT: ret 152 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 153 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 154 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 155 ret <vscale x 1 x i1> %v 156} 157 158define <vscale x 1 x i1> @fcmp_olt_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 159; CHECK-LABEL: fcmp_olt_vv_nxv1bf16: 160; CHECK: # %bb.0: 161; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 162; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 163; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 164; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 165; CHECK-NEXT: vmflt.vv v0, v9, v10, v0.t 166; CHECK-NEXT: ret 167 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 168 ret <vscale x 1 x i1> %v 169} 170 171define <vscale x 1 x i1> @fcmp_olt_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 172; CHECK-LABEL: fcmp_olt_vf_nxv1bf16: 173; CHECK: # %bb.0: 174; CHECK-NEXT: fmv.x.h a1, fa0 175; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 176; CHECK-NEXT: vmv.v.x v9, a1 177; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 178; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 179; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 180; CHECK-NEXT: vmflt.vv v0, v10, v8, v0.t 181; CHECK-NEXT: ret 182 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 183 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 184 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 185 ret <vscale x 1 x i1> %v 186} 187 188define <vscale x 1 x i1> @fcmp_olt_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 189; CHECK-LABEL: fcmp_olt_vf_swap_nxv1bf16: 190; CHECK: # %bb.0: 191; CHECK-NEXT: fmv.x.h a1, fa0 192; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 193; CHECK-NEXT: vmv.v.x v9, a1 194; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 195; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 196; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 197; CHECK-NEXT: vmflt.vv v0, v8, v10, v0.t 198; CHECK-NEXT: ret 199 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 200 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 201 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 202 ret <vscale x 1 x i1> %v 203} 204 205define <vscale x 1 x i1> @fcmp_ole_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 206; CHECK-LABEL: fcmp_ole_vv_nxv1bf16: 207; CHECK: # %bb.0: 208; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 209; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 210; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 211; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 212; CHECK-NEXT: vmfle.vv v0, v9, v10, v0.t 213; CHECK-NEXT: ret 214 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 215 ret <vscale x 1 x i1> %v 216} 217 218define <vscale x 1 x i1> @fcmp_ole_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 219; CHECK-LABEL: fcmp_ole_vf_nxv1bf16: 220; CHECK: # %bb.0: 221; CHECK-NEXT: fmv.x.h a1, fa0 222; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 223; CHECK-NEXT: vmv.v.x v9, a1 224; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 225; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 226; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 227; CHECK-NEXT: vmfle.vv v0, v10, v8, v0.t 228; CHECK-NEXT: ret 229 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 230 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 231 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 232 ret <vscale x 1 x i1> %v 233} 234 235define <vscale x 1 x i1> @fcmp_ole_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 236; CHECK-LABEL: fcmp_ole_vf_swap_nxv1bf16: 237; CHECK: # %bb.0: 238; CHECK-NEXT: fmv.x.h a1, fa0 239; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 240; CHECK-NEXT: vmv.v.x v9, a1 241; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 242; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 243; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 244; CHECK-NEXT: vmfle.vv v0, v8, v10, v0.t 245; CHECK-NEXT: ret 246 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 247 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 248 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 249 ret <vscale x 1 x i1> %v 250} 251 252define <vscale x 1 x i1> @fcmp_one_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 253; CHECK-LABEL: fcmp_one_vv_nxv1bf16: 254; CHECK: # %bb.0: 255; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 256; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 257; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 258; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 259; CHECK-NEXT: vmflt.vv v8, v9, v10, v0.t 260; CHECK-NEXT: vmflt.vv v9, v10, v9, v0.t 261; CHECK-NEXT: vmor.mm v0, v9, v8 262; CHECK-NEXT: ret 263 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 264 ret <vscale x 1 x i1> %v 265} 266 267define <vscale x 1 x i1> @fcmp_one_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 268; CHECK-LABEL: fcmp_one_vf_nxv1bf16: 269; CHECK: # %bb.0: 270; CHECK-NEXT: fmv.x.h a1, fa0 271; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 272; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 273; CHECK-NEXT: vmv.v.x v8, a1 274; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 275; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 276; CHECK-NEXT: vmflt.vv v8, v9, v10, v0.t 277; CHECK-NEXT: vmflt.vv v9, v10, v9, v0.t 278; CHECK-NEXT: vmor.mm v0, v9, v8 279; CHECK-NEXT: ret 280 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 281 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 282 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 283 ret <vscale x 1 x i1> %v 284} 285 286define <vscale x 1 x i1> @fcmp_one_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 287; CHECK-LABEL: fcmp_one_vf_swap_nxv1bf16: 288; CHECK: # %bb.0: 289; CHECK-NEXT: fmv.x.h a1, fa0 290; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 291; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 292; CHECK-NEXT: vmv.v.x v8, a1 293; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 294; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 295; CHECK-NEXT: vmflt.vv v8, v10, v9, v0.t 296; CHECK-NEXT: vmflt.vv v9, v9, v10, v0.t 297; CHECK-NEXT: vmor.mm v0, v9, v8 298; CHECK-NEXT: ret 299 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 300 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 301 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 302 ret <vscale x 1 x i1> %v 303} 304 305define <vscale x 1 x i1> @fcmp_ord_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 306; CHECK-LABEL: fcmp_ord_vv_nxv1bf16: 307; CHECK: # %bb.0: 308; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 309; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 310; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 311; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 312; CHECK-NEXT: vmfeq.vv v8, v10, v10, v0.t 313; CHECK-NEXT: vmfeq.vv v9, v9, v9, v0.t 314; CHECK-NEXT: vmand.mm v0, v9, v8 315; CHECK-NEXT: ret 316 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 317 ret <vscale x 1 x i1> %v 318} 319 320define <vscale x 1 x i1> @fcmp_ord_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 321; CHECK-LABEL: fcmp_ord_vf_nxv1bf16: 322; CHECK: # %bb.0: 323; CHECK-NEXT: fmv.x.h a1, fa0 324; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 325; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 326; CHECK-NEXT: vmv.v.x v8, a1 327; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 328; CHECK-NEXT: vmfeq.vv v9, v9, v9, v0.t 329; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 330; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 331; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 332; CHECK-NEXT: vmfeq.vv v8, v10, v10, v0.t 333; CHECK-NEXT: vmand.mm v0, v9, v8 334; CHECK-NEXT: ret 335 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 336 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 337 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 338 ret <vscale x 1 x i1> %v 339} 340 341define <vscale x 1 x i1> @fcmp_ord_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 342; CHECK-LABEL: fcmp_ord_vf_swap_nxv1bf16: 343; CHECK: # %bb.0: 344; CHECK-NEXT: fmv.x.h a1, fa0 345; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 346; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 347; CHECK-NEXT: vmv.v.x v8, a1 348; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 349; CHECK-NEXT: vmfeq.vv v9, v9, v9, v0.t 350; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 351; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 352; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 353; CHECK-NEXT: vmfeq.vv v8, v10, v10, v0.t 354; CHECK-NEXT: vmand.mm v0, v8, v9 355; CHECK-NEXT: ret 356 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 357 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 358 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 359 ret <vscale x 1 x i1> %v 360} 361 362define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 363; CHECK-LABEL: fcmp_ueq_vv_nxv1bf16: 364; CHECK: # %bb.0: 365; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 366; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 367; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 368; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 369; CHECK-NEXT: vmflt.vv v8, v9, v10, v0.t 370; CHECK-NEXT: vmflt.vv v9, v10, v9, v0.t 371; CHECK-NEXT: vmnor.mm v0, v9, v8 372; CHECK-NEXT: ret 373 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 374 ret <vscale x 1 x i1> %v 375} 376 377define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 378; CHECK-LABEL: fcmp_ueq_vf_nxv1bf16: 379; CHECK: # %bb.0: 380; CHECK-NEXT: fmv.x.h a1, fa0 381; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 382; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 383; CHECK-NEXT: vmv.v.x v8, a1 384; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 385; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 386; CHECK-NEXT: vmflt.vv v8, v9, v10, v0.t 387; CHECK-NEXT: vmflt.vv v9, v10, v9, v0.t 388; CHECK-NEXT: vmnor.mm v0, v9, v8 389; CHECK-NEXT: ret 390 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 391 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 392 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 393 ret <vscale x 1 x i1> %v 394} 395 396define <vscale x 1 x i1> @fcmp_ueq_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 397; CHECK-LABEL: fcmp_ueq_vf_swap_nxv1bf16: 398; CHECK: # %bb.0: 399; CHECK-NEXT: fmv.x.h a1, fa0 400; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 401; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 402; CHECK-NEXT: vmv.v.x v8, a1 403; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 404; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 405; CHECK-NEXT: vmflt.vv v8, v10, v9, v0.t 406; CHECK-NEXT: vmflt.vv v9, v9, v10, v0.t 407; CHECK-NEXT: vmnor.mm v0, v9, v8 408; CHECK-NEXT: ret 409 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 410 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 411 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 412 ret <vscale x 1 x i1> %v 413} 414 415define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 416; CHECK-LABEL: fcmp_ugt_vv_nxv1bf16: 417; CHECK: # %bb.0: 418; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 419; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 420; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 421; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 422; CHECK-NEXT: vmfle.vv v8, v9, v10, v0.t 423; CHECK-NEXT: vmnot.m v0, v8 424; CHECK-NEXT: ret 425 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 426 ret <vscale x 1 x i1> %v 427} 428 429define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 430; CHECK-LABEL: fcmp_ugt_vf_nxv1bf16: 431; CHECK: # %bb.0: 432; CHECK-NEXT: fmv.x.h a1, fa0 433; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 434; CHECK-NEXT: vmv.v.x v9, a1 435; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 436; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 437; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 438; CHECK-NEXT: vmfle.vv v8, v10, v8, v0.t 439; CHECK-NEXT: vmnot.m v0, v8 440; CHECK-NEXT: ret 441 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 442 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 443 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 444 ret <vscale x 1 x i1> %v 445} 446 447define <vscale x 1 x i1> @fcmp_ugt_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 448; CHECK-LABEL: fcmp_ugt_vf_swap_nxv1bf16: 449; CHECK: # %bb.0: 450; CHECK-NEXT: fmv.x.h a1, fa0 451; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 452; CHECK-NEXT: vmv.v.x v9, a1 453; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 454; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 455; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 456; CHECK-NEXT: vmfle.vv v8, v8, v10, v0.t 457; CHECK-NEXT: vmnot.m v0, v8 458; CHECK-NEXT: ret 459 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 460 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 461 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 462 ret <vscale x 1 x i1> %v 463} 464 465define <vscale x 1 x i1> @fcmp_uge_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 466; CHECK-LABEL: fcmp_uge_vv_nxv1bf16: 467; CHECK: # %bb.0: 468; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 469; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 470; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 471; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 472; CHECK-NEXT: vmflt.vv v8, v9, v10, v0.t 473; CHECK-NEXT: vmnot.m v0, v8 474; CHECK-NEXT: ret 475 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 476 ret <vscale x 1 x i1> %v 477} 478 479define <vscale x 1 x i1> @fcmp_uge_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 480; CHECK-LABEL: fcmp_uge_vf_nxv1bf16: 481; CHECK: # %bb.0: 482; CHECK-NEXT: fmv.x.h a1, fa0 483; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 484; CHECK-NEXT: vmv.v.x v9, a1 485; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 486; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 487; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 488; CHECK-NEXT: vmflt.vv v8, v10, v8, v0.t 489; CHECK-NEXT: vmnot.m v0, v8 490; CHECK-NEXT: ret 491 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 492 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 493 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 494 ret <vscale x 1 x i1> %v 495} 496 497define <vscale x 1 x i1> @fcmp_uge_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 498; CHECK-LABEL: fcmp_uge_vf_swap_nxv1bf16: 499; CHECK: # %bb.0: 500; CHECK-NEXT: fmv.x.h a1, fa0 501; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 502; CHECK-NEXT: vmv.v.x v9, a1 503; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 504; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 505; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 506; CHECK-NEXT: vmflt.vv v8, v8, v10, v0.t 507; CHECK-NEXT: vmnot.m v0, v8 508; CHECK-NEXT: ret 509 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 510 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 511 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 512 ret <vscale x 1 x i1> %v 513} 514 515define <vscale x 1 x i1> @fcmp_ult_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 516; CHECK-LABEL: fcmp_ult_vv_nxv1bf16: 517; CHECK: # %bb.0: 518; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 519; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 520; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 521; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 522; CHECK-NEXT: vmfle.vv v8, v8, v10, v0.t 523; CHECK-NEXT: vmnot.m v0, v8 524; CHECK-NEXT: ret 525 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 526 ret <vscale x 1 x i1> %v 527} 528 529define <vscale x 1 x i1> @fcmp_ult_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 530; CHECK-LABEL: fcmp_ult_vf_nxv1bf16: 531; CHECK: # %bb.0: 532; CHECK-NEXT: fmv.x.h a1, fa0 533; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 534; CHECK-NEXT: vmv.v.x v9, a1 535; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 536; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 537; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 538; CHECK-NEXT: vmfle.vv v8, v8, v10, v0.t 539; CHECK-NEXT: vmnot.m v0, v8 540; CHECK-NEXT: ret 541 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 542 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 543 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 544 ret <vscale x 1 x i1> %v 545} 546 547define <vscale x 1 x i1> @fcmp_ult_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 548; CHECK-LABEL: fcmp_ult_vf_swap_nxv1bf16: 549; CHECK: # %bb.0: 550; CHECK-NEXT: fmv.x.h a1, fa0 551; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 552; CHECK-NEXT: vmv.v.x v9, a1 553; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 554; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 555; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 556; CHECK-NEXT: vmfle.vv v8, v10, v8, v0.t 557; CHECK-NEXT: vmnot.m v0, v8 558; CHECK-NEXT: ret 559 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 560 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 561 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 562 ret <vscale x 1 x i1> %v 563} 564 565define <vscale x 1 x i1> @fcmp_ule_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 566; CHECK-LABEL: fcmp_ule_vv_nxv1bf16: 567; CHECK: # %bb.0: 568; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 569; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 570; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 571; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 572; CHECK-NEXT: vmflt.vv v8, v8, v10, v0.t 573; CHECK-NEXT: vmnot.m v0, v8 574; CHECK-NEXT: ret 575 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 576 ret <vscale x 1 x i1> %v 577} 578 579define <vscale x 1 x i1> @fcmp_ule_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 580; CHECK-LABEL: fcmp_ule_vf_nxv1bf16: 581; CHECK: # %bb.0: 582; CHECK-NEXT: fmv.x.h a1, fa0 583; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 584; CHECK-NEXT: vmv.v.x v9, a1 585; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 586; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 587; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 588; CHECK-NEXT: vmflt.vv v8, v8, v10, v0.t 589; CHECK-NEXT: vmnot.m v0, v8 590; CHECK-NEXT: ret 591 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 592 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 593 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 594 ret <vscale x 1 x i1> %v 595} 596 597define <vscale x 1 x i1> @fcmp_ule_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 598; CHECK-LABEL: fcmp_ule_vf_swap_nxv1bf16: 599; CHECK: # %bb.0: 600; CHECK-NEXT: fmv.x.h a1, fa0 601; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 602; CHECK-NEXT: vmv.v.x v9, a1 603; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 604; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 605; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 606; CHECK-NEXT: vmflt.vv v8, v10, v8, v0.t 607; CHECK-NEXT: vmnot.m v0, v8 608; CHECK-NEXT: ret 609 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 610 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 611 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 612 ret <vscale x 1 x i1> %v 613} 614 615define <vscale x 1 x i1> @fcmp_une_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 616; CHECK-LABEL: fcmp_une_vv_nxv1bf16: 617; CHECK: # %bb.0: 618; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 619; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 620; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 621; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 622; CHECK-NEXT: vmfne.vv v0, v9, v10, v0.t 623; CHECK-NEXT: ret 624 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 625 ret <vscale x 1 x i1> %v 626} 627 628define <vscale x 1 x i1> @fcmp_une_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 629; CHECK-LABEL: fcmp_une_vf_nxv1bf16: 630; CHECK: # %bb.0: 631; CHECK-NEXT: fmv.x.h a1, fa0 632; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 633; CHECK-NEXT: vmv.v.x v9, a1 634; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 635; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 636; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 637; CHECK-NEXT: vmfne.vv v0, v10, v8, v0.t 638; CHECK-NEXT: ret 639 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 640 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 641 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 642 ret <vscale x 1 x i1> %v 643} 644 645define <vscale x 1 x i1> @fcmp_une_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 646; CHECK-LABEL: fcmp_une_vf_swap_nxv1bf16: 647; CHECK: # %bb.0: 648; CHECK-NEXT: fmv.x.h a1, fa0 649; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 650; CHECK-NEXT: vmv.v.x v9, a1 651; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 652; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v9 653; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 654; CHECK-NEXT: vmfne.vv v0, v8, v10, v0.t 655; CHECK-NEXT: ret 656 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 657 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 658 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 659 ret <vscale x 1 x i1> %v 660} 661 662define <vscale x 1 x i1> @fcmp_uno_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 663; CHECK-LABEL: fcmp_uno_vv_nxv1bf16: 664; CHECK: # %bb.0: 665; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 666; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 667; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 668; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 669; CHECK-NEXT: vmfne.vv v8, v10, v10, v0.t 670; CHECK-NEXT: vmfne.vv v9, v9, v9, v0.t 671; CHECK-NEXT: vmor.mm v0, v9, v8 672; CHECK-NEXT: ret 673 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 674 ret <vscale x 1 x i1> %v 675} 676 677define <vscale x 1 x i1> @fcmp_uno_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 678; CHECK-LABEL: fcmp_uno_vf_nxv1bf16: 679; CHECK: # %bb.0: 680; CHECK-NEXT: fmv.x.h a1, fa0 681; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 682; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 683; CHECK-NEXT: vmv.v.x v8, a1 684; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 685; CHECK-NEXT: vmfne.vv v9, v9, v9, v0.t 686; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 687; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 688; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 689; CHECK-NEXT: vmfne.vv v8, v10, v10, v0.t 690; CHECK-NEXT: vmor.mm v0, v9, v8 691; CHECK-NEXT: ret 692 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 693 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 694 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 695 ret <vscale x 1 x i1> %v 696} 697 698define <vscale x 1 x i1> @fcmp_uno_vf_swap_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 699; CHECK-LABEL: fcmp_uno_vf_swap_nxv1bf16: 700; CHECK: # %bb.0: 701; CHECK-NEXT: fmv.x.h a1, fa0 702; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 703; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 704; CHECK-NEXT: vmv.v.x v8, a1 705; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 706; CHECK-NEXT: vmfne.vv v9, v9, v9, v0.t 707; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 708; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 709; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 710; CHECK-NEXT: vmfne.vv v8, v10, v10, v0.t 711; CHECK-NEXT: vmor.mm v0, v8, v9 712; CHECK-NEXT: ret 713 %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0 714 %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer 715 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 716 ret <vscale x 1 x i1> %v 717} 718 719declare <vscale x 3 x i1> @llvm.vp.fcmp.nxv3bf16(<vscale x 3 x bfloat>, <vscale x 3 x bfloat>, metadata, <vscale x 3 x i1>, i32) 720 721define <vscale x 3 x i1> @fcmp_oeq_vv_nxv3bf16(<vscale x 3 x bfloat> %va, <vscale x 3 x bfloat> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) { 722; CHECK-LABEL: fcmp_oeq_vv_nxv3bf16: 723; CHECK: # %bb.0: 724; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 725; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v9 726; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 727; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma 728; CHECK-NEXT: vmfeq.vv v8, v12, v10, v0.t 729; CHECK-NEXT: vmv1r.v v0, v8 730; CHECK-NEXT: ret 731 %v = call <vscale x 3 x i1> @llvm.vp.fcmp.nxv3bf16(<vscale x 3 x bfloat> %va, <vscale x 3 x bfloat> %vb, metadata !"oeq", <vscale x 3 x i1> %m, i32 %evl) 732 ret <vscale x 3 x i1> %v 733} 734 735declare <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, metadata, <vscale x 8 x i1>, i32) 736 737define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 738; CHECK-LABEL: fcmp_oeq_vv_nxv8bf16: 739; CHECK: # %bb.0: 740; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 741; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 742; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 743; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 744; CHECK-NEXT: vmfeq.vv v8, v16, v12, v0.t 745; CHECK-NEXT: vmv1r.v v0, v8 746; CHECK-NEXT: ret 747 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 748 ret <vscale x 8 x i1> %v 749} 750 751define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 752; CHECK-LABEL: fcmp_oeq_vf_nxv8bf16: 753; CHECK: # %bb.0: 754; CHECK-NEXT: fmv.x.h a1, fa0 755; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 756; CHECK-NEXT: vmv.v.x v10, a1 757; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 758; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 759; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 760; CHECK-NEXT: vmfeq.vv v8, v12, v16, v0.t 761; CHECK-NEXT: vmv1r.v v0, v8 762; CHECK-NEXT: ret 763 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 764 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 765 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 766 ret <vscale x 8 x i1> %v 767} 768 769define <vscale x 8 x i1> @fcmp_oeq_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 770; CHECK-LABEL: fcmp_oeq_vf_swap_nxv8bf16: 771; CHECK: # %bb.0: 772; CHECK-NEXT: fmv.x.h a1, fa0 773; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 774; CHECK-NEXT: vmv.v.x v10, a1 775; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 776; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 777; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 778; CHECK-NEXT: vmfeq.vv v8, v16, v12, v0.t 779; CHECK-NEXT: vmv1r.v v0, v8 780; CHECK-NEXT: ret 781 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 782 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 783 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 784 ret <vscale x 8 x i1> %v 785} 786 787define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 788; CHECK-LABEL: fcmp_ogt_vv_nxv8bf16: 789; CHECK: # %bb.0: 790; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 791; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 792; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 793; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 794; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 795; CHECK-NEXT: vmv1r.v v0, v8 796; CHECK-NEXT: ret 797 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 798 ret <vscale x 8 x i1> %v 799} 800 801define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 802; CHECK-LABEL: fcmp_ogt_vf_nxv8bf16: 803; CHECK: # %bb.0: 804; CHECK-NEXT: fmv.x.h a1, fa0 805; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 806; CHECK-NEXT: vmv.v.x v10, a1 807; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 808; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 809; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 810; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 811; CHECK-NEXT: vmv1r.v v0, v8 812; CHECK-NEXT: ret 813 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 814 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 815 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 816 ret <vscale x 8 x i1> %v 817} 818 819define <vscale x 8 x i1> @fcmp_ogt_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 820; CHECK-LABEL: fcmp_ogt_vf_swap_nxv8bf16: 821; CHECK: # %bb.0: 822; CHECK-NEXT: fmv.x.h a1, fa0 823; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 824; CHECK-NEXT: vmv.v.x v10, a1 825; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 826; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 827; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 828; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 829; CHECK-NEXT: vmv1r.v v0, v8 830; CHECK-NEXT: ret 831 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 832 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 833 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 834 ret <vscale x 8 x i1> %v 835} 836 837define <vscale x 8 x i1> @fcmp_oge_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 838; CHECK-LABEL: fcmp_oge_vv_nxv8bf16: 839; CHECK: # %bb.0: 840; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 841; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 842; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 843; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 844; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 845; CHECK-NEXT: vmv1r.v v0, v8 846; CHECK-NEXT: ret 847 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 848 ret <vscale x 8 x i1> %v 849} 850 851define <vscale x 8 x i1> @fcmp_oge_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 852; CHECK-LABEL: fcmp_oge_vf_nxv8bf16: 853; CHECK: # %bb.0: 854; CHECK-NEXT: fmv.x.h a1, fa0 855; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 856; CHECK-NEXT: vmv.v.x v10, a1 857; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 858; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 859; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 860; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 861; CHECK-NEXT: vmv1r.v v0, v8 862; CHECK-NEXT: ret 863 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 864 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 865 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 866 ret <vscale x 8 x i1> %v 867} 868 869define <vscale x 8 x i1> @fcmp_oge_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 870; CHECK-LABEL: fcmp_oge_vf_swap_nxv8bf16: 871; CHECK: # %bb.0: 872; CHECK-NEXT: fmv.x.h a1, fa0 873; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 874; CHECK-NEXT: vmv.v.x v10, a1 875; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 876; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 877; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 878; CHECK-NEXT: vmfle.vv v8, v12, v16, v0.t 879; CHECK-NEXT: vmv1r.v v0, v8 880; CHECK-NEXT: ret 881 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 882 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 883 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 884 ret <vscale x 8 x i1> %v 885} 886 887define <vscale x 8 x i1> @fcmp_olt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 888; CHECK-LABEL: fcmp_olt_vv_nxv8bf16: 889; CHECK: # %bb.0: 890; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 891; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 892; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 893; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 894; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 895; CHECK-NEXT: vmv1r.v v0, v8 896; CHECK-NEXT: ret 897 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 898 ret <vscale x 8 x i1> %v 899} 900 901define <vscale x 8 x i1> @fcmp_olt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 902; CHECK-LABEL: fcmp_olt_vf_nxv8bf16: 903; CHECK: # %bb.0: 904; CHECK-NEXT: fmv.x.h a1, fa0 905; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 906; CHECK-NEXT: vmv.v.x v10, a1 907; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 908; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 909; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 910; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 911; CHECK-NEXT: vmv1r.v v0, v8 912; CHECK-NEXT: ret 913 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 914 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 915 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 916 ret <vscale x 8 x i1> %v 917} 918 919define <vscale x 8 x i1> @fcmp_olt_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 920; CHECK-LABEL: fcmp_olt_vf_swap_nxv8bf16: 921; CHECK: # %bb.0: 922; CHECK-NEXT: fmv.x.h a1, fa0 923; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 924; CHECK-NEXT: vmv.v.x v10, a1 925; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 926; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 927; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 928; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 929; CHECK-NEXT: vmv1r.v v0, v8 930; CHECK-NEXT: ret 931 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 932 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 933 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 934 ret <vscale x 8 x i1> %v 935} 936 937define <vscale x 8 x i1> @fcmp_ole_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 938; CHECK-LABEL: fcmp_ole_vv_nxv8bf16: 939; CHECK: # %bb.0: 940; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 941; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 942; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 943; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 944; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 945; CHECK-NEXT: vmv1r.v v0, v8 946; CHECK-NEXT: ret 947 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 948 ret <vscale x 8 x i1> %v 949} 950 951define <vscale x 8 x i1> @fcmp_ole_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 952; CHECK-LABEL: fcmp_ole_vf_nxv8bf16: 953; CHECK: # %bb.0: 954; CHECK-NEXT: fmv.x.h a1, fa0 955; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 956; CHECK-NEXT: vmv.v.x v10, a1 957; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 958; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 959; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 960; CHECK-NEXT: vmfle.vv v8, v12, v16, v0.t 961; CHECK-NEXT: vmv1r.v v0, v8 962; CHECK-NEXT: ret 963 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 964 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 965 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 966 ret <vscale x 8 x i1> %v 967} 968 969define <vscale x 8 x i1> @fcmp_ole_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 970; CHECK-LABEL: fcmp_ole_vf_swap_nxv8bf16: 971; CHECK: # %bb.0: 972; CHECK-NEXT: fmv.x.h a1, fa0 973; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 974; CHECK-NEXT: vmv.v.x v10, a1 975; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 976; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 977; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 978; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 979; CHECK-NEXT: vmv1r.v v0, v8 980; CHECK-NEXT: ret 981 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 982 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 983 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 984 ret <vscale x 8 x i1> %v 985} 986 987define <vscale x 8 x i1> @fcmp_one_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 988; CHECK-LABEL: fcmp_one_vv_nxv8bf16: 989; CHECK: # %bb.0: 990; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 991; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 992; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 993; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 994; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 995; CHECK-NEXT: vmflt.vv v9, v12, v16, v0.t 996; CHECK-NEXT: vmor.mm v0, v9, v8 997; CHECK-NEXT: ret 998 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 999 ret <vscale x 8 x i1> %v 1000} 1001 1002define <vscale x 8 x i1> @fcmp_one_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1003; CHECK-LABEL: fcmp_one_vf_nxv8bf16: 1004; CHECK: # %bb.0: 1005; CHECK-NEXT: fmv.x.h a1, fa0 1006; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1007; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1008; CHECK-NEXT: vmv.v.x v8, a1 1009; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1010; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1011; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 1012; CHECK-NEXT: vmflt.vv v9, v16, v12, v0.t 1013; CHECK-NEXT: vmor.mm v0, v9, v8 1014; CHECK-NEXT: ret 1015 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1016 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1017 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 1018 ret <vscale x 8 x i1> %v 1019} 1020 1021define <vscale x 8 x i1> @fcmp_one_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1022; CHECK-LABEL: fcmp_one_vf_swap_nxv8bf16: 1023; CHECK: # %bb.0: 1024; CHECK-NEXT: fmv.x.h a1, fa0 1025; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1026; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1027; CHECK-NEXT: vmv.v.x v8, a1 1028; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1029; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1030; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1031; CHECK-NEXT: vmflt.vv v9, v12, v16, v0.t 1032; CHECK-NEXT: vmor.mm v0, v9, v8 1033; CHECK-NEXT: ret 1034 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1035 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1036 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 1037 ret <vscale x 8 x i1> %v 1038} 1039 1040define <vscale x 8 x i1> @fcmp_ord_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1041; CHECK-LABEL: fcmp_ord_vv_nxv8bf16: 1042; CHECK: # %bb.0: 1043; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1044; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1045; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1046; CHECK-NEXT: vmfeq.vv v10, v12, v12, v0.t 1047; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1048; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1049; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1050; CHECK-NEXT: vmfeq.vv v8, v12, v12, v0.t 1051; CHECK-NEXT: vmand.mm v0, v8, v10 1052; CHECK-NEXT: ret 1053 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 1054 ret <vscale x 8 x i1> %v 1055} 1056 1057define <vscale x 8 x i1> @fcmp_ord_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1058; CHECK-LABEL: fcmp_ord_vf_nxv8bf16: 1059; CHECK: # %bb.0: 1060; CHECK-NEXT: fmv.x.h a1, fa0 1061; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1062; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1063; CHECK-NEXT: vmv.v.x v8, a1 1064; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1065; CHECK-NEXT: vmfeq.vv v10, v12, v12, v0.t 1066; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1067; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1068; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1069; CHECK-NEXT: vmfeq.vv v8, v12, v12, v0.t 1070; CHECK-NEXT: vmand.mm v0, v10, v8 1071; CHECK-NEXT: ret 1072 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1073 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1074 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 1075 ret <vscale x 8 x i1> %v 1076} 1077 1078define <vscale x 8 x i1> @fcmp_ord_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1079; CHECK-LABEL: fcmp_ord_vf_swap_nxv8bf16: 1080; CHECK: # %bb.0: 1081; CHECK-NEXT: fmv.x.h a1, fa0 1082; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1083; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1084; CHECK-NEXT: vmv.v.x v8, a1 1085; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1086; CHECK-NEXT: vmfeq.vv v10, v12, v12, v0.t 1087; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1088; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1089; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1090; CHECK-NEXT: vmfeq.vv v8, v12, v12, v0.t 1091; CHECK-NEXT: vmand.mm v0, v8, v10 1092; CHECK-NEXT: ret 1093 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1094 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1095 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 1096 ret <vscale x 8 x i1> %v 1097} 1098 1099define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1100; CHECK-LABEL: fcmp_ueq_vv_nxv8bf16: 1101; CHECK: # %bb.0: 1102; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1103; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1104; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1105; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1106; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1107; CHECK-NEXT: vmflt.vv v9, v12, v16, v0.t 1108; CHECK-NEXT: vmnor.mm v0, v9, v8 1109; CHECK-NEXT: ret 1110 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 1111 ret <vscale x 8 x i1> %v 1112} 1113 1114define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1115; CHECK-LABEL: fcmp_ueq_vf_nxv8bf16: 1116; CHECK: # %bb.0: 1117; CHECK-NEXT: fmv.x.h a1, fa0 1118; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1119; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1120; CHECK-NEXT: vmv.v.x v8, a1 1121; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1122; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1123; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 1124; CHECK-NEXT: vmflt.vv v9, v16, v12, v0.t 1125; CHECK-NEXT: vmnor.mm v0, v9, v8 1126; CHECK-NEXT: ret 1127 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1128 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1129 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 1130 ret <vscale x 8 x i1> %v 1131} 1132 1133define <vscale x 8 x i1> @fcmp_ueq_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1134; CHECK-LABEL: fcmp_ueq_vf_swap_nxv8bf16: 1135; CHECK: # %bb.0: 1136; CHECK-NEXT: fmv.x.h a1, fa0 1137; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1138; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1139; CHECK-NEXT: vmv.v.x v8, a1 1140; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1141; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1142; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1143; CHECK-NEXT: vmflt.vv v9, v12, v16, v0.t 1144; CHECK-NEXT: vmnor.mm v0, v9, v8 1145; CHECK-NEXT: ret 1146 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1147 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1148 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 1149 ret <vscale x 8 x i1> %v 1150} 1151 1152define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1153; CHECK-LABEL: fcmp_ugt_vv_nxv8bf16: 1154; CHECK: # %bb.0: 1155; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1156; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1157; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1158; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1159; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 1160; CHECK-NEXT: vmnot.m v0, v8 1161; CHECK-NEXT: ret 1162 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 1163 ret <vscale x 8 x i1> %v 1164} 1165 1166define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1167; CHECK-LABEL: fcmp_ugt_vf_nxv8bf16: 1168; CHECK: # %bb.0: 1169; CHECK-NEXT: fmv.x.h a1, fa0 1170; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1171; CHECK-NEXT: vmv.v.x v10, a1 1172; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1173; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1174; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1175; CHECK-NEXT: vmfle.vv v8, v12, v16, v0.t 1176; CHECK-NEXT: vmnot.m v0, v8 1177; CHECK-NEXT: ret 1178 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1179 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1180 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 1181 ret <vscale x 8 x i1> %v 1182} 1183 1184define <vscale x 8 x i1> @fcmp_ugt_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1185; CHECK-LABEL: fcmp_ugt_vf_swap_nxv8bf16: 1186; CHECK: # %bb.0: 1187; CHECK-NEXT: fmv.x.h a1, fa0 1188; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1189; CHECK-NEXT: vmv.v.x v10, a1 1190; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1191; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1192; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1193; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 1194; CHECK-NEXT: vmnot.m v0, v8 1195; CHECK-NEXT: ret 1196 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1197 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1198 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 1199 ret <vscale x 8 x i1> %v 1200} 1201 1202define <vscale x 8 x i1> @fcmp_uge_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1203; CHECK-LABEL: fcmp_uge_vv_nxv8bf16: 1204; CHECK: # %bb.0: 1205; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1206; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1207; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1208; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1209; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1210; CHECK-NEXT: vmnot.m v0, v8 1211; CHECK-NEXT: ret 1212 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 1213 ret <vscale x 8 x i1> %v 1214} 1215 1216define <vscale x 8 x i1> @fcmp_uge_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1217; CHECK-LABEL: fcmp_uge_vf_nxv8bf16: 1218; CHECK: # %bb.0: 1219; CHECK-NEXT: fmv.x.h a1, fa0 1220; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1221; CHECK-NEXT: vmv.v.x v10, a1 1222; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1223; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1224; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1225; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 1226; CHECK-NEXT: vmnot.m v0, v8 1227; CHECK-NEXT: ret 1228 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1229 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1230 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 1231 ret <vscale x 8 x i1> %v 1232} 1233 1234define <vscale x 8 x i1> @fcmp_uge_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1235; CHECK-LABEL: fcmp_uge_vf_swap_nxv8bf16: 1236; CHECK: # %bb.0: 1237; CHECK-NEXT: fmv.x.h a1, fa0 1238; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1239; CHECK-NEXT: vmv.v.x v10, a1 1240; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1241; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1242; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1243; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1244; CHECK-NEXT: vmnot.m v0, v8 1245; CHECK-NEXT: ret 1246 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1247 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1248 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 1249 ret <vscale x 8 x i1> %v 1250} 1251 1252define <vscale x 8 x i1> @fcmp_ult_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1253; CHECK-LABEL: fcmp_ult_vv_nxv8bf16: 1254; CHECK: # %bb.0: 1255; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1256; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1257; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1258; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1259; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 1260; CHECK-NEXT: vmnot.m v0, v8 1261; CHECK-NEXT: ret 1262 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 1263 ret <vscale x 8 x i1> %v 1264} 1265 1266define <vscale x 8 x i1> @fcmp_ult_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1267; CHECK-LABEL: fcmp_ult_vf_nxv8bf16: 1268; CHECK: # %bb.0: 1269; CHECK-NEXT: fmv.x.h a1, fa0 1270; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1271; CHECK-NEXT: vmv.v.x v10, a1 1272; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1273; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1274; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1275; CHECK-NEXT: vmfle.vv v8, v16, v12, v0.t 1276; CHECK-NEXT: vmnot.m v0, v8 1277; CHECK-NEXT: ret 1278 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1279 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1280 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 1281 ret <vscale x 8 x i1> %v 1282} 1283 1284define <vscale x 8 x i1> @fcmp_ult_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1285; CHECK-LABEL: fcmp_ult_vf_swap_nxv8bf16: 1286; CHECK: # %bb.0: 1287; CHECK-NEXT: fmv.x.h a1, fa0 1288; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1289; CHECK-NEXT: vmv.v.x v10, a1 1290; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1291; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1292; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1293; CHECK-NEXT: vmfle.vv v8, v12, v16, v0.t 1294; CHECK-NEXT: vmnot.m v0, v8 1295; CHECK-NEXT: ret 1296 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1297 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1298 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 1299 ret <vscale x 8 x i1> %v 1300} 1301 1302define <vscale x 8 x i1> @fcmp_ule_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1303; CHECK-LABEL: fcmp_ule_vv_nxv8bf16: 1304; CHECK: # %bb.0: 1305; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1306; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1307; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1308; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1309; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1310; CHECK-NEXT: vmnot.m v0, v8 1311; CHECK-NEXT: ret 1312 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 1313 ret <vscale x 8 x i1> %v 1314} 1315 1316define <vscale x 8 x i1> @fcmp_ule_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1317; CHECK-LABEL: fcmp_ule_vf_nxv8bf16: 1318; CHECK: # %bb.0: 1319; CHECK-NEXT: fmv.x.h a1, fa0 1320; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1321; CHECK-NEXT: vmv.v.x v10, a1 1322; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1323; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1324; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1325; CHECK-NEXT: vmflt.vv v8, v16, v12, v0.t 1326; CHECK-NEXT: vmnot.m v0, v8 1327; CHECK-NEXT: ret 1328 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1329 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1330 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 1331 ret <vscale x 8 x i1> %v 1332} 1333 1334define <vscale x 8 x i1> @fcmp_ule_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1335; CHECK-LABEL: fcmp_ule_vf_swap_nxv8bf16: 1336; CHECK: # %bb.0: 1337; CHECK-NEXT: fmv.x.h a1, fa0 1338; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1339; CHECK-NEXT: vmv.v.x v10, a1 1340; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1341; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1342; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1343; CHECK-NEXT: vmflt.vv v8, v12, v16, v0.t 1344; CHECK-NEXT: vmnot.m v0, v8 1345; CHECK-NEXT: ret 1346 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1347 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1348 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 1349 ret <vscale x 8 x i1> %v 1350} 1351 1352define <vscale x 8 x i1> @fcmp_une_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1353; CHECK-LABEL: fcmp_une_vv_nxv8bf16: 1354; CHECK: # %bb.0: 1355; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1356; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1357; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1358; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1359; CHECK-NEXT: vmfne.vv v8, v16, v12, v0.t 1360; CHECK-NEXT: vmv1r.v v0, v8 1361; CHECK-NEXT: ret 1362 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 1363 ret <vscale x 8 x i1> %v 1364} 1365 1366define <vscale x 8 x i1> @fcmp_une_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1367; CHECK-LABEL: fcmp_une_vf_nxv8bf16: 1368; CHECK: # %bb.0: 1369; CHECK-NEXT: fmv.x.h a1, fa0 1370; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1371; CHECK-NEXT: vmv.v.x v10, a1 1372; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1373; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1374; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1375; CHECK-NEXT: vmfne.vv v8, v12, v16, v0.t 1376; CHECK-NEXT: vmv1r.v v0, v8 1377; CHECK-NEXT: ret 1378 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1379 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1380 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 1381 ret <vscale x 8 x i1> %v 1382} 1383 1384define <vscale x 8 x i1> @fcmp_une_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1385; CHECK-LABEL: fcmp_une_vf_swap_nxv8bf16: 1386; CHECK: # %bb.0: 1387; CHECK-NEXT: fmv.x.h a1, fa0 1388; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1389; CHECK-NEXT: vmv.v.x v10, a1 1390; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1391; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v10 1392; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1393; CHECK-NEXT: vmfne.vv v8, v16, v12, v0.t 1394; CHECK-NEXT: vmv1r.v v0, v8 1395; CHECK-NEXT: ret 1396 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1397 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1398 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 1399 ret <vscale x 8 x i1> %v 1400} 1401 1402define <vscale x 8 x i1> @fcmp_uno_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1403; CHECK-LABEL: fcmp_uno_vv_nxv8bf16: 1404; CHECK: # %bb.0: 1405; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1406; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10 1407; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1408; CHECK-NEXT: vmfne.vv v10, v12, v12, v0.t 1409; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1410; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1411; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1412; CHECK-NEXT: vmfne.vv v8, v12, v12, v0.t 1413; CHECK-NEXT: vmor.mm v0, v8, v10 1414; CHECK-NEXT: ret 1415 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 1416 ret <vscale x 8 x i1> %v 1417} 1418 1419define <vscale x 8 x i1> @fcmp_uno_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1420; CHECK-LABEL: fcmp_uno_vf_nxv8bf16: 1421; CHECK: # %bb.0: 1422; CHECK-NEXT: fmv.x.h a1, fa0 1423; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1424; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1425; CHECK-NEXT: vmv.v.x v8, a1 1426; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1427; CHECK-NEXT: vmfne.vv v10, v12, v12, v0.t 1428; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1429; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1430; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1431; CHECK-NEXT: vmfne.vv v8, v12, v12, v0.t 1432; CHECK-NEXT: vmor.mm v0, v10, v8 1433; CHECK-NEXT: ret 1434 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1435 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1436 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 1437 ret <vscale x 8 x i1> %v 1438} 1439 1440define <vscale x 8 x i1> @fcmp_uno_vf_swap_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1441; CHECK-LABEL: fcmp_uno_vf_swap_nxv8bf16: 1442; CHECK: # %bb.0: 1443; CHECK-NEXT: fmv.x.h a1, fa0 1444; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 1445; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1446; CHECK-NEXT: vmv.v.x v8, a1 1447; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1448; CHECK-NEXT: vmfne.vv v10, v12, v12, v0.t 1449; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 1450; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8 1451; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma 1452; CHECK-NEXT: vmfne.vv v8, v12, v12, v0.t 1453; CHECK-NEXT: vmor.mm v0, v8, v10 1454; CHECK-NEXT: ret 1455 %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0 1456 %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer 1457 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 1458 ret <vscale x 8 x i1> %v 1459} 1460 1461declare <vscale x 64 x i1> @llvm.vp.fcmp.nxv64bf16(<vscale x 64 x bfloat>, <vscale x 64 x bfloat>, metadata, <vscale x 64 x i1>, i32) 1462 1463define <vscale x 64 x i1> @fcmp_oeq_vv_nxv64bf16(<vscale x 64 x bfloat> %va, <vscale x 64 x bfloat> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) { 1464; CHECK-LABEL: fcmp_oeq_vv_nxv64bf16: 1465; CHECK: # %bb.0: 1466; CHECK-NEXT: addi sp, sp, -16 1467; CHECK-NEXT: .cfi_def_cfa_offset 16 1468; CHECK-NEXT: csrr a1, vlenb 1469; CHECK-NEXT: mv a3, a1 1470; CHECK-NEXT: slli a1, a1, 3 1471; CHECK-NEXT: add a3, a3, a1 1472; CHECK-NEXT: slli a1, a1, 2 1473; CHECK-NEXT: add a1, a1, a3 1474; CHECK-NEXT: sub sp, sp, a1 1475; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x29, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 41 * vlenb 1476; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma 1477; CHECK-NEXT: vmv1r.v v24, v0 1478; CHECK-NEXT: csrr a1, vlenb 1479; CHECK-NEXT: mv a3, a1 1480; CHECK-NEXT: slli a1, a1, 3 1481; CHECK-NEXT: add a3, a3, a1 1482; CHECK-NEXT: slli a1, a1, 1 1483; CHECK-NEXT: add a1, a1, a3 1484; CHECK-NEXT: add a1, sp, a1 1485; CHECK-NEXT: addi a1, a1, 16 1486; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 1487; CHECK-NEXT: csrr a3, vlenb 1488; CHECK-NEXT: slli a1, a3, 3 1489; CHECK-NEXT: slli a5, a3, 2 1490; CHECK-NEXT: slli a4, a3, 1 1491; CHECK-NEXT: add a1, a0, a1 1492; CHECK-NEXT: sub a6, a2, a5 1493; CHECK-NEXT: vl8re16.v v0, (a1) 1494; CHECK-NEXT: sltu a1, a2, a6 1495; CHECK-NEXT: addi a1, a1, -1 1496; CHECK-NEXT: and a6, a1, a6 1497; CHECK-NEXT: sub a1, a6, a4 1498; CHECK-NEXT: sltu a7, a6, a1 1499; CHECK-NEXT: addi a7, a7, -1 1500; CHECK-NEXT: and a7, a7, a1 1501; CHECK-NEXT: srli a1, a3, 1 1502; CHECK-NEXT: srli a3, a3, 2 1503; CHECK-NEXT: csrr t0, vlenb 1504; CHECK-NEXT: slli t0, t0, 3 1505; CHECK-NEXT: add t0, sp, t0 1506; CHECK-NEXT: addi t0, t0, 16 1507; CHECK-NEXT: vs1r.v v24, (t0) # Unknown-size Folded Spill 1508; CHECK-NEXT: vslidedown.vx v25, v24, a1 1509; CHECK-NEXT: vsetvli t0, zero, e8, mf2, ta, ma 1510; CHECK-NEXT: vslidedown.vx v24, v25, a3 1511; CHECK-NEXT: vl8re16.v v8, (a0) 1512; CHECK-NEXT: csrr a0, vlenb 1513; CHECK-NEXT: slli t0, a0, 5 1514; CHECK-NEXT: add a0, t0, a0 1515; CHECK-NEXT: add a0, sp, a0 1516; CHECK-NEXT: addi a0, a0, 16 1517; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 1518; CHECK-NEXT: csrr a0, vlenb 1519; CHECK-NEXT: slli t0, a0, 3 1520; CHECK-NEXT: add a0, t0, a0 1521; CHECK-NEXT: add a0, sp, a0 1522; CHECK-NEXT: addi a0, a0, 16 1523; CHECK-NEXT: vs8r.v v0, (a0) # Unknown-size Folded Spill 1524; CHECK-NEXT: vsetvli zero, a7, e16, m4, ta, ma 1525; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v4 1526; CHECK-NEXT: addi a0, sp, 16 1527; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 1528; CHECK-NEXT: vmv8r.v v8, v16 1529; CHECK-NEXT: csrr a0, vlenb 1530; CHECK-NEXT: slli a7, a0, 4 1531; CHECK-NEXT: add a0, a7, a0 1532; CHECK-NEXT: add a0, sp, a0 1533; CHECK-NEXT: addi a0, a0, 16 1534; CHECK-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill 1535; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12 1536; CHECK-NEXT: vmv1r.v v0, v24 1537; CHECK-NEXT: addi a0, sp, 16 1538; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 1539; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 1540; CHECK-NEXT: vmfeq.vv v6, v16, v8, v0.t 1541; CHECK-NEXT: bltu a6, a4, .LBB85_2 1542; CHECK-NEXT: # %bb.1: 1543; CHECK-NEXT: mv a6, a4 1544; CHECK-NEXT: .LBB85_2: 1545; CHECK-NEXT: vmv1r.v v0, v25 1546; CHECK-NEXT: csrr a0, vlenb 1547; CHECK-NEXT: slli a7, a0, 3 1548; CHECK-NEXT: add a0, a7, a0 1549; CHECK-NEXT: add a0, sp, a0 1550; CHECK-NEXT: addi a0, a0, 16 1551; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1552; CHECK-NEXT: vsetvli zero, a6, e16, m4, ta, ma 1553; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v16 1554; CHECK-NEXT: csrr a0, vlenb 1555; CHECK-NEXT: slli a6, a0, 4 1556; CHECK-NEXT: add a0, a6, a0 1557; CHECK-NEXT: add a0, sp, a0 1558; CHECK-NEXT: addi a0, a0, 16 1559; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1560; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16 1561; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 1562; CHECK-NEXT: vmfeq.vv v5, v24, v8, v0.t 1563; CHECK-NEXT: add a0, a3, a3 1564; CHECK-NEXT: bltu a2, a5, .LBB85_4 1565; CHECK-NEXT: # %bb.3: 1566; CHECK-NEXT: mv a2, a5 1567; CHECK-NEXT: .LBB85_4: 1568; CHECK-NEXT: sub a5, a2, a4 1569; CHECK-NEXT: csrr a6, vlenb 1570; CHECK-NEXT: slli a6, a6, 3 1571; CHECK-NEXT: add a6, sp, a6 1572; CHECK-NEXT: addi a6, a6, 16 1573; CHECK-NEXT: vl1r.v v7, (a6) # Unknown-size Folded Reload 1574; CHECK-NEXT: vsetvli a6, zero, e8, mf2, ta, ma 1575; CHECK-NEXT: vslidedown.vx v0, v7, a3 1576; CHECK-NEXT: sltu a6, a2, a5 1577; CHECK-NEXT: addi a6, a6, -1 1578; CHECK-NEXT: and a5, a6, a5 1579; CHECK-NEXT: csrr a6, vlenb 1580; CHECK-NEXT: mv a7, a6 1581; CHECK-NEXT: slli a6, a6, 3 1582; CHECK-NEXT: add a7, a7, a6 1583; CHECK-NEXT: slli a6, a6, 1 1584; CHECK-NEXT: add a6, a6, a7 1585; CHECK-NEXT: add a6, sp, a6 1586; CHECK-NEXT: addi a6, a6, 16 1587; CHECK-NEXT: vl8r.v v16, (a6) # Unknown-size Folded Reload 1588; CHECK-NEXT: vsetvli zero, a5, e16, m4, ta, ma 1589; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v20 1590; CHECK-NEXT: csrr a5, vlenb 1591; CHECK-NEXT: slli a6, a5, 4 1592; CHECK-NEXT: add a5, a6, a5 1593; CHECK-NEXT: add a5, sp, a5 1594; CHECK-NEXT: addi a5, a5, 16 1595; CHECK-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill 1596; CHECK-NEXT: csrr a5, vlenb 1597; CHECK-NEXT: slli a6, a5, 5 1598; CHECK-NEXT: add a5, a6, a5 1599; CHECK-NEXT: add a5, sp, a5 1600; CHECK-NEXT: addi a5, a5, 16 1601; CHECK-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload 1602; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v28 1603; CHECK-NEXT: csrr a5, vlenb 1604; CHECK-NEXT: slli a6, a5, 4 1605; CHECK-NEXT: add a5, a6, a5 1606; CHECK-NEXT: add a5, sp, a5 1607; CHECK-NEXT: addi a5, a5, 16 1608; CHECK-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload 1609; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 1610; CHECK-NEXT: vmfeq.vv v4, v24, v8, v0.t 1611; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 1612; CHECK-NEXT: vslideup.vx v5, v6, a3 1613; CHECK-NEXT: bltu a2, a4, .LBB85_6 1614; CHECK-NEXT: # %bb.5: 1615; CHECK-NEXT: mv a2, a4 1616; CHECK-NEXT: .LBB85_6: 1617; CHECK-NEXT: vmv1r.v v0, v7 1618; CHECK-NEXT: vsetvli zero, a2, e16, m4, ta, ma 1619; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16 1620; CHECK-NEXT: csrr a2, vlenb 1621; CHECK-NEXT: slli a4, a2, 5 1622; CHECK-NEXT: add a2, a4, a2 1623; CHECK-NEXT: add a2, sp, a2 1624; CHECK-NEXT: addi a2, a2, 16 1625; CHECK-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload 1626; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8 1627; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma 1628; CHECK-NEXT: vmfeq.vv v8, v24, v16, v0.t 1629; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 1630; CHECK-NEXT: vslideup.vx v8, v4, a3 1631; CHECK-NEXT: add a0, a1, a1 1632; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 1633; CHECK-NEXT: vslideup.vx v8, v5, a1 1634; CHECK-NEXT: vmv.v.v v0, v8 1635; CHECK-NEXT: csrr a0, vlenb 1636; CHECK-NEXT: mv a1, a0 1637; CHECK-NEXT: slli a0, a0, 3 1638; CHECK-NEXT: add a1, a1, a0 1639; CHECK-NEXT: slli a0, a0, 2 1640; CHECK-NEXT: add a0, a0, a1 1641; CHECK-NEXT: add sp, sp, a0 1642; CHECK-NEXT: .cfi_def_cfa sp, 16 1643; CHECK-NEXT: addi sp, sp, 16 1644; CHECK-NEXT: .cfi_def_cfa_offset 0 1645; CHECK-NEXT: ret 1646 %v = call <vscale x 64 x i1> @llvm.vp.fcmp.nxv64bf16(<vscale x 64 x bfloat> %va, <vscale x 64 x bfloat> %vb, metadata !"oeq", <vscale x 64 x i1> %m, i32 %evl) 1647 ret <vscale x 64 x i1> %v 1648} 1649 1650declare <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, <vscale x 1 x i1>, i32) 1651 1652define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1653; ZVFH-LABEL: fcmp_oeq_vv_nxv1f16: 1654; ZVFH: # %bb.0: 1655; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1656; ZVFH-NEXT: vmfeq.vv v0, v8, v9, v0.t 1657; ZVFH-NEXT: ret 1658; 1659; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv1f16: 1660; ZVFHMIN: # %bb.0: 1661; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1662; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 1663; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 1664; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1665; ZVFHMIN-NEXT: vmfeq.vv v0, v9, v10, v0.t 1666; ZVFHMIN-NEXT: ret 1667 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 1668 ret <vscale x 1 x i1> %v 1669} 1670 1671define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1672; ZVFH-LABEL: fcmp_oeq_vf_nxv1f16: 1673; ZVFH: # %bb.0: 1674; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1675; ZVFH-NEXT: vmfeq.vf v0, v8, fa0, v0.t 1676; ZVFH-NEXT: ret 1677; 1678; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv1f16: 1679; ZVFHMIN: # %bb.0: 1680; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1681; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1682; ZVFHMIN-NEXT: vmv.v.x v9, a1 1683; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1684; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1685; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1686; ZVFHMIN-NEXT: vmfeq.vv v0, v10, v8, v0.t 1687; ZVFHMIN-NEXT: ret 1688 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1689 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1690 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 1691 ret <vscale x 1 x i1> %v 1692} 1693 1694define <vscale x 1 x i1> @fcmp_oeq_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1695; ZVFH-LABEL: fcmp_oeq_vf_swap_nxv1f16: 1696; ZVFH: # %bb.0: 1697; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1698; ZVFH-NEXT: vmfeq.vf v0, v8, fa0, v0.t 1699; ZVFH-NEXT: ret 1700; 1701; ZVFHMIN-LABEL: fcmp_oeq_vf_swap_nxv1f16: 1702; ZVFHMIN: # %bb.0: 1703; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1704; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1705; ZVFHMIN-NEXT: vmv.v.x v9, a1 1706; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1707; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1708; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1709; ZVFHMIN-NEXT: vmfeq.vv v0, v8, v10, v0.t 1710; ZVFHMIN-NEXT: ret 1711 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1712 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1713 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 1714 ret <vscale x 1 x i1> %v 1715} 1716 1717define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1718; ZVFH-LABEL: fcmp_ogt_vv_nxv1f16: 1719; ZVFH: # %bb.0: 1720; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1721; ZVFH-NEXT: vmflt.vv v0, v9, v8, v0.t 1722; ZVFH-NEXT: ret 1723; 1724; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv1f16: 1725; ZVFHMIN: # %bb.0: 1726; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1727; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1728; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1729; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1730; ZVFHMIN-NEXT: vmflt.vv v0, v8, v10, v0.t 1731; ZVFHMIN-NEXT: ret 1732 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 1733 ret <vscale x 1 x i1> %v 1734} 1735 1736define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1737; ZVFH-LABEL: fcmp_ogt_vf_nxv1f16: 1738; ZVFH: # %bb.0: 1739; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1740; ZVFH-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1741; ZVFH-NEXT: ret 1742; 1743; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv1f16: 1744; ZVFHMIN: # %bb.0: 1745; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1746; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1747; ZVFHMIN-NEXT: vmv.v.x v9, a1 1748; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1749; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1750; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1751; ZVFHMIN-NEXT: vmflt.vv v0, v8, v10, v0.t 1752; ZVFHMIN-NEXT: ret 1753 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1754 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1755 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 1756 ret <vscale x 1 x i1> %v 1757} 1758 1759define <vscale x 1 x i1> @fcmp_ogt_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1760; ZVFH-LABEL: fcmp_ogt_vf_swap_nxv1f16: 1761; ZVFH: # %bb.0: 1762; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1763; ZVFH-NEXT: vmflt.vf v0, v8, fa0, v0.t 1764; ZVFH-NEXT: ret 1765; 1766; ZVFHMIN-LABEL: fcmp_ogt_vf_swap_nxv1f16: 1767; ZVFHMIN: # %bb.0: 1768; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1769; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1770; ZVFHMIN-NEXT: vmv.v.x v9, a1 1771; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1772; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1773; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1774; ZVFHMIN-NEXT: vmflt.vv v0, v10, v8, v0.t 1775; ZVFHMIN-NEXT: ret 1776 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1777 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1778 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 1779 ret <vscale x 1 x i1> %v 1780} 1781 1782define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1783; ZVFH-LABEL: fcmp_oge_vv_nxv1f16: 1784; ZVFH: # %bb.0: 1785; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1786; ZVFH-NEXT: vmfle.vv v0, v9, v8, v0.t 1787; ZVFH-NEXT: ret 1788; 1789; ZVFHMIN-LABEL: fcmp_oge_vv_nxv1f16: 1790; ZVFHMIN: # %bb.0: 1791; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1792; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1793; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1794; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1795; ZVFHMIN-NEXT: vmfle.vv v0, v8, v10, v0.t 1796; ZVFHMIN-NEXT: ret 1797 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 1798 ret <vscale x 1 x i1> %v 1799} 1800 1801define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1802; ZVFH-LABEL: fcmp_oge_vf_nxv1f16: 1803; ZVFH: # %bb.0: 1804; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1805; ZVFH-NEXT: vmfge.vf v0, v8, fa0, v0.t 1806; ZVFH-NEXT: ret 1807; 1808; ZVFHMIN-LABEL: fcmp_oge_vf_nxv1f16: 1809; ZVFHMIN: # %bb.0: 1810; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1811; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1812; ZVFHMIN-NEXT: vmv.v.x v9, a1 1813; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1814; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1815; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1816; ZVFHMIN-NEXT: vmfle.vv v0, v8, v10, v0.t 1817; ZVFHMIN-NEXT: ret 1818 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1819 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1820 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 1821 ret <vscale x 1 x i1> %v 1822} 1823 1824define <vscale x 1 x i1> @fcmp_oge_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1825; ZVFH-LABEL: fcmp_oge_vf_swap_nxv1f16: 1826; ZVFH: # %bb.0: 1827; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1828; ZVFH-NEXT: vmfle.vf v0, v8, fa0, v0.t 1829; ZVFH-NEXT: ret 1830; 1831; ZVFHMIN-LABEL: fcmp_oge_vf_swap_nxv1f16: 1832; ZVFHMIN: # %bb.0: 1833; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1834; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1835; ZVFHMIN-NEXT: vmv.v.x v9, a1 1836; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1837; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1838; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1839; ZVFHMIN-NEXT: vmfle.vv v0, v10, v8, v0.t 1840; ZVFHMIN-NEXT: ret 1841 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1842 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1843 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 1844 ret <vscale x 1 x i1> %v 1845} 1846 1847define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1848; ZVFH-LABEL: fcmp_olt_vv_nxv1f16: 1849; ZVFH: # %bb.0: 1850; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1851; ZVFH-NEXT: vmflt.vv v0, v8, v9, v0.t 1852; ZVFH-NEXT: ret 1853; 1854; ZVFHMIN-LABEL: fcmp_olt_vv_nxv1f16: 1855; ZVFHMIN: # %bb.0: 1856; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1857; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 1858; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 1859; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1860; ZVFHMIN-NEXT: vmflt.vv v0, v9, v10, v0.t 1861; ZVFHMIN-NEXT: ret 1862 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 1863 ret <vscale x 1 x i1> %v 1864} 1865 1866define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1867; ZVFH-LABEL: fcmp_olt_vf_nxv1f16: 1868; ZVFH: # %bb.0: 1869; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1870; ZVFH-NEXT: vmflt.vf v0, v8, fa0, v0.t 1871; ZVFH-NEXT: ret 1872; 1873; ZVFHMIN-LABEL: fcmp_olt_vf_nxv1f16: 1874; ZVFHMIN: # %bb.0: 1875; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1876; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1877; ZVFHMIN-NEXT: vmv.v.x v9, a1 1878; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1879; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1880; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1881; ZVFHMIN-NEXT: vmflt.vv v0, v10, v8, v0.t 1882; ZVFHMIN-NEXT: ret 1883 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1884 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1885 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 1886 ret <vscale x 1 x i1> %v 1887} 1888 1889define <vscale x 1 x i1> @fcmp_olt_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1890; ZVFH-LABEL: fcmp_olt_vf_swap_nxv1f16: 1891; ZVFH: # %bb.0: 1892; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1893; ZVFH-NEXT: vmfgt.vf v0, v8, fa0, v0.t 1894; ZVFH-NEXT: ret 1895; 1896; ZVFHMIN-LABEL: fcmp_olt_vf_swap_nxv1f16: 1897; ZVFHMIN: # %bb.0: 1898; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1899; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1900; ZVFHMIN-NEXT: vmv.v.x v9, a1 1901; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1902; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1903; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1904; ZVFHMIN-NEXT: vmflt.vv v0, v8, v10, v0.t 1905; ZVFHMIN-NEXT: ret 1906 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1907 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1908 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 1909 ret <vscale x 1 x i1> %v 1910} 1911 1912define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1913; ZVFH-LABEL: fcmp_ole_vv_nxv1f16: 1914; ZVFH: # %bb.0: 1915; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1916; ZVFH-NEXT: vmfle.vv v0, v8, v9, v0.t 1917; ZVFH-NEXT: ret 1918; 1919; ZVFHMIN-LABEL: fcmp_ole_vv_nxv1f16: 1920; ZVFHMIN: # %bb.0: 1921; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1922; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 1923; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 1924; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1925; ZVFHMIN-NEXT: vmfle.vv v0, v9, v10, v0.t 1926; ZVFHMIN-NEXT: ret 1927 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 1928 ret <vscale x 1 x i1> %v 1929} 1930 1931define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1932; ZVFH-LABEL: fcmp_ole_vf_nxv1f16: 1933; ZVFH: # %bb.0: 1934; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1935; ZVFH-NEXT: vmfle.vf v0, v8, fa0, v0.t 1936; ZVFH-NEXT: ret 1937; 1938; ZVFHMIN-LABEL: fcmp_ole_vf_nxv1f16: 1939; ZVFHMIN: # %bb.0: 1940; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1941; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1942; ZVFHMIN-NEXT: vmv.v.x v9, a1 1943; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1944; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1945; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1946; ZVFHMIN-NEXT: vmfle.vv v0, v10, v8, v0.t 1947; ZVFHMIN-NEXT: ret 1948 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1949 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1950 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 1951 ret <vscale x 1 x i1> %v 1952} 1953 1954define <vscale x 1 x i1> @fcmp_ole_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1955; ZVFH-LABEL: fcmp_ole_vf_swap_nxv1f16: 1956; ZVFH: # %bb.0: 1957; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1958; ZVFH-NEXT: vmfge.vf v0, v8, fa0, v0.t 1959; ZVFH-NEXT: ret 1960; 1961; ZVFHMIN-LABEL: fcmp_ole_vf_swap_nxv1f16: 1962; ZVFHMIN: # %bb.0: 1963; ZVFHMIN-NEXT: fmv.x.h a1, fa0 1964; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1965; ZVFHMIN-NEXT: vmv.v.x v9, a1 1966; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 1967; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 1968; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1969; ZVFHMIN-NEXT: vmfle.vv v0, v8, v10, v0.t 1970; ZVFHMIN-NEXT: ret 1971 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1972 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1973 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 1974 ret <vscale x 1 x i1> %v 1975} 1976 1977define <vscale x 1 x i1> @fcmp_one_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1978; ZVFH-LABEL: fcmp_one_vv_nxv1f16: 1979; ZVFH: # %bb.0: 1980; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1981; ZVFH-NEXT: vmflt.vv v10, v8, v9, v0.t 1982; ZVFH-NEXT: vmflt.vv v8, v9, v8, v0.t 1983; ZVFH-NEXT: vmor.mm v0, v8, v10 1984; ZVFH-NEXT: ret 1985; 1986; ZVFHMIN-LABEL: fcmp_one_vv_nxv1f16: 1987; ZVFHMIN: # %bb.0: 1988; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1989; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 1990; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 1991; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 1992; ZVFHMIN-NEXT: vmflt.vv v8, v9, v10, v0.t 1993; ZVFHMIN-NEXT: vmflt.vv v9, v10, v9, v0.t 1994; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 1995; ZVFHMIN-NEXT: ret 1996 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 1997 ret <vscale x 1 x i1> %v 1998} 1999 2000define <vscale x 1 x i1> @fcmp_one_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2001; ZVFH-LABEL: fcmp_one_vf_nxv1f16: 2002; ZVFH: # %bb.0: 2003; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2004; ZVFH-NEXT: vmflt.vf v9, v8, fa0, v0.t 2005; ZVFH-NEXT: vmfgt.vf v8, v8, fa0, v0.t 2006; ZVFH-NEXT: vmor.mm v0, v8, v9 2007; ZVFH-NEXT: ret 2008; 2009; ZVFHMIN-LABEL: fcmp_one_vf_nxv1f16: 2010; ZVFHMIN: # %bb.0: 2011; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2012; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2013; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2014; ZVFHMIN-NEXT: vmv.v.x v8, a1 2015; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2016; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2017; ZVFHMIN-NEXT: vmflt.vv v8, v9, v10, v0.t 2018; ZVFHMIN-NEXT: vmflt.vv v9, v10, v9, v0.t 2019; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 2020; ZVFHMIN-NEXT: ret 2021 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2022 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2023 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 2024 ret <vscale x 1 x i1> %v 2025} 2026 2027define <vscale x 1 x i1> @fcmp_one_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2028; ZVFH-LABEL: fcmp_one_vf_swap_nxv1f16: 2029; ZVFH: # %bb.0: 2030; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2031; ZVFH-NEXT: vmfgt.vf v9, v8, fa0, v0.t 2032; ZVFH-NEXT: vmflt.vf v8, v8, fa0, v0.t 2033; ZVFH-NEXT: vmor.mm v0, v8, v9 2034; ZVFH-NEXT: ret 2035; 2036; ZVFHMIN-LABEL: fcmp_one_vf_swap_nxv1f16: 2037; ZVFHMIN: # %bb.0: 2038; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2039; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2040; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2041; ZVFHMIN-NEXT: vmv.v.x v8, a1 2042; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2043; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2044; ZVFHMIN-NEXT: vmflt.vv v8, v10, v9, v0.t 2045; ZVFHMIN-NEXT: vmflt.vv v9, v9, v10, v0.t 2046; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 2047; ZVFHMIN-NEXT: ret 2048 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2049 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2050 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 2051 ret <vscale x 1 x i1> %v 2052} 2053 2054define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2055; ZVFH-LABEL: fcmp_ord_vv_nxv1f16: 2056; ZVFH: # %bb.0: 2057; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2058; ZVFH-NEXT: vmfeq.vv v9, v9, v9, v0.t 2059; ZVFH-NEXT: vmfeq.vv v8, v8, v8, v0.t 2060; ZVFH-NEXT: vmand.mm v0, v8, v9 2061; ZVFH-NEXT: ret 2062; 2063; ZVFHMIN-LABEL: fcmp_ord_vv_nxv1f16: 2064; ZVFHMIN: # %bb.0: 2065; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2066; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2067; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2068; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2069; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10, v0.t 2070; ZVFHMIN-NEXT: vmfeq.vv v9, v9, v9, v0.t 2071; ZVFHMIN-NEXT: vmand.mm v0, v9, v8 2072; ZVFHMIN-NEXT: ret 2073 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 2074 ret <vscale x 1 x i1> %v 2075} 2076 2077define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2078; ZVFH-LABEL: fcmp_ord_vf_nxv1f16: 2079; ZVFH: # %bb.0: 2080; ZVFH-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 2081; ZVFH-NEXT: vfmv.v.f v9, fa0 2082; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2083; ZVFH-NEXT: vmfeq.vf v9, v9, fa0, v0.t 2084; ZVFH-NEXT: vmfeq.vv v8, v8, v8, v0.t 2085; ZVFH-NEXT: vmand.mm v0, v8, v9 2086; ZVFH-NEXT: ret 2087; 2088; ZVFHMIN-LABEL: fcmp_ord_vf_nxv1f16: 2089; ZVFHMIN: # %bb.0: 2090; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2091; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2092; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2093; ZVFHMIN-NEXT: vmv.v.x v8, a1 2094; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2095; ZVFHMIN-NEXT: vmfeq.vv v9, v9, v9, v0.t 2096; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 2097; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2098; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2099; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10, v0.t 2100; ZVFHMIN-NEXT: vmand.mm v0, v9, v8 2101; ZVFHMIN-NEXT: ret 2102 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2103 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2104 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 2105 ret <vscale x 1 x i1> %v 2106} 2107 2108define <vscale x 1 x i1> @fcmp_ord_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2109; ZVFH-LABEL: fcmp_ord_vf_swap_nxv1f16: 2110; ZVFH: # %bb.0: 2111; ZVFH-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 2112; ZVFH-NEXT: vfmv.v.f v9, fa0 2113; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2114; ZVFH-NEXT: vmfeq.vf v9, v9, fa0, v0.t 2115; ZVFH-NEXT: vmfeq.vv v8, v8, v8, v0.t 2116; ZVFH-NEXT: vmand.mm v0, v9, v8 2117; ZVFH-NEXT: ret 2118; 2119; ZVFHMIN-LABEL: fcmp_ord_vf_swap_nxv1f16: 2120; ZVFHMIN: # %bb.0: 2121; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2122; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2123; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2124; ZVFHMIN-NEXT: vmv.v.x v8, a1 2125; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2126; ZVFHMIN-NEXT: vmfeq.vv v9, v9, v9, v0.t 2127; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 2128; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2129; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2130; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10, v0.t 2131; ZVFHMIN-NEXT: vmand.mm v0, v8, v9 2132; ZVFHMIN-NEXT: ret 2133 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2134 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2135 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 2136 ret <vscale x 1 x i1> %v 2137} 2138 2139define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2140; ZVFH-LABEL: fcmp_ueq_vv_nxv1f16: 2141; ZVFH: # %bb.0: 2142; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2143; ZVFH-NEXT: vmflt.vv v10, v8, v9, v0.t 2144; ZVFH-NEXT: vmflt.vv v8, v9, v8, v0.t 2145; ZVFH-NEXT: vmnor.mm v0, v8, v10 2146; ZVFH-NEXT: ret 2147; 2148; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv1f16: 2149; ZVFHMIN: # %bb.0: 2150; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2151; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2152; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2153; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2154; ZVFHMIN-NEXT: vmflt.vv v8, v9, v10, v0.t 2155; ZVFHMIN-NEXT: vmflt.vv v9, v10, v9, v0.t 2156; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 2157; ZVFHMIN-NEXT: ret 2158 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 2159 ret <vscale x 1 x i1> %v 2160} 2161 2162define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2163; ZVFH-LABEL: fcmp_ueq_vf_nxv1f16: 2164; ZVFH: # %bb.0: 2165; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2166; ZVFH-NEXT: vmflt.vf v9, v8, fa0, v0.t 2167; ZVFH-NEXT: vmfgt.vf v8, v8, fa0, v0.t 2168; ZVFH-NEXT: vmnor.mm v0, v8, v9 2169; ZVFH-NEXT: ret 2170; 2171; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv1f16: 2172; ZVFHMIN: # %bb.0: 2173; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2174; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2175; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2176; ZVFHMIN-NEXT: vmv.v.x v8, a1 2177; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2178; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2179; ZVFHMIN-NEXT: vmflt.vv v8, v9, v10, v0.t 2180; ZVFHMIN-NEXT: vmflt.vv v9, v10, v9, v0.t 2181; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 2182; ZVFHMIN-NEXT: ret 2183 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2184 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2185 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 2186 ret <vscale x 1 x i1> %v 2187} 2188 2189define <vscale x 1 x i1> @fcmp_ueq_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2190; ZVFH-LABEL: fcmp_ueq_vf_swap_nxv1f16: 2191; ZVFH: # %bb.0: 2192; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2193; ZVFH-NEXT: vmfgt.vf v9, v8, fa0, v0.t 2194; ZVFH-NEXT: vmflt.vf v8, v8, fa0, v0.t 2195; ZVFH-NEXT: vmnor.mm v0, v8, v9 2196; ZVFH-NEXT: ret 2197; 2198; ZVFHMIN-LABEL: fcmp_ueq_vf_swap_nxv1f16: 2199; ZVFHMIN: # %bb.0: 2200; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2201; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2202; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2203; ZVFHMIN-NEXT: vmv.v.x v8, a1 2204; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2205; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2206; ZVFHMIN-NEXT: vmflt.vv v8, v10, v9, v0.t 2207; ZVFHMIN-NEXT: vmflt.vv v9, v9, v10, v0.t 2208; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 2209; ZVFHMIN-NEXT: ret 2210 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2211 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2212 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 2213 ret <vscale x 1 x i1> %v 2214} 2215 2216define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2217; ZVFH-LABEL: fcmp_ugt_vv_nxv1f16: 2218; ZVFH: # %bb.0: 2219; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2220; ZVFH-NEXT: vmfle.vv v8, v8, v9, v0.t 2221; ZVFH-NEXT: vmnot.m v0, v8 2222; ZVFH-NEXT: ret 2223; 2224; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv1f16: 2225; ZVFHMIN: # %bb.0: 2226; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2227; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2228; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2229; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2230; ZVFHMIN-NEXT: vmfle.vv v8, v9, v10, v0.t 2231; ZVFHMIN-NEXT: vmnot.m v0, v8 2232; ZVFHMIN-NEXT: ret 2233 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 2234 ret <vscale x 1 x i1> %v 2235} 2236 2237define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2238; ZVFH-LABEL: fcmp_ugt_vf_nxv1f16: 2239; ZVFH: # %bb.0: 2240; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2241; ZVFH-NEXT: vmfle.vf v8, v8, fa0, v0.t 2242; ZVFH-NEXT: vmnot.m v0, v8 2243; ZVFH-NEXT: ret 2244; 2245; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv1f16: 2246; ZVFHMIN: # %bb.0: 2247; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2248; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2249; ZVFHMIN-NEXT: vmv.v.x v9, a1 2250; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2251; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2252; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2253; ZVFHMIN-NEXT: vmfle.vv v8, v10, v8, v0.t 2254; ZVFHMIN-NEXT: vmnot.m v0, v8 2255; ZVFHMIN-NEXT: ret 2256 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2257 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2258 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 2259 ret <vscale x 1 x i1> %v 2260} 2261 2262define <vscale x 1 x i1> @fcmp_ugt_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2263; ZVFH-LABEL: fcmp_ugt_vf_swap_nxv1f16: 2264; ZVFH: # %bb.0: 2265; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2266; ZVFH-NEXT: vmfge.vf v8, v8, fa0, v0.t 2267; ZVFH-NEXT: vmnot.m v0, v8 2268; ZVFH-NEXT: ret 2269; 2270; ZVFHMIN-LABEL: fcmp_ugt_vf_swap_nxv1f16: 2271; ZVFHMIN: # %bb.0: 2272; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2273; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2274; ZVFHMIN-NEXT: vmv.v.x v9, a1 2275; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2276; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2277; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2278; ZVFHMIN-NEXT: vmfle.vv v8, v8, v10, v0.t 2279; ZVFHMIN-NEXT: vmnot.m v0, v8 2280; ZVFHMIN-NEXT: ret 2281 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2282 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2283 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 2284 ret <vscale x 1 x i1> %v 2285} 2286 2287define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2288; ZVFH-LABEL: fcmp_uge_vv_nxv1f16: 2289; ZVFH: # %bb.0: 2290; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2291; ZVFH-NEXT: vmflt.vv v8, v8, v9, v0.t 2292; ZVFH-NEXT: vmnot.m v0, v8 2293; ZVFH-NEXT: ret 2294; 2295; ZVFHMIN-LABEL: fcmp_uge_vv_nxv1f16: 2296; ZVFHMIN: # %bb.0: 2297; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2298; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2299; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2300; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2301; ZVFHMIN-NEXT: vmflt.vv v8, v9, v10, v0.t 2302; ZVFHMIN-NEXT: vmnot.m v0, v8 2303; ZVFHMIN-NEXT: ret 2304 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 2305 ret <vscale x 1 x i1> %v 2306} 2307 2308define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2309; ZVFH-LABEL: fcmp_uge_vf_nxv1f16: 2310; ZVFH: # %bb.0: 2311; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2312; ZVFH-NEXT: vmflt.vf v8, v8, fa0, v0.t 2313; ZVFH-NEXT: vmnot.m v0, v8 2314; ZVFH-NEXT: ret 2315; 2316; ZVFHMIN-LABEL: fcmp_uge_vf_nxv1f16: 2317; ZVFHMIN: # %bb.0: 2318; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2319; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2320; ZVFHMIN-NEXT: vmv.v.x v9, a1 2321; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2322; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2323; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2324; ZVFHMIN-NEXT: vmflt.vv v8, v10, v8, v0.t 2325; ZVFHMIN-NEXT: vmnot.m v0, v8 2326; ZVFHMIN-NEXT: ret 2327 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2328 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2329 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 2330 ret <vscale x 1 x i1> %v 2331} 2332 2333define <vscale x 1 x i1> @fcmp_uge_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2334; ZVFH-LABEL: fcmp_uge_vf_swap_nxv1f16: 2335; ZVFH: # %bb.0: 2336; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2337; ZVFH-NEXT: vmfgt.vf v8, v8, fa0, v0.t 2338; ZVFH-NEXT: vmnot.m v0, v8 2339; ZVFH-NEXT: ret 2340; 2341; ZVFHMIN-LABEL: fcmp_uge_vf_swap_nxv1f16: 2342; ZVFHMIN: # %bb.0: 2343; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2344; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2345; ZVFHMIN-NEXT: vmv.v.x v9, a1 2346; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2347; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2348; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2349; ZVFHMIN-NEXT: vmflt.vv v8, v8, v10, v0.t 2350; ZVFHMIN-NEXT: vmnot.m v0, v8 2351; ZVFHMIN-NEXT: ret 2352 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2353 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2354 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 2355 ret <vscale x 1 x i1> %v 2356} 2357 2358define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2359; ZVFH-LABEL: fcmp_ult_vv_nxv1f16: 2360; ZVFH: # %bb.0: 2361; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2362; ZVFH-NEXT: vmfle.vv v8, v9, v8, v0.t 2363; ZVFH-NEXT: vmnot.m v0, v8 2364; ZVFH-NEXT: ret 2365; 2366; ZVFHMIN-LABEL: fcmp_ult_vv_nxv1f16: 2367; ZVFHMIN: # %bb.0: 2368; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2369; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2370; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2371; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2372; ZVFHMIN-NEXT: vmfle.vv v8, v8, v10, v0.t 2373; ZVFHMIN-NEXT: vmnot.m v0, v8 2374; ZVFHMIN-NEXT: ret 2375 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 2376 ret <vscale x 1 x i1> %v 2377} 2378 2379define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2380; ZVFH-LABEL: fcmp_ult_vf_nxv1f16: 2381; ZVFH: # %bb.0: 2382; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2383; ZVFH-NEXT: vmfge.vf v8, v8, fa0, v0.t 2384; ZVFH-NEXT: vmnot.m v0, v8 2385; ZVFH-NEXT: ret 2386; 2387; ZVFHMIN-LABEL: fcmp_ult_vf_nxv1f16: 2388; ZVFHMIN: # %bb.0: 2389; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2390; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2391; ZVFHMIN-NEXT: vmv.v.x v9, a1 2392; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2393; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2394; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2395; ZVFHMIN-NEXT: vmfle.vv v8, v8, v10, v0.t 2396; ZVFHMIN-NEXT: vmnot.m v0, v8 2397; ZVFHMIN-NEXT: ret 2398 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2399 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2400 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 2401 ret <vscale x 1 x i1> %v 2402} 2403 2404define <vscale x 1 x i1> @fcmp_ult_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2405; ZVFH-LABEL: fcmp_ult_vf_swap_nxv1f16: 2406; ZVFH: # %bb.0: 2407; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2408; ZVFH-NEXT: vmfle.vf v8, v8, fa0, v0.t 2409; ZVFH-NEXT: vmnot.m v0, v8 2410; ZVFH-NEXT: ret 2411; 2412; ZVFHMIN-LABEL: fcmp_ult_vf_swap_nxv1f16: 2413; ZVFHMIN: # %bb.0: 2414; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2415; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2416; ZVFHMIN-NEXT: vmv.v.x v9, a1 2417; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2418; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2419; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2420; ZVFHMIN-NEXT: vmfle.vv v8, v10, v8, v0.t 2421; ZVFHMIN-NEXT: vmnot.m v0, v8 2422; ZVFHMIN-NEXT: ret 2423 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2424 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2425 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 2426 ret <vscale x 1 x i1> %v 2427} 2428 2429define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2430; ZVFH-LABEL: fcmp_ule_vv_nxv1f16: 2431; ZVFH: # %bb.0: 2432; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2433; ZVFH-NEXT: vmflt.vv v8, v9, v8, v0.t 2434; ZVFH-NEXT: vmnot.m v0, v8 2435; ZVFH-NEXT: ret 2436; 2437; ZVFHMIN-LABEL: fcmp_ule_vv_nxv1f16: 2438; ZVFHMIN: # %bb.0: 2439; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2440; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2441; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2442; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2443; ZVFHMIN-NEXT: vmflt.vv v8, v8, v10, v0.t 2444; ZVFHMIN-NEXT: vmnot.m v0, v8 2445; ZVFHMIN-NEXT: ret 2446 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 2447 ret <vscale x 1 x i1> %v 2448} 2449 2450define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2451; ZVFH-LABEL: fcmp_ule_vf_nxv1f16: 2452; ZVFH: # %bb.0: 2453; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2454; ZVFH-NEXT: vmfgt.vf v8, v8, fa0, v0.t 2455; ZVFH-NEXT: vmnot.m v0, v8 2456; ZVFH-NEXT: ret 2457; 2458; ZVFHMIN-LABEL: fcmp_ule_vf_nxv1f16: 2459; ZVFHMIN: # %bb.0: 2460; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2461; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2462; ZVFHMIN-NEXT: vmv.v.x v9, a1 2463; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2464; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2465; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2466; ZVFHMIN-NEXT: vmflt.vv v8, v8, v10, v0.t 2467; ZVFHMIN-NEXT: vmnot.m v0, v8 2468; ZVFHMIN-NEXT: ret 2469 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2470 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2471 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 2472 ret <vscale x 1 x i1> %v 2473} 2474 2475define <vscale x 1 x i1> @fcmp_ule_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2476; ZVFH-LABEL: fcmp_ule_vf_swap_nxv1f16: 2477; ZVFH: # %bb.0: 2478; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2479; ZVFH-NEXT: vmflt.vf v8, v8, fa0, v0.t 2480; ZVFH-NEXT: vmnot.m v0, v8 2481; ZVFH-NEXT: ret 2482; 2483; ZVFHMIN-LABEL: fcmp_ule_vf_swap_nxv1f16: 2484; ZVFHMIN: # %bb.0: 2485; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2486; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2487; ZVFHMIN-NEXT: vmv.v.x v9, a1 2488; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2489; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2490; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2491; ZVFHMIN-NEXT: vmflt.vv v8, v10, v8, v0.t 2492; ZVFHMIN-NEXT: vmnot.m v0, v8 2493; ZVFHMIN-NEXT: ret 2494 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2495 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2496 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 2497 ret <vscale x 1 x i1> %v 2498} 2499 2500define <vscale x 1 x i1> @fcmp_une_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2501; ZVFH-LABEL: fcmp_une_vv_nxv1f16: 2502; ZVFH: # %bb.0: 2503; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2504; ZVFH-NEXT: vmfne.vv v0, v8, v9, v0.t 2505; ZVFH-NEXT: ret 2506; 2507; ZVFHMIN-LABEL: fcmp_une_vv_nxv1f16: 2508; ZVFHMIN: # %bb.0: 2509; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2510; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2511; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2512; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2513; ZVFHMIN-NEXT: vmfne.vv v0, v9, v10, v0.t 2514; ZVFHMIN-NEXT: ret 2515 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 2516 ret <vscale x 1 x i1> %v 2517} 2518 2519define <vscale x 1 x i1> @fcmp_une_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2520; ZVFH-LABEL: fcmp_une_vf_nxv1f16: 2521; ZVFH: # %bb.0: 2522; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2523; ZVFH-NEXT: vmfne.vf v0, v8, fa0, v0.t 2524; ZVFH-NEXT: ret 2525; 2526; ZVFHMIN-LABEL: fcmp_une_vf_nxv1f16: 2527; ZVFHMIN: # %bb.0: 2528; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2529; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2530; ZVFHMIN-NEXT: vmv.v.x v9, a1 2531; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2532; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2533; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2534; ZVFHMIN-NEXT: vmfne.vv v0, v10, v8, v0.t 2535; ZVFHMIN-NEXT: ret 2536 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2537 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2538 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 2539 ret <vscale x 1 x i1> %v 2540} 2541 2542define <vscale x 1 x i1> @fcmp_une_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2543; ZVFH-LABEL: fcmp_une_vf_swap_nxv1f16: 2544; ZVFH: # %bb.0: 2545; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2546; ZVFH-NEXT: vmfne.vf v0, v8, fa0, v0.t 2547; ZVFH-NEXT: ret 2548; 2549; ZVFHMIN-LABEL: fcmp_une_vf_swap_nxv1f16: 2550; ZVFHMIN: # %bb.0: 2551; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2552; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2553; ZVFHMIN-NEXT: vmv.v.x v9, a1 2554; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2555; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 2556; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2557; ZVFHMIN-NEXT: vmfne.vv v0, v8, v10, v0.t 2558; ZVFHMIN-NEXT: ret 2559 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2560 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2561 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 2562 ret <vscale x 1 x i1> %v 2563} 2564 2565define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2566; ZVFH-LABEL: fcmp_uno_vv_nxv1f16: 2567; ZVFH: # %bb.0: 2568; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2569; ZVFH-NEXT: vmfne.vv v9, v9, v9, v0.t 2570; ZVFH-NEXT: vmfne.vv v8, v8, v8, v0.t 2571; ZVFH-NEXT: vmor.mm v0, v8, v9 2572; ZVFH-NEXT: ret 2573; 2574; ZVFHMIN-LABEL: fcmp_uno_vv_nxv1f16: 2575; ZVFHMIN: # %bb.0: 2576; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2577; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2578; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2579; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2580; ZVFHMIN-NEXT: vmfne.vv v8, v10, v10, v0.t 2581; ZVFHMIN-NEXT: vmfne.vv v9, v9, v9, v0.t 2582; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 2583; ZVFHMIN-NEXT: ret 2584 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 2585 ret <vscale x 1 x i1> %v 2586} 2587 2588define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2589; ZVFH-LABEL: fcmp_uno_vf_nxv1f16: 2590; ZVFH: # %bb.0: 2591; ZVFH-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 2592; ZVFH-NEXT: vfmv.v.f v9, fa0 2593; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2594; ZVFH-NEXT: vmfne.vf v9, v9, fa0, v0.t 2595; ZVFH-NEXT: vmfne.vv v8, v8, v8, v0.t 2596; ZVFH-NEXT: vmor.mm v0, v8, v9 2597; ZVFH-NEXT: ret 2598; 2599; ZVFHMIN-LABEL: fcmp_uno_vf_nxv1f16: 2600; ZVFHMIN: # %bb.0: 2601; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2602; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2603; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2604; ZVFHMIN-NEXT: vmv.v.x v8, a1 2605; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2606; ZVFHMIN-NEXT: vmfne.vv v9, v9, v9, v0.t 2607; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 2608; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2609; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2610; ZVFHMIN-NEXT: vmfne.vv v8, v10, v10, v0.t 2611; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 2612; ZVFHMIN-NEXT: ret 2613 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2614 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2615 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 2616 ret <vscale x 1 x i1> %v 2617} 2618 2619define <vscale x 1 x i1> @fcmp_uno_vf_swap_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 2620; ZVFH-LABEL: fcmp_uno_vf_swap_nxv1f16: 2621; ZVFH: # %bb.0: 2622; ZVFH-NEXT: vsetvli a1, zero, e16, mf4, ta, ma 2623; ZVFH-NEXT: vfmv.v.f v9, fa0 2624; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2625; ZVFH-NEXT: vmfne.vf v9, v9, fa0, v0.t 2626; ZVFH-NEXT: vmfne.vv v8, v8, v8, v0.t 2627; ZVFH-NEXT: vmor.mm v0, v9, v8 2628; ZVFH-NEXT: ret 2629; 2630; ZVFHMIN-LABEL: fcmp_uno_vf_swap_nxv1f16: 2631; ZVFHMIN: # %bb.0: 2632; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2633; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 2634; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 2635; ZVFHMIN-NEXT: vmv.v.x v8, a1 2636; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2637; ZVFHMIN-NEXT: vmfne.vv v9, v9, v9, v0.t 2638; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 2639; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 2640; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 2641; ZVFHMIN-NEXT: vmfne.vv v8, v10, v10, v0.t 2642; ZVFHMIN-NEXT: vmor.mm v0, v8, v9 2643; ZVFHMIN-NEXT: ret 2644 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 2645 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 2646 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 2647 ret <vscale x 1 x i1> %v 2648} 2649 2650declare <vscale x 3 x i1> @llvm.vp.fcmp.nxv3f16(<vscale x 3 x half>, <vscale x 3 x half>, metadata, <vscale x 3 x i1>, i32) 2651 2652define <vscale x 3 x i1> @fcmp_oeq_vv_nxv3f16(<vscale x 3 x half> %va, <vscale x 3 x half> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) { 2653; ZVFH-LABEL: fcmp_oeq_vv_nxv3f16: 2654; ZVFH: # %bb.0: 2655; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2656; ZVFH-NEXT: vmfeq.vv v0, v8, v9, v0.t 2657; ZVFH-NEXT: ret 2658; 2659; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv3f16: 2660; ZVFHMIN: # %bb.0: 2661; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2662; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 2663; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2664; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 2665; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v10, v0.t 2666; ZVFHMIN-NEXT: vmv1r.v v0, v8 2667; ZVFHMIN-NEXT: ret 2668 %v = call <vscale x 3 x i1> @llvm.vp.fcmp.nxv3f16(<vscale x 3 x half> %va, <vscale x 3 x half> %vb, metadata !"oeq", <vscale x 3 x i1> %m, i32 %evl) 2669 ret <vscale x 3 x i1> %v 2670} 2671 2672declare <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, <vscale x 8 x i1>, i32) 2673 2674define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2675; ZVFH-LABEL: fcmp_oeq_vv_nxv8f16: 2676; ZVFH: # %bb.0: 2677; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2678; ZVFH-NEXT: vmfeq.vv v12, v8, v10, v0.t 2679; ZVFH-NEXT: vmv1r.v v0, v12 2680; ZVFH-NEXT: ret 2681; 2682; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16: 2683; ZVFHMIN: # %bb.0: 2684; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2685; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 2686; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 2687; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2688; ZVFHMIN-NEXT: vmfeq.vv v8, v16, v12, v0.t 2689; ZVFHMIN-NEXT: vmv1r.v v0, v8 2690; ZVFHMIN-NEXT: ret 2691 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 2692 ret <vscale x 8 x i1> %v 2693} 2694 2695define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2696; ZVFH-LABEL: fcmp_oeq_vf_nxv8f16: 2697; ZVFH: # %bb.0: 2698; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2699; ZVFH-NEXT: vmfeq.vf v10, v8, fa0, v0.t 2700; ZVFH-NEXT: vmv1r.v v0, v10 2701; ZVFH-NEXT: ret 2702; 2703; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16: 2704; ZVFHMIN: # %bb.0: 2705; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2706; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2707; ZVFHMIN-NEXT: vmv.v.x v10, a1 2708; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2709; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2710; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2711; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v16, v0.t 2712; ZVFHMIN-NEXT: vmv1r.v v0, v8 2713; ZVFHMIN-NEXT: ret 2714 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2715 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2716 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 2717 ret <vscale x 8 x i1> %v 2718} 2719 2720define <vscale x 8 x i1> @fcmp_oeq_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2721; ZVFH-LABEL: fcmp_oeq_vf_swap_nxv8f16: 2722; ZVFH: # %bb.0: 2723; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2724; ZVFH-NEXT: vmfeq.vf v10, v8, fa0, v0.t 2725; ZVFH-NEXT: vmv1r.v v0, v10 2726; ZVFH-NEXT: ret 2727; 2728; ZVFHMIN-LABEL: fcmp_oeq_vf_swap_nxv8f16: 2729; ZVFHMIN: # %bb.0: 2730; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2731; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2732; ZVFHMIN-NEXT: vmv.v.x v10, a1 2733; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2734; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2735; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2736; ZVFHMIN-NEXT: vmfeq.vv v8, v16, v12, v0.t 2737; ZVFHMIN-NEXT: vmv1r.v v0, v8 2738; ZVFHMIN-NEXT: ret 2739 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2740 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2741 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 2742 ret <vscale x 8 x i1> %v 2743} 2744 2745define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2746; ZVFH-LABEL: fcmp_ogt_vv_nxv8f16: 2747; ZVFH: # %bb.0: 2748; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2749; ZVFH-NEXT: vmflt.vv v12, v10, v8, v0.t 2750; ZVFH-NEXT: vmv1r.v v0, v12 2751; ZVFH-NEXT: ret 2752; 2753; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16: 2754; ZVFHMIN: # %bb.0: 2755; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2756; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2757; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2758; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2759; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 2760; ZVFHMIN-NEXT: vmv1r.v v0, v8 2761; ZVFHMIN-NEXT: ret 2762 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 2763 ret <vscale x 8 x i1> %v 2764} 2765 2766define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2767; ZVFH-LABEL: fcmp_ogt_vf_nxv8f16: 2768; ZVFH: # %bb.0: 2769; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2770; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2771; ZVFH-NEXT: vmv1r.v v0, v10 2772; ZVFH-NEXT: ret 2773; 2774; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16: 2775; ZVFHMIN: # %bb.0: 2776; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2777; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2778; ZVFHMIN-NEXT: vmv.v.x v10, a1 2779; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2780; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2781; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2782; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 2783; ZVFHMIN-NEXT: vmv1r.v v0, v8 2784; ZVFHMIN-NEXT: ret 2785 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2786 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2787 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 2788 ret <vscale x 8 x i1> %v 2789} 2790 2791define <vscale x 8 x i1> @fcmp_ogt_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2792; ZVFH-LABEL: fcmp_ogt_vf_swap_nxv8f16: 2793; ZVFH: # %bb.0: 2794; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2795; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 2796; ZVFH-NEXT: vmv1r.v v0, v10 2797; ZVFH-NEXT: ret 2798; 2799; ZVFHMIN-LABEL: fcmp_ogt_vf_swap_nxv8f16: 2800; ZVFHMIN: # %bb.0: 2801; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2802; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2803; ZVFHMIN-NEXT: vmv.v.x v10, a1 2804; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2805; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2806; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2807; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 2808; ZVFHMIN-NEXT: vmv1r.v v0, v8 2809; ZVFHMIN-NEXT: ret 2810 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2811 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2812 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 2813 ret <vscale x 8 x i1> %v 2814} 2815 2816define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2817; ZVFH-LABEL: fcmp_oge_vv_nxv8f16: 2818; ZVFH: # %bb.0: 2819; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2820; ZVFH-NEXT: vmfle.vv v12, v10, v8, v0.t 2821; ZVFH-NEXT: vmv1r.v v0, v12 2822; ZVFH-NEXT: ret 2823; 2824; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16: 2825; ZVFHMIN: # %bb.0: 2826; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2827; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2828; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2829; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2830; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 2831; ZVFHMIN-NEXT: vmv1r.v v0, v8 2832; ZVFHMIN-NEXT: ret 2833 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 2834 ret <vscale x 8 x i1> %v 2835} 2836 2837define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2838; ZVFH-LABEL: fcmp_oge_vf_nxv8f16: 2839; ZVFH: # %bb.0: 2840; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2841; ZVFH-NEXT: vmfge.vf v10, v8, fa0, v0.t 2842; ZVFH-NEXT: vmv1r.v v0, v10 2843; ZVFH-NEXT: ret 2844; 2845; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16: 2846; ZVFHMIN: # %bb.0: 2847; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2848; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2849; ZVFHMIN-NEXT: vmv.v.x v10, a1 2850; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2851; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2852; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2853; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 2854; ZVFHMIN-NEXT: vmv1r.v v0, v8 2855; ZVFHMIN-NEXT: ret 2856 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2857 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2858 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 2859 ret <vscale x 8 x i1> %v 2860} 2861 2862define <vscale x 8 x i1> @fcmp_oge_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2863; ZVFH-LABEL: fcmp_oge_vf_swap_nxv8f16: 2864; ZVFH: # %bb.0: 2865; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2866; ZVFH-NEXT: vmfle.vf v10, v8, fa0, v0.t 2867; ZVFH-NEXT: vmv1r.v v0, v10 2868; ZVFH-NEXT: ret 2869; 2870; ZVFHMIN-LABEL: fcmp_oge_vf_swap_nxv8f16: 2871; ZVFHMIN: # %bb.0: 2872; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2873; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2874; ZVFHMIN-NEXT: vmv.v.x v10, a1 2875; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2876; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2877; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2878; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16, v0.t 2879; ZVFHMIN-NEXT: vmv1r.v v0, v8 2880; ZVFHMIN-NEXT: ret 2881 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2882 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2883 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 2884 ret <vscale x 8 x i1> %v 2885} 2886 2887define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2888; ZVFH-LABEL: fcmp_olt_vv_nxv8f16: 2889; ZVFH: # %bb.0: 2890; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2891; ZVFH-NEXT: vmflt.vv v12, v8, v10, v0.t 2892; ZVFH-NEXT: vmv1r.v v0, v12 2893; ZVFH-NEXT: ret 2894; 2895; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16: 2896; ZVFHMIN: # %bb.0: 2897; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2898; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 2899; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 2900; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2901; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 2902; ZVFHMIN-NEXT: vmv1r.v v0, v8 2903; ZVFHMIN-NEXT: ret 2904 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 2905 ret <vscale x 8 x i1> %v 2906} 2907 2908define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2909; ZVFH-LABEL: fcmp_olt_vf_nxv8f16: 2910; ZVFH: # %bb.0: 2911; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2912; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 2913; ZVFH-NEXT: vmv1r.v v0, v10 2914; ZVFH-NEXT: ret 2915; 2916; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16: 2917; ZVFHMIN: # %bb.0: 2918; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2919; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2920; ZVFHMIN-NEXT: vmv.v.x v10, a1 2921; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2922; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2923; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2924; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 2925; ZVFHMIN-NEXT: vmv1r.v v0, v8 2926; ZVFHMIN-NEXT: ret 2927 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2928 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2929 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 2930 ret <vscale x 8 x i1> %v 2931} 2932 2933define <vscale x 8 x i1> @fcmp_olt_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2934; ZVFH-LABEL: fcmp_olt_vf_swap_nxv8f16: 2935; ZVFH: # %bb.0: 2936; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2937; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 2938; ZVFH-NEXT: vmv1r.v v0, v10 2939; ZVFH-NEXT: ret 2940; 2941; ZVFHMIN-LABEL: fcmp_olt_vf_swap_nxv8f16: 2942; ZVFHMIN: # %bb.0: 2943; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2944; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2945; ZVFHMIN-NEXT: vmv.v.x v10, a1 2946; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2947; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2948; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2949; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 2950; ZVFHMIN-NEXT: vmv1r.v v0, v8 2951; ZVFHMIN-NEXT: ret 2952 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2953 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2954 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 2955 ret <vscale x 8 x i1> %v 2956} 2957 2958define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2959; ZVFH-LABEL: fcmp_ole_vv_nxv8f16: 2960; ZVFH: # %bb.0: 2961; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2962; ZVFH-NEXT: vmfle.vv v12, v8, v10, v0.t 2963; ZVFH-NEXT: vmv1r.v v0, v12 2964; ZVFH-NEXT: ret 2965; 2966; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16: 2967; ZVFHMIN: # %bb.0: 2968; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2969; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 2970; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 2971; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2972; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 2973; ZVFHMIN-NEXT: vmv1r.v v0, v8 2974; ZVFHMIN-NEXT: ret 2975 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 2976 ret <vscale x 8 x i1> %v 2977} 2978 2979define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2980; ZVFH-LABEL: fcmp_ole_vf_nxv8f16: 2981; ZVFH: # %bb.0: 2982; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2983; ZVFH-NEXT: vmfle.vf v10, v8, fa0, v0.t 2984; ZVFH-NEXT: vmv1r.v v0, v10 2985; ZVFH-NEXT: ret 2986; 2987; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16: 2988; ZVFHMIN: # %bb.0: 2989; ZVFHMIN-NEXT: fmv.x.h a1, fa0 2990; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2991; ZVFHMIN-NEXT: vmv.v.x v10, a1 2992; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 2993; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 2994; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 2995; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16, v0.t 2996; ZVFHMIN-NEXT: vmv1r.v v0, v8 2997; ZVFHMIN-NEXT: ret 2998 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2999 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3000 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 3001 ret <vscale x 8 x i1> %v 3002} 3003 3004define <vscale x 8 x i1> @fcmp_ole_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3005; ZVFH-LABEL: fcmp_ole_vf_swap_nxv8f16: 3006; ZVFH: # %bb.0: 3007; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3008; ZVFH-NEXT: vmfge.vf v10, v8, fa0, v0.t 3009; ZVFH-NEXT: vmv1r.v v0, v10 3010; ZVFH-NEXT: ret 3011; 3012; ZVFHMIN-LABEL: fcmp_ole_vf_swap_nxv8f16: 3013; ZVFHMIN: # %bb.0: 3014; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3015; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3016; ZVFHMIN-NEXT: vmv.v.x v10, a1 3017; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3018; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3019; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3020; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 3021; ZVFHMIN-NEXT: vmv1r.v v0, v8 3022; ZVFHMIN-NEXT: ret 3023 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3024 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3025 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 3026 ret <vscale x 8 x i1> %v 3027} 3028 3029define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3030; ZVFH-LABEL: fcmp_one_vv_nxv8f16: 3031; ZVFH: # %bb.0: 3032; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3033; ZVFH-NEXT: vmflt.vv v12, v8, v10, v0.t 3034; ZVFH-NEXT: vmflt.vv v13, v10, v8, v0.t 3035; ZVFH-NEXT: vmor.mm v0, v13, v12 3036; ZVFH-NEXT: ret 3037; 3038; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16: 3039; ZVFHMIN: # %bb.0: 3040; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3041; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3042; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3043; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3044; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3045; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16, v0.t 3046; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 3047; ZVFHMIN-NEXT: ret 3048 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 3049 ret <vscale x 8 x i1> %v 3050} 3051 3052define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3053; ZVFH-LABEL: fcmp_one_vf_nxv8f16: 3054; ZVFH: # %bb.0: 3055; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3056; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 3057; ZVFH-NEXT: vmfgt.vf v11, v8, fa0, v0.t 3058; ZVFH-NEXT: vmor.mm v0, v11, v10 3059; ZVFH-NEXT: ret 3060; 3061; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16: 3062; ZVFHMIN: # %bb.0: 3063; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3064; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3065; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3066; ZVFHMIN-NEXT: vmv.v.x v8, a1 3067; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3068; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3069; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 3070; ZVFHMIN-NEXT: vmflt.vv v9, v16, v12, v0.t 3071; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 3072; ZVFHMIN-NEXT: ret 3073 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3074 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3075 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 3076 ret <vscale x 8 x i1> %v 3077} 3078 3079define <vscale x 8 x i1> @fcmp_one_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3080; ZVFH-LABEL: fcmp_one_vf_swap_nxv8f16: 3081; ZVFH: # %bb.0: 3082; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3083; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3084; ZVFH-NEXT: vmflt.vf v11, v8, fa0, v0.t 3085; ZVFH-NEXT: vmor.mm v0, v11, v10 3086; ZVFH-NEXT: ret 3087; 3088; ZVFHMIN-LABEL: fcmp_one_vf_swap_nxv8f16: 3089; ZVFHMIN: # %bb.0: 3090; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3091; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3092; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3093; ZVFHMIN-NEXT: vmv.v.x v8, a1 3094; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3095; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3096; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3097; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16, v0.t 3098; ZVFHMIN-NEXT: vmor.mm v0, v9, v8 3099; ZVFHMIN-NEXT: ret 3100 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3101 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3102 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 3103 ret <vscale x 8 x i1> %v 3104} 3105 3106define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3107; ZVFH-LABEL: fcmp_ord_vv_nxv8f16: 3108; ZVFH: # %bb.0: 3109; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3110; ZVFH-NEXT: vmfeq.vv v12, v10, v10, v0.t 3111; ZVFH-NEXT: vmfeq.vv v10, v8, v8, v0.t 3112; ZVFH-NEXT: vmand.mm v0, v10, v12 3113; ZVFH-NEXT: ret 3114; 3115; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16: 3116; ZVFHMIN: # %bb.0: 3117; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3118; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3119; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3120; ZVFHMIN-NEXT: vmfeq.vv v10, v12, v12, v0.t 3121; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3122; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3123; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3124; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12, v0.t 3125; ZVFHMIN-NEXT: vmand.mm v0, v8, v10 3126; ZVFHMIN-NEXT: ret 3127 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 3128 ret <vscale x 8 x i1> %v 3129} 3130 3131define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3132; ZVFH-LABEL: fcmp_ord_vf_nxv8f16: 3133; ZVFH: # %bb.0: 3134; ZVFH-NEXT: vsetvli a1, zero, e16, m2, ta, ma 3135; ZVFH-NEXT: vfmv.v.f v10, fa0 3136; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3137; ZVFH-NEXT: vmfeq.vf v12, v10, fa0, v0.t 3138; ZVFH-NEXT: vmfeq.vv v10, v8, v8, v0.t 3139; ZVFH-NEXT: vmand.mm v0, v10, v12 3140; ZVFH-NEXT: ret 3141; 3142; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16: 3143; ZVFHMIN: # %bb.0: 3144; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3145; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3146; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3147; ZVFHMIN-NEXT: vmv.v.x v8, a1 3148; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3149; ZVFHMIN-NEXT: vmfeq.vv v10, v12, v12, v0.t 3150; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3151; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3152; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3153; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12, v0.t 3154; ZVFHMIN-NEXT: vmand.mm v0, v10, v8 3155; ZVFHMIN-NEXT: ret 3156 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3157 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3158 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 3159 ret <vscale x 8 x i1> %v 3160} 3161 3162define <vscale x 8 x i1> @fcmp_ord_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3163; ZVFH-LABEL: fcmp_ord_vf_swap_nxv8f16: 3164; ZVFH: # %bb.0: 3165; ZVFH-NEXT: vsetvli a1, zero, e16, m2, ta, ma 3166; ZVFH-NEXT: vfmv.v.f v10, fa0 3167; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3168; ZVFH-NEXT: vmfeq.vf v12, v10, fa0, v0.t 3169; ZVFH-NEXT: vmfeq.vv v10, v8, v8, v0.t 3170; ZVFH-NEXT: vmand.mm v0, v12, v10 3171; ZVFH-NEXT: ret 3172; 3173; ZVFHMIN-LABEL: fcmp_ord_vf_swap_nxv8f16: 3174; ZVFHMIN: # %bb.0: 3175; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3176; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3177; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3178; ZVFHMIN-NEXT: vmv.v.x v8, a1 3179; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3180; ZVFHMIN-NEXT: vmfeq.vv v10, v12, v12, v0.t 3181; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3182; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3183; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3184; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12, v0.t 3185; ZVFHMIN-NEXT: vmand.mm v0, v8, v10 3186; ZVFHMIN-NEXT: ret 3187 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3188 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3189 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 3190 ret <vscale x 8 x i1> %v 3191} 3192 3193define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3194; ZVFH-LABEL: fcmp_ueq_vv_nxv8f16: 3195; ZVFH: # %bb.0: 3196; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3197; ZVFH-NEXT: vmflt.vv v12, v8, v10, v0.t 3198; ZVFH-NEXT: vmflt.vv v13, v10, v8, v0.t 3199; ZVFH-NEXT: vmnor.mm v0, v13, v12 3200; ZVFH-NEXT: ret 3201; 3202; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16: 3203; ZVFHMIN: # %bb.0: 3204; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3205; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3206; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3207; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3208; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3209; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16, v0.t 3210; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 3211; ZVFHMIN-NEXT: ret 3212 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 3213 ret <vscale x 8 x i1> %v 3214} 3215 3216define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3217; ZVFH-LABEL: fcmp_ueq_vf_nxv8f16: 3218; ZVFH: # %bb.0: 3219; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3220; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 3221; ZVFH-NEXT: vmfgt.vf v11, v8, fa0, v0.t 3222; ZVFH-NEXT: vmnor.mm v0, v11, v10 3223; ZVFH-NEXT: ret 3224; 3225; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16: 3226; ZVFHMIN: # %bb.0: 3227; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3228; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3229; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3230; ZVFHMIN-NEXT: vmv.v.x v8, a1 3231; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3232; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3233; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 3234; ZVFHMIN-NEXT: vmflt.vv v9, v16, v12, v0.t 3235; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 3236; ZVFHMIN-NEXT: ret 3237 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3238 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3239 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 3240 ret <vscale x 8 x i1> %v 3241} 3242 3243define <vscale x 8 x i1> @fcmp_ueq_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3244; ZVFH-LABEL: fcmp_ueq_vf_swap_nxv8f16: 3245; ZVFH: # %bb.0: 3246; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3247; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3248; ZVFH-NEXT: vmflt.vf v11, v8, fa0, v0.t 3249; ZVFH-NEXT: vmnor.mm v0, v11, v10 3250; ZVFH-NEXT: ret 3251; 3252; ZVFHMIN-LABEL: fcmp_ueq_vf_swap_nxv8f16: 3253; ZVFHMIN: # %bb.0: 3254; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3255; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3256; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3257; ZVFHMIN-NEXT: vmv.v.x v8, a1 3258; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3259; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3260; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3261; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16, v0.t 3262; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8 3263; ZVFHMIN-NEXT: ret 3264 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3265 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3266 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 3267 ret <vscale x 8 x i1> %v 3268} 3269 3270define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3271; ZVFH-LABEL: fcmp_ugt_vv_nxv8f16: 3272; ZVFH: # %bb.0: 3273; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3274; ZVFH-NEXT: vmfle.vv v12, v8, v10, v0.t 3275; ZVFH-NEXT: vmnot.m v0, v12 3276; ZVFH-NEXT: ret 3277; 3278; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16: 3279; ZVFHMIN: # %bb.0: 3280; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3281; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3282; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3283; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3284; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 3285; ZVFHMIN-NEXT: vmnot.m v0, v8 3286; ZVFHMIN-NEXT: ret 3287 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 3288 ret <vscale x 8 x i1> %v 3289} 3290 3291define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3292; ZVFH-LABEL: fcmp_ugt_vf_nxv8f16: 3293; ZVFH: # %bb.0: 3294; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3295; ZVFH-NEXT: vmfle.vf v10, v8, fa0, v0.t 3296; ZVFH-NEXT: vmnot.m v0, v10 3297; ZVFH-NEXT: ret 3298; 3299; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16: 3300; ZVFHMIN: # %bb.0: 3301; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3302; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3303; ZVFHMIN-NEXT: vmv.v.x v10, a1 3304; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3305; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3306; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3307; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16, v0.t 3308; ZVFHMIN-NEXT: vmnot.m v0, v8 3309; ZVFHMIN-NEXT: ret 3310 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3311 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3312 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 3313 ret <vscale x 8 x i1> %v 3314} 3315 3316define <vscale x 8 x i1> @fcmp_ugt_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3317; ZVFH-LABEL: fcmp_ugt_vf_swap_nxv8f16: 3318; ZVFH: # %bb.0: 3319; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3320; ZVFH-NEXT: vmfge.vf v10, v8, fa0, v0.t 3321; ZVFH-NEXT: vmnot.m v0, v10 3322; ZVFH-NEXT: ret 3323; 3324; ZVFHMIN-LABEL: fcmp_ugt_vf_swap_nxv8f16: 3325; ZVFHMIN: # %bb.0: 3326; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3327; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3328; ZVFHMIN-NEXT: vmv.v.x v10, a1 3329; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3330; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3331; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3332; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 3333; ZVFHMIN-NEXT: vmnot.m v0, v8 3334; ZVFHMIN-NEXT: ret 3335 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3336 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3337 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 3338 ret <vscale x 8 x i1> %v 3339} 3340 3341define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3342; ZVFH-LABEL: fcmp_uge_vv_nxv8f16: 3343; ZVFH: # %bb.0: 3344; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3345; ZVFH-NEXT: vmflt.vv v12, v8, v10, v0.t 3346; ZVFH-NEXT: vmnot.m v0, v12 3347; ZVFH-NEXT: ret 3348; 3349; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16: 3350; ZVFHMIN: # %bb.0: 3351; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3352; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3353; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3354; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3355; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3356; ZVFHMIN-NEXT: vmnot.m v0, v8 3357; ZVFHMIN-NEXT: ret 3358 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 3359 ret <vscale x 8 x i1> %v 3360} 3361 3362define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3363; ZVFH-LABEL: fcmp_uge_vf_nxv8f16: 3364; ZVFH: # %bb.0: 3365; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3366; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 3367; ZVFH-NEXT: vmnot.m v0, v10 3368; ZVFH-NEXT: ret 3369; 3370; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16: 3371; ZVFHMIN: # %bb.0: 3372; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3373; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3374; ZVFHMIN-NEXT: vmv.v.x v10, a1 3375; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3376; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3377; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3378; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 3379; ZVFHMIN-NEXT: vmnot.m v0, v8 3380; ZVFHMIN-NEXT: ret 3381 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3382 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3383 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 3384 ret <vscale x 8 x i1> %v 3385} 3386 3387define <vscale x 8 x i1> @fcmp_uge_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3388; ZVFH-LABEL: fcmp_uge_vf_swap_nxv8f16: 3389; ZVFH: # %bb.0: 3390; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3391; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3392; ZVFH-NEXT: vmnot.m v0, v10 3393; ZVFH-NEXT: ret 3394; 3395; ZVFHMIN-LABEL: fcmp_uge_vf_swap_nxv8f16: 3396; ZVFHMIN: # %bb.0: 3397; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3398; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3399; ZVFHMIN-NEXT: vmv.v.x v10, a1 3400; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3401; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3402; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3403; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3404; ZVFHMIN-NEXT: vmnot.m v0, v8 3405; ZVFHMIN-NEXT: ret 3406 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3407 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3408 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 3409 ret <vscale x 8 x i1> %v 3410} 3411 3412define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3413; ZVFH-LABEL: fcmp_ult_vv_nxv8f16: 3414; ZVFH: # %bb.0: 3415; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3416; ZVFH-NEXT: vmfle.vv v12, v10, v8, v0.t 3417; ZVFH-NEXT: vmnot.m v0, v12 3418; ZVFH-NEXT: ret 3419; 3420; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16: 3421; ZVFHMIN: # %bb.0: 3422; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3423; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3424; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3425; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3426; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 3427; ZVFHMIN-NEXT: vmnot.m v0, v8 3428; ZVFHMIN-NEXT: ret 3429 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 3430 ret <vscale x 8 x i1> %v 3431} 3432 3433define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3434; ZVFH-LABEL: fcmp_ult_vf_nxv8f16: 3435; ZVFH: # %bb.0: 3436; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3437; ZVFH-NEXT: vmfge.vf v10, v8, fa0, v0.t 3438; ZVFH-NEXT: vmnot.m v0, v10 3439; ZVFH-NEXT: ret 3440; 3441; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16: 3442; ZVFHMIN: # %bb.0: 3443; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3444; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3445; ZVFHMIN-NEXT: vmv.v.x v10, a1 3446; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3447; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3448; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3449; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12, v0.t 3450; ZVFHMIN-NEXT: vmnot.m v0, v8 3451; ZVFHMIN-NEXT: ret 3452 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3453 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3454 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 3455 ret <vscale x 8 x i1> %v 3456} 3457 3458define <vscale x 8 x i1> @fcmp_ult_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3459; ZVFH-LABEL: fcmp_ult_vf_swap_nxv8f16: 3460; ZVFH: # %bb.0: 3461; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3462; ZVFH-NEXT: vmfle.vf v10, v8, fa0, v0.t 3463; ZVFH-NEXT: vmnot.m v0, v10 3464; ZVFH-NEXT: ret 3465; 3466; ZVFHMIN-LABEL: fcmp_ult_vf_swap_nxv8f16: 3467; ZVFHMIN: # %bb.0: 3468; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3469; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3470; ZVFHMIN-NEXT: vmv.v.x v10, a1 3471; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3472; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3473; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3474; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16, v0.t 3475; ZVFHMIN-NEXT: vmnot.m v0, v8 3476; ZVFHMIN-NEXT: ret 3477 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3478 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3479 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 3480 ret <vscale x 8 x i1> %v 3481} 3482 3483define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3484; ZVFH-LABEL: fcmp_ule_vv_nxv8f16: 3485; ZVFH: # %bb.0: 3486; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3487; ZVFH-NEXT: vmflt.vv v12, v10, v8, v0.t 3488; ZVFH-NEXT: vmnot.m v0, v12 3489; ZVFH-NEXT: ret 3490; 3491; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16: 3492; ZVFHMIN: # %bb.0: 3493; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3494; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3495; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3496; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3497; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3498; ZVFHMIN-NEXT: vmnot.m v0, v8 3499; ZVFHMIN-NEXT: ret 3500 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 3501 ret <vscale x 8 x i1> %v 3502} 3503 3504define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3505; ZVFH-LABEL: fcmp_ule_vf_nxv8f16: 3506; ZVFH: # %bb.0: 3507; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3508; ZVFH-NEXT: vmfgt.vf v10, v8, fa0, v0.t 3509; ZVFH-NEXT: vmnot.m v0, v10 3510; ZVFH-NEXT: ret 3511; 3512; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16: 3513; ZVFHMIN: # %bb.0: 3514; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3515; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3516; ZVFHMIN-NEXT: vmv.v.x v10, a1 3517; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3518; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3519; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3520; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12, v0.t 3521; ZVFHMIN-NEXT: vmnot.m v0, v8 3522; ZVFHMIN-NEXT: ret 3523 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3524 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3525 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 3526 ret <vscale x 8 x i1> %v 3527} 3528 3529define <vscale x 8 x i1> @fcmp_ule_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3530; ZVFH-LABEL: fcmp_ule_vf_swap_nxv8f16: 3531; ZVFH: # %bb.0: 3532; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3533; ZVFH-NEXT: vmflt.vf v10, v8, fa0, v0.t 3534; ZVFH-NEXT: vmnot.m v0, v10 3535; ZVFH-NEXT: ret 3536; 3537; ZVFHMIN-LABEL: fcmp_ule_vf_swap_nxv8f16: 3538; ZVFHMIN: # %bb.0: 3539; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3540; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3541; ZVFHMIN-NEXT: vmv.v.x v10, a1 3542; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3543; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3544; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3545; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16, v0.t 3546; ZVFHMIN-NEXT: vmnot.m v0, v8 3547; ZVFHMIN-NEXT: ret 3548 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3549 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3550 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 3551 ret <vscale x 8 x i1> %v 3552} 3553 3554define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3555; ZVFH-LABEL: fcmp_une_vv_nxv8f16: 3556; ZVFH: # %bb.0: 3557; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3558; ZVFH-NEXT: vmfne.vv v12, v8, v10, v0.t 3559; ZVFH-NEXT: vmv1r.v v0, v12 3560; ZVFH-NEXT: ret 3561; 3562; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16: 3563; ZVFHMIN: # %bb.0: 3564; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3565; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3566; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3567; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3568; ZVFHMIN-NEXT: vmfne.vv v8, v16, v12, v0.t 3569; ZVFHMIN-NEXT: vmv1r.v v0, v8 3570; ZVFHMIN-NEXT: ret 3571 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 3572 ret <vscale x 8 x i1> %v 3573} 3574 3575define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3576; ZVFH-LABEL: fcmp_une_vf_nxv8f16: 3577; ZVFH: # %bb.0: 3578; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3579; ZVFH-NEXT: vmfne.vf v10, v8, fa0, v0.t 3580; ZVFH-NEXT: vmv1r.v v0, v10 3581; ZVFH-NEXT: ret 3582; 3583; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16: 3584; ZVFHMIN: # %bb.0: 3585; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3586; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3587; ZVFHMIN-NEXT: vmv.v.x v10, a1 3588; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3589; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3590; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3591; ZVFHMIN-NEXT: vmfne.vv v8, v12, v16, v0.t 3592; ZVFHMIN-NEXT: vmv1r.v v0, v8 3593; ZVFHMIN-NEXT: ret 3594 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3595 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3596 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 3597 ret <vscale x 8 x i1> %v 3598} 3599 3600define <vscale x 8 x i1> @fcmp_une_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3601; ZVFH-LABEL: fcmp_une_vf_swap_nxv8f16: 3602; ZVFH: # %bb.0: 3603; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3604; ZVFH-NEXT: vmfne.vf v10, v8, fa0, v0.t 3605; ZVFH-NEXT: vmv1r.v v0, v10 3606; ZVFH-NEXT: ret 3607; 3608; ZVFHMIN-LABEL: fcmp_une_vf_swap_nxv8f16: 3609; ZVFHMIN: # %bb.0: 3610; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3611; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3612; ZVFHMIN-NEXT: vmv.v.x v10, a1 3613; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3614; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 3615; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3616; ZVFHMIN-NEXT: vmfne.vv v8, v16, v12, v0.t 3617; ZVFHMIN-NEXT: vmv1r.v v0, v8 3618; ZVFHMIN-NEXT: ret 3619 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3620 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3621 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 3622 ret <vscale x 8 x i1> %v 3623} 3624 3625define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3626; ZVFH-LABEL: fcmp_uno_vv_nxv8f16: 3627; ZVFH: # %bb.0: 3628; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3629; ZVFH-NEXT: vmfne.vv v12, v10, v10, v0.t 3630; ZVFH-NEXT: vmfne.vv v10, v8, v8, v0.t 3631; ZVFH-NEXT: vmor.mm v0, v10, v12 3632; ZVFH-NEXT: ret 3633; 3634; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16: 3635; ZVFHMIN: # %bb.0: 3636; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3637; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 3638; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3639; ZVFHMIN-NEXT: vmfne.vv v10, v12, v12, v0.t 3640; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3641; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3642; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3643; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12, v0.t 3644; ZVFHMIN-NEXT: vmor.mm v0, v8, v10 3645; ZVFHMIN-NEXT: ret 3646 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 3647 ret <vscale x 8 x i1> %v 3648} 3649 3650define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3651; ZVFH-LABEL: fcmp_uno_vf_nxv8f16: 3652; ZVFH: # %bb.0: 3653; ZVFH-NEXT: vsetvli a1, zero, e16, m2, ta, ma 3654; ZVFH-NEXT: vfmv.v.f v10, fa0 3655; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3656; ZVFH-NEXT: vmfne.vf v12, v10, fa0, v0.t 3657; ZVFH-NEXT: vmfne.vv v10, v8, v8, v0.t 3658; ZVFH-NEXT: vmor.mm v0, v10, v12 3659; ZVFH-NEXT: ret 3660; 3661; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16: 3662; ZVFHMIN: # %bb.0: 3663; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3664; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3665; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3666; ZVFHMIN-NEXT: vmv.v.x v8, a1 3667; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3668; ZVFHMIN-NEXT: vmfne.vv v10, v12, v12, v0.t 3669; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3670; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3671; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3672; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12, v0.t 3673; ZVFHMIN-NEXT: vmor.mm v0, v10, v8 3674; ZVFHMIN-NEXT: ret 3675 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3676 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3677 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 3678 ret <vscale x 8 x i1> %v 3679} 3680 3681define <vscale x 8 x i1> @fcmp_uno_vf_swap_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 3682; ZVFH-LABEL: fcmp_uno_vf_swap_nxv8f16: 3683; ZVFH: # %bb.0: 3684; ZVFH-NEXT: vsetvli a1, zero, e16, m2, ta, ma 3685; ZVFH-NEXT: vfmv.v.f v10, fa0 3686; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3687; ZVFH-NEXT: vmfne.vf v12, v10, fa0, v0.t 3688; ZVFH-NEXT: vmfne.vv v10, v8, v8, v0.t 3689; ZVFH-NEXT: vmor.mm v0, v12, v10 3690; ZVFH-NEXT: ret 3691; 3692; ZVFHMIN-LABEL: fcmp_uno_vf_swap_nxv8f16: 3693; ZVFHMIN: # %bb.0: 3694; ZVFHMIN-NEXT: fmv.x.h a1, fa0 3695; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 3696; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3697; ZVFHMIN-NEXT: vmv.v.x v8, a1 3698; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3699; ZVFHMIN-NEXT: vmfne.vv v10, v12, v12, v0.t 3700; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 3701; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 3702; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 3703; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12, v0.t 3704; ZVFHMIN-NEXT: vmor.mm v0, v8, v10 3705; ZVFHMIN-NEXT: ret 3706 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 3707 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 3708 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 3709 ret <vscale x 8 x i1> %v 3710} 3711 3712declare <vscale x 64 x i1> @llvm.vp.fcmp.nxv64f16(<vscale x 64 x half>, <vscale x 64 x half>, metadata, <vscale x 64 x i1>, i32) 3713 3714define <vscale x 64 x i1> @fcmp_oeq_vv_nxv64f16(<vscale x 64 x half> %va, <vscale x 64 x half> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) { 3715; ZVFH-LABEL: fcmp_oeq_vv_nxv64f16: 3716; ZVFH: # %bb.0: 3717; ZVFH-NEXT: addi sp, sp, -16 3718; ZVFH-NEXT: .cfi_def_cfa_offset 16 3719; ZVFH-NEXT: csrr a1, vlenb 3720; ZVFH-NEXT: slli a1, a1, 4 3721; ZVFH-NEXT: sub sp, sp, a1 3722; ZVFH-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb 3723; ZVFH-NEXT: vsetvli a1, zero, e8, m1, ta, ma 3724; ZVFH-NEXT: vmv1r.v v24, v0 3725; ZVFH-NEXT: csrr a1, vlenb 3726; ZVFH-NEXT: slli a1, a1, 3 3727; ZVFH-NEXT: add a1, sp, a1 3728; ZVFH-NEXT: addi a1, a1, 16 3729; ZVFH-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 3730; ZVFH-NEXT: csrr a3, vlenb 3731; ZVFH-NEXT: srli a1, a3, 1 3732; ZVFH-NEXT: slli a4, a3, 3 3733; ZVFH-NEXT: slli a3, a3, 2 3734; ZVFH-NEXT: add a4, a0, a4 3735; ZVFH-NEXT: sub a5, a2, a3 3736; ZVFH-NEXT: vl8re16.v v8, (a4) 3737; ZVFH-NEXT: sltu a4, a2, a5 3738; ZVFH-NEXT: addi a4, a4, -1 3739; ZVFH-NEXT: vl8re16.v v0, (a0) 3740; ZVFH-NEXT: addi a0, sp, 16 3741; ZVFH-NEXT: vs8r.v v0, (a0) # Unknown-size Folded Spill 3742; ZVFH-NEXT: vslidedown.vx v0, v24, a1 3743; ZVFH-NEXT: and a4, a4, a5 3744; ZVFH-NEXT: vsetvli zero, a4, e16, m8, ta, ma 3745; ZVFH-NEXT: vmfeq.vv v7, v16, v8, v0.t 3746; ZVFH-NEXT: bltu a2, a3, .LBB171_2 3747; ZVFH-NEXT: # %bb.1: 3748; ZVFH-NEXT: mv a2, a3 3749; ZVFH-NEXT: .LBB171_2: 3750; ZVFH-NEXT: vmv1r.v v0, v24 3751; ZVFH-NEXT: csrr a0, vlenb 3752; ZVFH-NEXT: slli a0, a0, 3 3753; ZVFH-NEXT: add a0, sp, a0 3754; ZVFH-NEXT: addi a0, a0, 16 3755; ZVFH-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 3756; ZVFH-NEXT: addi a0, sp, 16 3757; ZVFH-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload 3758; ZVFH-NEXT: vsetvli zero, a2, e16, m8, ta, ma 3759; ZVFH-NEXT: vmfeq.vv v16, v8, v24, v0.t 3760; ZVFH-NEXT: add a0, a1, a1 3761; ZVFH-NEXT: vsetvli zero, a0, e8, m1, ta, ma 3762; ZVFH-NEXT: vslideup.vx v16, v7, a1 3763; ZVFH-NEXT: vmv.v.v v0, v16 3764; ZVFH-NEXT: csrr a0, vlenb 3765; ZVFH-NEXT: slli a0, a0, 4 3766; ZVFH-NEXT: add sp, sp, a0 3767; ZVFH-NEXT: .cfi_def_cfa sp, 16 3768; ZVFH-NEXT: addi sp, sp, 16 3769; ZVFH-NEXT: .cfi_def_cfa_offset 0 3770; ZVFH-NEXT: ret 3771; 3772; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv64f16: 3773; ZVFHMIN: # %bb.0: 3774; ZVFHMIN-NEXT: addi sp, sp, -16 3775; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 3776; ZVFHMIN-NEXT: csrr a1, vlenb 3777; ZVFHMIN-NEXT: mv a3, a1 3778; ZVFHMIN-NEXT: slli a1, a1, 3 3779; ZVFHMIN-NEXT: add a3, a3, a1 3780; ZVFHMIN-NEXT: slli a1, a1, 2 3781; ZVFHMIN-NEXT: add a1, a1, a3 3782; ZVFHMIN-NEXT: sub sp, sp, a1 3783; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x29, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 41 * vlenb 3784; ZVFHMIN-NEXT: vsetvli a1, zero, e8, m1, ta, ma 3785; ZVFHMIN-NEXT: vmv1r.v v24, v0 3786; ZVFHMIN-NEXT: csrr a1, vlenb 3787; ZVFHMIN-NEXT: mv a3, a1 3788; ZVFHMIN-NEXT: slli a1, a1, 3 3789; ZVFHMIN-NEXT: add a3, a3, a1 3790; ZVFHMIN-NEXT: slli a1, a1, 1 3791; ZVFHMIN-NEXT: add a1, a1, a3 3792; ZVFHMIN-NEXT: add a1, sp, a1 3793; ZVFHMIN-NEXT: addi a1, a1, 16 3794; ZVFHMIN-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 3795; ZVFHMIN-NEXT: csrr a3, vlenb 3796; ZVFHMIN-NEXT: slli a1, a3, 3 3797; ZVFHMIN-NEXT: slli a5, a3, 2 3798; ZVFHMIN-NEXT: slli a4, a3, 1 3799; ZVFHMIN-NEXT: add a1, a0, a1 3800; ZVFHMIN-NEXT: sub a6, a2, a5 3801; ZVFHMIN-NEXT: vl8re16.v v0, (a1) 3802; ZVFHMIN-NEXT: sltu a1, a2, a6 3803; ZVFHMIN-NEXT: addi a1, a1, -1 3804; ZVFHMIN-NEXT: and a6, a1, a6 3805; ZVFHMIN-NEXT: sub a1, a6, a4 3806; ZVFHMIN-NEXT: sltu a7, a6, a1 3807; ZVFHMIN-NEXT: addi a7, a7, -1 3808; ZVFHMIN-NEXT: and a7, a7, a1 3809; ZVFHMIN-NEXT: srli a1, a3, 1 3810; ZVFHMIN-NEXT: srli a3, a3, 2 3811; ZVFHMIN-NEXT: csrr t0, vlenb 3812; ZVFHMIN-NEXT: slli t0, t0, 3 3813; ZVFHMIN-NEXT: add t0, sp, t0 3814; ZVFHMIN-NEXT: addi t0, t0, 16 3815; ZVFHMIN-NEXT: vs1r.v v24, (t0) # Unknown-size Folded Spill 3816; ZVFHMIN-NEXT: vslidedown.vx v25, v24, a1 3817; ZVFHMIN-NEXT: vsetvli t0, zero, e8, mf2, ta, ma 3818; ZVFHMIN-NEXT: vslidedown.vx v24, v25, a3 3819; ZVFHMIN-NEXT: vl8re16.v v8, (a0) 3820; ZVFHMIN-NEXT: csrr a0, vlenb 3821; ZVFHMIN-NEXT: slli t0, a0, 5 3822; ZVFHMIN-NEXT: add a0, t0, a0 3823; ZVFHMIN-NEXT: add a0, sp, a0 3824; ZVFHMIN-NEXT: addi a0, a0, 16 3825; ZVFHMIN-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 3826; ZVFHMIN-NEXT: csrr a0, vlenb 3827; ZVFHMIN-NEXT: slli t0, a0, 3 3828; ZVFHMIN-NEXT: add a0, t0, a0 3829; ZVFHMIN-NEXT: add a0, sp, a0 3830; ZVFHMIN-NEXT: addi a0, a0, 16 3831; ZVFHMIN-NEXT: vs8r.v v0, (a0) # Unknown-size Folded Spill 3832; ZVFHMIN-NEXT: vsetvli zero, a7, e16, m4, ta, ma 3833; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4 3834; ZVFHMIN-NEXT: addi a0, sp, 16 3835; ZVFHMIN-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 3836; ZVFHMIN-NEXT: vmv8r.v v8, v16 3837; ZVFHMIN-NEXT: csrr a0, vlenb 3838; ZVFHMIN-NEXT: slli a7, a0, 4 3839; ZVFHMIN-NEXT: add a0, a7, a0 3840; ZVFHMIN-NEXT: add a0, sp, a0 3841; ZVFHMIN-NEXT: addi a0, a0, 16 3842; ZVFHMIN-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill 3843; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 3844; ZVFHMIN-NEXT: vmv1r.v v0, v24 3845; ZVFHMIN-NEXT: addi a0, sp, 16 3846; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 3847; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 3848; ZVFHMIN-NEXT: vmfeq.vv v6, v16, v8, v0.t 3849; ZVFHMIN-NEXT: bltu a6, a4, .LBB171_2 3850; ZVFHMIN-NEXT: # %bb.1: 3851; ZVFHMIN-NEXT: mv a6, a4 3852; ZVFHMIN-NEXT: .LBB171_2: 3853; ZVFHMIN-NEXT: vmv1r.v v0, v25 3854; ZVFHMIN-NEXT: csrr a0, vlenb 3855; ZVFHMIN-NEXT: slli a7, a0, 3 3856; ZVFHMIN-NEXT: add a0, a7, a0 3857; ZVFHMIN-NEXT: add a0, sp, a0 3858; ZVFHMIN-NEXT: addi a0, a0, 16 3859; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 3860; ZVFHMIN-NEXT: vsetvli zero, a6, e16, m4, ta, ma 3861; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16 3862; ZVFHMIN-NEXT: csrr a0, vlenb 3863; ZVFHMIN-NEXT: slli a6, a0, 4 3864; ZVFHMIN-NEXT: add a0, a6, a0 3865; ZVFHMIN-NEXT: add a0, sp, a0 3866; ZVFHMIN-NEXT: addi a0, a0, 16 3867; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 3868; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 3869; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 3870; ZVFHMIN-NEXT: vmfeq.vv v5, v24, v8, v0.t 3871; ZVFHMIN-NEXT: add a0, a3, a3 3872; ZVFHMIN-NEXT: bltu a2, a5, .LBB171_4 3873; ZVFHMIN-NEXT: # %bb.3: 3874; ZVFHMIN-NEXT: mv a2, a5 3875; ZVFHMIN-NEXT: .LBB171_4: 3876; ZVFHMIN-NEXT: sub a5, a2, a4 3877; ZVFHMIN-NEXT: csrr a6, vlenb 3878; ZVFHMIN-NEXT: slli a6, a6, 3 3879; ZVFHMIN-NEXT: add a6, sp, a6 3880; ZVFHMIN-NEXT: addi a6, a6, 16 3881; ZVFHMIN-NEXT: vl1r.v v7, (a6) # Unknown-size Folded Reload 3882; ZVFHMIN-NEXT: vsetvli a6, zero, e8, mf2, ta, ma 3883; ZVFHMIN-NEXT: vslidedown.vx v0, v7, a3 3884; ZVFHMIN-NEXT: sltu a6, a2, a5 3885; ZVFHMIN-NEXT: addi a6, a6, -1 3886; ZVFHMIN-NEXT: and a5, a6, a5 3887; ZVFHMIN-NEXT: csrr a6, vlenb 3888; ZVFHMIN-NEXT: mv a7, a6 3889; ZVFHMIN-NEXT: slli a6, a6, 3 3890; ZVFHMIN-NEXT: add a7, a7, a6 3891; ZVFHMIN-NEXT: slli a6, a6, 1 3892; ZVFHMIN-NEXT: add a6, a6, a7 3893; ZVFHMIN-NEXT: add a6, sp, a6 3894; ZVFHMIN-NEXT: addi a6, a6, 16 3895; ZVFHMIN-NEXT: vl8r.v v16, (a6) # Unknown-size Folded Reload 3896; ZVFHMIN-NEXT: vsetvli zero, a5, e16, m4, ta, ma 3897; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20 3898; ZVFHMIN-NEXT: csrr a5, vlenb 3899; ZVFHMIN-NEXT: slli a6, a5, 4 3900; ZVFHMIN-NEXT: add a5, a6, a5 3901; ZVFHMIN-NEXT: add a5, sp, a5 3902; ZVFHMIN-NEXT: addi a5, a5, 16 3903; ZVFHMIN-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill 3904; ZVFHMIN-NEXT: csrr a5, vlenb 3905; ZVFHMIN-NEXT: slli a6, a5, 5 3906; ZVFHMIN-NEXT: add a5, a6, a5 3907; ZVFHMIN-NEXT: add a5, sp, a5 3908; ZVFHMIN-NEXT: addi a5, a5, 16 3909; ZVFHMIN-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload 3910; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v28 3911; ZVFHMIN-NEXT: csrr a5, vlenb 3912; ZVFHMIN-NEXT: slli a6, a5, 4 3913; ZVFHMIN-NEXT: add a5, a6, a5 3914; ZVFHMIN-NEXT: add a5, sp, a5 3915; ZVFHMIN-NEXT: addi a5, a5, 16 3916; ZVFHMIN-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload 3917; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 3918; ZVFHMIN-NEXT: vmfeq.vv v4, v24, v8, v0.t 3919; ZVFHMIN-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 3920; ZVFHMIN-NEXT: vslideup.vx v5, v6, a3 3921; ZVFHMIN-NEXT: bltu a2, a4, .LBB171_6 3922; ZVFHMIN-NEXT: # %bb.5: 3923; ZVFHMIN-NEXT: mv a2, a4 3924; ZVFHMIN-NEXT: .LBB171_6: 3925; ZVFHMIN-NEXT: vmv1r.v v0, v7 3926; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma 3927; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 3928; ZVFHMIN-NEXT: csrr a2, vlenb 3929; ZVFHMIN-NEXT: slli a4, a2, 5 3930; ZVFHMIN-NEXT: add a2, a4, a2 3931; ZVFHMIN-NEXT: add a2, sp, a2 3932; ZVFHMIN-NEXT: addi a2, a2, 16 3933; ZVFHMIN-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload 3934; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 3935; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 3936; ZVFHMIN-NEXT: vmfeq.vv v8, v24, v16, v0.t 3937; ZVFHMIN-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 3938; ZVFHMIN-NEXT: vslideup.vx v8, v4, a3 3939; ZVFHMIN-NEXT: add a0, a1, a1 3940; ZVFHMIN-NEXT: vsetvli zero, a0, e8, m1, ta, ma 3941; ZVFHMIN-NEXT: vslideup.vx v8, v5, a1 3942; ZVFHMIN-NEXT: vmv.v.v v0, v8 3943; ZVFHMIN-NEXT: csrr a0, vlenb 3944; ZVFHMIN-NEXT: mv a1, a0 3945; ZVFHMIN-NEXT: slli a0, a0, 3 3946; ZVFHMIN-NEXT: add a1, a1, a0 3947; ZVFHMIN-NEXT: slli a0, a0, 2 3948; ZVFHMIN-NEXT: add a0, a0, a1 3949; ZVFHMIN-NEXT: add sp, sp, a0 3950; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 3951; ZVFHMIN-NEXT: addi sp, sp, 16 3952; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 3953; ZVFHMIN-NEXT: ret 3954 %v = call <vscale x 64 x i1> @llvm.vp.fcmp.nxv64f16(<vscale x 64 x half> %va, <vscale x 64 x half> %vb, metadata !"oeq", <vscale x 64 x i1> %m, i32 %evl) 3955 ret <vscale x 64 x i1> %v 3956} 3957 3958declare <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, <vscale x 1 x i1>, i32) 3959 3960define <vscale x 1 x i1> @fcmp_oeq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3961; CHECK-LABEL: fcmp_oeq_vv_nxv1f64: 3962; CHECK: # %bb.0: 3963; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 3964; CHECK-NEXT: vmfeq.vv v0, v8, v9, v0.t 3965; CHECK-NEXT: ret 3966 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 3967 ret <vscale x 1 x i1> %v 3968} 3969 3970define <vscale x 1 x i1> @fcmp_oeq_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3971; CHECK-LABEL: fcmp_oeq_vf_nxv1f64: 3972; CHECK: # %bb.0: 3973; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 3974; CHECK-NEXT: vmfeq.vf v0, v8, fa0, v0.t 3975; CHECK-NEXT: ret 3976 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 3977 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 3978 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 3979 ret <vscale x 1 x i1> %v 3980} 3981 3982define <vscale x 1 x i1> @fcmp_oeq_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3983; CHECK-LABEL: fcmp_oeq_vf_swap_nxv1f64: 3984; CHECK: # %bb.0: 3985; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 3986; CHECK-NEXT: vmfeq.vf v0, v8, fa0, v0.t 3987; CHECK-NEXT: ret 3988 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 3989 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 3990 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"oeq", <vscale x 1 x i1> %m, i32 %evl) 3991 ret <vscale x 1 x i1> %v 3992} 3993 3994define <vscale x 1 x i1> @fcmp_ogt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3995; CHECK-LABEL: fcmp_ogt_vv_nxv1f64: 3996; CHECK: # %bb.0: 3997; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 3998; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t 3999; CHECK-NEXT: ret 4000 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 4001 ret <vscale x 1 x i1> %v 4002} 4003 4004define <vscale x 1 x i1> @fcmp_ogt_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4005; CHECK-LABEL: fcmp_ogt_vf_nxv1f64: 4006; CHECK: # %bb.0: 4007; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4008; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4009; CHECK-NEXT: ret 4010 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4011 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4012 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 4013 ret <vscale x 1 x i1> %v 4014} 4015 4016define <vscale x 1 x i1> @fcmp_ogt_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4017; CHECK-LABEL: fcmp_ogt_vf_swap_nxv1f64: 4018; CHECK: # %bb.0: 4019; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4020; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4021; CHECK-NEXT: ret 4022 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4023 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4024 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ogt", <vscale x 1 x i1> %m, i32 %evl) 4025 ret <vscale x 1 x i1> %v 4026} 4027 4028define <vscale x 1 x i1> @fcmp_oge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4029; CHECK-LABEL: fcmp_oge_vv_nxv1f64: 4030; CHECK: # %bb.0: 4031; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4032; CHECK-NEXT: vmfle.vv v0, v9, v8, v0.t 4033; CHECK-NEXT: ret 4034 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 4035 ret <vscale x 1 x i1> %v 4036} 4037 4038define <vscale x 1 x i1> @fcmp_oge_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4039; CHECK-LABEL: fcmp_oge_vf_nxv1f64: 4040; CHECK: # %bb.0: 4041; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4042; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4043; CHECK-NEXT: ret 4044 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4045 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4046 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 4047 ret <vscale x 1 x i1> %v 4048} 4049 4050define <vscale x 1 x i1> @fcmp_oge_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4051; CHECK-LABEL: fcmp_oge_vf_swap_nxv1f64: 4052; CHECK: # %bb.0: 4053; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4054; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4055; CHECK-NEXT: ret 4056 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4057 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4058 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"oge", <vscale x 1 x i1> %m, i32 %evl) 4059 ret <vscale x 1 x i1> %v 4060} 4061 4062define <vscale x 1 x i1> @fcmp_olt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4063; CHECK-LABEL: fcmp_olt_vv_nxv1f64: 4064; CHECK: # %bb.0: 4065; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4066; CHECK-NEXT: vmflt.vv v0, v8, v9, v0.t 4067; CHECK-NEXT: ret 4068 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 4069 ret <vscale x 1 x i1> %v 4070} 4071 4072define <vscale x 1 x i1> @fcmp_olt_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4073; CHECK-LABEL: fcmp_olt_vf_nxv1f64: 4074; CHECK: # %bb.0: 4075; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4076; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t 4077; CHECK-NEXT: ret 4078 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4079 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4080 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 4081 ret <vscale x 1 x i1> %v 4082} 4083 4084define <vscale x 1 x i1> @fcmp_olt_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4085; CHECK-LABEL: fcmp_olt_vf_swap_nxv1f64: 4086; CHECK: # %bb.0: 4087; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4088; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t 4089; CHECK-NEXT: ret 4090 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4091 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4092 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"olt", <vscale x 1 x i1> %m, i32 %evl) 4093 ret <vscale x 1 x i1> %v 4094} 4095 4096define <vscale x 1 x i1> @fcmp_ole_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4097; CHECK-LABEL: fcmp_ole_vv_nxv1f64: 4098; CHECK: # %bb.0: 4099; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4100; CHECK-NEXT: vmfle.vv v0, v8, v9, v0.t 4101; CHECK-NEXT: ret 4102 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 4103 ret <vscale x 1 x i1> %v 4104} 4105 4106define <vscale x 1 x i1> @fcmp_ole_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4107; CHECK-LABEL: fcmp_ole_vf_nxv1f64: 4108; CHECK: # %bb.0: 4109; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4110; CHECK-NEXT: vmfle.vf v0, v8, fa0, v0.t 4111; CHECK-NEXT: ret 4112 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4113 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4114 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 4115 ret <vscale x 1 x i1> %v 4116} 4117 4118define <vscale x 1 x i1> @fcmp_ole_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4119; CHECK-LABEL: fcmp_ole_vf_swap_nxv1f64: 4120; CHECK: # %bb.0: 4121; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4122; CHECK-NEXT: vmfge.vf v0, v8, fa0, v0.t 4123; CHECK-NEXT: ret 4124 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4125 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4126 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ole", <vscale x 1 x i1> %m, i32 %evl) 4127 ret <vscale x 1 x i1> %v 4128} 4129 4130define <vscale x 1 x i1> @fcmp_one_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4131; CHECK-LABEL: fcmp_one_vv_nxv1f64: 4132; CHECK: # %bb.0: 4133; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4134; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4135; CHECK-NEXT: vmflt.vv v8, v9, v8, v0.t 4136; CHECK-NEXT: vmor.mm v0, v8, v10 4137; CHECK-NEXT: ret 4138 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 4139 ret <vscale x 1 x i1> %v 4140} 4141 4142define <vscale x 1 x i1> @fcmp_one_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4143; CHECK-LABEL: fcmp_one_vf_nxv1f64: 4144; CHECK: # %bb.0: 4145; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4146; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4147; CHECK-NEXT: vmfgt.vf v8, v8, fa0, v0.t 4148; CHECK-NEXT: vmor.mm v0, v8, v9 4149; CHECK-NEXT: ret 4150 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4151 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4152 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 4153 ret <vscale x 1 x i1> %v 4154} 4155 4156define <vscale x 1 x i1> @fcmp_one_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4157; CHECK-LABEL: fcmp_one_vf_swap_nxv1f64: 4158; CHECK: # %bb.0: 4159; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4160; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4161; CHECK-NEXT: vmflt.vf v8, v8, fa0, v0.t 4162; CHECK-NEXT: vmor.mm v0, v8, v9 4163; CHECK-NEXT: ret 4164 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4165 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4166 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"one", <vscale x 1 x i1> %m, i32 %evl) 4167 ret <vscale x 1 x i1> %v 4168} 4169 4170define <vscale x 1 x i1> @fcmp_ord_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4171; CHECK-LABEL: fcmp_ord_vv_nxv1f64: 4172; CHECK: # %bb.0: 4173; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4174; CHECK-NEXT: vmfeq.vv v9, v9, v9, v0.t 4175; CHECK-NEXT: vmfeq.vv v8, v8, v8, v0.t 4176; CHECK-NEXT: vmand.mm v0, v8, v9 4177; CHECK-NEXT: ret 4178 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 4179 ret <vscale x 1 x i1> %v 4180} 4181 4182define <vscale x 1 x i1> @fcmp_ord_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4183; CHECK-LABEL: fcmp_ord_vf_nxv1f64: 4184; CHECK: # %bb.0: 4185; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma 4186; CHECK-NEXT: vfmv.v.f v9, fa0 4187; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4188; CHECK-NEXT: vmfeq.vf v9, v9, fa0, v0.t 4189; CHECK-NEXT: vmfeq.vv v8, v8, v8, v0.t 4190; CHECK-NEXT: vmand.mm v0, v8, v9 4191; CHECK-NEXT: ret 4192 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4193 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4194 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 4195 ret <vscale x 1 x i1> %v 4196} 4197 4198define <vscale x 1 x i1> @fcmp_ord_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4199; CHECK-LABEL: fcmp_ord_vf_swap_nxv1f64: 4200; CHECK: # %bb.0: 4201; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma 4202; CHECK-NEXT: vfmv.v.f v9, fa0 4203; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4204; CHECK-NEXT: vmfeq.vf v9, v9, fa0, v0.t 4205; CHECK-NEXT: vmfeq.vv v8, v8, v8, v0.t 4206; CHECK-NEXT: vmand.mm v0, v9, v8 4207; CHECK-NEXT: ret 4208 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4209 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4210 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ord", <vscale x 1 x i1> %m, i32 %evl) 4211 ret <vscale x 1 x i1> %v 4212} 4213 4214define <vscale x 1 x i1> @fcmp_ueq_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4215; CHECK-LABEL: fcmp_ueq_vv_nxv1f64: 4216; CHECK: # %bb.0: 4217; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4218; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t 4219; CHECK-NEXT: vmflt.vv v8, v9, v8, v0.t 4220; CHECK-NEXT: vmnor.mm v0, v8, v10 4221; CHECK-NEXT: ret 4222 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 4223 ret <vscale x 1 x i1> %v 4224} 4225 4226define <vscale x 1 x i1> @fcmp_ueq_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4227; CHECK-LABEL: fcmp_ueq_vf_nxv1f64: 4228; CHECK: # %bb.0: 4229; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4230; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t 4231; CHECK-NEXT: vmfgt.vf v8, v8, fa0, v0.t 4232; CHECK-NEXT: vmnor.mm v0, v8, v9 4233; CHECK-NEXT: ret 4234 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4235 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4236 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 4237 ret <vscale x 1 x i1> %v 4238} 4239 4240define <vscale x 1 x i1> @fcmp_ueq_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4241; CHECK-LABEL: fcmp_ueq_vf_swap_nxv1f64: 4242; CHECK: # %bb.0: 4243; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4244; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t 4245; CHECK-NEXT: vmflt.vf v8, v8, fa0, v0.t 4246; CHECK-NEXT: vmnor.mm v0, v8, v9 4247; CHECK-NEXT: ret 4248 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4249 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4250 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ueq", <vscale x 1 x i1> %m, i32 %evl) 4251 ret <vscale x 1 x i1> %v 4252} 4253 4254define <vscale x 1 x i1> @fcmp_ugt_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4255; CHECK-LABEL: fcmp_ugt_vv_nxv1f64: 4256; CHECK: # %bb.0: 4257; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4258; CHECK-NEXT: vmfle.vv v8, v8, v9, v0.t 4259; CHECK-NEXT: vmnot.m v0, v8 4260; CHECK-NEXT: ret 4261 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 4262 ret <vscale x 1 x i1> %v 4263} 4264 4265define <vscale x 1 x i1> @fcmp_ugt_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4266; CHECK-LABEL: fcmp_ugt_vf_nxv1f64: 4267; CHECK: # %bb.0: 4268; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4269; CHECK-NEXT: vmfle.vf v8, v8, fa0, v0.t 4270; CHECK-NEXT: vmnot.m v0, v8 4271; CHECK-NEXT: ret 4272 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4273 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4274 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 4275 ret <vscale x 1 x i1> %v 4276} 4277 4278define <vscale x 1 x i1> @fcmp_ugt_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4279; CHECK-LABEL: fcmp_ugt_vf_swap_nxv1f64: 4280; CHECK: # %bb.0: 4281; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4282; CHECK-NEXT: vmfge.vf v8, v8, fa0, v0.t 4283; CHECK-NEXT: vmnot.m v0, v8 4284; CHECK-NEXT: ret 4285 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4286 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4287 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ugt", <vscale x 1 x i1> %m, i32 %evl) 4288 ret <vscale x 1 x i1> %v 4289} 4290 4291define <vscale x 1 x i1> @fcmp_uge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4292; CHECK-LABEL: fcmp_uge_vv_nxv1f64: 4293; CHECK: # %bb.0: 4294; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4295; CHECK-NEXT: vmflt.vv v8, v8, v9, v0.t 4296; CHECK-NEXT: vmnot.m v0, v8 4297; CHECK-NEXT: ret 4298 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 4299 ret <vscale x 1 x i1> %v 4300} 4301 4302define <vscale x 1 x i1> @fcmp_uge_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4303; CHECK-LABEL: fcmp_uge_vf_nxv1f64: 4304; CHECK: # %bb.0: 4305; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4306; CHECK-NEXT: vmflt.vf v8, v8, fa0, v0.t 4307; CHECK-NEXT: vmnot.m v0, v8 4308; CHECK-NEXT: ret 4309 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4310 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4311 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 4312 ret <vscale x 1 x i1> %v 4313} 4314 4315define <vscale x 1 x i1> @fcmp_uge_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4316; CHECK-LABEL: fcmp_uge_vf_swap_nxv1f64: 4317; CHECK: # %bb.0: 4318; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4319; CHECK-NEXT: vmfgt.vf v8, v8, fa0, v0.t 4320; CHECK-NEXT: vmnot.m v0, v8 4321; CHECK-NEXT: ret 4322 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4323 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4324 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"uge", <vscale x 1 x i1> %m, i32 %evl) 4325 ret <vscale x 1 x i1> %v 4326} 4327 4328define <vscale x 1 x i1> @fcmp_ult_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4329; CHECK-LABEL: fcmp_ult_vv_nxv1f64: 4330; CHECK: # %bb.0: 4331; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4332; CHECK-NEXT: vmfle.vv v8, v9, v8, v0.t 4333; CHECK-NEXT: vmnot.m v0, v8 4334; CHECK-NEXT: ret 4335 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 4336 ret <vscale x 1 x i1> %v 4337} 4338 4339define <vscale x 1 x i1> @fcmp_ult_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4340; CHECK-LABEL: fcmp_ult_vf_nxv1f64: 4341; CHECK: # %bb.0: 4342; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4343; CHECK-NEXT: vmfge.vf v8, v8, fa0, v0.t 4344; CHECK-NEXT: vmnot.m v0, v8 4345; CHECK-NEXT: ret 4346 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4347 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4348 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 4349 ret <vscale x 1 x i1> %v 4350} 4351 4352define <vscale x 1 x i1> @fcmp_ult_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4353; CHECK-LABEL: fcmp_ult_vf_swap_nxv1f64: 4354; CHECK: # %bb.0: 4355; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4356; CHECK-NEXT: vmfle.vf v8, v8, fa0, v0.t 4357; CHECK-NEXT: vmnot.m v0, v8 4358; CHECK-NEXT: ret 4359 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4360 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4361 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ult", <vscale x 1 x i1> %m, i32 %evl) 4362 ret <vscale x 1 x i1> %v 4363} 4364 4365define <vscale x 1 x i1> @fcmp_ule_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4366; CHECK-LABEL: fcmp_ule_vv_nxv1f64: 4367; CHECK: # %bb.0: 4368; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4369; CHECK-NEXT: vmflt.vv v8, v9, v8, v0.t 4370; CHECK-NEXT: vmnot.m v0, v8 4371; CHECK-NEXT: ret 4372 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 4373 ret <vscale x 1 x i1> %v 4374} 4375 4376define <vscale x 1 x i1> @fcmp_ule_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4377; CHECK-LABEL: fcmp_ule_vf_nxv1f64: 4378; CHECK: # %bb.0: 4379; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4380; CHECK-NEXT: vmfgt.vf v8, v8, fa0, v0.t 4381; CHECK-NEXT: vmnot.m v0, v8 4382; CHECK-NEXT: ret 4383 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4384 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4385 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 4386 ret <vscale x 1 x i1> %v 4387} 4388 4389define <vscale x 1 x i1> @fcmp_ule_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4390; CHECK-LABEL: fcmp_ule_vf_swap_nxv1f64: 4391; CHECK: # %bb.0: 4392; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4393; CHECK-NEXT: vmflt.vf v8, v8, fa0, v0.t 4394; CHECK-NEXT: vmnot.m v0, v8 4395; CHECK-NEXT: ret 4396 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4397 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4398 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"ule", <vscale x 1 x i1> %m, i32 %evl) 4399 ret <vscale x 1 x i1> %v 4400} 4401 4402define <vscale x 1 x i1> @fcmp_une_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4403; CHECK-LABEL: fcmp_une_vv_nxv1f64: 4404; CHECK: # %bb.0: 4405; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4406; CHECK-NEXT: vmfne.vv v0, v8, v9, v0.t 4407; CHECK-NEXT: ret 4408 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 4409 ret <vscale x 1 x i1> %v 4410} 4411 4412define <vscale x 1 x i1> @fcmp_une_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4413; CHECK-LABEL: fcmp_une_vf_nxv1f64: 4414; CHECK: # %bb.0: 4415; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4416; CHECK-NEXT: vmfne.vf v0, v8, fa0, v0.t 4417; CHECK-NEXT: ret 4418 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4419 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4420 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 4421 ret <vscale x 1 x i1> %v 4422} 4423 4424define <vscale x 1 x i1> @fcmp_une_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4425; CHECK-LABEL: fcmp_une_vf_swap_nxv1f64: 4426; CHECK: # %bb.0: 4427; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4428; CHECK-NEXT: vmfne.vf v0, v8, fa0, v0.t 4429; CHECK-NEXT: ret 4430 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4431 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4432 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"une", <vscale x 1 x i1> %m, i32 %evl) 4433 ret <vscale x 1 x i1> %v 4434} 4435 4436define <vscale x 1 x i1> @fcmp_uno_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4437; CHECK-LABEL: fcmp_uno_vv_nxv1f64: 4438; CHECK: # %bb.0: 4439; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4440; CHECK-NEXT: vmfne.vv v9, v9, v9, v0.t 4441; CHECK-NEXT: vmfne.vv v8, v8, v8, v0.t 4442; CHECK-NEXT: vmor.mm v0, v8, v9 4443; CHECK-NEXT: ret 4444 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 4445 ret <vscale x 1 x i1> %v 4446} 4447 4448define <vscale x 1 x i1> @fcmp_uno_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4449; CHECK-LABEL: fcmp_uno_vf_nxv1f64: 4450; CHECK: # %bb.0: 4451; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma 4452; CHECK-NEXT: vfmv.v.f v9, fa0 4453; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4454; CHECK-NEXT: vmfne.vf v9, v9, fa0, v0.t 4455; CHECK-NEXT: vmfne.vv v8, v8, v8, v0.t 4456; CHECK-NEXT: vmor.mm v0, v8, v9 4457; CHECK-NEXT: ret 4458 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4459 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4460 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 4461 ret <vscale x 1 x i1> %v 4462} 4463 4464define <vscale x 1 x i1> @fcmp_uno_vf_swap_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4465; CHECK-LABEL: fcmp_uno_vf_swap_nxv1f64: 4466; CHECK: # %bb.0: 4467; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma 4468; CHECK-NEXT: vfmv.v.f v9, fa0 4469; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 4470; CHECK-NEXT: vmfne.vf v9, v9, fa0, v0.t 4471; CHECK-NEXT: vmfne.vv v8, v8, v8, v0.t 4472; CHECK-NEXT: vmor.mm v0, v9, v8 4473; CHECK-NEXT: ret 4474 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 4475 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 4476 %v = call <vscale x 1 x i1> @llvm.vp.fcmp.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, metadata !"uno", <vscale x 1 x i1> %m, i32 %evl) 4477 ret <vscale x 1 x i1> %v 4478} 4479 4480declare <vscale x 3 x i1> @llvm.vp.fcmp.nxv3f64(<vscale x 3 x double>, <vscale x 3 x double>, metadata, <vscale x 3 x i1>, i32) 4481 4482define <vscale x 3 x i1> @fcmp_oeq_vv_nxv3f64(<vscale x 3 x double> %va, <vscale x 3 x double> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) { 4483; CHECK-LABEL: fcmp_oeq_vv_nxv3f64: 4484; CHECK: # %bb.0: 4485; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 4486; CHECK-NEXT: vmfeq.vv v16, v8, v12, v0.t 4487; CHECK-NEXT: vmv1r.v v0, v16 4488; CHECK-NEXT: ret 4489 %v = call <vscale x 3 x i1> @llvm.vp.fcmp.nxv3f64(<vscale x 3 x double> %va, <vscale x 3 x double> %vb, metadata !"oeq", <vscale x 3 x i1> %m, i32 %evl) 4490 ret <vscale x 3 x i1> %v 4491} 4492 4493declare <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, <vscale x 8 x i1>, i32) 4494 4495define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4496; CHECK-LABEL: fcmp_oeq_vv_nxv8f64: 4497; CHECK: # %bb.0: 4498; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4499; CHECK-NEXT: vmfeq.vv v24, v8, v16, v0.t 4500; CHECK-NEXT: vmv1r.v v0, v24 4501; CHECK-NEXT: ret 4502 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 4503 ret <vscale x 8 x i1> %v 4504} 4505 4506define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4507; CHECK-LABEL: fcmp_oeq_vf_nxv8f64: 4508; CHECK: # %bb.0: 4509; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4510; CHECK-NEXT: vmfeq.vf v16, v8, fa0, v0.t 4511; CHECK-NEXT: vmv1r.v v0, v16 4512; CHECK-NEXT: ret 4513 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4514 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4515 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 4516 ret <vscale x 8 x i1> %v 4517} 4518 4519define <vscale x 8 x i1> @fcmp_oeq_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4520; CHECK-LABEL: fcmp_oeq_vf_swap_nxv8f64: 4521; CHECK: # %bb.0: 4522; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4523; CHECK-NEXT: vmfeq.vf v16, v8, fa0, v0.t 4524; CHECK-NEXT: vmv1r.v v0, v16 4525; CHECK-NEXT: ret 4526 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4527 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4528 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"oeq", <vscale x 8 x i1> %m, i32 %evl) 4529 ret <vscale x 8 x i1> %v 4530} 4531 4532define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4533; CHECK-LABEL: fcmp_ogt_vv_nxv8f64: 4534; CHECK: # %bb.0: 4535; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4536; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 4537; CHECK-NEXT: vmv1r.v v0, v24 4538; CHECK-NEXT: ret 4539 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 4540 ret <vscale x 8 x i1> %v 4541} 4542 4543define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4544; CHECK-LABEL: fcmp_ogt_vf_nxv8f64: 4545; CHECK: # %bb.0: 4546; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4547; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4548; CHECK-NEXT: vmv1r.v v0, v16 4549; CHECK-NEXT: ret 4550 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4551 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4552 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 4553 ret <vscale x 8 x i1> %v 4554} 4555 4556define <vscale x 8 x i1> @fcmp_ogt_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4557; CHECK-LABEL: fcmp_ogt_vf_swap_nxv8f64: 4558; CHECK: # %bb.0: 4559; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4560; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4561; CHECK-NEXT: vmv1r.v v0, v16 4562; CHECK-NEXT: ret 4563 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4564 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4565 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ogt", <vscale x 8 x i1> %m, i32 %evl) 4566 ret <vscale x 8 x i1> %v 4567} 4568 4569define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4570; CHECK-LABEL: fcmp_oge_vv_nxv8f64: 4571; CHECK: # %bb.0: 4572; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4573; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 4574; CHECK-NEXT: vmv1r.v v0, v24 4575; CHECK-NEXT: ret 4576 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 4577 ret <vscale x 8 x i1> %v 4578} 4579 4580define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4581; CHECK-LABEL: fcmp_oge_vf_nxv8f64: 4582; CHECK: # %bb.0: 4583; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4584; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 4585; CHECK-NEXT: vmv1r.v v0, v16 4586; CHECK-NEXT: ret 4587 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4588 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4589 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 4590 ret <vscale x 8 x i1> %v 4591} 4592 4593define <vscale x 8 x i1> @fcmp_oge_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4594; CHECK-LABEL: fcmp_oge_vf_swap_nxv8f64: 4595; CHECK: # %bb.0: 4596; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4597; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 4598; CHECK-NEXT: vmv1r.v v0, v16 4599; CHECK-NEXT: ret 4600 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4601 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4602 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"oge", <vscale x 8 x i1> %m, i32 %evl) 4603 ret <vscale x 8 x i1> %v 4604} 4605 4606define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4607; CHECK-LABEL: fcmp_olt_vv_nxv8f64: 4608; CHECK: # %bb.0: 4609; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4610; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 4611; CHECK-NEXT: vmv1r.v v0, v24 4612; CHECK-NEXT: ret 4613 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 4614 ret <vscale x 8 x i1> %v 4615} 4616 4617define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4618; CHECK-LABEL: fcmp_olt_vf_nxv8f64: 4619; CHECK: # %bb.0: 4620; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4621; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4622; CHECK-NEXT: vmv1r.v v0, v16 4623; CHECK-NEXT: ret 4624 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4625 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4626 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 4627 ret <vscale x 8 x i1> %v 4628} 4629 4630define <vscale x 8 x i1> @fcmp_olt_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4631; CHECK-LABEL: fcmp_olt_vf_swap_nxv8f64: 4632; CHECK: # %bb.0: 4633; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4634; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4635; CHECK-NEXT: vmv1r.v v0, v16 4636; CHECK-NEXT: ret 4637 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4638 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4639 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"olt", <vscale x 8 x i1> %m, i32 %evl) 4640 ret <vscale x 8 x i1> %v 4641} 4642 4643define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4644; CHECK-LABEL: fcmp_ole_vv_nxv8f64: 4645; CHECK: # %bb.0: 4646; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4647; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 4648; CHECK-NEXT: vmv1r.v v0, v24 4649; CHECK-NEXT: ret 4650 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 4651 ret <vscale x 8 x i1> %v 4652} 4653 4654define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4655; CHECK-LABEL: fcmp_ole_vf_nxv8f64: 4656; CHECK: # %bb.0: 4657; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4658; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 4659; CHECK-NEXT: vmv1r.v v0, v16 4660; CHECK-NEXT: ret 4661 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4662 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4663 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 4664 ret <vscale x 8 x i1> %v 4665} 4666 4667define <vscale x 8 x i1> @fcmp_ole_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4668; CHECK-LABEL: fcmp_ole_vf_swap_nxv8f64: 4669; CHECK: # %bb.0: 4670; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4671; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 4672; CHECK-NEXT: vmv1r.v v0, v16 4673; CHECK-NEXT: ret 4674 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4675 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4676 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ole", <vscale x 8 x i1> %m, i32 %evl) 4677 ret <vscale x 8 x i1> %v 4678} 4679 4680define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4681; CHECK-LABEL: fcmp_one_vv_nxv8f64: 4682; CHECK: # %bb.0: 4683; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4684; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 4685; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t 4686; CHECK-NEXT: vmor.mm v0, v25, v24 4687; CHECK-NEXT: ret 4688 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 4689 ret <vscale x 8 x i1> %v 4690} 4691 4692define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4693; CHECK-LABEL: fcmp_one_vf_nxv8f64: 4694; CHECK: # %bb.0: 4695; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4696; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4697; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 4698; CHECK-NEXT: vmor.mm v0, v17, v16 4699; CHECK-NEXT: ret 4700 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4701 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4702 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 4703 ret <vscale x 8 x i1> %v 4704} 4705 4706define <vscale x 8 x i1> @fcmp_one_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4707; CHECK-LABEL: fcmp_one_vf_swap_nxv8f64: 4708; CHECK: # %bb.0: 4709; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4710; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4711; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 4712; CHECK-NEXT: vmor.mm v0, v17, v16 4713; CHECK-NEXT: ret 4714 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4715 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4716 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"one", <vscale x 8 x i1> %m, i32 %evl) 4717 ret <vscale x 8 x i1> %v 4718} 4719 4720define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4721; CHECK-LABEL: fcmp_ord_vv_nxv8f64: 4722; CHECK: # %bb.0: 4723; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4724; CHECK-NEXT: vmfeq.vv v24, v16, v16, v0.t 4725; CHECK-NEXT: vmfeq.vv v16, v8, v8, v0.t 4726; CHECK-NEXT: vmand.mm v0, v16, v24 4727; CHECK-NEXT: ret 4728 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 4729 ret <vscale x 8 x i1> %v 4730} 4731 4732define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4733; CHECK-LABEL: fcmp_ord_vf_nxv8f64: 4734; CHECK: # %bb.0: 4735; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma 4736; CHECK-NEXT: vfmv.v.f v16, fa0 4737; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4738; CHECK-NEXT: vmfeq.vf v24, v16, fa0, v0.t 4739; CHECK-NEXT: vmfeq.vv v16, v8, v8, v0.t 4740; CHECK-NEXT: vmand.mm v0, v16, v24 4741; CHECK-NEXT: ret 4742 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4743 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4744 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 4745 ret <vscale x 8 x i1> %v 4746} 4747 4748define <vscale x 8 x i1> @fcmp_ord_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4749; CHECK-LABEL: fcmp_ord_vf_swap_nxv8f64: 4750; CHECK: # %bb.0: 4751; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma 4752; CHECK-NEXT: vfmv.v.f v16, fa0 4753; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4754; CHECK-NEXT: vmfeq.vf v24, v16, fa0, v0.t 4755; CHECK-NEXT: vmfeq.vv v16, v8, v8, v0.t 4756; CHECK-NEXT: vmand.mm v0, v24, v16 4757; CHECK-NEXT: ret 4758 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4759 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4760 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ord", <vscale x 8 x i1> %m, i32 %evl) 4761 ret <vscale x 8 x i1> %v 4762} 4763 4764define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4765; CHECK-LABEL: fcmp_ueq_vv_nxv8f64: 4766; CHECK: # %bb.0: 4767; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4768; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 4769; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t 4770; CHECK-NEXT: vmnor.mm v0, v25, v24 4771; CHECK-NEXT: ret 4772 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 4773 ret <vscale x 8 x i1> %v 4774} 4775 4776define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4777; CHECK-LABEL: fcmp_ueq_vf_nxv8f64: 4778; CHECK: # %bb.0: 4779; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4780; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4781; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t 4782; CHECK-NEXT: vmnor.mm v0, v17, v16 4783; CHECK-NEXT: ret 4784 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4785 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4786 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 4787 ret <vscale x 8 x i1> %v 4788} 4789 4790define <vscale x 8 x i1> @fcmp_ueq_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4791; CHECK-LABEL: fcmp_ueq_vf_swap_nxv8f64: 4792; CHECK: # %bb.0: 4793; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4794; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4795; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t 4796; CHECK-NEXT: vmnor.mm v0, v17, v16 4797; CHECK-NEXT: ret 4798 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4799 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4800 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ueq", <vscale x 8 x i1> %m, i32 %evl) 4801 ret <vscale x 8 x i1> %v 4802} 4803 4804define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4805; CHECK-LABEL: fcmp_ugt_vv_nxv8f64: 4806; CHECK: # %bb.0: 4807; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4808; CHECK-NEXT: vmfle.vv v24, v8, v16, v0.t 4809; CHECK-NEXT: vmnot.m v0, v24 4810; CHECK-NEXT: ret 4811 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 4812 ret <vscale x 8 x i1> %v 4813} 4814 4815define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4816; CHECK-LABEL: fcmp_ugt_vf_nxv8f64: 4817; CHECK: # %bb.0: 4818; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4819; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 4820; CHECK-NEXT: vmnot.m v0, v16 4821; CHECK-NEXT: ret 4822 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4823 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4824 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 4825 ret <vscale x 8 x i1> %v 4826} 4827 4828define <vscale x 8 x i1> @fcmp_ugt_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4829; CHECK-LABEL: fcmp_ugt_vf_swap_nxv8f64: 4830; CHECK: # %bb.0: 4831; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4832; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 4833; CHECK-NEXT: vmnot.m v0, v16 4834; CHECK-NEXT: ret 4835 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4836 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4837 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ugt", <vscale x 8 x i1> %m, i32 %evl) 4838 ret <vscale x 8 x i1> %v 4839} 4840 4841define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4842; CHECK-LABEL: fcmp_uge_vv_nxv8f64: 4843; CHECK: # %bb.0: 4844; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4845; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t 4846; CHECK-NEXT: vmnot.m v0, v24 4847; CHECK-NEXT: ret 4848 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 4849 ret <vscale x 8 x i1> %v 4850} 4851 4852define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4853; CHECK-LABEL: fcmp_uge_vf_nxv8f64: 4854; CHECK: # %bb.0: 4855; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4856; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4857; CHECK-NEXT: vmnot.m v0, v16 4858; CHECK-NEXT: ret 4859 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4860 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4861 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 4862 ret <vscale x 8 x i1> %v 4863} 4864 4865define <vscale x 8 x i1> @fcmp_uge_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4866; CHECK-LABEL: fcmp_uge_vf_swap_nxv8f64: 4867; CHECK: # %bb.0: 4868; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4869; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4870; CHECK-NEXT: vmnot.m v0, v16 4871; CHECK-NEXT: ret 4872 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4873 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4874 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"uge", <vscale x 8 x i1> %m, i32 %evl) 4875 ret <vscale x 8 x i1> %v 4876} 4877 4878define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4879; CHECK-LABEL: fcmp_ult_vv_nxv8f64: 4880; CHECK: # %bb.0: 4881; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4882; CHECK-NEXT: vmfle.vv v24, v16, v8, v0.t 4883; CHECK-NEXT: vmnot.m v0, v24 4884; CHECK-NEXT: ret 4885 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 4886 ret <vscale x 8 x i1> %v 4887} 4888 4889define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4890; CHECK-LABEL: fcmp_ult_vf_nxv8f64: 4891; CHECK: # %bb.0: 4892; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4893; CHECK-NEXT: vmfge.vf v16, v8, fa0, v0.t 4894; CHECK-NEXT: vmnot.m v0, v16 4895; CHECK-NEXT: ret 4896 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4897 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4898 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 4899 ret <vscale x 8 x i1> %v 4900} 4901 4902define <vscale x 8 x i1> @fcmp_ult_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4903; CHECK-LABEL: fcmp_ult_vf_swap_nxv8f64: 4904; CHECK: # %bb.0: 4905; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4906; CHECK-NEXT: vmfle.vf v16, v8, fa0, v0.t 4907; CHECK-NEXT: vmnot.m v0, v16 4908; CHECK-NEXT: ret 4909 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4910 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4911 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ult", <vscale x 8 x i1> %m, i32 %evl) 4912 ret <vscale x 8 x i1> %v 4913} 4914 4915define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4916; CHECK-LABEL: fcmp_ule_vv_nxv8f64: 4917; CHECK: # %bb.0: 4918; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4919; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t 4920; CHECK-NEXT: vmnot.m v0, v24 4921; CHECK-NEXT: ret 4922 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 4923 ret <vscale x 8 x i1> %v 4924} 4925 4926define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4927; CHECK-LABEL: fcmp_ule_vf_nxv8f64: 4928; CHECK: # %bb.0: 4929; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4930; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t 4931; CHECK-NEXT: vmnot.m v0, v16 4932; CHECK-NEXT: ret 4933 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4934 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4935 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 4936 ret <vscale x 8 x i1> %v 4937} 4938 4939define <vscale x 8 x i1> @fcmp_ule_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4940; CHECK-LABEL: fcmp_ule_vf_swap_nxv8f64: 4941; CHECK: # %bb.0: 4942; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4943; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t 4944; CHECK-NEXT: vmnot.m v0, v16 4945; CHECK-NEXT: ret 4946 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4947 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4948 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"ule", <vscale x 8 x i1> %m, i32 %evl) 4949 ret <vscale x 8 x i1> %v 4950} 4951 4952define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4953; CHECK-LABEL: fcmp_une_vv_nxv8f64: 4954; CHECK: # %bb.0: 4955; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4956; CHECK-NEXT: vmfne.vv v24, v8, v16, v0.t 4957; CHECK-NEXT: vmv1r.v v0, v24 4958; CHECK-NEXT: ret 4959 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 4960 ret <vscale x 8 x i1> %v 4961} 4962 4963define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4964; CHECK-LABEL: fcmp_une_vf_nxv8f64: 4965; CHECK: # %bb.0: 4966; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4967; CHECK-NEXT: vmfne.vf v16, v8, fa0, v0.t 4968; CHECK-NEXT: vmv1r.v v0, v16 4969; CHECK-NEXT: ret 4970 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4971 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4972 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 4973 ret <vscale x 8 x i1> %v 4974} 4975 4976define <vscale x 8 x i1> @fcmp_une_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4977; CHECK-LABEL: fcmp_une_vf_swap_nxv8f64: 4978; CHECK: # %bb.0: 4979; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4980; CHECK-NEXT: vmfne.vf v16, v8, fa0, v0.t 4981; CHECK-NEXT: vmv1r.v v0, v16 4982; CHECK-NEXT: ret 4983 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 4984 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 4985 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"une", <vscale x 8 x i1> %m, i32 %evl) 4986 ret <vscale x 8 x i1> %v 4987} 4988 4989define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4990; CHECK-LABEL: fcmp_uno_vv_nxv8f64: 4991; CHECK: # %bb.0: 4992; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 4993; CHECK-NEXT: vmfne.vv v24, v16, v16, v0.t 4994; CHECK-NEXT: vmfne.vv v16, v8, v8, v0.t 4995; CHECK-NEXT: vmor.mm v0, v16, v24 4996; CHECK-NEXT: ret 4997 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 4998 ret <vscale x 8 x i1> %v 4999} 5000 5001define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5002; CHECK-LABEL: fcmp_uno_vf_nxv8f64: 5003; CHECK: # %bb.0: 5004; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma 5005; CHECK-NEXT: vfmv.v.f v16, fa0 5006; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 5007; CHECK-NEXT: vmfne.vf v24, v16, fa0, v0.t 5008; CHECK-NEXT: vmfne.vv v16, v8, v8, v0.t 5009; CHECK-NEXT: vmor.mm v0, v16, v24 5010; CHECK-NEXT: ret 5011 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 5012 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 5013 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 5014 ret <vscale x 8 x i1> %v 5015} 5016 5017define <vscale x 8 x i1> @fcmp_uno_vf_swap_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5018; CHECK-LABEL: fcmp_uno_vf_swap_nxv8f64: 5019; CHECK: # %bb.0: 5020; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma 5021; CHECK-NEXT: vfmv.v.f v16, fa0 5022; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 5023; CHECK-NEXT: vmfne.vf v24, v16, fa0, v0.t 5024; CHECK-NEXT: vmfne.vv v16, v8, v8, v0.t 5025; CHECK-NEXT: vmor.mm v0, v24, v16 5026; CHECK-NEXT: ret 5027 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 5028 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 5029 %v = call <vscale x 8 x i1> @llvm.vp.fcmp.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, metadata !"uno", <vscale x 8 x i1> %m, i32 %evl) 5030 ret <vscale x 8 x i1> %v 5031} 5032 5033declare <vscale x 32 x i1> @llvm.vp.fcmp.nxv32f64(<vscale x 32 x double>, <vscale x 32 x double>, metadata, <vscale x 32 x i1>, i32) 5034 5035define <vscale x 32 x i1> @fcmp_oeq_vv_nxv32f64(<vscale x 32 x double> %va, <vscale x 32 x double> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) { 5036 %v = call <vscale x 32 x i1> @llvm.vp.fcmp.nxv32f64(<vscale x 32 x double> %va, <vscale x 32 x double> %vb, metadata !"oeq", <vscale x 32 x i1> %m, i32 %evl) 5037 ret <vscale x 32 x i1> %v 5038} 5039