; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv64 -mattr=+d,+experimental-zfh,+experimental-v -target-abi=lp64d \ ; RUN: -verify-machineinstrs < %s | FileCheck %s ; FIXME: The scalar/vector operations ('fv' tests) should swap operands and ; condition codes accordingly in order to generate a 'vf' instruction. define @fcmp_oeq_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_oeq_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_oeq_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %splat, %va ret %vc } define @fcmp_oeq_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_ogt_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_ogt_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ogt_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %splat, %va ret %vc } define @fcmp_ogt_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_oge_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_oge_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_oge_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_oge_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_oge_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %splat, %va ret %vc } define @fcmp_oge_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oge_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_oge_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_olt_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_olt_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_olt_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_olt_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_olt_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %splat, %va ret %vc } define @fcmp_olt_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_olt_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_olt_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_ole_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ole_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ole_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_ole_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ole_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %splat, %va ret %vc } define @fcmp_ole_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ole_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ole_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_one_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_one_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v10 ; CHECK-NEXT: vmflt.vv v26, v10, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_one_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_one_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_one_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %splat, %va ret %vc } define @fcmp_one_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_one_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_one_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_ord_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ord_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v10, v10 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ord_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfeq.vf v25, v26, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ord_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ord_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfeq.vf v25, v26, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %splat, %va ret %vc } define @fcmp_ord_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ord_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v10, v10 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ord_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfeq.vf v25, v26, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ueq_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v10 ; CHECK-NEXT: vmflt.vv v26, v10, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ueq_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ueq_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %splat, %va ret %vc } define @fcmp_ueq_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ugt_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v25, v8, v10 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_ugt_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ugt_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %splat, %va ret %vc } define @fcmp_ugt_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_uge_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_uge_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v10 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_uge_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_uge_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_uge_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %splat, %va ret %vc } define @fcmp_uge_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uge_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v10, v8 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_uge_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_ult_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ult_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v25, v10, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ult_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ult_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ult_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %splat, %va ret %vc } define @fcmp_ult_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ult_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ult_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ule_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_ule_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vv v25, v10, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ule_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_ule_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_ule_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %splat, %va ret %vc } define @fcmp_ule_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ule_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_ule_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_une_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_une_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_une_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_une_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_une_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %splat, %va ret %vc } define @fcmp_une_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_une_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v10 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_une_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_uno_vv_nxv8f16( %va, %vb) { ; CHECK-LABEL: fcmp_uno_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vv v25, v10, v10 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_uno_vf_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfne.vf v25, v26, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } define @fcmp_uno_fv_nxv8f16( %va, half %b) { ; CHECK-LABEL: fcmp_uno_fv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfne.vf v25, v26, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %splat, %va ret %vc } define @fcmp_uno_vv_nxv8f16_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uno_vv_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vmfne.vv v25, v10, v10 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f16_nonans( %va, half %b) #0 { ; CHECK-LABEL: fcmp_uno_vf_nxv8f16_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.v.f v26, fa0 ; CHECK-NEXT: vmfne.vf v25, v26, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, half %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } define @fcmp_oeq_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_oeq_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_oeq_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %splat, %va ret %vc } define @fcmp_oeq_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_ogt_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_ogt_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ogt_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %splat, %va ret %vc } define @fcmp_ogt_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_oge_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_oge_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_oge_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_oge_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_oge_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %splat, %va ret %vc } define @fcmp_oge_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oge_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_oge_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_olt_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_olt_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_olt_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_olt_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_olt_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %splat, %va ret %vc } define @fcmp_olt_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_olt_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_olt_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_ole_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ole_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ole_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_ole_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ole_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %splat, %va ret %vc } define @fcmp_ole_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ole_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ole_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_one_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_one_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v12 ; CHECK-NEXT: vmflt.vv v26, v12, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_one_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_one_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_one_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %splat, %va ret %vc } define @fcmp_one_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_one_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_one_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_ord_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ord_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v12, v12 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ord_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfeq.vf v25, v28, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ord_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ord_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfeq.vf v25, v28, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %splat, %va ret %vc } define @fcmp_ord_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ord_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v12, v12 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ord_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfeq.vf v25, v28, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ueq_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v12 ; CHECK-NEXT: vmflt.vv v26, v12, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ueq_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ueq_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %splat, %va ret %vc } define @fcmp_ueq_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ugt_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v25, v8, v12 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_ugt_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ugt_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %splat, %va ret %vc } define @fcmp_ugt_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_uge_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_uge_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v12 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_uge_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_uge_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_uge_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %splat, %va ret %vc } define @fcmp_uge_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uge_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v12, v8 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_uge_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_ult_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ult_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v25, v12, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ult_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ult_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ult_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %splat, %va ret %vc } define @fcmp_ult_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ult_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ult_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ule_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_ule_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vv v25, v12, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ule_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_ule_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_ule_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %splat, %va ret %vc } define @fcmp_ule_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ule_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_ule_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_une_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_une_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_une_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_une_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_une_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %splat, %va ret %vc } define @fcmp_une_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_une_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v12 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_une_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_uno_vv_nxv8f32( %va, %vb) { ; CHECK-LABEL: fcmp_uno_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vv v25, v12, v12 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_uno_vf_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfne.vf v25, v28, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } define @fcmp_uno_fv_nxv8f32( %va, float %b) { ; CHECK-LABEL: fcmp_uno_fv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfne.vf v25, v28, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %splat, %va ret %vc } define @fcmp_uno_vv_nxv8f32_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uno_vv_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vmfne.vv v25, v12, v12 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f32_nonans( %va, float %b) #0 { ; CHECK-LABEL: fcmp_uno_vf_nxv8f32_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.v.f v28, fa0 ; CHECK-NEXT: vmfne.vf v25, v28, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, float %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } define @fcmp_oeq_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_oeq_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_oeq_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %splat, %va ret %vc } define @fcmp_oeq_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oeq_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp oeq %va, %vb ret %vc } define @fcmp_oeq_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_oeq_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oeq %va, %splat ret %vc } define @fcmp_ogt_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_ogt_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ogt_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %splat, %va ret %vc } define @fcmp_ogt_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ogt_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp ogt %va, %vb ret %vc } define @fcmp_ogt_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ogt_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ogt %va, %splat ret %vc } define @fcmp_oge_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_oge_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_oge_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_oge_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_oge_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %splat, %va ret %vc } define @fcmp_oge_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_oge_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp oge %va, %vb ret %vc } define @fcmp_oge_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_oge_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp oge %va, %splat ret %vc } define @fcmp_olt_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_olt_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_olt_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_olt_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_olt_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %splat, %va ret %vc } define @fcmp_olt_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_olt_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp olt %va, %vb ret %vc } define @fcmp_olt_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_olt_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp olt %va, %splat ret %vc } define @fcmp_ole_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ole_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ole_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_ole_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ole_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %splat, %va ret %vc } define @fcmp_ole_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ole_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp ole %va, %vb ret %vc } define @fcmp_ole_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ole_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ole %va, %splat ret %vc } define @fcmp_one_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_one_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v16 ; CHECK-NEXT: vmflt.vv v26, v16, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_one_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_one_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_one_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %splat, %va ret %vc } define @fcmp_one_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_one_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp one %va, %vb ret %vc } define @fcmp_one_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_one_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp one %va, %splat ret %vc } define @fcmp_ord_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ord_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v16, v16 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ord_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v25, v16, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ord_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ord_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v25, v16, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %splat, %va ret %vc } define @fcmp_ord_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ord_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vv v25, v16, v16 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ord %va, %vb ret %vc } define @fcmp_ord_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ord_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v25, v16, fa0 ; CHECK-NEXT: vmfeq.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmand.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ord %va, %splat ret %vc } define @fcmp_ueq_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v16 ; CHECK-NEXT: vmflt.vv v26, v16, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vmfgt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ueq_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ueq_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vmflt.vf v26, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmnor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %splat, %va ret %vc } define @fcmp_ueq_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ueq_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp ueq %va, %vb ret %vc } define @fcmp_ueq_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ueq_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfeq.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ueq %va, %splat ret %vc } define @fcmp_ugt_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v25, v8, v16 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_ugt_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ugt_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %splat, %va ret %vc } define @fcmp_ugt_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ugt_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp ugt %va, %vb ret %vc } define @fcmp_ugt_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ugt_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ugt %va, %splat ret %vc } define @fcmp_uge_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_uge_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v25, v8, v16 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_uge_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_uge_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_uge_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %splat, %va ret %vc } define @fcmp_uge_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uge_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v16, v8 ; CHECK-NEXT: ret %vc = fcmp uge %va, %vb ret %vc } define @fcmp_uge_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_uge_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uge %va, %splat ret %vc } define @fcmp_ult_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ult_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v25, v16, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ult_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfge.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ult_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ult_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %splat, %va ret %vc } define @fcmp_ult_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ult_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp ult %va, %vb ret %vc } define @fcmp_ult_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ult_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ult %va, %splat ret %vc } define @fcmp_ule_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_ule_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vv v25, v16, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ule_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfgt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_ule_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_ule_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmflt.vf v25, v8, fa0 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmset.m v26 ; CHECK-NEXT: vmxor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %splat, %va ret %vc } define @fcmp_ule_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_ule_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp ule %va, %vb ret %vc } define @fcmp_ule_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_ule_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfle.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp ule %va, %splat ret %vc } define @fcmp_une_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_une_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_une_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_une_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_une_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %splat, %va ret %vc } define @fcmp_une_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_une_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vv v0, v8, v16 ; CHECK-NEXT: ret %vc = fcmp une %va, %vb ret %vc } define @fcmp_une_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_une_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vf v0, v8, fa0 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp une %va, %splat ret %vc } define @fcmp_uno_vv_nxv8f64( %va, %vb) { ; CHECK-LABEL: fcmp_uno_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vv v25, v16, v16 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_uno_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfne.vf v25, v16, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } define @fcmp_uno_fv_nxv8f64( %va, double %b) { ; CHECK-LABEL: fcmp_uno_fv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfne.vf v25, v16, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v25, v26 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %splat, %va ret %vc } define @fcmp_uno_vv_nxv8f64_nonans( %va, %vb) #0 { ; CHECK-LABEL: fcmp_uno_vv_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vmfne.vv v25, v16, v16 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %vc = fcmp uno %va, %vb ret %vc } define @fcmp_uno_vf_nxv8f64_nonans( %va, double %b) #0 { ; CHECK-LABEL: fcmp_uno_vf_nxv8f64_nonans: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64,m8,ta,mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfne.vf v25, v16, fa0 ; CHECK-NEXT: vmfne.vv v26, v8, v8 ; CHECK-NEXT: vsetvli a0, zero, e8,m1,ta,mu ; CHECK-NEXT: vmor.mm v0, v26, v25 ; CHECK-NEXT: ret %head = insertelement undef, double %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = fcmp uno %va, %splat ret %vc } attributes #0 = { "no-nans-fp-math"="true" }