1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+experimental-zfh,+experimental-v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4 5; FIXME: The scalar/vector operations ('fv' tests) should swap operands and 6; condition codes accordingly in order to generate a 'vf' instruction. 7 8define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 9; CHECK-LABEL: fcmp_oeq_vv_nxv8f16: 10; CHECK: # %bb.0: 11; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 12; CHECK-NEXT: vmfeq.vv v0, v8, v10 13; CHECK-NEXT: ret 14 %vc = fcmp oeq <vscale x 8 x half> %va, %vb 15 ret <vscale x 8 x i1> %vc 16} 17 18define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 19; CHECK-LABEL: fcmp_oeq_vf_nxv8f16: 20; CHECK: # %bb.0: 21; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 22; CHECK-NEXT: vmfeq.vf v0, v8, fa0 23; CHECK-NEXT: ret 24 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 25 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 26 %vc = fcmp oeq <vscale x 8 x half> %va, %splat 27 ret <vscale x 8 x i1> %vc 28} 29 30define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 31; CHECK-LABEL: fcmp_oeq_fv_nxv8f16: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 34; CHECK-NEXT: vmfeq.vf v0, v8, fa0 35; CHECK-NEXT: ret 36 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 37 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 38 %vc = fcmp oeq <vscale x 8 x half> %splat, %va 39 ret <vscale x 8 x i1> %vc 40} 41 42define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 43; CHECK-LABEL: fcmp_oeq_vv_nxv8f16_nonans: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 46; CHECK-NEXT: vmfeq.vv v0, v8, v10 47; CHECK-NEXT: ret 48 %vc = fcmp oeq <vscale x 8 x half> %va, %vb 49 ret <vscale x 8 x i1> %vc 50} 51 52define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 53; CHECK-LABEL: fcmp_oeq_vf_nxv8f16_nonans: 54; CHECK: # %bb.0: 55; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 56; CHECK-NEXT: vmfeq.vf v0, v8, fa0 57; CHECK-NEXT: ret 58 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 59 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 60 %vc = fcmp oeq <vscale x 8 x half> %va, %splat 61 ret <vscale x 8 x i1> %vc 62} 63 64define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 65; CHECK-LABEL: fcmp_ogt_vv_nxv8f16: 66; CHECK: # %bb.0: 67; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 68; CHECK-NEXT: vmflt.vv v0, v10, v8 69; CHECK-NEXT: ret 70 %vc = fcmp ogt <vscale x 8 x half> %va, %vb 71 ret <vscale x 8 x i1> %vc 72} 73 74define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 75; CHECK-LABEL: fcmp_ogt_vf_nxv8f16: 76; CHECK: # %bb.0: 77; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 78; CHECK-NEXT: vmfgt.vf v0, v8, fa0 79; CHECK-NEXT: ret 80 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 81 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 82 %vc = fcmp ogt <vscale x 8 x half> %va, %splat 83 ret <vscale x 8 x i1> %vc 84} 85 86define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 87; CHECK-LABEL: fcmp_ogt_fv_nxv8f16: 88; CHECK: # %bb.0: 89; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 90; CHECK-NEXT: vmflt.vf v0, v8, fa0 91; CHECK-NEXT: ret 92 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 93 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 94 %vc = fcmp ogt <vscale x 8 x half> %splat, %va 95 ret <vscale x 8 x i1> %vc 96} 97 98define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 99; CHECK-LABEL: fcmp_ogt_vv_nxv8f16_nonans: 100; CHECK: # %bb.0: 101; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 102; CHECK-NEXT: vmflt.vv v0, v10, v8 103; CHECK-NEXT: ret 104 %vc = fcmp ogt <vscale x 8 x half> %va, %vb 105 ret <vscale x 8 x i1> %vc 106} 107 108define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 109; CHECK-LABEL: fcmp_ogt_vf_nxv8f16_nonans: 110; CHECK: # %bb.0: 111; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 112; CHECK-NEXT: vmfgt.vf v0, v8, fa0 113; CHECK-NEXT: ret 114 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 115 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 116 %vc = fcmp ogt <vscale x 8 x half> %va, %splat 117 ret <vscale x 8 x i1> %vc 118} 119 120define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 121; CHECK-LABEL: fcmp_oge_vv_nxv8f16: 122; CHECK: # %bb.0: 123; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 124; CHECK-NEXT: vmfle.vv v0, v10, v8 125; CHECK-NEXT: ret 126 %vc = fcmp oge <vscale x 8 x half> %va, %vb 127 ret <vscale x 8 x i1> %vc 128} 129 130define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 131; CHECK-LABEL: fcmp_oge_vf_nxv8f16: 132; CHECK: # %bb.0: 133; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 134; CHECK-NEXT: vmfge.vf v0, v8, fa0 135; CHECK-NEXT: ret 136 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 137 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 138 %vc = fcmp oge <vscale x 8 x half> %va, %splat 139 ret <vscale x 8 x i1> %vc 140} 141 142define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 143; CHECK-LABEL: fcmp_oge_fv_nxv8f16: 144; CHECK: # %bb.0: 145; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 146; CHECK-NEXT: vmfle.vf v0, v8, fa0 147; CHECK-NEXT: ret 148 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 149 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 150 %vc = fcmp oge <vscale x 8 x half> %splat, %va 151 ret <vscale x 8 x i1> %vc 152} 153 154define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 155; CHECK-LABEL: fcmp_oge_vv_nxv8f16_nonans: 156; CHECK: # %bb.0: 157; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 158; CHECK-NEXT: vmfle.vv v0, v10, v8 159; CHECK-NEXT: ret 160 %vc = fcmp oge <vscale x 8 x half> %va, %vb 161 ret <vscale x 8 x i1> %vc 162} 163 164define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 165; CHECK-LABEL: fcmp_oge_vf_nxv8f16_nonans: 166; CHECK: # %bb.0: 167; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 168; CHECK-NEXT: vmfge.vf v0, v8, fa0 169; CHECK-NEXT: ret 170 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 171 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 172 %vc = fcmp oge <vscale x 8 x half> %va, %splat 173 ret <vscale x 8 x i1> %vc 174} 175 176define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 177; CHECK-LABEL: fcmp_olt_vv_nxv8f16: 178; CHECK: # %bb.0: 179; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 180; CHECK-NEXT: vmflt.vv v0, v8, v10 181; CHECK-NEXT: ret 182 %vc = fcmp olt <vscale x 8 x half> %va, %vb 183 ret <vscale x 8 x i1> %vc 184} 185 186define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 187; CHECK-LABEL: fcmp_olt_vf_nxv8f16: 188; CHECK: # %bb.0: 189; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 190; CHECK-NEXT: vmflt.vf v0, v8, fa0 191; CHECK-NEXT: ret 192 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 193 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 194 %vc = fcmp olt <vscale x 8 x half> %va, %splat 195 ret <vscale x 8 x i1> %vc 196} 197 198define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 199; CHECK-LABEL: fcmp_olt_fv_nxv8f16: 200; CHECK: # %bb.0: 201; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 202; CHECK-NEXT: vmfgt.vf v0, v8, fa0 203; CHECK-NEXT: ret 204 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 205 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 206 %vc = fcmp olt <vscale x 8 x half> %splat, %va 207 ret <vscale x 8 x i1> %vc 208} 209 210define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 211; CHECK-LABEL: fcmp_olt_vv_nxv8f16_nonans: 212; CHECK: # %bb.0: 213; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 214; CHECK-NEXT: vmflt.vv v0, v8, v10 215; CHECK-NEXT: ret 216 %vc = fcmp olt <vscale x 8 x half> %va, %vb 217 ret <vscale x 8 x i1> %vc 218} 219 220define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 221; CHECK-LABEL: fcmp_olt_vf_nxv8f16_nonans: 222; CHECK: # %bb.0: 223; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 224; CHECK-NEXT: vmflt.vf v0, v8, fa0 225; CHECK-NEXT: ret 226 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 227 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 228 %vc = fcmp olt <vscale x 8 x half> %va, %splat 229 ret <vscale x 8 x i1> %vc 230} 231 232define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 233; CHECK-LABEL: fcmp_ole_vv_nxv8f16: 234; CHECK: # %bb.0: 235; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 236; CHECK-NEXT: vmfle.vv v0, v8, v10 237; CHECK-NEXT: ret 238 %vc = fcmp ole <vscale x 8 x half> %va, %vb 239 ret <vscale x 8 x i1> %vc 240} 241 242define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 243; CHECK-LABEL: fcmp_ole_vf_nxv8f16: 244; CHECK: # %bb.0: 245; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 246; CHECK-NEXT: vmfle.vf v0, v8, fa0 247; CHECK-NEXT: ret 248 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 249 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 250 %vc = fcmp ole <vscale x 8 x half> %va, %splat 251 ret <vscale x 8 x i1> %vc 252} 253 254define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 255; CHECK-LABEL: fcmp_ole_fv_nxv8f16: 256; CHECK: # %bb.0: 257; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 258; CHECK-NEXT: vmfge.vf v0, v8, fa0 259; CHECK-NEXT: ret 260 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 261 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 262 %vc = fcmp ole <vscale x 8 x half> %splat, %va 263 ret <vscale x 8 x i1> %vc 264} 265 266define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 267; CHECK-LABEL: fcmp_ole_vv_nxv8f16_nonans: 268; CHECK: # %bb.0: 269; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 270; CHECK-NEXT: vmfle.vv v0, v8, v10 271; CHECK-NEXT: ret 272 %vc = fcmp ole <vscale x 8 x half> %va, %vb 273 ret <vscale x 8 x i1> %vc 274} 275 276define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 277; CHECK-LABEL: fcmp_ole_vf_nxv8f16_nonans: 278; CHECK: # %bb.0: 279; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 280; CHECK-NEXT: vmfle.vf v0, v8, fa0 281; CHECK-NEXT: ret 282 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 283 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 284 %vc = fcmp ole <vscale x 8 x half> %va, %splat 285 ret <vscale x 8 x i1> %vc 286} 287 288define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 289; CHECK-LABEL: fcmp_one_vv_nxv8f16: 290; CHECK: # %bb.0: 291; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 292; CHECK-NEXT: vmflt.vv v25, v8, v10 293; CHECK-NEXT: vmflt.vv v26, v10, v8 294; CHECK-NEXT: vmor.mm v0, v26, v25 295; CHECK-NEXT: ret 296 %vc = fcmp one <vscale x 8 x half> %va, %vb 297 ret <vscale x 8 x i1> %vc 298} 299 300define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 301; CHECK-LABEL: fcmp_one_vf_nxv8f16: 302; CHECK: # %bb.0: 303; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 304; CHECK-NEXT: vmflt.vf v25, v8, fa0 305; CHECK-NEXT: vmfgt.vf v26, v8, fa0 306; CHECK-NEXT: vmor.mm v0, v26, v25 307; CHECK-NEXT: ret 308 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 309 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 310 %vc = fcmp one <vscale x 8 x half> %va, %splat 311 ret <vscale x 8 x i1> %vc 312} 313 314define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 315; CHECK-LABEL: fcmp_one_fv_nxv8f16: 316; CHECK: # %bb.0: 317; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 318; CHECK-NEXT: vmfgt.vf v25, v8, fa0 319; CHECK-NEXT: vmflt.vf v26, v8, fa0 320; CHECK-NEXT: vmor.mm v0, v26, v25 321; CHECK-NEXT: ret 322 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 323 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 324 %vc = fcmp one <vscale x 8 x half> %splat, %va 325 ret <vscale x 8 x i1> %vc 326} 327 328define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 329; CHECK-LABEL: fcmp_one_vv_nxv8f16_nonans: 330; CHECK: # %bb.0: 331; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 332; CHECK-NEXT: vmfne.vv v0, v8, v10 333; CHECK-NEXT: ret 334 %vc = fcmp one <vscale x 8 x half> %va, %vb 335 ret <vscale x 8 x i1> %vc 336} 337 338define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 339; CHECK-LABEL: fcmp_one_vf_nxv8f16_nonans: 340; CHECK: # %bb.0: 341; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 342; CHECK-NEXT: vmfne.vf v0, v8, fa0 343; CHECK-NEXT: ret 344 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 345 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 346 %vc = fcmp one <vscale x 8 x half> %va, %splat 347 ret <vscale x 8 x i1> %vc 348} 349 350define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 351; CHECK-LABEL: fcmp_ord_vv_nxv8f16: 352; CHECK: # %bb.0: 353; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 354; CHECK-NEXT: vmfeq.vv v25, v10, v10 355; CHECK-NEXT: vmfeq.vv v26, v8, v8 356; CHECK-NEXT: vmand.mm v0, v26, v25 357; CHECK-NEXT: ret 358 %vc = fcmp ord <vscale x 8 x half> %va, %vb 359 ret <vscale x 8 x i1> %vc 360} 361 362define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 363; CHECK-LABEL: fcmp_ord_vf_nxv8f16: 364; CHECK: # %bb.0: 365; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 366; CHECK-NEXT: vfmv.v.f v26, fa0 367; CHECK-NEXT: vmfeq.vf v25, v26, fa0 368; CHECK-NEXT: vmfeq.vv v26, v8, v8 369; CHECK-NEXT: vmand.mm v0, v26, v25 370; CHECK-NEXT: ret 371 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 372 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 373 %vc = fcmp ord <vscale x 8 x half> %va, %splat 374 ret <vscale x 8 x i1> %vc 375} 376 377define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 378; CHECK-LABEL: fcmp_ord_fv_nxv8f16: 379; CHECK: # %bb.0: 380; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 381; CHECK-NEXT: vfmv.v.f v26, fa0 382; CHECK-NEXT: vmfeq.vf v25, v26, fa0 383; CHECK-NEXT: vmfeq.vv v26, v8, v8 384; CHECK-NEXT: vmand.mm v0, v25, v26 385; CHECK-NEXT: ret 386 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 387 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 388 %vc = fcmp ord <vscale x 8 x half> %splat, %va 389 ret <vscale x 8 x i1> %vc 390} 391 392define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 393; CHECK-LABEL: fcmp_ord_vv_nxv8f16_nonans: 394; CHECK: # %bb.0: 395; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 396; CHECK-NEXT: vmfeq.vv v25, v10, v10 397; CHECK-NEXT: vmfeq.vv v26, v8, v8 398; CHECK-NEXT: vmand.mm v0, v26, v25 399; CHECK-NEXT: ret 400 %vc = fcmp ord <vscale x 8 x half> %va, %vb 401 ret <vscale x 8 x i1> %vc 402} 403 404define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 405; CHECK-LABEL: fcmp_ord_vf_nxv8f16_nonans: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 408; CHECK-NEXT: vfmv.v.f v26, fa0 409; CHECK-NEXT: vmfeq.vf v25, v26, fa0 410; CHECK-NEXT: vmfeq.vv v26, v8, v8 411; CHECK-NEXT: vmand.mm v0, v26, v25 412; CHECK-NEXT: ret 413 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 414 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 415 %vc = fcmp ord <vscale x 8 x half> %va, %splat 416 ret <vscale x 8 x i1> %vc 417} 418 419define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 420; CHECK-LABEL: fcmp_ueq_vv_nxv8f16: 421; CHECK: # %bb.0: 422; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 423; CHECK-NEXT: vmflt.vv v25, v8, v10 424; CHECK-NEXT: vmflt.vv v26, v10, v8 425; CHECK-NEXT: vmnor.mm v0, v26, v25 426; CHECK-NEXT: ret 427 %vc = fcmp ueq <vscale x 8 x half> %va, %vb 428 ret <vscale x 8 x i1> %vc 429} 430 431define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 432; CHECK-LABEL: fcmp_ueq_vf_nxv8f16: 433; CHECK: # %bb.0: 434; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 435; CHECK-NEXT: vmflt.vf v25, v8, fa0 436; CHECK-NEXT: vmfgt.vf v26, v8, fa0 437; CHECK-NEXT: vmnor.mm v0, v26, v25 438; CHECK-NEXT: ret 439 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 440 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 441 %vc = fcmp ueq <vscale x 8 x half> %va, %splat 442 ret <vscale x 8 x i1> %vc 443} 444 445define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 446; CHECK-LABEL: fcmp_ueq_fv_nxv8f16: 447; CHECK: # %bb.0: 448; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 449; CHECK-NEXT: vmfgt.vf v25, v8, fa0 450; CHECK-NEXT: vmflt.vf v26, v8, fa0 451; CHECK-NEXT: vmnor.mm v0, v26, v25 452; CHECK-NEXT: ret 453 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 454 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 455 %vc = fcmp ueq <vscale x 8 x half> %splat, %va 456 ret <vscale x 8 x i1> %vc 457} 458 459define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 460; CHECK-LABEL: fcmp_ueq_vv_nxv8f16_nonans: 461; CHECK: # %bb.0: 462; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 463; CHECK-NEXT: vmfeq.vv v0, v8, v10 464; CHECK-NEXT: ret 465 %vc = fcmp ueq <vscale x 8 x half> %va, %vb 466 ret <vscale x 8 x i1> %vc 467} 468 469define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 470; CHECK-LABEL: fcmp_ueq_vf_nxv8f16_nonans: 471; CHECK: # %bb.0: 472; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 473; CHECK-NEXT: vmfeq.vf v0, v8, fa0 474; CHECK-NEXT: ret 475 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 476 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 477 %vc = fcmp ueq <vscale x 8 x half> %va, %splat 478 ret <vscale x 8 x i1> %vc 479} 480 481define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 482; CHECK-LABEL: fcmp_ugt_vv_nxv8f16: 483; CHECK: # %bb.0: 484; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 485; CHECK-NEXT: vmfle.vv v25, v8, v10 486; CHECK-NEXT: vmnand.mm v0, v25, v25 487; CHECK-NEXT: ret 488 %vc = fcmp ugt <vscale x 8 x half> %va, %vb 489 ret <vscale x 8 x i1> %vc 490} 491 492define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 493; CHECK-LABEL: fcmp_ugt_vf_nxv8f16: 494; CHECK: # %bb.0: 495; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 496; CHECK-NEXT: vmfle.vf v25, v8, fa0 497; CHECK-NEXT: vmnand.mm v0, v25, v25 498; CHECK-NEXT: ret 499 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 500 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 501 %vc = fcmp ugt <vscale x 8 x half> %va, %splat 502 ret <vscale x 8 x i1> %vc 503} 504 505define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 506; CHECK-LABEL: fcmp_ugt_fv_nxv8f16: 507; CHECK: # %bb.0: 508; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 509; CHECK-NEXT: vmfge.vf v25, v8, fa0 510; CHECK-NEXT: vmnand.mm v0, v25, v25 511; CHECK-NEXT: ret 512 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 513 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 514 %vc = fcmp ugt <vscale x 8 x half> %splat, %va 515 ret <vscale x 8 x i1> %vc 516} 517 518define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 519; CHECK-LABEL: fcmp_ugt_vv_nxv8f16_nonans: 520; CHECK: # %bb.0: 521; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 522; CHECK-NEXT: vmflt.vv v0, v10, v8 523; CHECK-NEXT: ret 524 %vc = fcmp ugt <vscale x 8 x half> %va, %vb 525 ret <vscale x 8 x i1> %vc 526} 527 528define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 529; CHECK-LABEL: fcmp_ugt_vf_nxv8f16_nonans: 530; CHECK: # %bb.0: 531; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 532; CHECK-NEXT: vmfgt.vf v0, v8, fa0 533; CHECK-NEXT: ret 534 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 535 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 536 %vc = fcmp ugt <vscale x 8 x half> %va, %splat 537 ret <vscale x 8 x i1> %vc 538} 539 540define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 541; CHECK-LABEL: fcmp_uge_vv_nxv8f16: 542; CHECK: # %bb.0: 543; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 544; CHECK-NEXT: vmflt.vv v25, v8, v10 545; CHECK-NEXT: vmnand.mm v0, v25, v25 546; CHECK-NEXT: ret 547 %vc = fcmp uge <vscale x 8 x half> %va, %vb 548 ret <vscale x 8 x i1> %vc 549} 550 551define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 552; CHECK-LABEL: fcmp_uge_vf_nxv8f16: 553; CHECK: # %bb.0: 554; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 555; CHECK-NEXT: vmflt.vf v25, v8, fa0 556; CHECK-NEXT: vmnand.mm v0, v25, v25 557; CHECK-NEXT: ret 558 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 559 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 560 %vc = fcmp uge <vscale x 8 x half> %va, %splat 561 ret <vscale x 8 x i1> %vc 562} 563 564define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 565; CHECK-LABEL: fcmp_uge_fv_nxv8f16: 566; CHECK: # %bb.0: 567; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 568; CHECK-NEXT: vmfgt.vf v25, v8, fa0 569; CHECK-NEXT: vmnand.mm v0, v25, v25 570; CHECK-NEXT: ret 571 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 572 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 573 %vc = fcmp uge <vscale x 8 x half> %splat, %va 574 ret <vscale x 8 x i1> %vc 575} 576 577define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 578; CHECK-LABEL: fcmp_uge_vv_nxv8f16_nonans: 579; CHECK: # %bb.0: 580; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 581; CHECK-NEXT: vmfle.vv v0, v10, v8 582; CHECK-NEXT: ret 583 %vc = fcmp uge <vscale x 8 x half> %va, %vb 584 ret <vscale x 8 x i1> %vc 585} 586 587define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 588; CHECK-LABEL: fcmp_uge_vf_nxv8f16_nonans: 589; CHECK: # %bb.0: 590; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 591; CHECK-NEXT: vmfge.vf v0, v8, fa0 592; CHECK-NEXT: ret 593 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 594 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 595 %vc = fcmp uge <vscale x 8 x half> %va, %splat 596 ret <vscale x 8 x i1> %vc 597} 598 599define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 600; CHECK-LABEL: fcmp_ult_vv_nxv8f16: 601; CHECK: # %bb.0: 602; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 603; CHECK-NEXT: vmfle.vv v25, v10, v8 604; CHECK-NEXT: vmnand.mm v0, v25, v25 605; CHECK-NEXT: ret 606 %vc = fcmp ult <vscale x 8 x half> %va, %vb 607 ret <vscale x 8 x i1> %vc 608} 609 610define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 611; CHECK-LABEL: fcmp_ult_vf_nxv8f16: 612; CHECK: # %bb.0: 613; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 614; CHECK-NEXT: vmfge.vf v25, v8, fa0 615; CHECK-NEXT: vmnand.mm v0, v25, v25 616; CHECK-NEXT: ret 617 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 618 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 619 %vc = fcmp ult <vscale x 8 x half> %va, %splat 620 ret <vscale x 8 x i1> %vc 621} 622 623define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 624; CHECK-LABEL: fcmp_ult_fv_nxv8f16: 625; CHECK: # %bb.0: 626; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 627; CHECK-NEXT: vmfle.vf v25, v8, fa0 628; CHECK-NEXT: vmnand.mm v0, v25, v25 629; CHECK-NEXT: ret 630 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 631 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 632 %vc = fcmp ult <vscale x 8 x half> %splat, %va 633 ret <vscale x 8 x i1> %vc 634} 635 636define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 637; CHECK-LABEL: fcmp_ult_vv_nxv8f16_nonans: 638; CHECK: # %bb.0: 639; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 640; CHECK-NEXT: vmflt.vv v0, v8, v10 641; CHECK-NEXT: ret 642 %vc = fcmp ult <vscale x 8 x half> %va, %vb 643 ret <vscale x 8 x i1> %vc 644} 645 646define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 647; CHECK-LABEL: fcmp_ult_vf_nxv8f16_nonans: 648; CHECK: # %bb.0: 649; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 650; CHECK-NEXT: vmflt.vf v0, v8, fa0 651; CHECK-NEXT: ret 652 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 653 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 654 %vc = fcmp ult <vscale x 8 x half> %va, %splat 655 ret <vscale x 8 x i1> %vc 656} 657 658define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 659; CHECK-LABEL: fcmp_ule_vv_nxv8f16: 660; CHECK: # %bb.0: 661; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 662; CHECK-NEXT: vmflt.vv v25, v10, v8 663; CHECK-NEXT: vmnand.mm v0, v25, v25 664; CHECK-NEXT: ret 665 %vc = fcmp ule <vscale x 8 x half> %va, %vb 666 ret <vscale x 8 x i1> %vc 667} 668 669define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 670; CHECK-LABEL: fcmp_ule_vf_nxv8f16: 671; CHECK: # %bb.0: 672; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 673; CHECK-NEXT: vmfgt.vf v25, v8, fa0 674; CHECK-NEXT: vmnand.mm v0, v25, v25 675; CHECK-NEXT: ret 676 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 677 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 678 %vc = fcmp ule <vscale x 8 x half> %va, %splat 679 ret <vscale x 8 x i1> %vc 680} 681 682define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 683; CHECK-LABEL: fcmp_ule_fv_nxv8f16: 684; CHECK: # %bb.0: 685; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 686; CHECK-NEXT: vmflt.vf v25, v8, fa0 687; CHECK-NEXT: vmnand.mm v0, v25, v25 688; CHECK-NEXT: ret 689 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 690 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 691 %vc = fcmp ule <vscale x 8 x half> %splat, %va 692 ret <vscale x 8 x i1> %vc 693} 694 695define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 696; CHECK-LABEL: fcmp_ule_vv_nxv8f16_nonans: 697; CHECK: # %bb.0: 698; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 699; CHECK-NEXT: vmfle.vv v0, v8, v10 700; CHECK-NEXT: ret 701 %vc = fcmp ule <vscale x 8 x half> %va, %vb 702 ret <vscale x 8 x i1> %vc 703} 704 705define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 706; CHECK-LABEL: fcmp_ule_vf_nxv8f16_nonans: 707; CHECK: # %bb.0: 708; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 709; CHECK-NEXT: vmfle.vf v0, v8, fa0 710; CHECK-NEXT: ret 711 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 712 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 713 %vc = fcmp ule <vscale x 8 x half> %va, %splat 714 ret <vscale x 8 x i1> %vc 715} 716 717define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 718; CHECK-LABEL: fcmp_une_vv_nxv8f16: 719; CHECK: # %bb.0: 720; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 721; CHECK-NEXT: vmfne.vv v0, v8, v10 722; CHECK-NEXT: ret 723 %vc = fcmp une <vscale x 8 x half> %va, %vb 724 ret <vscale x 8 x i1> %vc 725} 726 727define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 728; CHECK-LABEL: fcmp_une_vf_nxv8f16: 729; CHECK: # %bb.0: 730; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 731; CHECK-NEXT: vmfne.vf v0, v8, fa0 732; CHECK-NEXT: ret 733 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 734 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 735 %vc = fcmp une <vscale x 8 x half> %va, %splat 736 ret <vscale x 8 x i1> %vc 737} 738 739define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 740; CHECK-LABEL: fcmp_une_fv_nxv8f16: 741; CHECK: # %bb.0: 742; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 743; CHECK-NEXT: vmfne.vf v0, v8, fa0 744; CHECK-NEXT: ret 745 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 746 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 747 %vc = fcmp une <vscale x 8 x half> %splat, %va 748 ret <vscale x 8 x i1> %vc 749} 750 751define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 752; CHECK-LABEL: fcmp_une_vv_nxv8f16_nonans: 753; CHECK: # %bb.0: 754; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 755; CHECK-NEXT: vmfne.vv v0, v8, v10 756; CHECK-NEXT: ret 757 %vc = fcmp une <vscale x 8 x half> %va, %vb 758 ret <vscale x 8 x i1> %vc 759} 760 761define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 762; CHECK-LABEL: fcmp_une_vf_nxv8f16_nonans: 763; CHECK: # %bb.0: 764; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 765; CHECK-NEXT: vmfne.vf v0, v8, fa0 766; CHECK-NEXT: ret 767 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 768 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 769 %vc = fcmp une <vscale x 8 x half> %va, %splat 770 ret <vscale x 8 x i1> %vc 771} 772 773define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) { 774; CHECK-LABEL: fcmp_uno_vv_nxv8f16: 775; CHECK: # %bb.0: 776; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 777; CHECK-NEXT: vmfne.vv v25, v10, v10 778; CHECK-NEXT: vmfne.vv v26, v8, v8 779; CHECK-NEXT: vmor.mm v0, v26, v25 780; CHECK-NEXT: ret 781 %vc = fcmp uno <vscale x 8 x half> %va, %vb 782 ret <vscale x 8 x i1> %vc 783} 784 785define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) { 786; CHECK-LABEL: fcmp_uno_vf_nxv8f16: 787; CHECK: # %bb.0: 788; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 789; CHECK-NEXT: vfmv.v.f v26, fa0 790; CHECK-NEXT: vmfne.vf v25, v26, fa0 791; CHECK-NEXT: vmfne.vv v26, v8, v8 792; CHECK-NEXT: vmor.mm v0, v26, v25 793; CHECK-NEXT: ret 794 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 795 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 796 %vc = fcmp uno <vscale x 8 x half> %va, %splat 797 ret <vscale x 8 x i1> %vc 798} 799 800define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) { 801; CHECK-LABEL: fcmp_uno_fv_nxv8f16: 802; CHECK: # %bb.0: 803; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 804; CHECK-NEXT: vfmv.v.f v26, fa0 805; CHECK-NEXT: vmfne.vf v25, v26, fa0 806; CHECK-NEXT: vmfne.vv v26, v8, v8 807; CHECK-NEXT: vmor.mm v0, v25, v26 808; CHECK-NEXT: ret 809 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 810 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 811 %vc = fcmp uno <vscale x 8 x half> %splat, %va 812 ret <vscale x 8 x i1> %vc 813} 814 815define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 { 816; CHECK-LABEL: fcmp_uno_vv_nxv8f16_nonans: 817; CHECK: # %bb.0: 818; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 819; CHECK-NEXT: vmfne.vv v25, v10, v10 820; CHECK-NEXT: vmfne.vv v26, v8, v8 821; CHECK-NEXT: vmor.mm v0, v26, v25 822; CHECK-NEXT: ret 823 %vc = fcmp uno <vscale x 8 x half> %va, %vb 824 ret <vscale x 8 x i1> %vc 825} 826 827define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 { 828; CHECK-LABEL: fcmp_uno_vf_nxv8f16_nonans: 829; CHECK: # %bb.0: 830; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 831; CHECK-NEXT: vfmv.v.f v26, fa0 832; CHECK-NEXT: vmfne.vf v25, v26, fa0 833; CHECK-NEXT: vmfne.vv v26, v8, v8 834; CHECK-NEXT: vmor.mm v0, v26, v25 835; CHECK-NEXT: ret 836 %head = insertelement <vscale x 8 x half> undef, half %b, i32 0 837 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer 838 %vc = fcmp uno <vscale x 8 x half> %va, %splat 839 ret <vscale x 8 x i1> %vc 840} 841 842define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 843; CHECK-LABEL: fcmp_oeq_vv_nxv8f32: 844; CHECK: # %bb.0: 845; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 846; CHECK-NEXT: vmfeq.vv v0, v8, v12 847; CHECK-NEXT: ret 848 %vc = fcmp oeq <vscale x 8 x float> %va, %vb 849 ret <vscale x 8 x i1> %vc 850} 851 852define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 853; CHECK-LABEL: fcmp_oeq_vf_nxv8f32: 854; CHECK: # %bb.0: 855; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 856; CHECK-NEXT: vmfeq.vf v0, v8, fa0 857; CHECK-NEXT: ret 858 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 859 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 860 %vc = fcmp oeq <vscale x 8 x float> %va, %splat 861 ret <vscale x 8 x i1> %vc 862} 863 864define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 865; CHECK-LABEL: fcmp_oeq_fv_nxv8f32: 866; CHECK: # %bb.0: 867; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 868; CHECK-NEXT: vmfeq.vf v0, v8, fa0 869; CHECK-NEXT: ret 870 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 871 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 872 %vc = fcmp oeq <vscale x 8 x float> %splat, %va 873 ret <vscale x 8 x i1> %vc 874} 875 876define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 877; CHECK-LABEL: fcmp_oeq_vv_nxv8f32_nonans: 878; CHECK: # %bb.0: 879; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 880; CHECK-NEXT: vmfeq.vv v0, v8, v12 881; CHECK-NEXT: ret 882 %vc = fcmp oeq <vscale x 8 x float> %va, %vb 883 ret <vscale x 8 x i1> %vc 884} 885 886define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 887; CHECK-LABEL: fcmp_oeq_vf_nxv8f32_nonans: 888; CHECK: # %bb.0: 889; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 890; CHECK-NEXT: vmfeq.vf v0, v8, fa0 891; CHECK-NEXT: ret 892 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 893 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 894 %vc = fcmp oeq <vscale x 8 x float> %va, %splat 895 ret <vscale x 8 x i1> %vc 896} 897 898define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 899; CHECK-LABEL: fcmp_ogt_vv_nxv8f32: 900; CHECK: # %bb.0: 901; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 902; CHECK-NEXT: vmflt.vv v0, v12, v8 903; CHECK-NEXT: ret 904 %vc = fcmp ogt <vscale x 8 x float> %va, %vb 905 ret <vscale x 8 x i1> %vc 906} 907 908define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 909; CHECK-LABEL: fcmp_ogt_vf_nxv8f32: 910; CHECK: # %bb.0: 911; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 912; CHECK-NEXT: vmfgt.vf v0, v8, fa0 913; CHECK-NEXT: ret 914 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 915 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 916 %vc = fcmp ogt <vscale x 8 x float> %va, %splat 917 ret <vscale x 8 x i1> %vc 918} 919 920define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 921; CHECK-LABEL: fcmp_ogt_fv_nxv8f32: 922; CHECK: # %bb.0: 923; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 924; CHECK-NEXT: vmflt.vf v0, v8, fa0 925; CHECK-NEXT: ret 926 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 927 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 928 %vc = fcmp ogt <vscale x 8 x float> %splat, %va 929 ret <vscale x 8 x i1> %vc 930} 931 932define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 933; CHECK-LABEL: fcmp_ogt_vv_nxv8f32_nonans: 934; CHECK: # %bb.0: 935; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 936; CHECK-NEXT: vmflt.vv v0, v12, v8 937; CHECK-NEXT: ret 938 %vc = fcmp ogt <vscale x 8 x float> %va, %vb 939 ret <vscale x 8 x i1> %vc 940} 941 942define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 943; CHECK-LABEL: fcmp_ogt_vf_nxv8f32_nonans: 944; CHECK: # %bb.0: 945; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 946; CHECK-NEXT: vmfgt.vf v0, v8, fa0 947; CHECK-NEXT: ret 948 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 949 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 950 %vc = fcmp ogt <vscale x 8 x float> %va, %splat 951 ret <vscale x 8 x i1> %vc 952} 953 954define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 955; CHECK-LABEL: fcmp_oge_vv_nxv8f32: 956; CHECK: # %bb.0: 957; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 958; CHECK-NEXT: vmfle.vv v0, v12, v8 959; CHECK-NEXT: ret 960 %vc = fcmp oge <vscale x 8 x float> %va, %vb 961 ret <vscale x 8 x i1> %vc 962} 963 964define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 965; CHECK-LABEL: fcmp_oge_vf_nxv8f32: 966; CHECK: # %bb.0: 967; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 968; CHECK-NEXT: vmfge.vf v0, v8, fa0 969; CHECK-NEXT: ret 970 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 971 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 972 %vc = fcmp oge <vscale x 8 x float> %va, %splat 973 ret <vscale x 8 x i1> %vc 974} 975 976define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 977; CHECK-LABEL: fcmp_oge_fv_nxv8f32: 978; CHECK: # %bb.0: 979; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 980; CHECK-NEXT: vmfle.vf v0, v8, fa0 981; CHECK-NEXT: ret 982 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 983 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 984 %vc = fcmp oge <vscale x 8 x float> %splat, %va 985 ret <vscale x 8 x i1> %vc 986} 987 988define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 989; CHECK-LABEL: fcmp_oge_vv_nxv8f32_nonans: 990; CHECK: # %bb.0: 991; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 992; CHECK-NEXT: vmfle.vv v0, v12, v8 993; CHECK-NEXT: ret 994 %vc = fcmp oge <vscale x 8 x float> %va, %vb 995 ret <vscale x 8 x i1> %vc 996} 997 998define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 999; CHECK-LABEL: fcmp_oge_vf_nxv8f32_nonans: 1000; CHECK: # %bb.0: 1001; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1002; CHECK-NEXT: vmfge.vf v0, v8, fa0 1003; CHECK-NEXT: ret 1004 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1005 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1006 %vc = fcmp oge <vscale x 8 x float> %va, %splat 1007 ret <vscale x 8 x i1> %vc 1008} 1009 1010define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1011; CHECK-LABEL: fcmp_olt_vv_nxv8f32: 1012; CHECK: # %bb.0: 1013; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1014; CHECK-NEXT: vmflt.vv v0, v8, v12 1015; CHECK-NEXT: ret 1016 %vc = fcmp olt <vscale x 8 x float> %va, %vb 1017 ret <vscale x 8 x i1> %vc 1018} 1019 1020define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1021; CHECK-LABEL: fcmp_olt_vf_nxv8f32: 1022; CHECK: # %bb.0: 1023; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1024; CHECK-NEXT: vmflt.vf v0, v8, fa0 1025; CHECK-NEXT: ret 1026 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1027 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1028 %vc = fcmp olt <vscale x 8 x float> %va, %splat 1029 ret <vscale x 8 x i1> %vc 1030} 1031 1032define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1033; CHECK-LABEL: fcmp_olt_fv_nxv8f32: 1034; CHECK: # %bb.0: 1035; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1036; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1037; CHECK-NEXT: ret 1038 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1039 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1040 %vc = fcmp olt <vscale x 8 x float> %splat, %va 1041 ret <vscale x 8 x i1> %vc 1042} 1043 1044define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1045; CHECK-LABEL: fcmp_olt_vv_nxv8f32_nonans: 1046; CHECK: # %bb.0: 1047; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1048; CHECK-NEXT: vmflt.vv v0, v8, v12 1049; CHECK-NEXT: ret 1050 %vc = fcmp olt <vscale x 8 x float> %va, %vb 1051 ret <vscale x 8 x i1> %vc 1052} 1053 1054define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1055; CHECK-LABEL: fcmp_olt_vf_nxv8f32_nonans: 1056; CHECK: # %bb.0: 1057; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1058; CHECK-NEXT: vmflt.vf v0, v8, fa0 1059; CHECK-NEXT: ret 1060 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1061 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1062 %vc = fcmp olt <vscale x 8 x float> %va, %splat 1063 ret <vscale x 8 x i1> %vc 1064} 1065 1066define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1067; CHECK-LABEL: fcmp_ole_vv_nxv8f32: 1068; CHECK: # %bb.0: 1069; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1070; CHECK-NEXT: vmfle.vv v0, v8, v12 1071; CHECK-NEXT: ret 1072 %vc = fcmp ole <vscale x 8 x float> %va, %vb 1073 ret <vscale x 8 x i1> %vc 1074} 1075 1076define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1077; CHECK-LABEL: fcmp_ole_vf_nxv8f32: 1078; CHECK: # %bb.0: 1079; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1080; CHECK-NEXT: vmfle.vf v0, v8, fa0 1081; CHECK-NEXT: ret 1082 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1083 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1084 %vc = fcmp ole <vscale x 8 x float> %va, %splat 1085 ret <vscale x 8 x i1> %vc 1086} 1087 1088define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1089; CHECK-LABEL: fcmp_ole_fv_nxv8f32: 1090; CHECK: # %bb.0: 1091; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1092; CHECK-NEXT: vmfge.vf v0, v8, fa0 1093; CHECK-NEXT: ret 1094 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1095 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1096 %vc = fcmp ole <vscale x 8 x float> %splat, %va 1097 ret <vscale x 8 x i1> %vc 1098} 1099 1100define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1101; CHECK-LABEL: fcmp_ole_vv_nxv8f32_nonans: 1102; CHECK: # %bb.0: 1103; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1104; CHECK-NEXT: vmfle.vv v0, v8, v12 1105; CHECK-NEXT: ret 1106 %vc = fcmp ole <vscale x 8 x float> %va, %vb 1107 ret <vscale x 8 x i1> %vc 1108} 1109 1110define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1111; CHECK-LABEL: fcmp_ole_vf_nxv8f32_nonans: 1112; CHECK: # %bb.0: 1113; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1114; CHECK-NEXT: vmfle.vf v0, v8, fa0 1115; CHECK-NEXT: ret 1116 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1117 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1118 %vc = fcmp ole <vscale x 8 x float> %va, %splat 1119 ret <vscale x 8 x i1> %vc 1120} 1121 1122define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1123; CHECK-LABEL: fcmp_one_vv_nxv8f32: 1124; CHECK: # %bb.0: 1125; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1126; CHECK-NEXT: vmflt.vv v25, v8, v12 1127; CHECK-NEXT: vmflt.vv v26, v12, v8 1128; CHECK-NEXT: vmor.mm v0, v26, v25 1129; CHECK-NEXT: ret 1130 %vc = fcmp one <vscale x 8 x float> %va, %vb 1131 ret <vscale x 8 x i1> %vc 1132} 1133 1134define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1135; CHECK-LABEL: fcmp_one_vf_nxv8f32: 1136; CHECK: # %bb.0: 1137; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1138; CHECK-NEXT: vmflt.vf v25, v8, fa0 1139; CHECK-NEXT: vmfgt.vf v26, v8, fa0 1140; CHECK-NEXT: vmor.mm v0, v26, v25 1141; CHECK-NEXT: ret 1142 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1143 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1144 %vc = fcmp one <vscale x 8 x float> %va, %splat 1145 ret <vscale x 8 x i1> %vc 1146} 1147 1148define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1149; CHECK-LABEL: fcmp_one_fv_nxv8f32: 1150; CHECK: # %bb.0: 1151; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1152; CHECK-NEXT: vmfgt.vf v25, v8, fa0 1153; CHECK-NEXT: vmflt.vf v26, v8, fa0 1154; CHECK-NEXT: vmor.mm v0, v26, v25 1155; CHECK-NEXT: ret 1156 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1157 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1158 %vc = fcmp one <vscale x 8 x float> %splat, %va 1159 ret <vscale x 8 x i1> %vc 1160} 1161 1162define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1163; CHECK-LABEL: fcmp_one_vv_nxv8f32_nonans: 1164; CHECK: # %bb.0: 1165; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1166; CHECK-NEXT: vmfne.vv v0, v8, v12 1167; CHECK-NEXT: ret 1168 %vc = fcmp one <vscale x 8 x float> %va, %vb 1169 ret <vscale x 8 x i1> %vc 1170} 1171 1172define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1173; CHECK-LABEL: fcmp_one_vf_nxv8f32_nonans: 1174; CHECK: # %bb.0: 1175; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1176; CHECK-NEXT: vmfne.vf v0, v8, fa0 1177; CHECK-NEXT: ret 1178 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1179 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1180 %vc = fcmp one <vscale x 8 x float> %va, %splat 1181 ret <vscale x 8 x i1> %vc 1182} 1183 1184define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1185; CHECK-LABEL: fcmp_ord_vv_nxv8f32: 1186; CHECK: # %bb.0: 1187; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1188; CHECK-NEXT: vmfeq.vv v25, v12, v12 1189; CHECK-NEXT: vmfeq.vv v26, v8, v8 1190; CHECK-NEXT: vmand.mm v0, v26, v25 1191; CHECK-NEXT: ret 1192 %vc = fcmp ord <vscale x 8 x float> %va, %vb 1193 ret <vscale x 8 x i1> %vc 1194} 1195 1196define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1197; CHECK-LABEL: fcmp_ord_vf_nxv8f32: 1198; CHECK: # %bb.0: 1199; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1200; CHECK-NEXT: vfmv.v.f v28, fa0 1201; CHECK-NEXT: vmfeq.vf v25, v28, fa0 1202; CHECK-NEXT: vmfeq.vv v26, v8, v8 1203; CHECK-NEXT: vmand.mm v0, v26, v25 1204; CHECK-NEXT: ret 1205 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1206 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1207 %vc = fcmp ord <vscale x 8 x float> %va, %splat 1208 ret <vscale x 8 x i1> %vc 1209} 1210 1211define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1212; CHECK-LABEL: fcmp_ord_fv_nxv8f32: 1213; CHECK: # %bb.0: 1214; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1215; CHECK-NEXT: vfmv.v.f v28, fa0 1216; CHECK-NEXT: vmfeq.vf v25, v28, fa0 1217; CHECK-NEXT: vmfeq.vv v26, v8, v8 1218; CHECK-NEXT: vmand.mm v0, v25, v26 1219; CHECK-NEXT: ret 1220 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1221 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1222 %vc = fcmp ord <vscale x 8 x float> %splat, %va 1223 ret <vscale x 8 x i1> %vc 1224} 1225 1226define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1227; CHECK-LABEL: fcmp_ord_vv_nxv8f32_nonans: 1228; CHECK: # %bb.0: 1229; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1230; CHECK-NEXT: vmfeq.vv v25, v12, v12 1231; CHECK-NEXT: vmfeq.vv v26, v8, v8 1232; CHECK-NEXT: vmand.mm v0, v26, v25 1233; CHECK-NEXT: ret 1234 %vc = fcmp ord <vscale x 8 x float> %va, %vb 1235 ret <vscale x 8 x i1> %vc 1236} 1237 1238define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1239; CHECK-LABEL: fcmp_ord_vf_nxv8f32_nonans: 1240; CHECK: # %bb.0: 1241; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1242; CHECK-NEXT: vfmv.v.f v28, fa0 1243; CHECK-NEXT: vmfeq.vf v25, v28, fa0 1244; CHECK-NEXT: vmfeq.vv v26, v8, v8 1245; CHECK-NEXT: vmand.mm v0, v26, v25 1246; CHECK-NEXT: ret 1247 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1248 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1249 %vc = fcmp ord <vscale x 8 x float> %va, %splat 1250 ret <vscale x 8 x i1> %vc 1251} 1252 1253define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1254; CHECK-LABEL: fcmp_ueq_vv_nxv8f32: 1255; CHECK: # %bb.0: 1256; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1257; CHECK-NEXT: vmflt.vv v25, v8, v12 1258; CHECK-NEXT: vmflt.vv v26, v12, v8 1259; CHECK-NEXT: vmnor.mm v0, v26, v25 1260; CHECK-NEXT: ret 1261 %vc = fcmp ueq <vscale x 8 x float> %va, %vb 1262 ret <vscale x 8 x i1> %vc 1263} 1264 1265define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1266; CHECK-LABEL: fcmp_ueq_vf_nxv8f32: 1267; CHECK: # %bb.0: 1268; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1269; CHECK-NEXT: vmflt.vf v25, v8, fa0 1270; CHECK-NEXT: vmfgt.vf v26, v8, fa0 1271; CHECK-NEXT: vmnor.mm v0, v26, v25 1272; CHECK-NEXT: ret 1273 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1274 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1275 %vc = fcmp ueq <vscale x 8 x float> %va, %splat 1276 ret <vscale x 8 x i1> %vc 1277} 1278 1279define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1280; CHECK-LABEL: fcmp_ueq_fv_nxv8f32: 1281; CHECK: # %bb.0: 1282; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1283; CHECK-NEXT: vmfgt.vf v25, v8, fa0 1284; CHECK-NEXT: vmflt.vf v26, v8, fa0 1285; CHECK-NEXT: vmnor.mm v0, v26, v25 1286; CHECK-NEXT: ret 1287 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1288 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1289 %vc = fcmp ueq <vscale x 8 x float> %splat, %va 1290 ret <vscale x 8 x i1> %vc 1291} 1292 1293define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1294; CHECK-LABEL: fcmp_ueq_vv_nxv8f32_nonans: 1295; CHECK: # %bb.0: 1296; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1297; CHECK-NEXT: vmfeq.vv v0, v8, v12 1298; CHECK-NEXT: ret 1299 %vc = fcmp ueq <vscale x 8 x float> %va, %vb 1300 ret <vscale x 8 x i1> %vc 1301} 1302 1303define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1304; CHECK-LABEL: fcmp_ueq_vf_nxv8f32_nonans: 1305; CHECK: # %bb.0: 1306; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1307; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1308; CHECK-NEXT: ret 1309 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1310 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1311 %vc = fcmp ueq <vscale x 8 x float> %va, %splat 1312 ret <vscale x 8 x i1> %vc 1313} 1314 1315define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1316; CHECK-LABEL: fcmp_ugt_vv_nxv8f32: 1317; CHECK: # %bb.0: 1318; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1319; CHECK-NEXT: vmfle.vv v25, v8, v12 1320; CHECK-NEXT: vmnand.mm v0, v25, v25 1321; CHECK-NEXT: ret 1322 %vc = fcmp ugt <vscale x 8 x float> %va, %vb 1323 ret <vscale x 8 x i1> %vc 1324} 1325 1326define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1327; CHECK-LABEL: fcmp_ugt_vf_nxv8f32: 1328; CHECK: # %bb.0: 1329; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1330; CHECK-NEXT: vmfle.vf v25, v8, fa0 1331; CHECK-NEXT: vmnand.mm v0, v25, v25 1332; CHECK-NEXT: ret 1333 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1334 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1335 %vc = fcmp ugt <vscale x 8 x float> %va, %splat 1336 ret <vscale x 8 x i1> %vc 1337} 1338 1339define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1340; CHECK-LABEL: fcmp_ugt_fv_nxv8f32: 1341; CHECK: # %bb.0: 1342; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1343; CHECK-NEXT: vmfge.vf v25, v8, fa0 1344; CHECK-NEXT: vmnand.mm v0, v25, v25 1345; CHECK-NEXT: ret 1346 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1347 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1348 %vc = fcmp ugt <vscale x 8 x float> %splat, %va 1349 ret <vscale x 8 x i1> %vc 1350} 1351 1352define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1353; CHECK-LABEL: fcmp_ugt_vv_nxv8f32_nonans: 1354; CHECK: # %bb.0: 1355; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1356; CHECK-NEXT: vmflt.vv v0, v12, v8 1357; CHECK-NEXT: ret 1358 %vc = fcmp ugt <vscale x 8 x float> %va, %vb 1359 ret <vscale x 8 x i1> %vc 1360} 1361 1362define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1363; CHECK-LABEL: fcmp_ugt_vf_nxv8f32_nonans: 1364; CHECK: # %bb.0: 1365; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1366; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1367; CHECK-NEXT: ret 1368 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1369 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1370 %vc = fcmp ugt <vscale x 8 x float> %va, %splat 1371 ret <vscale x 8 x i1> %vc 1372} 1373 1374define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1375; CHECK-LABEL: fcmp_uge_vv_nxv8f32: 1376; CHECK: # %bb.0: 1377; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1378; CHECK-NEXT: vmflt.vv v25, v8, v12 1379; CHECK-NEXT: vmnand.mm v0, v25, v25 1380; CHECK-NEXT: ret 1381 %vc = fcmp uge <vscale x 8 x float> %va, %vb 1382 ret <vscale x 8 x i1> %vc 1383} 1384 1385define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1386; CHECK-LABEL: fcmp_uge_vf_nxv8f32: 1387; CHECK: # %bb.0: 1388; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1389; CHECK-NEXT: vmflt.vf v25, v8, fa0 1390; CHECK-NEXT: vmnand.mm v0, v25, v25 1391; CHECK-NEXT: ret 1392 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1393 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1394 %vc = fcmp uge <vscale x 8 x float> %va, %splat 1395 ret <vscale x 8 x i1> %vc 1396} 1397 1398define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1399; CHECK-LABEL: fcmp_uge_fv_nxv8f32: 1400; CHECK: # %bb.0: 1401; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1402; CHECK-NEXT: vmfgt.vf v25, v8, fa0 1403; CHECK-NEXT: vmnand.mm v0, v25, v25 1404; CHECK-NEXT: ret 1405 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1406 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1407 %vc = fcmp uge <vscale x 8 x float> %splat, %va 1408 ret <vscale x 8 x i1> %vc 1409} 1410 1411define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1412; CHECK-LABEL: fcmp_uge_vv_nxv8f32_nonans: 1413; CHECK: # %bb.0: 1414; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1415; CHECK-NEXT: vmfle.vv v0, v12, v8 1416; CHECK-NEXT: ret 1417 %vc = fcmp uge <vscale x 8 x float> %va, %vb 1418 ret <vscale x 8 x i1> %vc 1419} 1420 1421define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1422; CHECK-LABEL: fcmp_uge_vf_nxv8f32_nonans: 1423; CHECK: # %bb.0: 1424; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1425; CHECK-NEXT: vmfge.vf v0, v8, fa0 1426; CHECK-NEXT: ret 1427 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1428 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1429 %vc = fcmp uge <vscale x 8 x float> %va, %splat 1430 ret <vscale x 8 x i1> %vc 1431} 1432 1433define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1434; CHECK-LABEL: fcmp_ult_vv_nxv8f32: 1435; CHECK: # %bb.0: 1436; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1437; CHECK-NEXT: vmfle.vv v25, v12, v8 1438; CHECK-NEXT: vmnand.mm v0, v25, v25 1439; CHECK-NEXT: ret 1440 %vc = fcmp ult <vscale x 8 x float> %va, %vb 1441 ret <vscale x 8 x i1> %vc 1442} 1443 1444define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1445; CHECK-LABEL: fcmp_ult_vf_nxv8f32: 1446; CHECK: # %bb.0: 1447; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1448; CHECK-NEXT: vmfge.vf v25, v8, fa0 1449; CHECK-NEXT: vmnand.mm v0, v25, v25 1450; CHECK-NEXT: ret 1451 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1452 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1453 %vc = fcmp ult <vscale x 8 x float> %va, %splat 1454 ret <vscale x 8 x i1> %vc 1455} 1456 1457define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1458; CHECK-LABEL: fcmp_ult_fv_nxv8f32: 1459; CHECK: # %bb.0: 1460; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1461; CHECK-NEXT: vmfle.vf v25, v8, fa0 1462; CHECK-NEXT: vmnand.mm v0, v25, v25 1463; CHECK-NEXT: ret 1464 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1465 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1466 %vc = fcmp ult <vscale x 8 x float> %splat, %va 1467 ret <vscale x 8 x i1> %vc 1468} 1469 1470define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1471; CHECK-LABEL: fcmp_ult_vv_nxv8f32_nonans: 1472; CHECK: # %bb.0: 1473; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1474; CHECK-NEXT: vmflt.vv v0, v8, v12 1475; CHECK-NEXT: ret 1476 %vc = fcmp ult <vscale x 8 x float> %va, %vb 1477 ret <vscale x 8 x i1> %vc 1478} 1479 1480define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1481; CHECK-LABEL: fcmp_ult_vf_nxv8f32_nonans: 1482; CHECK: # %bb.0: 1483; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1484; CHECK-NEXT: vmflt.vf v0, v8, fa0 1485; CHECK-NEXT: ret 1486 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1487 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1488 %vc = fcmp ult <vscale x 8 x float> %va, %splat 1489 ret <vscale x 8 x i1> %vc 1490} 1491 1492define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1493; CHECK-LABEL: fcmp_ule_vv_nxv8f32: 1494; CHECK: # %bb.0: 1495; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1496; CHECK-NEXT: vmflt.vv v25, v12, v8 1497; CHECK-NEXT: vmnand.mm v0, v25, v25 1498; CHECK-NEXT: ret 1499 %vc = fcmp ule <vscale x 8 x float> %va, %vb 1500 ret <vscale x 8 x i1> %vc 1501} 1502 1503define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1504; CHECK-LABEL: fcmp_ule_vf_nxv8f32: 1505; CHECK: # %bb.0: 1506; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1507; CHECK-NEXT: vmfgt.vf v25, v8, fa0 1508; CHECK-NEXT: vmnand.mm v0, v25, v25 1509; CHECK-NEXT: ret 1510 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1511 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1512 %vc = fcmp ule <vscale x 8 x float> %va, %splat 1513 ret <vscale x 8 x i1> %vc 1514} 1515 1516define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1517; CHECK-LABEL: fcmp_ule_fv_nxv8f32: 1518; CHECK: # %bb.0: 1519; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1520; CHECK-NEXT: vmflt.vf v25, v8, fa0 1521; CHECK-NEXT: vmnand.mm v0, v25, v25 1522; CHECK-NEXT: ret 1523 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1524 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1525 %vc = fcmp ule <vscale x 8 x float> %splat, %va 1526 ret <vscale x 8 x i1> %vc 1527} 1528 1529define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1530; CHECK-LABEL: fcmp_ule_vv_nxv8f32_nonans: 1531; CHECK: # %bb.0: 1532; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1533; CHECK-NEXT: vmfle.vv v0, v8, v12 1534; CHECK-NEXT: ret 1535 %vc = fcmp ule <vscale x 8 x float> %va, %vb 1536 ret <vscale x 8 x i1> %vc 1537} 1538 1539define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1540; CHECK-LABEL: fcmp_ule_vf_nxv8f32_nonans: 1541; CHECK: # %bb.0: 1542; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1543; CHECK-NEXT: vmfle.vf v0, v8, fa0 1544; CHECK-NEXT: ret 1545 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1546 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1547 %vc = fcmp ule <vscale x 8 x float> %va, %splat 1548 ret <vscale x 8 x i1> %vc 1549} 1550 1551define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1552; CHECK-LABEL: fcmp_une_vv_nxv8f32: 1553; CHECK: # %bb.0: 1554; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1555; CHECK-NEXT: vmfne.vv v0, v8, v12 1556; CHECK-NEXT: ret 1557 %vc = fcmp une <vscale x 8 x float> %va, %vb 1558 ret <vscale x 8 x i1> %vc 1559} 1560 1561define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1562; CHECK-LABEL: fcmp_une_vf_nxv8f32: 1563; CHECK: # %bb.0: 1564; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1565; CHECK-NEXT: vmfne.vf v0, v8, fa0 1566; CHECK-NEXT: ret 1567 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1568 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1569 %vc = fcmp une <vscale x 8 x float> %va, %splat 1570 ret <vscale x 8 x i1> %vc 1571} 1572 1573define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1574; CHECK-LABEL: fcmp_une_fv_nxv8f32: 1575; CHECK: # %bb.0: 1576; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1577; CHECK-NEXT: vmfne.vf v0, v8, fa0 1578; CHECK-NEXT: ret 1579 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1580 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1581 %vc = fcmp une <vscale x 8 x float> %splat, %va 1582 ret <vscale x 8 x i1> %vc 1583} 1584 1585define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1586; CHECK-LABEL: fcmp_une_vv_nxv8f32_nonans: 1587; CHECK: # %bb.0: 1588; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1589; CHECK-NEXT: vmfne.vv v0, v8, v12 1590; CHECK-NEXT: ret 1591 %vc = fcmp une <vscale x 8 x float> %va, %vb 1592 ret <vscale x 8 x i1> %vc 1593} 1594 1595define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1596; CHECK-LABEL: fcmp_une_vf_nxv8f32_nonans: 1597; CHECK: # %bb.0: 1598; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1599; CHECK-NEXT: vmfne.vf v0, v8, fa0 1600; CHECK-NEXT: ret 1601 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1602 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1603 %vc = fcmp une <vscale x 8 x float> %va, %splat 1604 ret <vscale x 8 x i1> %vc 1605} 1606 1607define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) { 1608; CHECK-LABEL: fcmp_uno_vv_nxv8f32: 1609; CHECK: # %bb.0: 1610; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1611; CHECK-NEXT: vmfne.vv v25, v12, v12 1612; CHECK-NEXT: vmfne.vv v26, v8, v8 1613; CHECK-NEXT: vmor.mm v0, v26, v25 1614; CHECK-NEXT: ret 1615 %vc = fcmp uno <vscale x 8 x float> %va, %vb 1616 ret <vscale x 8 x i1> %vc 1617} 1618 1619define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) { 1620; CHECK-LABEL: fcmp_uno_vf_nxv8f32: 1621; CHECK: # %bb.0: 1622; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1623; CHECK-NEXT: vfmv.v.f v28, fa0 1624; CHECK-NEXT: vmfne.vf v25, v28, fa0 1625; CHECK-NEXT: vmfne.vv v26, v8, v8 1626; CHECK-NEXT: vmor.mm v0, v26, v25 1627; CHECK-NEXT: ret 1628 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1629 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1630 %vc = fcmp uno <vscale x 8 x float> %va, %splat 1631 ret <vscale x 8 x i1> %vc 1632} 1633 1634define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) { 1635; CHECK-LABEL: fcmp_uno_fv_nxv8f32: 1636; CHECK: # %bb.0: 1637; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1638; CHECK-NEXT: vfmv.v.f v28, fa0 1639; CHECK-NEXT: vmfne.vf v25, v28, fa0 1640; CHECK-NEXT: vmfne.vv v26, v8, v8 1641; CHECK-NEXT: vmor.mm v0, v25, v26 1642; CHECK-NEXT: ret 1643 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1644 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1645 %vc = fcmp uno <vscale x 8 x float> %splat, %va 1646 ret <vscale x 8 x i1> %vc 1647} 1648 1649define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 { 1650; CHECK-LABEL: fcmp_uno_vv_nxv8f32_nonans: 1651; CHECK: # %bb.0: 1652; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1653; CHECK-NEXT: vmfne.vv v25, v12, v12 1654; CHECK-NEXT: vmfne.vv v26, v8, v8 1655; CHECK-NEXT: vmor.mm v0, v26, v25 1656; CHECK-NEXT: ret 1657 %vc = fcmp uno <vscale x 8 x float> %va, %vb 1658 ret <vscale x 8 x i1> %vc 1659} 1660 1661define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 { 1662; CHECK-LABEL: fcmp_uno_vf_nxv8f32_nonans: 1663; CHECK: # %bb.0: 1664; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1665; CHECK-NEXT: vfmv.v.f v28, fa0 1666; CHECK-NEXT: vmfne.vf v25, v28, fa0 1667; CHECK-NEXT: vmfne.vv v26, v8, v8 1668; CHECK-NEXT: vmor.mm v0, v26, v25 1669; CHECK-NEXT: ret 1670 %head = insertelement <vscale x 8 x float> undef, float %b, i32 0 1671 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer 1672 %vc = fcmp uno <vscale x 8 x float> %va, %splat 1673 ret <vscale x 8 x i1> %vc 1674} 1675 1676define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1677; CHECK-LABEL: fcmp_oeq_vv_nxv8f64: 1678; CHECK: # %bb.0: 1679; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1680; CHECK-NEXT: vmfeq.vv v0, v8, v16 1681; CHECK-NEXT: ret 1682 %vc = fcmp oeq <vscale x 8 x double> %va, %vb 1683 ret <vscale x 8 x i1> %vc 1684} 1685 1686define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1687; CHECK-LABEL: fcmp_oeq_vf_nxv8f64: 1688; CHECK: # %bb.0: 1689; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1690; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1691; CHECK-NEXT: ret 1692 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1693 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1694 %vc = fcmp oeq <vscale x 8 x double> %va, %splat 1695 ret <vscale x 8 x i1> %vc 1696} 1697 1698define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1699; CHECK-LABEL: fcmp_oeq_fv_nxv8f64: 1700; CHECK: # %bb.0: 1701; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1702; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1703; CHECK-NEXT: ret 1704 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1705 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1706 %vc = fcmp oeq <vscale x 8 x double> %splat, %va 1707 ret <vscale x 8 x i1> %vc 1708} 1709 1710define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1711; CHECK-LABEL: fcmp_oeq_vv_nxv8f64_nonans: 1712; CHECK: # %bb.0: 1713; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1714; CHECK-NEXT: vmfeq.vv v0, v8, v16 1715; CHECK-NEXT: ret 1716 %vc = fcmp oeq <vscale x 8 x double> %va, %vb 1717 ret <vscale x 8 x i1> %vc 1718} 1719 1720define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 1721; CHECK-LABEL: fcmp_oeq_vf_nxv8f64_nonans: 1722; CHECK: # %bb.0: 1723; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1724; CHECK-NEXT: vmfeq.vf v0, v8, fa0 1725; CHECK-NEXT: ret 1726 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1727 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1728 %vc = fcmp oeq <vscale x 8 x double> %va, %splat 1729 ret <vscale x 8 x i1> %vc 1730} 1731 1732define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1733; CHECK-LABEL: fcmp_ogt_vv_nxv8f64: 1734; CHECK: # %bb.0: 1735; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1736; CHECK-NEXT: vmflt.vv v0, v16, v8 1737; CHECK-NEXT: ret 1738 %vc = fcmp ogt <vscale x 8 x double> %va, %vb 1739 ret <vscale x 8 x i1> %vc 1740} 1741 1742define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1743; CHECK-LABEL: fcmp_ogt_vf_nxv8f64: 1744; CHECK: # %bb.0: 1745; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1746; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1747; CHECK-NEXT: ret 1748 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1749 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1750 %vc = fcmp ogt <vscale x 8 x double> %va, %splat 1751 ret <vscale x 8 x i1> %vc 1752} 1753 1754define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1755; CHECK-LABEL: fcmp_ogt_fv_nxv8f64: 1756; CHECK: # %bb.0: 1757; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1758; CHECK-NEXT: vmflt.vf v0, v8, fa0 1759; CHECK-NEXT: ret 1760 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1761 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1762 %vc = fcmp ogt <vscale x 8 x double> %splat, %va 1763 ret <vscale x 8 x i1> %vc 1764} 1765 1766define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1767; CHECK-LABEL: fcmp_ogt_vv_nxv8f64_nonans: 1768; CHECK: # %bb.0: 1769; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1770; CHECK-NEXT: vmflt.vv v0, v16, v8 1771; CHECK-NEXT: ret 1772 %vc = fcmp ogt <vscale x 8 x double> %va, %vb 1773 ret <vscale x 8 x i1> %vc 1774} 1775 1776define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 1777; CHECK-LABEL: fcmp_ogt_vf_nxv8f64_nonans: 1778; CHECK: # %bb.0: 1779; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1780; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1781; CHECK-NEXT: ret 1782 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1783 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1784 %vc = fcmp ogt <vscale x 8 x double> %va, %splat 1785 ret <vscale x 8 x i1> %vc 1786} 1787 1788define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1789; CHECK-LABEL: fcmp_oge_vv_nxv8f64: 1790; CHECK: # %bb.0: 1791; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1792; CHECK-NEXT: vmfle.vv v0, v16, v8 1793; CHECK-NEXT: ret 1794 %vc = fcmp oge <vscale x 8 x double> %va, %vb 1795 ret <vscale x 8 x i1> %vc 1796} 1797 1798define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1799; CHECK-LABEL: fcmp_oge_vf_nxv8f64: 1800; CHECK: # %bb.0: 1801; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1802; CHECK-NEXT: vmfge.vf v0, v8, fa0 1803; CHECK-NEXT: ret 1804 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1805 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1806 %vc = fcmp oge <vscale x 8 x double> %va, %splat 1807 ret <vscale x 8 x i1> %vc 1808} 1809 1810define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1811; CHECK-LABEL: fcmp_oge_fv_nxv8f64: 1812; CHECK: # %bb.0: 1813; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1814; CHECK-NEXT: vmfle.vf v0, v8, fa0 1815; CHECK-NEXT: ret 1816 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1817 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1818 %vc = fcmp oge <vscale x 8 x double> %splat, %va 1819 ret <vscale x 8 x i1> %vc 1820} 1821 1822define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1823; CHECK-LABEL: fcmp_oge_vv_nxv8f64_nonans: 1824; CHECK: # %bb.0: 1825; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1826; CHECK-NEXT: vmfle.vv v0, v16, v8 1827; CHECK-NEXT: ret 1828 %vc = fcmp oge <vscale x 8 x double> %va, %vb 1829 ret <vscale x 8 x i1> %vc 1830} 1831 1832define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 1833; CHECK-LABEL: fcmp_oge_vf_nxv8f64_nonans: 1834; CHECK: # %bb.0: 1835; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1836; CHECK-NEXT: vmfge.vf v0, v8, fa0 1837; CHECK-NEXT: ret 1838 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1839 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1840 %vc = fcmp oge <vscale x 8 x double> %va, %splat 1841 ret <vscale x 8 x i1> %vc 1842} 1843 1844define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1845; CHECK-LABEL: fcmp_olt_vv_nxv8f64: 1846; CHECK: # %bb.0: 1847; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1848; CHECK-NEXT: vmflt.vv v0, v8, v16 1849; CHECK-NEXT: ret 1850 %vc = fcmp olt <vscale x 8 x double> %va, %vb 1851 ret <vscale x 8 x i1> %vc 1852} 1853 1854define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1855; CHECK-LABEL: fcmp_olt_vf_nxv8f64: 1856; CHECK: # %bb.0: 1857; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1858; CHECK-NEXT: vmflt.vf v0, v8, fa0 1859; CHECK-NEXT: ret 1860 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1861 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1862 %vc = fcmp olt <vscale x 8 x double> %va, %splat 1863 ret <vscale x 8 x i1> %vc 1864} 1865 1866define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1867; CHECK-LABEL: fcmp_olt_fv_nxv8f64: 1868; CHECK: # %bb.0: 1869; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1870; CHECK-NEXT: vmfgt.vf v0, v8, fa0 1871; CHECK-NEXT: ret 1872 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1873 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1874 %vc = fcmp olt <vscale x 8 x double> %splat, %va 1875 ret <vscale x 8 x i1> %vc 1876} 1877 1878define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1879; CHECK-LABEL: fcmp_olt_vv_nxv8f64_nonans: 1880; CHECK: # %bb.0: 1881; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1882; CHECK-NEXT: vmflt.vv v0, v8, v16 1883; CHECK-NEXT: ret 1884 %vc = fcmp olt <vscale x 8 x double> %va, %vb 1885 ret <vscale x 8 x i1> %vc 1886} 1887 1888define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 1889; CHECK-LABEL: fcmp_olt_vf_nxv8f64_nonans: 1890; CHECK: # %bb.0: 1891; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1892; CHECK-NEXT: vmflt.vf v0, v8, fa0 1893; CHECK-NEXT: ret 1894 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1895 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1896 %vc = fcmp olt <vscale x 8 x double> %va, %splat 1897 ret <vscale x 8 x i1> %vc 1898} 1899 1900define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1901; CHECK-LABEL: fcmp_ole_vv_nxv8f64: 1902; CHECK: # %bb.0: 1903; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1904; CHECK-NEXT: vmfle.vv v0, v8, v16 1905; CHECK-NEXT: ret 1906 %vc = fcmp ole <vscale x 8 x double> %va, %vb 1907 ret <vscale x 8 x i1> %vc 1908} 1909 1910define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1911; CHECK-LABEL: fcmp_ole_vf_nxv8f64: 1912; CHECK: # %bb.0: 1913; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1914; CHECK-NEXT: vmfle.vf v0, v8, fa0 1915; CHECK-NEXT: ret 1916 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1917 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1918 %vc = fcmp ole <vscale x 8 x double> %va, %splat 1919 ret <vscale x 8 x i1> %vc 1920} 1921 1922define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1923; CHECK-LABEL: fcmp_ole_fv_nxv8f64: 1924; CHECK: # %bb.0: 1925; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1926; CHECK-NEXT: vmfge.vf v0, v8, fa0 1927; CHECK-NEXT: ret 1928 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1929 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1930 %vc = fcmp ole <vscale x 8 x double> %splat, %va 1931 ret <vscale x 8 x i1> %vc 1932} 1933 1934define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1935; CHECK-LABEL: fcmp_ole_vv_nxv8f64_nonans: 1936; CHECK: # %bb.0: 1937; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1938; CHECK-NEXT: vmfle.vv v0, v8, v16 1939; CHECK-NEXT: ret 1940 %vc = fcmp ole <vscale x 8 x double> %va, %vb 1941 ret <vscale x 8 x i1> %vc 1942} 1943 1944define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 1945; CHECK-LABEL: fcmp_ole_vf_nxv8f64_nonans: 1946; CHECK: # %bb.0: 1947; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1948; CHECK-NEXT: vmfle.vf v0, v8, fa0 1949; CHECK-NEXT: ret 1950 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1951 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1952 %vc = fcmp ole <vscale x 8 x double> %va, %splat 1953 ret <vscale x 8 x i1> %vc 1954} 1955 1956define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 1957; CHECK-LABEL: fcmp_one_vv_nxv8f64: 1958; CHECK: # %bb.0: 1959; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1960; CHECK-NEXT: vmflt.vv v25, v8, v16 1961; CHECK-NEXT: vmflt.vv v26, v16, v8 1962; CHECK-NEXT: vmor.mm v0, v26, v25 1963; CHECK-NEXT: ret 1964 %vc = fcmp one <vscale x 8 x double> %va, %vb 1965 ret <vscale x 8 x i1> %vc 1966} 1967 1968define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 1969; CHECK-LABEL: fcmp_one_vf_nxv8f64: 1970; CHECK: # %bb.0: 1971; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1972; CHECK-NEXT: vmflt.vf v25, v8, fa0 1973; CHECK-NEXT: vmfgt.vf v26, v8, fa0 1974; CHECK-NEXT: vmor.mm v0, v26, v25 1975; CHECK-NEXT: ret 1976 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1977 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1978 %vc = fcmp one <vscale x 8 x double> %va, %splat 1979 ret <vscale x 8 x i1> %vc 1980} 1981 1982define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 1983; CHECK-LABEL: fcmp_one_fv_nxv8f64: 1984; CHECK: # %bb.0: 1985; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1986; CHECK-NEXT: vmfgt.vf v25, v8, fa0 1987; CHECK-NEXT: vmflt.vf v26, v8, fa0 1988; CHECK-NEXT: vmor.mm v0, v26, v25 1989; CHECK-NEXT: ret 1990 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 1991 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 1992 %vc = fcmp one <vscale x 8 x double> %splat, %va 1993 ret <vscale x 8 x i1> %vc 1994} 1995 1996define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 1997; CHECK-LABEL: fcmp_one_vv_nxv8f64_nonans: 1998; CHECK: # %bb.0: 1999; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2000; CHECK-NEXT: vmfne.vv v0, v8, v16 2001; CHECK-NEXT: ret 2002 %vc = fcmp one <vscale x 8 x double> %va, %vb 2003 ret <vscale x 8 x i1> %vc 2004} 2005 2006define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2007; CHECK-LABEL: fcmp_one_vf_nxv8f64_nonans: 2008; CHECK: # %bb.0: 2009; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2010; CHECK-NEXT: vmfne.vf v0, v8, fa0 2011; CHECK-NEXT: ret 2012 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2013 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2014 %vc = fcmp one <vscale x 8 x double> %va, %splat 2015 ret <vscale x 8 x i1> %vc 2016} 2017 2018define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2019; CHECK-LABEL: fcmp_ord_vv_nxv8f64: 2020; CHECK: # %bb.0: 2021; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2022; CHECK-NEXT: vmfeq.vv v25, v16, v16 2023; CHECK-NEXT: vmfeq.vv v26, v8, v8 2024; CHECK-NEXT: vmand.mm v0, v26, v25 2025; CHECK-NEXT: ret 2026 %vc = fcmp ord <vscale x 8 x double> %va, %vb 2027 ret <vscale x 8 x i1> %vc 2028} 2029 2030define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2031; CHECK-LABEL: fcmp_ord_vf_nxv8f64: 2032; CHECK: # %bb.0: 2033; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2034; CHECK-NEXT: vfmv.v.f v16, fa0 2035; CHECK-NEXT: vmfeq.vf v25, v16, fa0 2036; CHECK-NEXT: vmfeq.vv v26, v8, v8 2037; CHECK-NEXT: vmand.mm v0, v26, v25 2038; CHECK-NEXT: ret 2039 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2040 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2041 %vc = fcmp ord <vscale x 8 x double> %va, %splat 2042 ret <vscale x 8 x i1> %vc 2043} 2044 2045define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2046; CHECK-LABEL: fcmp_ord_fv_nxv8f64: 2047; CHECK: # %bb.0: 2048; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2049; CHECK-NEXT: vfmv.v.f v16, fa0 2050; CHECK-NEXT: vmfeq.vf v25, v16, fa0 2051; CHECK-NEXT: vmfeq.vv v26, v8, v8 2052; CHECK-NEXT: vmand.mm v0, v25, v26 2053; CHECK-NEXT: ret 2054 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2055 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2056 %vc = fcmp ord <vscale x 8 x double> %splat, %va 2057 ret <vscale x 8 x i1> %vc 2058} 2059 2060define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2061; CHECK-LABEL: fcmp_ord_vv_nxv8f64_nonans: 2062; CHECK: # %bb.0: 2063; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2064; CHECK-NEXT: vmfeq.vv v25, v16, v16 2065; CHECK-NEXT: vmfeq.vv v26, v8, v8 2066; CHECK-NEXT: vmand.mm v0, v26, v25 2067; CHECK-NEXT: ret 2068 %vc = fcmp ord <vscale x 8 x double> %va, %vb 2069 ret <vscale x 8 x i1> %vc 2070} 2071 2072define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2073; CHECK-LABEL: fcmp_ord_vf_nxv8f64_nonans: 2074; CHECK: # %bb.0: 2075; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2076; CHECK-NEXT: vfmv.v.f v16, fa0 2077; CHECK-NEXT: vmfeq.vf v25, v16, fa0 2078; CHECK-NEXT: vmfeq.vv v26, v8, v8 2079; CHECK-NEXT: vmand.mm v0, v26, v25 2080; CHECK-NEXT: ret 2081 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2082 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2083 %vc = fcmp ord <vscale x 8 x double> %va, %splat 2084 ret <vscale x 8 x i1> %vc 2085} 2086 2087define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2088; CHECK-LABEL: fcmp_ueq_vv_nxv8f64: 2089; CHECK: # %bb.0: 2090; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2091; CHECK-NEXT: vmflt.vv v25, v8, v16 2092; CHECK-NEXT: vmflt.vv v26, v16, v8 2093; CHECK-NEXT: vmnor.mm v0, v26, v25 2094; CHECK-NEXT: ret 2095 %vc = fcmp ueq <vscale x 8 x double> %va, %vb 2096 ret <vscale x 8 x i1> %vc 2097} 2098 2099define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2100; CHECK-LABEL: fcmp_ueq_vf_nxv8f64: 2101; CHECK: # %bb.0: 2102; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2103; CHECK-NEXT: vmflt.vf v25, v8, fa0 2104; CHECK-NEXT: vmfgt.vf v26, v8, fa0 2105; CHECK-NEXT: vmnor.mm v0, v26, v25 2106; CHECK-NEXT: ret 2107 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2108 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2109 %vc = fcmp ueq <vscale x 8 x double> %va, %splat 2110 ret <vscale x 8 x i1> %vc 2111} 2112 2113define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2114; CHECK-LABEL: fcmp_ueq_fv_nxv8f64: 2115; CHECK: # %bb.0: 2116; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2117; CHECK-NEXT: vmfgt.vf v25, v8, fa0 2118; CHECK-NEXT: vmflt.vf v26, v8, fa0 2119; CHECK-NEXT: vmnor.mm v0, v26, v25 2120; CHECK-NEXT: ret 2121 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2122 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2123 %vc = fcmp ueq <vscale x 8 x double> %splat, %va 2124 ret <vscale x 8 x i1> %vc 2125} 2126 2127define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2128; CHECK-LABEL: fcmp_ueq_vv_nxv8f64_nonans: 2129; CHECK: # %bb.0: 2130; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2131; CHECK-NEXT: vmfeq.vv v0, v8, v16 2132; CHECK-NEXT: ret 2133 %vc = fcmp ueq <vscale x 8 x double> %va, %vb 2134 ret <vscale x 8 x i1> %vc 2135} 2136 2137define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2138; CHECK-LABEL: fcmp_ueq_vf_nxv8f64_nonans: 2139; CHECK: # %bb.0: 2140; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2141; CHECK-NEXT: vmfeq.vf v0, v8, fa0 2142; CHECK-NEXT: ret 2143 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2144 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2145 %vc = fcmp ueq <vscale x 8 x double> %va, %splat 2146 ret <vscale x 8 x i1> %vc 2147} 2148 2149define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2150; CHECK-LABEL: fcmp_ugt_vv_nxv8f64: 2151; CHECK: # %bb.0: 2152; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2153; CHECK-NEXT: vmfle.vv v25, v8, v16 2154; CHECK-NEXT: vmnand.mm v0, v25, v25 2155; CHECK-NEXT: ret 2156 %vc = fcmp ugt <vscale x 8 x double> %va, %vb 2157 ret <vscale x 8 x i1> %vc 2158} 2159 2160define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2161; CHECK-LABEL: fcmp_ugt_vf_nxv8f64: 2162; CHECK: # %bb.0: 2163; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2164; CHECK-NEXT: vmfle.vf v25, v8, fa0 2165; CHECK-NEXT: vmnand.mm v0, v25, v25 2166; CHECK-NEXT: ret 2167 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2168 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2169 %vc = fcmp ugt <vscale x 8 x double> %va, %splat 2170 ret <vscale x 8 x i1> %vc 2171} 2172 2173define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2174; CHECK-LABEL: fcmp_ugt_fv_nxv8f64: 2175; CHECK: # %bb.0: 2176; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2177; CHECK-NEXT: vmfge.vf v25, v8, fa0 2178; CHECK-NEXT: vmnand.mm v0, v25, v25 2179; CHECK-NEXT: ret 2180 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2181 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2182 %vc = fcmp ugt <vscale x 8 x double> %splat, %va 2183 ret <vscale x 8 x i1> %vc 2184} 2185 2186define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2187; CHECK-LABEL: fcmp_ugt_vv_nxv8f64_nonans: 2188; CHECK: # %bb.0: 2189; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2190; CHECK-NEXT: vmflt.vv v0, v16, v8 2191; CHECK-NEXT: ret 2192 %vc = fcmp ugt <vscale x 8 x double> %va, %vb 2193 ret <vscale x 8 x i1> %vc 2194} 2195 2196define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2197; CHECK-LABEL: fcmp_ugt_vf_nxv8f64_nonans: 2198; CHECK: # %bb.0: 2199; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2200; CHECK-NEXT: vmfgt.vf v0, v8, fa0 2201; CHECK-NEXT: ret 2202 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2203 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2204 %vc = fcmp ugt <vscale x 8 x double> %va, %splat 2205 ret <vscale x 8 x i1> %vc 2206} 2207 2208define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2209; CHECK-LABEL: fcmp_uge_vv_nxv8f64: 2210; CHECK: # %bb.0: 2211; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2212; CHECK-NEXT: vmflt.vv v25, v8, v16 2213; CHECK-NEXT: vmnand.mm v0, v25, v25 2214; CHECK-NEXT: ret 2215 %vc = fcmp uge <vscale x 8 x double> %va, %vb 2216 ret <vscale x 8 x i1> %vc 2217} 2218 2219define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2220; CHECK-LABEL: fcmp_uge_vf_nxv8f64: 2221; CHECK: # %bb.0: 2222; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2223; CHECK-NEXT: vmflt.vf v25, v8, fa0 2224; CHECK-NEXT: vmnand.mm v0, v25, v25 2225; CHECK-NEXT: ret 2226 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2227 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2228 %vc = fcmp uge <vscale x 8 x double> %va, %splat 2229 ret <vscale x 8 x i1> %vc 2230} 2231 2232define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2233; CHECK-LABEL: fcmp_uge_fv_nxv8f64: 2234; CHECK: # %bb.0: 2235; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2236; CHECK-NEXT: vmfgt.vf v25, v8, fa0 2237; CHECK-NEXT: vmnand.mm v0, v25, v25 2238; CHECK-NEXT: ret 2239 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2240 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2241 %vc = fcmp uge <vscale x 8 x double> %splat, %va 2242 ret <vscale x 8 x i1> %vc 2243} 2244 2245define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2246; CHECK-LABEL: fcmp_uge_vv_nxv8f64_nonans: 2247; CHECK: # %bb.0: 2248; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2249; CHECK-NEXT: vmfle.vv v0, v16, v8 2250; CHECK-NEXT: ret 2251 %vc = fcmp uge <vscale x 8 x double> %va, %vb 2252 ret <vscale x 8 x i1> %vc 2253} 2254 2255define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2256; CHECK-LABEL: fcmp_uge_vf_nxv8f64_nonans: 2257; CHECK: # %bb.0: 2258; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2259; CHECK-NEXT: vmfge.vf v0, v8, fa0 2260; CHECK-NEXT: ret 2261 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2262 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2263 %vc = fcmp uge <vscale x 8 x double> %va, %splat 2264 ret <vscale x 8 x i1> %vc 2265} 2266 2267define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2268; CHECK-LABEL: fcmp_ult_vv_nxv8f64: 2269; CHECK: # %bb.0: 2270; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2271; CHECK-NEXT: vmfle.vv v25, v16, v8 2272; CHECK-NEXT: vmnand.mm v0, v25, v25 2273; CHECK-NEXT: ret 2274 %vc = fcmp ult <vscale x 8 x double> %va, %vb 2275 ret <vscale x 8 x i1> %vc 2276} 2277 2278define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2279; CHECK-LABEL: fcmp_ult_vf_nxv8f64: 2280; CHECK: # %bb.0: 2281; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2282; CHECK-NEXT: vmfge.vf v25, v8, fa0 2283; CHECK-NEXT: vmnand.mm v0, v25, v25 2284; CHECK-NEXT: ret 2285 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2286 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2287 %vc = fcmp ult <vscale x 8 x double> %va, %splat 2288 ret <vscale x 8 x i1> %vc 2289} 2290 2291define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2292; CHECK-LABEL: fcmp_ult_fv_nxv8f64: 2293; CHECK: # %bb.0: 2294; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2295; CHECK-NEXT: vmfle.vf v25, v8, fa0 2296; CHECK-NEXT: vmnand.mm v0, v25, v25 2297; CHECK-NEXT: ret 2298 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2299 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2300 %vc = fcmp ult <vscale x 8 x double> %splat, %va 2301 ret <vscale x 8 x i1> %vc 2302} 2303 2304define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2305; CHECK-LABEL: fcmp_ult_vv_nxv8f64_nonans: 2306; CHECK: # %bb.0: 2307; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2308; CHECK-NEXT: vmflt.vv v0, v8, v16 2309; CHECK-NEXT: ret 2310 %vc = fcmp ult <vscale x 8 x double> %va, %vb 2311 ret <vscale x 8 x i1> %vc 2312} 2313 2314define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2315; CHECK-LABEL: fcmp_ult_vf_nxv8f64_nonans: 2316; CHECK: # %bb.0: 2317; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2318; CHECK-NEXT: vmflt.vf v0, v8, fa0 2319; CHECK-NEXT: ret 2320 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2321 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2322 %vc = fcmp ult <vscale x 8 x double> %va, %splat 2323 ret <vscale x 8 x i1> %vc 2324} 2325 2326define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2327; CHECK-LABEL: fcmp_ule_vv_nxv8f64: 2328; CHECK: # %bb.0: 2329; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2330; CHECK-NEXT: vmflt.vv v25, v16, v8 2331; CHECK-NEXT: vmnand.mm v0, v25, v25 2332; CHECK-NEXT: ret 2333 %vc = fcmp ule <vscale x 8 x double> %va, %vb 2334 ret <vscale x 8 x i1> %vc 2335} 2336 2337define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2338; CHECK-LABEL: fcmp_ule_vf_nxv8f64: 2339; CHECK: # %bb.0: 2340; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2341; CHECK-NEXT: vmfgt.vf v25, v8, fa0 2342; CHECK-NEXT: vmnand.mm v0, v25, v25 2343; CHECK-NEXT: ret 2344 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2345 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2346 %vc = fcmp ule <vscale x 8 x double> %va, %splat 2347 ret <vscale x 8 x i1> %vc 2348} 2349 2350define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2351; CHECK-LABEL: fcmp_ule_fv_nxv8f64: 2352; CHECK: # %bb.0: 2353; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2354; CHECK-NEXT: vmflt.vf v25, v8, fa0 2355; CHECK-NEXT: vmnand.mm v0, v25, v25 2356; CHECK-NEXT: ret 2357 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2358 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2359 %vc = fcmp ule <vscale x 8 x double> %splat, %va 2360 ret <vscale x 8 x i1> %vc 2361} 2362 2363define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2364; CHECK-LABEL: fcmp_ule_vv_nxv8f64_nonans: 2365; CHECK: # %bb.0: 2366; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2367; CHECK-NEXT: vmfle.vv v0, v8, v16 2368; CHECK-NEXT: ret 2369 %vc = fcmp ule <vscale x 8 x double> %va, %vb 2370 ret <vscale x 8 x i1> %vc 2371} 2372 2373define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2374; CHECK-LABEL: fcmp_ule_vf_nxv8f64_nonans: 2375; CHECK: # %bb.0: 2376; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2377; CHECK-NEXT: vmfle.vf v0, v8, fa0 2378; CHECK-NEXT: ret 2379 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2380 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2381 %vc = fcmp ule <vscale x 8 x double> %va, %splat 2382 ret <vscale x 8 x i1> %vc 2383} 2384 2385define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2386; CHECK-LABEL: fcmp_une_vv_nxv8f64: 2387; CHECK: # %bb.0: 2388; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2389; CHECK-NEXT: vmfne.vv v0, v8, v16 2390; CHECK-NEXT: ret 2391 %vc = fcmp une <vscale x 8 x double> %va, %vb 2392 ret <vscale x 8 x i1> %vc 2393} 2394 2395define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2396; CHECK-LABEL: fcmp_une_vf_nxv8f64: 2397; CHECK: # %bb.0: 2398; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2399; CHECK-NEXT: vmfne.vf v0, v8, fa0 2400; CHECK-NEXT: ret 2401 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2402 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2403 %vc = fcmp une <vscale x 8 x double> %va, %splat 2404 ret <vscale x 8 x i1> %vc 2405} 2406 2407define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2408; CHECK-LABEL: fcmp_une_fv_nxv8f64: 2409; CHECK: # %bb.0: 2410; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2411; CHECK-NEXT: vmfne.vf v0, v8, fa0 2412; CHECK-NEXT: ret 2413 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2414 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2415 %vc = fcmp une <vscale x 8 x double> %splat, %va 2416 ret <vscale x 8 x i1> %vc 2417} 2418 2419define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2420; CHECK-LABEL: fcmp_une_vv_nxv8f64_nonans: 2421; CHECK: # %bb.0: 2422; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2423; CHECK-NEXT: vmfne.vv v0, v8, v16 2424; CHECK-NEXT: ret 2425 %vc = fcmp une <vscale x 8 x double> %va, %vb 2426 ret <vscale x 8 x i1> %vc 2427} 2428 2429define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2430; CHECK-LABEL: fcmp_une_vf_nxv8f64_nonans: 2431; CHECK: # %bb.0: 2432; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2433; CHECK-NEXT: vmfne.vf v0, v8, fa0 2434; CHECK-NEXT: ret 2435 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2436 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2437 %vc = fcmp une <vscale x 8 x double> %va, %splat 2438 ret <vscale x 8 x i1> %vc 2439} 2440 2441define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) { 2442; CHECK-LABEL: fcmp_uno_vv_nxv8f64: 2443; CHECK: # %bb.0: 2444; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2445; CHECK-NEXT: vmfne.vv v25, v16, v16 2446; CHECK-NEXT: vmfne.vv v26, v8, v8 2447; CHECK-NEXT: vmor.mm v0, v26, v25 2448; CHECK-NEXT: ret 2449 %vc = fcmp uno <vscale x 8 x double> %va, %vb 2450 ret <vscale x 8 x i1> %vc 2451} 2452 2453define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) { 2454; CHECK-LABEL: fcmp_uno_vf_nxv8f64: 2455; CHECK: # %bb.0: 2456; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2457; CHECK-NEXT: vfmv.v.f v16, fa0 2458; CHECK-NEXT: vmfne.vf v25, v16, fa0 2459; CHECK-NEXT: vmfne.vv v26, v8, v8 2460; CHECK-NEXT: vmor.mm v0, v26, v25 2461; CHECK-NEXT: ret 2462 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2463 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2464 %vc = fcmp uno <vscale x 8 x double> %va, %splat 2465 ret <vscale x 8 x i1> %vc 2466} 2467 2468define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) { 2469; CHECK-LABEL: fcmp_uno_fv_nxv8f64: 2470; CHECK: # %bb.0: 2471; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2472; CHECK-NEXT: vfmv.v.f v16, fa0 2473; CHECK-NEXT: vmfne.vf v25, v16, fa0 2474; CHECK-NEXT: vmfne.vv v26, v8, v8 2475; CHECK-NEXT: vmor.mm v0, v25, v26 2476; CHECK-NEXT: ret 2477 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2478 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2479 %vc = fcmp uno <vscale x 8 x double> %splat, %va 2480 ret <vscale x 8 x i1> %vc 2481} 2482 2483define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 { 2484; CHECK-LABEL: fcmp_uno_vv_nxv8f64_nonans: 2485; CHECK: # %bb.0: 2486; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2487; CHECK-NEXT: vmfne.vv v25, v16, v16 2488; CHECK-NEXT: vmfne.vv v26, v8, v8 2489; CHECK-NEXT: vmor.mm v0, v26, v25 2490; CHECK-NEXT: ret 2491 %vc = fcmp uno <vscale x 8 x double> %va, %vb 2492 ret <vscale x 8 x i1> %vc 2493} 2494 2495define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 { 2496; CHECK-LABEL: fcmp_uno_vf_nxv8f64_nonans: 2497; CHECK: # %bb.0: 2498; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2499; CHECK-NEXT: vfmv.v.f v16, fa0 2500; CHECK-NEXT: vmfne.vf v25, v16, fa0 2501; CHECK-NEXT: vmfne.vv v26, v8, v8 2502; CHECK-NEXT: vmor.mm v0, v26, v25 2503; CHECK-NEXT: ret 2504 %head = insertelement <vscale x 8 x double> undef, double %b, i32 0 2505 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer 2506 %vc = fcmp uno <vscale x 8 x double> %va, %splat 2507 ret <vscale x 8 x i1> %vc 2508} 2509 2510; This fcmp/setcc is split and so we find a scalable-vector mask CONCAT_VECTOR 2511; node. Ensure we correctly (custom) lower this. 2512define <vscale x 16 x i1> @fcmp_oeq_vf_nx16f64(<vscale x 16 x double> %va) { 2513; CHECK-LABEL: fcmp_oeq_vf_nx16f64: 2514; CHECK: # %bb.0: 2515; CHECK-NEXT: fcvt.d.w ft0, zero 2516; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 2517; CHECK-NEXT: vmfeq.vf v25, v16, ft0 2518; CHECK-NEXT: vmfeq.vf v0, v8, ft0 2519; CHECK-NEXT: csrr a0, vlenb 2520; CHECK-NEXT: srli a0, a0, 3 2521; CHECK-NEXT: add a1, a0, a0 2522; CHECK-NEXT: vsetvli zero, a1, e8, mf4, tu, mu 2523; CHECK-NEXT: vslideup.vx v0, v25, a0 2524; CHECK-NEXT: ret 2525 %vc = fcmp oeq <vscale x 16 x double> %va, zeroinitializer 2526 ret <vscale x 16 x i1> %vc 2527} 2528 2529attributes #0 = { "no-nans-fp-math"="true" } 2530