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