brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.7 KiB · 68b803f Raw
576 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d \7; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d \9; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVFHMIN10 11define <vscale x 1 x float> @vmfsac_vv_nxv1f32(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vmfsac_vv_nxv1f32:13; ZVFH:       # %bb.0:14; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9, v0.t16; ZVFH-NEXT:    vmv1r.v v8, v1017; ZVFH-NEXT:    ret18;19; ZVFHMIN-LABEL: vmfsac_vv_nxv1f32:20; ZVFHMIN:       # %bb.0:21; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma22; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t23; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t24; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma25; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v10, v0.t26; ZVFHMIN-NEXT:    ret27  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)28  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)29  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)30  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %bext, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)31  ret <vscale x 1 x float> %v32}33 34define <vscale x 1 x float> @vmfsac_vv_nxv1f32_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {35; ZVFH-LABEL: vmfsac_vv_nxv1f32_unmasked:36; ZVFH:       # %bb.0:37; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma38; ZVFH-NEXT:    vfwmsac.vv v10, v8, v939; ZVFH-NEXT:    vmv1r.v v8, v1040; ZVFH-NEXT:    ret41;42; ZVFHMIN-LABEL: vmfsac_vv_nxv1f32_unmasked:43; ZVFHMIN:       # %bb.0:44; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma45; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v846; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v947; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma48; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v1049; ZVFHMIN-NEXT:    ret50  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)51  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)52  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)53  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %bext, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)54  ret <vscale x 1 x float> %v55}56 57define <vscale x 1 x float> @vmfsac_vv_nxv1f32_tu(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {58; ZVFH-LABEL: vmfsac_vv_nxv1f32_tu:59; ZVFH:       # %bb.0:60; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu61; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9, v0.t62; ZVFH-NEXT:    vmv1r.v v8, v1063; ZVFH-NEXT:    ret64;65; ZVFHMIN-LABEL: vmfsac_vv_nxv1f32_tu:66; ZVFHMIN:       # %bb.0:67; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma68; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v869; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v970; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, tu, mu71; ZVFHMIN-NEXT:    vfmsac.vv v10, v11, v8, v0.t72; ZVFHMIN-NEXT:    vmv1r.v v8, v1073; ZVFHMIN-NEXT:    ret74  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)75  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)76  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)77  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %bext, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)78  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)79  ret <vscale x 1 x float> %u80}81 82define <vscale x 1 x float> @vmfsac_vv_nxv1f32_unmasked_tu(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {83; ZVFH-LABEL: vmfsac_vv_nxv1f32_unmasked_tu:84; ZVFH:       # %bb.0:85; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma86; ZVFH-NEXT:    vfwmsac.vv v10, v8, v987; ZVFH-NEXT:    vmv1r.v v8, v1088; ZVFH-NEXT:    ret89;90; ZVFHMIN-LABEL: vmfsac_vv_nxv1f32_unmasked_tu:91; ZVFHMIN:       # %bb.0:92; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma93; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v894; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v995; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, tu, ma96; ZVFHMIN-NEXT:    vfmsac.vv v10, v11, v897; ZVFHMIN-NEXT:    vmv1r.v v8, v1098; ZVFHMIN-NEXT:    ret99  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)100  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)101  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)102  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %bext, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)103  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)104  ret <vscale x 1 x float> %u105}106 107define <vscale x 1 x float> @vmfsac_vf_nxv1f32(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {108; ZVFH-LABEL: vmfsac_vf_nxv1f32:109; ZVFH:       # %bb.0:110; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma111; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8, v0.t112; ZVFH-NEXT:    vmv1r.v v8, v9113; ZVFH-NEXT:    ret114;115; ZVFHMIN-LABEL: vmfsac_vf_nxv1f32:116; ZVFHMIN:       # %bb.0:117; ZVFHMIN-NEXT:    fmv.x.h a1, fa0118; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma119; ZVFHMIN-NEXT:    vmv.v.x v10, a1120; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t121; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t122; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma123; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v9, v0.t124; ZVFHMIN-NEXT:    ret125  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0126  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer127  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)128  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)129  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)130  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %vbext, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)131  ret <vscale x 1 x float> %v132}133 134define <vscale x 1 x float> @vmfsac_vf_nxv1f32_commute(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {135; ZVFH-LABEL: vmfsac_vf_nxv1f32_commute:136; ZVFH:       # %bb.0:137; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma138; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8, v0.t139; ZVFH-NEXT:    vmv1r.v v8, v9140; ZVFH-NEXT:    ret141;142; ZVFHMIN-LABEL: vmfsac_vf_nxv1f32_commute:143; ZVFHMIN:       # %bb.0:144; ZVFHMIN-NEXT:    fmv.x.h a1, fa0145; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma146; ZVFHMIN-NEXT:    vmv.v.x v11, a1147; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t148; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t149; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma150; ZVFHMIN-NEXT:    vfmsub.vv v10, v8, v9, v0.t151; ZVFHMIN-NEXT:    vmv1r.v v8, v10152; ZVFHMIN-NEXT:    ret153  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0154  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer155  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)156  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)157  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)158  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vbext, <vscale x 1 x float> %aext, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)159  ret <vscale x 1 x float> %v160}161 162define <vscale x 1 x float> @vmfsac_vf_nxv1f32_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, i32 zeroext %evl) {163; ZVFH-LABEL: vmfsac_vf_nxv1f32_unmasked:164; ZVFH:       # %bb.0:165; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma166; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8167; ZVFH-NEXT:    vmv1r.v v8, v9168; ZVFH-NEXT:    ret169;170; ZVFHMIN-LABEL: vmfsac_vf_nxv1f32_unmasked:171; ZVFHMIN:       # %bb.0:172; ZVFHMIN-NEXT:    fmv.x.h a1, fa0173; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma174; ZVFHMIN-NEXT:    vmv.v.x v10, a1175; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8176; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10177; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma178; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v9179; ZVFHMIN-NEXT:    ret180  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0181  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer182  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)183  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)184  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)185  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x float> %vbext, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)186  ret <vscale x 1 x float> %v187}188 189define <vscale x 2 x float> @vmfsac_vv_nxv2f32(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {190; ZVFH-LABEL: vmfsac_vv_nxv2f32:191; ZVFH:       # %bb.0:192; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma193; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9, v0.t194; ZVFH-NEXT:    vmv1r.v v8, v10195; ZVFH-NEXT:    ret196;197; ZVFHMIN-LABEL: vmfsac_vv_nxv2f32:198; ZVFHMIN:       # %bb.0:199; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma200; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t201; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t202; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma203; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v10, v0.t204; ZVFHMIN-NEXT:    ret205  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)206  %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)207  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)208  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x float> %bext, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)209  ret <vscale x 2 x float> %v210}211 212define <vscale x 2 x float> @vmfsac_vv_nxv2f32_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {213; ZVFH-LABEL: vmfsac_vv_nxv2f32_unmasked:214; ZVFH:       # %bb.0:215; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma216; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9217; ZVFH-NEXT:    vmv1r.v v8, v10218; ZVFH-NEXT:    ret219;220; ZVFHMIN-LABEL: vmfsac_vv_nxv2f32_unmasked:221; ZVFHMIN:       # %bb.0:222; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma223; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8224; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9225; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma226; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v10227; ZVFHMIN-NEXT:    ret228  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)229  %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)230  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)231  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x float> %bext, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)232  ret <vscale x 2 x float> %v233}234 235define <vscale x 2 x float> @vmfsac_vf_nxv2f32(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {236; ZVFH-LABEL: vmfsac_vf_nxv2f32:237; ZVFH:       # %bb.0:238; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma239; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8, v0.t240; ZVFH-NEXT:    vmv1r.v v8, v9241; ZVFH-NEXT:    ret242;243; ZVFHMIN-LABEL: vmfsac_vf_nxv2f32:244; ZVFHMIN:       # %bb.0:245; ZVFHMIN-NEXT:    fmv.x.h a1, fa0246; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma247; ZVFHMIN-NEXT:    vmv.v.x v10, a1248; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t249; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t250; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma251; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v9, v0.t252; ZVFHMIN-NEXT:    ret253  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0254  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer255  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)256  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)257  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)258  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x float> %vbext, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)259  ret <vscale x 2 x float> %v260}261 262define <vscale x 2 x float> @vmfsac_vf_nxv2f32_commute(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {263; ZVFH-LABEL: vmfsac_vf_nxv2f32_commute:264; ZVFH:       # %bb.0:265; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma266; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8, v0.t267; ZVFH-NEXT:    vmv1r.v v8, v9268; ZVFH-NEXT:    ret269;270; ZVFHMIN-LABEL: vmfsac_vf_nxv2f32_commute:271; ZVFHMIN:       # %bb.0:272; ZVFHMIN-NEXT:    fmv.x.h a1, fa0273; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma274; ZVFHMIN-NEXT:    vmv.v.x v11, a1275; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t276; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t277; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma278; ZVFHMIN-NEXT:    vfmsub.vv v10, v8, v9, v0.t279; ZVFHMIN-NEXT:    vmv.v.v v8, v10280; ZVFHMIN-NEXT:    ret281  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0282  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer283  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)284  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)285  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)286  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vbext, <vscale x 2 x float> %aext, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)287  ret <vscale x 2 x float> %v288}289 290define <vscale x 2 x float> @vmfsac_vf_nxv2f32_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, i32 zeroext %evl) {291; ZVFH-LABEL: vmfsac_vf_nxv2f32_unmasked:292; ZVFH:       # %bb.0:293; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma294; ZVFH-NEXT:    vfwmsac.vf v9, fa0, v8295; ZVFH-NEXT:    vmv1r.v v8, v9296; ZVFH-NEXT:    ret297;298; ZVFHMIN-LABEL: vmfsac_vf_nxv2f32_unmasked:299; ZVFHMIN:       # %bb.0:300; ZVFHMIN-NEXT:    fmv.x.h a1, fa0301; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma302; ZVFHMIN-NEXT:    vmv.v.x v10, a1303; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8304; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10305; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma306; ZVFHMIN-NEXT:    vfmsub.vv v8, v11, v9307; ZVFHMIN-NEXT:    ret308  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0309  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer310  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)311  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)312  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)313  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x float> %vbext, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)314  ret <vscale x 2 x float> %v315}316 317define <vscale x 4 x float> @vmfsac_vv_nxv4f32(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {318; ZVFH-LABEL: vmfsac_vv_nxv4f32:319; ZVFH:       # %bb.0:320; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma321; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9, v0.t322; ZVFH-NEXT:    vmv2r.v v8, v10323; ZVFH-NEXT:    ret324;325; ZVFHMIN-LABEL: vmfsac_vv_nxv4f32:326; ZVFHMIN:       # %bb.0:327; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma328; ZVFHMIN-NEXT:    vmv1r.v v12, v9329; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t330; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t331; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma332; ZVFHMIN-NEXT:    vfmsub.vv v8, v14, v10, v0.t333; ZVFHMIN-NEXT:    ret334  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)335  %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)336  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)337  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x float> %bext, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)338  ret <vscale x 4 x float> %v339}340 341define <vscale x 4 x float> @vmfsac_vv_nxv4f32_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {342; ZVFH-LABEL: vmfsac_vv_nxv4f32_unmasked:343; ZVFH:       # %bb.0:344; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma345; ZVFH-NEXT:    vfwmsac.vv v10, v8, v9346; ZVFH-NEXT:    vmv2r.v v8, v10347; ZVFH-NEXT:    ret348;349; ZVFHMIN-LABEL: vmfsac_vv_nxv4f32_unmasked:350; ZVFHMIN:       # %bb.0:351; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma352; ZVFHMIN-NEXT:    vmv1r.v v12, v9353; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8354; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12355; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma356; ZVFHMIN-NEXT:    vfmsub.vv v8, v14, v10357; ZVFHMIN-NEXT:    ret358  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)359  %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)360  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)361  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x float> %bext, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)362  ret <vscale x 4 x float> %v363}364 365define <vscale x 4 x float> @vmfsac_vf_nxv4f32(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {366; ZVFH-LABEL: vmfsac_vf_nxv4f32:367; ZVFH:       # %bb.0:368; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma369; ZVFH-NEXT:    vfwmsac.vf v10, fa0, v8, v0.t370; ZVFH-NEXT:    vmv2r.v v8, v10371; ZVFH-NEXT:    ret372;373; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32:374; ZVFHMIN:       # %bb.0:375; ZVFHMIN-NEXT:    fmv.x.h a1, fa0376; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma377; ZVFHMIN-NEXT:    vmv.v.x v14, a1378; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t379; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v14, v0.t380; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma381; ZVFHMIN-NEXT:    vfmsub.vv v8, v12, v10, v0.t382; ZVFHMIN-NEXT:    ret383  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0384  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer385  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)386  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)387  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)388  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x float> %vbext, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)389  ret <vscale x 4 x float> %v390}391 392define <vscale x 4 x float> @vmfsac_vf_nxv4f32_commute(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {393; ZVFH-LABEL: vmfsac_vf_nxv4f32_commute:394; ZVFH:       # %bb.0:395; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma396; ZVFH-NEXT:    vfwmsac.vf v10, fa0, v8, v0.t397; ZVFH-NEXT:    vmv2r.v v8, v10398; ZVFH-NEXT:    ret399;400; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32_commute:401; ZVFHMIN:       # %bb.0:402; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma403; ZVFHMIN-NEXT:    vmv1r.v v12, v8404; ZVFHMIN-NEXT:    fmv.x.h a0, fa0405; ZVFHMIN-NEXT:    vmv.v.x v14, a0406; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t407; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v14, v0.t408; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma409; ZVFHMIN-NEXT:    vfmsub.vv v8, v12, v10, v0.t410; ZVFHMIN-NEXT:    ret411  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0412  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer413  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)414  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)415  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)416  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vbext, <vscale x 4 x float> %aext, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)417  ret <vscale x 4 x float> %v418}419 420define <vscale x 4 x float> @vmfsac_vf_nxv4f32_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, i32 zeroext %evl) {421; ZVFH-LABEL: vmfsac_vf_nxv4f32_unmasked:422; ZVFH:       # %bb.0:423; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma424; ZVFH-NEXT:    vfwmsac.vf v10, fa0, v8425; ZVFH-NEXT:    vmv2r.v v8, v10426; ZVFH-NEXT:    ret427;428; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32_unmasked:429; ZVFHMIN:       # %bb.0:430; ZVFHMIN-NEXT:    fmv.x.h a1, fa0431; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma432; ZVFHMIN-NEXT:    vmv.v.x v14, a1433; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8434; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v14435; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma436; ZVFHMIN-NEXT:    vfmsub.vv v8, v12, v10437; ZVFHMIN-NEXT:    ret438  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0439  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer440  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)441  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)442  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)443  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x float> %vbext, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)444  ret <vscale x 4 x float> %v445}446 447define <vscale x 8 x float> @vmfsac_vv_nxv8f32(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {448; ZVFH-LABEL: vmfsac_vv_nxv8f32:449; ZVFH:       # %bb.0:450; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma451; ZVFH-NEXT:    vfwmsac.vv v12, v8, v10, v0.t452; ZVFH-NEXT:    vmv4r.v v8, v12453; ZVFH-NEXT:    ret454;455; ZVFHMIN-LABEL: vmfsac_vv_nxv8f32:456; ZVFHMIN:       # %bb.0:457; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma458; ZVFHMIN-NEXT:    vmv2r.v v16, v10459; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t460; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t461; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma462; ZVFHMIN-NEXT:    vfmsub.vv v8, v20, v12, v0.t463; ZVFHMIN-NEXT:    ret464  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)465  %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)466  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)467  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x float> %bext, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)468  ret <vscale x 8 x float> %v469}470 471define <vscale x 8 x float> @vmfsac_vv_nxv8f32_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {472; ZVFH-LABEL: vmfsac_vv_nxv8f32_unmasked:473; ZVFH:       # %bb.0:474; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma475; ZVFH-NEXT:    vfwmsac.vv v12, v8, v10476; ZVFH-NEXT:    vmv4r.v v8, v12477; ZVFH-NEXT:    ret478;479; ZVFHMIN-LABEL: vmfsac_vv_nxv8f32_unmasked:480; ZVFHMIN:       # %bb.0:481; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma482; ZVFHMIN-NEXT:    vmv2r.v v16, v10483; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8484; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16485; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma486; ZVFHMIN-NEXT:    vfmsub.vv v8, v20, v12487; ZVFHMIN-NEXT:    ret488  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)489  %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)490  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)491  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x float> %bext, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)492  ret <vscale x 8 x float> %v493}494 495define <vscale x 8 x float> @vmfsac_vf_nxv8f32(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {496; ZVFH-LABEL: vmfsac_vf_nxv8f32:497; ZVFH:       # %bb.0:498; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma499; ZVFH-NEXT:    vfwmsac.vf v12, fa0, v8, v0.t500; ZVFH-NEXT:    vmv4r.v v8, v12501; ZVFH-NEXT:    ret502;503; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32:504; ZVFHMIN:       # %bb.0:505; ZVFHMIN-NEXT:    fmv.x.h a1, fa0506; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma507; ZVFHMIN-NEXT:    vmv.v.x v20, a1508; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t509; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t510; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma511; ZVFHMIN-NEXT:    vfmsub.vv v8, v16, v12, v0.t512; ZVFHMIN-NEXT:    ret513  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0514  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer515  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)516  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)517  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)518  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x float> %vbext, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)519  ret <vscale x 8 x float> %v520}521 522define <vscale x 8 x float> @vmfsac_vf_nxv8f32_commute(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {523; ZVFH-LABEL: vmfsac_vf_nxv8f32_commute:524; ZVFH:       # %bb.0:525; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma526; ZVFH-NEXT:    vfwmsac.vf v12, fa0, v8, v0.t527; ZVFH-NEXT:    vmv4r.v v8, v12528; ZVFH-NEXT:    ret529;530; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32_commute:531; ZVFHMIN:       # %bb.0:532; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma533; ZVFHMIN-NEXT:    vmv2r.v v16, v8534; ZVFHMIN-NEXT:    fmv.x.h a0, fa0535; ZVFHMIN-NEXT:    vmv.v.x v20, a0536; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t537; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v20, v0.t538; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma539; ZVFHMIN-NEXT:    vfmsub.vv v8, v16, v12, v0.t540; ZVFHMIN-NEXT:    ret541  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0542  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer543  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)544  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)545  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)546  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vbext, <vscale x 8 x float> %aext, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)547  ret <vscale x 8 x float> %v548}549 550define <vscale x 8 x float> @vmfsac_vf_nxv8f32_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, i32 zeroext %evl) {551; ZVFH-LABEL: vmfsac_vf_nxv8f32_unmasked:552; ZVFH:       # %bb.0:553; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma554; ZVFH-NEXT:    vfwmsac.vf v12, fa0, v8555; ZVFH-NEXT:    vmv4r.v v8, v12556; ZVFH-NEXT:    ret557;558; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32_unmasked:559; ZVFHMIN:       # %bb.0:560; ZVFHMIN-NEXT:    fmv.x.h a1, fa0561; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma562; ZVFHMIN-NEXT:    vmv.v.x v20, a1563; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8564; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20565; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma566; ZVFHMIN-NEXT:    vfmsub.vv v8, v16, v12567; ZVFHMIN-NEXT:    ret568  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0569  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer570  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)571  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)572  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)573  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x float> %vbext, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)574  ret <vscale x 8 x float> %v575}576