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