diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -2258,10 +2258,10 @@ defm _VI : VPseudoBinaryRoundingMode; } -multiclass VPseudoVALU_MM { +multiclass VPseudoVALU_MM { foreach m = MxList in { defvar mx = m.MX; - let VLMul = m.value in { + let VLMul = m.value, isCommutable = Commutable in { def "_MM_" # mx : VPseudoBinaryNoMask, SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mx>; } @@ -2379,7 +2379,9 @@ // vector register is v0. // For vadc and vsbc, CarryIn == 1 and CarryOut == 0 multiclass VPseudoBinaryV_VM { + string Constraint = "", + bit Commutable = 0> { + let isCommutable = Commutable in def "_VV" # !if(CarryIn, "M", "") # "_" # m.MX : VPseudoBinaryCarryIn { foreach m = MxList in { defvar mx = m.MX; - defm "" : VPseudoBinaryV_VM, + defm "" : VPseudoBinaryV_VM, SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, forceMasked=1, forceMergeOpRead=true>; defm "" : VPseudoBinaryV_XM, @@ -3078,7 +3081,8 @@ multiclass VPseudoVCALUM_V_X_I { foreach m = MxList in { defvar mx = m.MX; - defm "" : VPseudoBinaryV_VM, + defm "" : VPseudoBinaryV_VM, SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, forceMergeOpRead=true>; defm "" : VPseudoBinaryV_XM, @@ -6611,14 +6615,14 @@ // 15.1 Vector Mask-Register Logical Instructions //===----------------------------------------------------------------------===// -defm PseudoVMAND: VPseudoVALU_MM; -defm PseudoVMNAND: VPseudoVALU_MM; +defm PseudoVMAND: VPseudoVALU_MM; +defm PseudoVMNAND: VPseudoVALU_MM; defm PseudoVMANDN: VPseudoVALU_MM; -defm PseudoVMXOR: VPseudoVALU_MM; -defm PseudoVMOR: VPseudoVALU_MM; -defm PseudoVMNOR: VPseudoVALU_MM; +defm PseudoVMXOR: VPseudoVALU_MM; +defm PseudoVMOR: VPseudoVALU_MM; +defm PseudoVMNOR: VPseudoVALU_MM; defm PseudoVMORN: VPseudoVALU_MM; -defm PseudoVMXNOR: VPseudoVALU_MM; +defm PseudoVMXNOR: VPseudoVALU_MM; // Pseudo instructions defm PseudoVMCLR : VPseudoNullaryPseudoM<"VMXOR">; diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfcmp-constrained-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfcmp-constrained-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfcmp-constrained-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfcmp-constrained-sdnode.ll @@ -223,15 +223,13 @@ ; CHECK-LABEL: fcmp_one_vv_v1f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -242,15 +240,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x half> poison, half %b, i32 0 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer @@ -263,15 +259,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x half> poison, half %b, i32 0 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer @@ -325,15 +319,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v1f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -344,15 +336,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x half> poison, half %b, i32 0 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer @@ -365,15 +355,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x half> poison, half %b, i32 0 %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer @@ -868,15 +856,13 @@ ; CHECK-LABEL: fcmp_one_vv_v2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -887,15 +873,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x half> poison, half %b, i32 0 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer @@ -908,15 +892,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x half> poison, half %b, i32 0 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer @@ -970,15 +952,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -989,15 +969,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x half> poison, half %b, i32 0 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer @@ -1010,15 +988,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x half> poison, half %b, i32 0 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer @@ -1513,15 +1489,13 @@ ; CHECK-LABEL: fcmp_one_vv_v4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -1532,15 +1506,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x half> poison, half %b, i32 0 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer @@ -1553,15 +1525,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x half> poison, half %b, i32 0 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer @@ -1615,15 +1585,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -1634,15 +1602,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x half> poison, half %b, i32 0 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer @@ -1655,15 +1621,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x half> poison, half %b, i32 0 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer @@ -2158,15 +2122,13 @@ ; CHECK-LABEL: fcmp_one_vv_v8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -2177,15 +2139,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <8 x half> poison, half %b, i32 0 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer @@ -2198,15 +2158,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <8 x half> poison, half %b, i32 0 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer @@ -2260,15 +2218,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -2279,15 +2235,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <8 x half> poison, half %b, i32 0 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer @@ -2300,15 +2254,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <8 x half> poison, half %b, i32 0 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer @@ -2827,15 +2779,14 @@ ; CHECK-LABEL: fcmp_one_vv_v16f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <16 x i1> %1 @@ -2847,14 +2798,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <16 x half> poison, half %b, i32 0 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer @@ -2868,14 +2818,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <16 x half> poison, half %b, i32 0 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer @@ -2929,15 +2878,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_v16f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <16 x i1> %1 @@ -2949,14 +2897,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <16 x half> poison, half %b, i32 0 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer @@ -2970,14 +2917,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <16 x half> poison, half %b, i32 0 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer @@ -3524,15 +3470,14 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: li a0, 32 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <32 x i1> %1 @@ -3545,14 +3490,13 @@ ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <32 x half> poison, half %b, i32 0 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer @@ -3567,14 +3511,13 @@ ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <32 x half> poison, half %b, i32 0 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer @@ -3632,15 +3575,14 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: li a0, 32 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <32 x i1> @llvm.experimental.constrained.fcmp.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <32 x i1> %1 @@ -3653,14 +3595,13 @@ ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <32 x half> poison, half %b, i32 0 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer @@ -3675,14 +3616,13 @@ ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <32 x half> poison, half %b, i32 0 %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer @@ -4207,15 +4147,13 @@ ; CHECK-LABEL: fcmp_one_vv_v1f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -4226,15 +4164,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x float> poison, float %b, i32 0 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer @@ -4247,15 +4183,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x float> poison, float %b, i32 0 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer @@ -4309,15 +4243,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v1f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -4328,15 +4260,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x float> poison, float %b, i32 0 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer @@ -4349,15 +4279,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x float> poison, float %b, i32 0 %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer @@ -4852,15 +4780,13 @@ ; CHECK-LABEL: fcmp_one_vv_v2f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -4871,15 +4797,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x float> poison, float %b, i32 0 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer @@ -4892,15 +4816,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x float> poison, float %b, i32 0 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer @@ -4954,15 +4876,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v2f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -4973,15 +4893,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x float> poison, float %b, i32 0 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer @@ -4994,15 +4912,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x float> poison, float %b, i32 0 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer @@ -5497,15 +5413,13 @@ ; CHECK-LABEL: fcmp_one_vv_v4f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -5516,15 +5430,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x float> poison, float %b, i32 0 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer @@ -5537,15 +5449,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x float> poison, float %b, i32 0 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer @@ -5599,15 +5509,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v4f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -5618,15 +5526,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x float> poison, float %b, i32 0 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer @@ -5639,15 +5545,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <4 x float> poison, float %b, i32 0 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer @@ -6166,15 +6070,14 @@ ; CHECK-LABEL: fcmp_one_vv_v8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -6186,14 +6089,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <8 x float> poison, float %b, i32 0 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer @@ -6207,14 +6109,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <8 x float> poison, float %b, i32 0 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer @@ -6268,15 +6169,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_v8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -6288,14 +6188,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <8 x float> poison, float %b, i32 0 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer @@ -6309,14 +6208,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <8 x float> poison, float %b, i32 0 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer @@ -6847,15 +6745,14 @@ ; CHECK-LABEL: fcmp_one_vv_v16f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <16 x i1> %1 @@ -6867,14 +6764,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <16 x float> poison, float %b, i32 0 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer @@ -6888,14 +6784,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <16 x float> poison, float %b, i32 0 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer @@ -6949,15 +6844,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_v16f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <16 x i1> %1 @@ -6969,14 +6863,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <16 x float> poison, float %b, i32 0 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer @@ -6990,14 +6883,13 @@ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <16 x float> poison, float %b, i32 0 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer @@ -7504,15 +7396,13 @@ ; CHECK-LABEL: fcmp_one_vv_v1f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -7523,15 +7413,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x double> poison, double %b, i32 0 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer @@ -7544,15 +7432,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x double> poison, double %b, i32 0 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer @@ -7606,15 +7492,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v1f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <1 x i1> %1 @@ -7625,15 +7509,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x double> poison, double %b, i32 0 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer @@ -7646,15 +7528,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <1 x double> poison, double %b, i32 0 %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer @@ -8149,15 +8029,13 @@ ; CHECK-LABEL: fcmp_one_vv_v2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -8168,15 +8046,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x double> poison, double %b, i32 0 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer @@ -8189,15 +8065,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x double> poison, double %b, i32 0 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer @@ -8251,15 +8125,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_v2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <2 x i1> %1 @@ -8270,15 +8142,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x double> poison, double %b, i32 0 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer @@ -8291,15 +8161,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement <2 x double> poison, double %b, i32 0 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer @@ -8818,15 +8686,14 @@ ; CHECK-LABEL: fcmp_one_vv_v4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -8838,14 +8705,13 @@ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <4 x double> poison, double %b, i32 0 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer @@ -8859,14 +8725,13 @@ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <4 x double> poison, double %b, i32 0 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer @@ -8920,15 +8785,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_v4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <4 x i1> %1 @@ -8940,14 +8804,13 @@ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <4 x double> poison, double %b, i32 0 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer @@ -8961,14 +8824,13 @@ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement <4 x double> poison, double %b, i32 0 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer @@ -9499,15 +9361,14 @@ ; CHECK-LABEL: fcmp_one_vv_v8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -9519,14 +9380,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <8 x double> poison, double %b, i32 0 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer @@ -9540,14 +9400,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <8 x double> poison, double %b, i32 0 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer @@ -9601,15 +9460,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_v8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret <8 x i1> %1 @@ -9621,14 +9479,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <8 x double> poison, double %b, i32 0 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer @@ -9642,14 +9499,13 @@ ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement <8 x double> poison, double %b, i32 0 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcmp-constrained-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vfcmp-constrained-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfcmp-constrained-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfcmp-constrained-sdnode.ll @@ -223,15 +223,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv1f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -242,15 +240,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -263,15 +259,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -325,15 +319,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv1f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -344,15 +336,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -365,15 +355,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -868,15 +856,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -887,15 +873,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -908,15 +892,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -970,15 +952,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -989,15 +969,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1010,15 +988,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1513,15 +1489,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -1532,15 +1506,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1553,15 +1525,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1615,15 +1585,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -1634,15 +1602,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1655,15 +1621,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2182,15 +2146,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -2202,14 +2165,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2223,14 +2185,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2284,15 +2245,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -2304,14 +2264,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2325,14 +2284,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2863,15 +2821,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv16f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv16f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -2883,14 +2840,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2904,14 +2860,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2965,15 +2920,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv16f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv16f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -2985,14 +2939,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3006,14 +2959,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3544,15 +3496,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv32f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmfeq.vv v25, v16, v16 -; CHECK-NEXT: vmfeq.vv v26, v8, v8 -; CHECK-NEXT: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv32f16( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -3564,14 +3515,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3585,14 +3535,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3646,15 +3595,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv32f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmfeq.vv v25, v16, v16 -; CHECK-NEXT: vmfeq.vv v26, v8, v8 -; CHECK-NEXT: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv32f16( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -3666,14 +3614,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3687,14 +3634,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, half %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4201,15 +4147,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv1f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f32( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -4220,15 +4164,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4241,15 +4183,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4303,15 +4243,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv1f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv1r.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv1r.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f32( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -4322,15 +4260,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4343,15 +4279,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv1r.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv1r.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4846,15 +4780,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv2f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f32( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -4865,15 +4797,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4886,15 +4816,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4948,15 +4876,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv2f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f32( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -4967,15 +4893,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -4988,15 +4912,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -5515,15 +5437,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv4f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f32( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -5535,14 +5456,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -5556,14 +5476,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -5617,15 +5536,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv4f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f32( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -5637,14 +5555,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -5658,14 +5575,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6196,15 +6112,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f32( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -6216,14 +6131,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6237,14 +6151,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6298,15 +6211,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f32( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -6318,14 +6230,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6339,14 +6250,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6877,15 +6787,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv16f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmfeq.vv v25, v16, v16 -; CHECK-NEXT: vmfeq.vv v26, v8, v8 -; CHECK-NEXT: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv16f32( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -6897,14 +6806,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6918,14 +6826,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -6979,15 +6886,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv16f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmfeq.vv v25, v16, v16 -; CHECK-NEXT: vmfeq.vv v26, v8, v8 -; CHECK-NEXT: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv16f32( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -6999,14 +6905,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -7020,14 +6925,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, float %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -7534,15 +7438,13 @@ ; CHECK-LABEL: fcmp_one_vv_nxv1f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f64( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -7553,15 +7455,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -7574,15 +7474,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -7636,15 +7534,13 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv1f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmfeq.vv v11, v9, v9 -; CHECK-NEXT: vmfeq.vv v12, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 -; CHECK-NEXT: vmv.v.v v0, v10 +; CHECK-NEXT: vmfeq.vv v10, v9, v9 +; CHECK-NEXT: vmfeq.vv v11, v8, v8 +; CHECK-NEXT: vmand.mm v0, v11, v10 +; CHECK-NEXT: vmv.v.v v10, v0 ; CHECK-NEXT: vmflt.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv.v.v v0, v11 -; CHECK-NEXT: vmflt.vv v11, v9, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vv v0, v9, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v10 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv1f64( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -7655,15 +7551,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v11, v10 -; CHECK-NEXT: vmand.mm v10, v10, v11 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v10, v9 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmflt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmfgt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -7676,15 +7570,13 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu ; CHECK-NEXT: vfmv.v.f v9, fa0 -; CHECK-NEXT: vmfeq.vf v10, v9, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v9, v10, v11 -; CHECK-NEXT: vmand.mm v10, v11, v10 -; CHECK-NEXT: vmv.v.v v0, v9 +; CHECK-NEXT: vmfeq.vf v9, v9, fa0 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v0, v9, v10 +; CHECK-NEXT: vmv.v.v v9, v0 ; CHECK-NEXT: vmfgt.vf v9, v8, fa0, v0.t -; CHECK-NEXT: vmv.v.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v10, v9 +; CHECK-NEXT: vmflt.vf v0, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v0, v9 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8203,15 +8095,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f64( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -8223,14 +8114,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8244,14 +8134,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8305,15 +8194,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmfeq.vv v13, v10, v10 -; CHECK-NEXT: vmfeq.vv v14, v8, v8 -; CHECK-NEXT: vmand.mm v12, v14, v13 -; CHECK-NEXT: vmand.mm v13, v13, v14 +; CHECK-NEXT: vmfeq.vv v12, v10, v10 +; CHECK-NEXT: vmfeq.vv v13, v8, v8 +; CHECK-NEXT: vmand.mm v12, v13, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vv v13, v10, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vv v13, v8, v10, v0.t +; CHECK-NEXT: vmflt.vv v12, v10, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv2f64( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -8325,14 +8213,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v11, v12 -; CHECK-NEXT: vmand.mm v11, v12, v11 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v10, v12 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8346,14 +8233,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu ; CHECK-NEXT: vfmv.v.f v10, fa0 ; CHECK-NEXT: vmfeq.vf v12, v10, fa0 -; CHECK-NEXT: vmfeq.vv v11, v8, v8 -; CHECK-NEXT: vmand.mm v10, v12, v11 -; CHECK-NEXT: vmand.mm v11, v11, v12 +; CHECK-NEXT: vmfeq.vv v10, v8, v8 +; CHECK-NEXT: vmand.mm v10, v12, v10 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vmv1r.v v0, v10 -; CHECK-NEXT: vmfgt.vf v10, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v11 -; CHECK-NEXT: vmflt.vf v11, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v11, v10 +; CHECK-NEXT: vmfgt.vf v11, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v10, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v10, v11 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8884,15 +8770,14 @@ ; CHECK-LABEL: fcmp_one_vv_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f64( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -8904,14 +8789,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8925,14 +8809,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -8986,15 +8869,14 @@ ; CHECK-LABEL: fcmp_ueq_vv_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmfeq.vv v17, v12, v12 -; CHECK-NEXT: vmfeq.vv v18, v8, v8 -; CHECK-NEXT: vmand.mm v16, v18, v17 -; CHECK-NEXT: vmand.mm v17, v17, v18 +; CHECK-NEXT: vmfeq.vv v16, v12, v12 +; CHECK-NEXT: vmfeq.vv v17, v8, v8 +; CHECK-NEXT: vmand.mm v16, v17, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vv v17, v12, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vv v17, v8, v12, v0.t +; CHECK-NEXT: vmflt.vv v16, v12, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv4f64( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -9006,14 +8888,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v13, v16 -; CHECK-NEXT: vmand.mm v13, v16, v13 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v12, v16 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -9027,14 +8908,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu ; CHECK-NEXT: vfmv.v.f v12, fa0 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0 -; CHECK-NEXT: vmfeq.vv v13, v8, v8 -; CHECK-NEXT: vmand.mm v12, v16, v13 -; CHECK-NEXT: vmand.mm v13, v13, v16 +; CHECK-NEXT: vmfeq.vv v12, v8, v8 +; CHECK-NEXT: vmand.mm v12, v16, v12 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vmv1r.v v0, v12 -; CHECK-NEXT: vmfgt.vf v12, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v13 -; CHECK-NEXT: vmflt.vf v13, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v13, v12 +; CHECK-NEXT: vmfgt.vf v13, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v12, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v12, v13 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -9565,15 +9445,14 @@ ; CHECK-LABEL: fcmp_one_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: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f64( %va, %vb, metadata !"one", metadata !"fpexcept.strict") strictfp ret %1 @@ -9585,14 +9464,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -9606,14 +9484,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -9667,15 +9544,14 @@ ; CHECK-LABEL: fcmp_ueq_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: vmand.mm v24, v26, v25 -; CHECK-NEXT: vmand.mm v25, v25, v26 +; CHECK-NEXT: vmfeq.vv v24, v16, v16 +; CHECK-NEXT: vmfeq.vv v25, v8, v8 +; CHECK-NEXT: vmand.mm v24, v25, v24 +; CHECK-NEXT: vmv1r.v v25, v24 ; CHECK-NEXT: vmv1r.v v0, v24 -; CHECK-NEXT: vmflt.vv v24, v8, v16, v0.t -; CHECK-NEXT: vmv1r.v v0, v25 -; CHECK-NEXT: vmflt.vv v25, v16, v8, v0.t -; CHECK-NEXT: vmnor.mm v0, v25, v24 +; CHECK-NEXT: vmflt.vv v25, v8, v16, v0.t +; CHECK-NEXT: vmflt.vv v24, v16, v8, v0.t +; CHECK-NEXT: vmnor.mm v0, v24, v25 ; CHECK-NEXT: ret %1 = call @llvm.experimental.constrained.fcmp.nxv8f64( %va, %vb, metadata !"ueq", metadata !"fpexcept.strict") strictfp ret %1 @@ -9687,14 +9563,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v17, v24 -; CHECK-NEXT: vmand.mm v17, v24, v17 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v16, v24 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -9708,14 +9583,13 @@ ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu ; CHECK-NEXT: vfmv.v.f v16, fa0 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0 -; CHECK-NEXT: vmfeq.vv v17, v8, v8 -; CHECK-NEXT: vmand.mm v16, v24, v17 -; CHECK-NEXT: vmand.mm v17, v17, v24 +; CHECK-NEXT: vmfeq.vv v16, v8, v8 +; CHECK-NEXT: vmand.mm v16, v24, v16 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vmv1r.v v0, v16 -; CHECK-NEXT: vmfgt.vf v16, v8, fa0, v0.t -; CHECK-NEXT: vmv1r.v v0, v17 -; CHECK-NEXT: vmflt.vf v17, v8, fa0, v0.t -; CHECK-NEXT: vmnor.mm v0, v17, v16 +; CHECK-NEXT: vmfgt.vf v17, v8, fa0, v0.t +; CHECK-NEXT: vmflt.vf v16, v8, fa0, v0.t +; CHECK-NEXT: vmnor.mm v0, v16, v17 ; CHECK-NEXT: ret %head = insertelement poison, double %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer