1725 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s6 7define <vscale x 1 x half> @vmfsac_vv_nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vmfsac_vv_nxv1f16:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu11; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t12; CHECK-NEXT: vmv1r.v v8, v1013; CHECK-NEXT: ret14 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)15 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)16 %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)17 ret <vscale x 1 x half> %u18}19 20define <vscale x 1 x half> @vmfsac_vv_nxv1f16_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {21; CHECK-LABEL: vmfsac_vv_nxv1f16_unmasked:22; CHECK: # %bb.0:23; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma24; CHECK-NEXT: vfmsac.vv v10, v8, v925; CHECK-NEXT: vmv1r.v v8, v1026; CHECK-NEXT: ret27 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)28 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)29 %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)30 ret <vscale x 1 x half> %u31}32 33define <vscale x 1 x half> @vmfsac_vf_nxv1f16(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {34; CHECK-LABEL: vmfsac_vf_nxv1f16:35; CHECK: # %bb.0:36; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu37; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t38; CHECK-NEXT: vmv1r.v v8, v939; CHECK-NEXT: ret40 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 041 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer42 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)43 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)44 %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)45 ret <vscale x 1 x half> %u46}47 48define <vscale x 1 x half> @vmfsac_vf_nxv1f16_commute(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {49; CHECK-LABEL: vmfsac_vf_nxv1f16_commute:50; CHECK: # %bb.0:51; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu52; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t53; CHECK-NEXT: vmv1r.v v8, v954; CHECK-NEXT: ret55 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 056 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer57 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)58 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %a, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)59 %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)60 ret <vscale x 1 x half> %u61}62 63define <vscale x 1 x half> @vmfsac_vf_nxv1f16_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, i32 zeroext %evl) {64; CHECK-LABEL: vmfsac_vf_nxv1f16_unmasked:65; CHECK: # %bb.0:66; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma67; CHECK-NEXT: vfmsac.vf v9, fa0, v868; CHECK-NEXT: vmv1r.v v8, v969; CHECK-NEXT: ret70 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 071 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer72 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)73 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)74 %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)75 ret <vscale x 1 x half> %u76}77 78define <vscale x 1 x half> @vmfsac_vv_nxv1f16_ta(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {79; CHECK-LABEL: vmfsac_vv_nxv1f16_ta:80; CHECK: # %bb.0:81; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu82; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t83; CHECK-NEXT: vmv1r.v v8, v1084; CHECK-NEXT: ret85 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)86 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)87 %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)88 ret <vscale x 1 x half> %u89}90 91define <vscale x 1 x half> @vmfsac_vf_nxv1f16_ta(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {92; CHECK-LABEL: vmfsac_vf_nxv1f16_ta:93; CHECK: # %bb.0:94; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu95; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t96; CHECK-NEXT: vmv1r.v v8, v997; CHECK-NEXT: ret98 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 099 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer100 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)101 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)102 %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)103 ret <vscale x 1 x half> %u104}105 106define <vscale x 1 x half> @vmfsac_vf_nxv1f16_commute_ta(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {107; CHECK-LABEL: vmfsac_vf_nxv1f16_commute_ta:108; CHECK: # %bb.0:109; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu110; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t111; CHECK-NEXT: vmv1r.v v8, v9112; CHECK-NEXT: ret113 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0114 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer115 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)116 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %a, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)117 %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)118 ret <vscale x 1 x half> %u119}120 121define <vscale x 2 x half> @vmfsac_vv_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {122; CHECK-LABEL: vmfsac_vv_nxv2f16:123; CHECK: # %bb.0:124; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu125; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t126; CHECK-NEXT: vmv1r.v v8, v10127; CHECK-NEXT: ret128 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)129 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)130 %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)131 ret <vscale x 2 x half> %u132}133 134define <vscale x 2 x half> @vmfsac_vv_nxv2f16_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {135; CHECK-LABEL: vmfsac_vv_nxv2f16_unmasked:136; CHECK: # %bb.0:137; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma138; CHECK-NEXT: vfmsac.vv v10, v8, v9139; CHECK-NEXT: vmv1r.v v8, v10140; CHECK-NEXT: ret141 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)142 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)143 %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)144 ret <vscale x 2 x half> %u145}146 147define <vscale x 2 x half> @vmfsac_vf_nxv2f16(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {148; CHECK-LABEL: vmfsac_vf_nxv2f16:149; CHECK: # %bb.0:150; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu151; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t152; CHECK-NEXT: vmv1r.v v8, v9153; CHECK-NEXT: ret154 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0155 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer156 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)157 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %vb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)158 %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)159 ret <vscale x 2 x half> %u160}161 162define <vscale x 2 x half> @vmfsac_vf_nxv2f16_commute(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {163; CHECK-LABEL: vmfsac_vf_nxv2f16_commute:164; CHECK: # %bb.0:165; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu166; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t167; CHECK-NEXT: vmv1r.v v8, v9168; CHECK-NEXT: ret169 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0170 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer171 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)172 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %a, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)173 %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)174 ret <vscale x 2 x half> %u175}176 177define <vscale x 2 x half> @vmfsac_vf_nxv2f16_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, i32 zeroext %evl) {178; CHECK-LABEL: vmfsac_vf_nxv2f16_unmasked:179; CHECK: # %bb.0:180; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma181; CHECK-NEXT: vfmsac.vf v9, fa0, v8182; CHECK-NEXT: vmv1r.v v8, v9183; CHECK-NEXT: ret184 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0185 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer186 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)187 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %vb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)188 %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)189 ret <vscale x 2 x half> %u190}191 192define <vscale x 2 x half> @vmfsac_vv_nxv2f16_ta(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {193; CHECK-LABEL: vmfsac_vv_nxv2f16_ta:194; CHECK: # %bb.0:195; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu196; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t197; CHECK-NEXT: vmv1r.v v8, v10198; CHECK-NEXT: ret199 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)200 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)201 %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)202 ret <vscale x 2 x half> %u203}204 205define <vscale x 2 x half> @vmfsac_vf_nxv2f16_ta(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {206; CHECK-LABEL: vmfsac_vf_nxv2f16_ta:207; CHECK: # %bb.0:208; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu209; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t210; CHECK-NEXT: vmv1r.v v8, v9211; CHECK-NEXT: ret212 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0213 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer214 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)215 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %vb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)216 %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)217 ret <vscale x 2 x half> %u218}219 220define <vscale x 2 x half> @vmfsac_vf_nxv2f16_commute_ta(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {221; CHECK-LABEL: vmfsac_vf_nxv2f16_commute_ta:222; CHECK: # %bb.0:223; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu224; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t225; CHECK-NEXT: vmv1r.v v8, v9226; CHECK-NEXT: ret227 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0228 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer229 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)230 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %a, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)231 %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)232 ret <vscale x 2 x half> %u233}234 235define <vscale x 4 x half> @vmfsac_vv_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {236; CHECK-LABEL: vmfsac_vv_nxv4f16:237; CHECK: # %bb.0:238; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu239; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t240; CHECK-NEXT: vmv1r.v v8, v10241; CHECK-NEXT: ret242 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)243 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)244 %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)245 ret <vscale x 4 x half> %u246}247 248define <vscale x 4 x half> @vmfsac_vv_nxv4f16_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {249; CHECK-LABEL: vmfsac_vv_nxv4f16_unmasked:250; CHECK: # %bb.0:251; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma252; CHECK-NEXT: vfmsac.vv v10, v8, v9253; CHECK-NEXT: vmv1r.v v8, v10254; CHECK-NEXT: ret255 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)256 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)257 %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)258 ret <vscale x 4 x half> %u259}260 261define <vscale x 4 x half> @vmfsac_vf_nxv4f16(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {262; CHECK-LABEL: vmfsac_vf_nxv4f16:263; CHECK: # %bb.0:264; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu265; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t266; CHECK-NEXT: vmv1r.v v8, v9267; CHECK-NEXT: ret268 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0269 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer270 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)271 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)272 %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)273 ret <vscale x 4 x half> %u274}275 276define <vscale x 4 x half> @vmfsac_vf_nxv4f16_commute(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {277; CHECK-LABEL: vmfsac_vf_nxv4f16_commute:278; CHECK: # %bb.0:279; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu280; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t281; CHECK-NEXT: vmv1r.v v8, v9282; CHECK-NEXT: ret283 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0284 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer285 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)286 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %a, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)287 %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)288 ret <vscale x 4 x half> %u289}290 291define <vscale x 4 x half> @vmfsac_vf_nxv4f16_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, i32 zeroext %evl) {292; CHECK-LABEL: vmfsac_vf_nxv4f16_unmasked:293; CHECK: # %bb.0:294; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma295; CHECK-NEXT: vfmsac.vf v9, fa0, v8296; CHECK-NEXT: vmv1r.v v8, v9297; CHECK-NEXT: ret298 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0299 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer300 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)301 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)302 %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)303 ret <vscale x 4 x half> %u304}305 306define <vscale x 4 x half> @vmfsac_vv_nxv4f16_ta(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {307; CHECK-LABEL: vmfsac_vv_nxv4f16_ta:308; CHECK: # %bb.0:309; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu310; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t311; CHECK-NEXT: vmv.v.v v8, v10312; CHECK-NEXT: ret313 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)314 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)315 %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)316 ret <vscale x 4 x half> %u317}318 319define <vscale x 4 x half> @vmfsac_vf_nxv4f16_ta(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {320; CHECK-LABEL: vmfsac_vf_nxv4f16_ta:321; CHECK: # %bb.0:322; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu323; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t324; CHECK-NEXT: vmv.v.v v8, v9325; CHECK-NEXT: ret326 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0327 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer328 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)329 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)330 %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)331 ret <vscale x 4 x half> %u332}333 334define <vscale x 4 x half> @vmfsac_vf_nxv4f16_commute_ta(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {335; CHECK-LABEL: vmfsac_vf_nxv4f16_commute_ta:336; CHECK: # %bb.0:337; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu338; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t339; CHECK-NEXT: vmv.v.v v8, v9340; CHECK-NEXT: ret341 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0342 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer343 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)344 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %a, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)345 %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)346 ret <vscale x 4 x half> %u347}348 349define <vscale x 8 x half> @vmfsac_vv_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {350; CHECK-LABEL: vmfsac_vv_nxv8f16:351; CHECK: # %bb.0:352; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu353; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t354; CHECK-NEXT: vmv2r.v v8, v12355; CHECK-NEXT: ret356 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)357 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)358 %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)359 ret <vscale x 8 x half> %u360}361 362define <vscale x 8 x half> @vmfsac_vv_nxv8f16_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {363; CHECK-LABEL: vmfsac_vv_nxv8f16_unmasked:364; CHECK: # %bb.0:365; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma366; CHECK-NEXT: vfmsac.vv v12, v8, v10367; CHECK-NEXT: vmv2r.v v8, v12368; CHECK-NEXT: ret369 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)370 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)371 %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)372 ret <vscale x 8 x half> %u373}374 375define <vscale x 8 x half> @vmfsac_vf_nxv8f16(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {376; CHECK-LABEL: vmfsac_vf_nxv8f16:377; CHECK: # %bb.0:378; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu379; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t380; CHECK-NEXT: vmv2r.v v8, v10381; CHECK-NEXT: ret382 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0383 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer384 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)385 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)386 %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)387 ret <vscale x 8 x half> %u388}389 390define <vscale x 8 x half> @vmfsac_vf_nxv8f16_commute(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {391; CHECK-LABEL: vmfsac_vf_nxv8f16_commute:392; CHECK: # %bb.0:393; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu394; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t395; CHECK-NEXT: vmv2r.v v8, v10396; CHECK-NEXT: ret397 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0398 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer399 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)400 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %a, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)401 %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)402 ret <vscale x 8 x half> %u403}404 405define <vscale x 8 x half> @vmfsac_vf_nxv8f16_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, i32 zeroext %evl) {406; CHECK-LABEL: vmfsac_vf_nxv8f16_unmasked:407; CHECK: # %bb.0:408; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma409; CHECK-NEXT: vfmsac.vf v10, fa0, v8410; CHECK-NEXT: vmv2r.v v8, v10411; CHECK-NEXT: ret412 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0413 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer414 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)415 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)416 %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)417 ret <vscale x 8 x half> %u418}419 420define <vscale x 8 x half> @vmfsac_vv_nxv8f16_ta(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {421; CHECK-LABEL: vmfsac_vv_nxv8f16_ta:422; CHECK: # %bb.0:423; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu424; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t425; CHECK-NEXT: vmv.v.v v8, v12426; CHECK-NEXT: ret427 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)428 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)429 %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)430 ret <vscale x 8 x half> %u431}432 433define <vscale x 8 x half> @vmfsac_vf_nxv8f16_ta(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {434; CHECK-LABEL: vmfsac_vf_nxv8f16_ta:435; CHECK: # %bb.0:436; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu437; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t438; CHECK-NEXT: vmv.v.v v8, v10439; CHECK-NEXT: ret440 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0441 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer442 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)443 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)444 %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)445 ret <vscale x 8 x half> %u446}447 448define <vscale x 8 x half> @vmfsac_vf_nxv8f16_commute_ta(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {449; CHECK-LABEL: vmfsac_vf_nxv8f16_commute_ta:450; CHECK: # %bb.0:451; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu452; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t453; CHECK-NEXT: vmv.v.v v8, v10454; CHECK-NEXT: ret455 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0456 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer457 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)458 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %a, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)459 %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)460 ret <vscale x 8 x half> %u461}462 463define <vscale x 16 x half> @vmfsac_vv_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {464; CHECK-LABEL: vmfsac_vv_nxv16f16:465; CHECK: # %bb.0:466; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu467; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t468; CHECK-NEXT: vmv4r.v v8, v16469; CHECK-NEXT: ret470 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)471 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)472 %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)473 ret <vscale x 16 x half> %u474}475 476define <vscale x 16 x half> @vmfsac_vv_nxv16f16_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {477; CHECK-LABEL: vmfsac_vv_nxv16f16_unmasked:478; CHECK: # %bb.0:479; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma480; CHECK-NEXT: vfmsac.vv v16, v8, v12481; CHECK-NEXT: vmv4r.v v8, v16482; CHECK-NEXT: ret483 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)484 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)485 %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)486 ret <vscale x 16 x half> %u487}488 489define <vscale x 16 x half> @vmfsac_vf_nxv16f16(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {490; CHECK-LABEL: vmfsac_vf_nxv16f16:491; CHECK: # %bb.0:492; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu493; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t494; CHECK-NEXT: vmv4r.v v8, v12495; CHECK-NEXT: ret496 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0497 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer498 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)499 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)500 %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)501 ret <vscale x 16 x half> %u502}503 504define <vscale x 16 x half> @vmfsac_vf_nxv16f16_commute(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {505; CHECK-LABEL: vmfsac_vf_nxv16f16_commute:506; CHECK: # %bb.0:507; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu508; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t509; CHECK-NEXT: vmv4r.v v8, v12510; CHECK-NEXT: ret511 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0512 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer513 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)514 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %a, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)515 %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)516 ret <vscale x 16 x half> %u517}518 519define <vscale x 16 x half> @vmfsac_vf_nxv16f16_unmasked(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, i32 zeroext %evl) {520; CHECK-LABEL: vmfsac_vf_nxv16f16_unmasked:521; CHECK: # %bb.0:522; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma523; CHECK-NEXT: vfmsac.vf v12, fa0, v8524; CHECK-NEXT: vmv4r.v v8, v12525; CHECK-NEXT: ret526 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0527 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer528 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)529 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)530 %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)531 ret <vscale x 16 x half> %u532}533 534define <vscale x 16 x half> @vmfsac_vv_nxv16f16_ta(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {535; CHECK-LABEL: vmfsac_vv_nxv16f16_ta:536; CHECK: # %bb.0:537; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu538; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t539; CHECK-NEXT: vmv.v.v v8, v16540; CHECK-NEXT: ret541 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)542 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)543 %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)544 ret <vscale x 16 x half> %u545}546 547define <vscale x 16 x half> @vmfsac_vf_nxv16f16_ta(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {548; CHECK-LABEL: vmfsac_vf_nxv16f16_ta:549; CHECK: # %bb.0:550; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu551; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t552; CHECK-NEXT: vmv.v.v v8, v12553; CHECK-NEXT: ret554 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0555 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer556 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)557 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)558 %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)559 ret <vscale x 16 x half> %u560}561 562define <vscale x 16 x half> @vmfsac_vf_nxv16f16_commute_ta(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {563; CHECK-LABEL: vmfsac_vf_nxv16f16_commute_ta:564; CHECK: # %bb.0:565; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu566; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t567; CHECK-NEXT: vmv.v.v v8, v12568; CHECK-NEXT: ret569 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0570 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer571 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)572 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %a, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)573 %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)574 ret <vscale x 16 x half> %u575}576 577define <vscale x 32 x half> @vmfsac_vv_nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {578; CHECK-LABEL: vmfsac_vv_nxv32f16:579; CHECK: # %bb.0:580; CHECK-NEXT: vl8re16.v v24, (a0)581; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, mu582; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t583; CHECK-NEXT: vmv8r.v v8, v24584; CHECK-NEXT: ret585 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)586 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)587 %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)588 ret <vscale x 32 x half> %u589}590 591define <vscale x 32 x half> @vmfsac_vv_nxv32f16_unmasked(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {592; CHECK-LABEL: vmfsac_vv_nxv32f16_unmasked:593; CHECK: # %bb.0:594; CHECK-NEXT: vl8re16.v v24, (a0)595; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, ma596; CHECK-NEXT: vfmsac.vv v24, v8, v16597; CHECK-NEXT: vmv8r.v v8, v24598; CHECK-NEXT: ret599 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)600 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)601 %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)602 ret <vscale x 32 x half> %u603}604 605define <vscale x 32 x half> @vmfsac_vf_nxv32f16(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {606; CHECK-LABEL: vmfsac_vf_nxv32f16:607; CHECK: # %bb.0:608; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, mu609; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t610; CHECK-NEXT: vmv8r.v v8, v16611; CHECK-NEXT: ret612 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0613 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer614 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)615 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)616 %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)617 ret <vscale x 32 x half> %u618}619 620define <vscale x 32 x half> @vmfsac_vf_nxv32f16_commute(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {621; CHECK-LABEL: vmfsac_vf_nxv32f16_commute:622; CHECK: # %bb.0:623; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, mu624; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t625; CHECK-NEXT: vmv8r.v v8, v16626; CHECK-NEXT: ret627 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0628 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer629 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)630 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %a, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)631 %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)632 ret <vscale x 32 x half> %u633}634 635define <vscale x 32 x half> @vmfsac_vf_nxv32f16_unmasked(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, i32 zeroext %evl) {636; CHECK-LABEL: vmfsac_vf_nxv32f16_unmasked:637; CHECK: # %bb.0:638; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma639; CHECK-NEXT: vfmsac.vf v16, fa0, v8640; CHECK-NEXT: vmv8r.v v8, v16641; CHECK-NEXT: ret642 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0643 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer644 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)645 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)646 %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)647 ret <vscale x 32 x half> %u648}649 650define <vscale x 32 x half> @vmfsac_vv_nxv32f16_ta(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {651; CHECK-LABEL: vmfsac_vv_nxv32f16_ta:652; CHECK: # %bb.0:653; CHECK-NEXT: vl8re16.v v24, (a0)654; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu655; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t656; CHECK-NEXT: vmv.v.v v8, v24657; CHECK-NEXT: ret658 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)659 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)660 %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)661 ret <vscale x 32 x half> %u662}663 664define <vscale x 32 x half> @vmfsac_vf_nxv32f16_ta(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {665; CHECK-LABEL: vmfsac_vf_nxv32f16_ta:666; CHECK: # %bb.0:667; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu668; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t669; CHECK-NEXT: vmv.v.v v8, v16670; CHECK-NEXT: ret671 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0672 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer673 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)674 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)675 %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)676 ret <vscale x 32 x half> %u677}678 679define <vscale x 32 x half> @vmfsac_vf_nxv32f16_commute_ta(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {680; CHECK-LABEL: vmfsac_vf_nxv32f16_commute_ta:681; CHECK: # %bb.0:682; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu683; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t684; CHECK-NEXT: vmv.v.v v8, v16685; CHECK-NEXT: ret686 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0687 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer688 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)689 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %a, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)690 %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)691 ret <vscale x 32 x half> %u692}693 694define <vscale x 1 x float> @vmfsac_vv_nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {695; CHECK-LABEL: vmfsac_vv_nxv1f32:696; CHECK: # %bb.0:697; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu698; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t699; CHECK-NEXT: vmv1r.v v8, v10700; CHECK-NEXT: ret701 %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)702 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)703 %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)704 ret <vscale x 1 x float> %u705}706 707define <vscale x 1 x float> @vmfsac_vv_nxv1f32_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {708; CHECK-LABEL: vmfsac_vv_nxv1f32_unmasked:709; CHECK: # %bb.0:710; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma711; CHECK-NEXT: vfmsac.vv v10, v8, v9712; CHECK-NEXT: vmv1r.v v8, v10713; CHECK-NEXT: ret714 %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)715 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)716 %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)717 ret <vscale x 1 x float> %u718}719 720define <vscale x 1 x float> @vmfsac_vf_nxv1f32(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {721; CHECK-LABEL: vmfsac_vf_nxv1f32:722; CHECK: # %bb.0:723; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu724; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t725; CHECK-NEXT: vmv1r.v v8, v9726; CHECK-NEXT: ret727 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0728 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer729 %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)730 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)731 %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)732 ret <vscale x 1 x float> %u733}734 735define <vscale x 1 x float> @vmfsac_vf_nxv1f32_commute(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {736; CHECK-LABEL: vmfsac_vf_nxv1f32_commute:737; CHECK: # %bb.0:738; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu739; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t740; CHECK-NEXT: vmv1r.v v8, v9741; CHECK-NEXT: ret742 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0743 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer744 %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)745 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %a, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)746 %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)747 ret <vscale x 1 x float> %u748}749 750define <vscale x 1 x float> @vmfsac_vf_nxv1f32_unmasked(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, i32 zeroext %evl) {751; CHECK-LABEL: vmfsac_vf_nxv1f32_unmasked:752; CHECK: # %bb.0:753; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma754; CHECK-NEXT: vfmsac.vf v9, fa0, v8755; CHECK-NEXT: vmv1r.v v8, v9756; CHECK-NEXT: ret757 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0758 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer759 %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)760 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)761 %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)762 ret <vscale x 1 x float> %u763}764 765define <vscale x 1 x float> @vmfsac_vv_nxv1f32_ta(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {766; CHECK-LABEL: vmfsac_vv_nxv1f32_ta:767; CHECK: # %bb.0:768; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu769; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t770; CHECK-NEXT: vmv1r.v v8, v10771; CHECK-NEXT: ret772 %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)773 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)774 %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)775 ret <vscale x 1 x float> %u776}777 778define <vscale x 1 x float> @vmfsac_vf_nxv1f32_ta(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {779; CHECK-LABEL: vmfsac_vf_nxv1f32_ta:780; CHECK: # %bb.0:781; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu782; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t783; CHECK-NEXT: vmv1r.v v8, v9784; CHECK-NEXT: ret785 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0786 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer787 %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)788 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)789 %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)790 ret <vscale x 1 x float> %u791}792 793define <vscale x 1 x float> @vmfsac_vf_nxv1f32_commute_ta(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {794; CHECK-LABEL: vmfsac_vf_nxv1f32_commute_ta:795; CHECK: # %bb.0:796; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu797; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t798; CHECK-NEXT: vmv1r.v v8, v9799; CHECK-NEXT: ret800 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0801 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer802 %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)803 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %a, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)804 %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)805 ret <vscale x 1 x float> %u806}807 808define <vscale x 2 x float> @vmfsac_vv_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {809; CHECK-LABEL: vmfsac_vv_nxv2f32:810; CHECK: # %bb.0:811; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu812; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t813; CHECK-NEXT: vmv1r.v v8, v10814; CHECK-NEXT: ret815 %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)816 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)817 %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)818 ret <vscale x 2 x float> %u819}820 821define <vscale x 2 x float> @vmfsac_vv_nxv2f32_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {822; CHECK-LABEL: vmfsac_vv_nxv2f32_unmasked:823; CHECK: # %bb.0:824; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma825; CHECK-NEXT: vfmsac.vv v10, v8, v9826; CHECK-NEXT: vmv1r.v v8, v10827; CHECK-NEXT: ret828 %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)829 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)830 %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)831 ret <vscale x 2 x float> %u832}833 834define <vscale x 2 x float> @vmfsac_vf_nxv2f32(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {835; CHECK-LABEL: vmfsac_vf_nxv2f32:836; CHECK: # %bb.0:837; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu838; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t839; CHECK-NEXT: vmv1r.v v8, v9840; CHECK-NEXT: ret841 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0842 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer843 %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)844 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)845 %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)846 ret <vscale x 2 x float> %u847}848 849define <vscale x 2 x float> @vmfsac_vf_nxv2f32_commute(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {850; CHECK-LABEL: vmfsac_vf_nxv2f32_commute:851; CHECK: # %bb.0:852; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu853; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t854; CHECK-NEXT: vmv1r.v v8, v9855; CHECK-NEXT: ret856 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0857 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer858 %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)859 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %a, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)860 %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)861 ret <vscale x 2 x float> %u862}863 864define <vscale x 2 x float> @vmfsac_vf_nxv2f32_unmasked(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, i32 zeroext %evl) {865; CHECK-LABEL: vmfsac_vf_nxv2f32_unmasked:866; CHECK: # %bb.0:867; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma868; CHECK-NEXT: vfmsac.vf v9, fa0, v8869; CHECK-NEXT: vmv1r.v v8, v9870; CHECK-NEXT: ret871 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0872 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer873 %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)874 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)875 %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)876 ret <vscale x 2 x float> %u877}878 879define <vscale x 2 x float> @vmfsac_vv_nxv2f32_ta(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {880; CHECK-LABEL: vmfsac_vv_nxv2f32_ta:881; CHECK: # %bb.0:882; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu883; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t884; CHECK-NEXT: vmv.v.v v8, v10885; CHECK-NEXT: ret886 %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)887 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)888 %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)889 ret <vscale x 2 x float> %u890}891 892define <vscale x 2 x float> @vmfsac_vf_nxv2f32_ta(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {893; CHECK-LABEL: vmfsac_vf_nxv2f32_ta:894; CHECK: # %bb.0:895; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu896; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t897; CHECK-NEXT: vmv.v.v v8, v9898; CHECK-NEXT: ret899 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0900 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer901 %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)902 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)903 %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)904 ret <vscale x 2 x float> %u905}906 907define <vscale x 2 x float> @vmfsac_vf_nxv2f32_commute_ta(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {908; CHECK-LABEL: vmfsac_vf_nxv2f32_commute_ta:909; CHECK: # %bb.0:910; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu911; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t912; CHECK-NEXT: vmv.v.v v8, v9913; CHECK-NEXT: ret914 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0915 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer916 %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)917 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %a, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)918 %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)919 ret <vscale x 2 x float> %u920}921 922define <vscale x 4 x float> @vmfsac_vv_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {923; CHECK-LABEL: vmfsac_vv_nxv4f32:924; CHECK: # %bb.0:925; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu926; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t927; CHECK-NEXT: vmv2r.v v8, v12928; CHECK-NEXT: ret929 %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)930 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)931 %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)932 ret <vscale x 4 x float> %u933}934 935define <vscale x 4 x float> @vmfsac_vv_nxv4f32_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {936; CHECK-LABEL: vmfsac_vv_nxv4f32_unmasked:937; CHECK: # %bb.0:938; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma939; CHECK-NEXT: vfmsac.vv v12, v8, v10940; CHECK-NEXT: vmv2r.v v8, v12941; CHECK-NEXT: ret942 %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)943 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)944 %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)945 ret <vscale x 4 x float> %u946}947 948define <vscale x 4 x float> @vmfsac_vf_nxv4f32(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {949; CHECK-LABEL: vmfsac_vf_nxv4f32:950; CHECK: # %bb.0:951; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu952; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t953; CHECK-NEXT: vmv2r.v v8, v10954; CHECK-NEXT: ret955 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0956 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer957 %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)958 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)959 %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)960 ret <vscale x 4 x float> %u961}962 963define <vscale x 4 x float> @vmfsac_vf_nxv4f32_commute(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {964; CHECK-LABEL: vmfsac_vf_nxv4f32_commute:965; CHECK: # %bb.0:966; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu967; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t968; CHECK-NEXT: vmv2r.v v8, v10969; CHECK-NEXT: ret970 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0971 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer972 %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)973 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %a, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)974 %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)975 ret <vscale x 4 x float> %u976}977 978define <vscale x 4 x float> @vmfsac_vf_nxv4f32_unmasked(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, i32 zeroext %evl) {979; CHECK-LABEL: vmfsac_vf_nxv4f32_unmasked:980; CHECK: # %bb.0:981; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma982; CHECK-NEXT: vfmsac.vf v10, fa0, v8983; CHECK-NEXT: vmv2r.v v8, v10984; CHECK-NEXT: ret985 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0986 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer987 %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)988 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)989 %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)990 ret <vscale x 4 x float> %u991}992 993define <vscale x 4 x float> @vmfsac_vv_nxv4f32_ta(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {994; CHECK-LABEL: vmfsac_vv_nxv4f32_ta:995; CHECK: # %bb.0:996; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu997; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t998; CHECK-NEXT: vmv.v.v v8, v12999; CHECK-NEXT: ret1000 %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)1001 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1002 %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)1003 ret <vscale x 4 x float> %u1004}1005 1006define <vscale x 4 x float> @vmfsac_vf_nxv4f32_ta(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1007; CHECK-LABEL: vmfsac_vf_nxv4f32_ta:1008; CHECK: # %bb.0:1009; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1010; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1011; CHECK-NEXT: vmv.v.v v8, v101012; CHECK-NEXT: ret1013 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01014 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1015 %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)1016 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1017 %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)1018 ret <vscale x 4 x float> %u1019}1020 1021define <vscale x 4 x float> @vmfsac_vf_nxv4f32_commute_ta(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1022; CHECK-LABEL: vmfsac_vf_nxv4f32_commute_ta:1023; CHECK: # %bb.0:1024; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1025; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1026; CHECK-NEXT: vmv.v.v v8, v101027; CHECK-NEXT: ret1028 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01029 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1030 %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)1031 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %a, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1032 %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)1033 ret <vscale x 4 x float> %u1034}1035 1036define <vscale x 8 x float> @vmfsac_vv_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1037; CHECK-LABEL: vmfsac_vv_nxv8f32:1038; CHECK: # %bb.0:1039; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1040; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t1041; CHECK-NEXT: vmv4r.v v8, v161042; CHECK-NEXT: ret1043 %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)1044 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1045 %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1046 ret <vscale x 8 x float> %u1047}1048 1049define <vscale x 8 x float> @vmfsac_vv_nxv8f32_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1050; CHECK-LABEL: vmfsac_vv_nxv8f32_unmasked:1051; CHECK: # %bb.0:1052; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1053; CHECK-NEXT: vfmsac.vv v16, v8, v121054; CHECK-NEXT: vmv4r.v v8, v161055; CHECK-NEXT: ret1056 %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)1057 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1058 %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1059 ret <vscale x 8 x float> %u1060}1061 1062define <vscale x 8 x float> @vmfsac_vf_nxv8f32(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1063; CHECK-LABEL: vmfsac_vf_nxv8f32:1064; CHECK: # %bb.0:1065; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1066; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1067; CHECK-NEXT: vmv4r.v v8, v121068; CHECK-NEXT: ret1069 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01070 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1071 %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)1072 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1073 %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1074 ret <vscale x 8 x float> %u1075}1076 1077define <vscale x 8 x float> @vmfsac_vf_nxv8f32_commute(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1078; CHECK-LABEL: vmfsac_vf_nxv8f32_commute:1079; CHECK: # %bb.0:1080; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1081; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1082; CHECK-NEXT: vmv4r.v v8, v121083; CHECK-NEXT: ret1084 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01085 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1086 %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)1087 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %a, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1088 %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1089 ret <vscale x 8 x float> %u1090}1091 1092define <vscale x 8 x float> @vmfsac_vf_nxv8f32_unmasked(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, i32 zeroext %evl) {1093; CHECK-LABEL: vmfsac_vf_nxv8f32_unmasked:1094; CHECK: # %bb.0:1095; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1096; CHECK-NEXT: vfmsac.vf v12, fa0, v81097; CHECK-NEXT: vmv4r.v v8, v121098; CHECK-NEXT: ret1099 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01100 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1101 %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)1102 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1103 %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1104 ret <vscale x 8 x float> %u1105}1106 1107define <vscale x 8 x float> @vmfsac_vv_nxv8f32_ta(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1108; CHECK-LABEL: vmfsac_vv_nxv8f32_ta:1109; CHECK: # %bb.0:1110; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1111; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t1112; CHECK-NEXT: vmv.v.v v8, v161113; CHECK-NEXT: ret1114 %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)1115 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1116 %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1117 ret <vscale x 8 x float> %u1118}1119 1120define <vscale x 8 x float> @vmfsac_vf_nxv8f32_ta(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1121; CHECK-LABEL: vmfsac_vf_nxv8f32_ta:1122; CHECK: # %bb.0:1123; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1124; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1125; CHECK-NEXT: vmv.v.v v8, v121126; CHECK-NEXT: ret1127 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01128 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1129 %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)1130 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1131 %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1132 ret <vscale x 8 x float> %u1133}1134 1135define <vscale x 8 x float> @vmfsac_vf_nxv8f32_commute_ta(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1136; CHECK-LABEL: vmfsac_vf_nxv8f32_commute_ta:1137; CHECK: # %bb.0:1138; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1139; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1140; CHECK-NEXT: vmv.v.v v8, v121141; CHECK-NEXT: ret1142 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01143 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1144 %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)1145 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %a, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1146 %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1147 ret <vscale x 8 x float> %u1148}1149 1150define <vscale x 16 x float> @vmfsac_vv_nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1151; CHECK-LABEL: vmfsac_vv_nxv16f32:1152; CHECK: # %bb.0:1153; CHECK-NEXT: vl8re32.v v24, (a0)1154; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, mu1155; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t1156; CHECK-NEXT: vmv8r.v v8, v241157; CHECK-NEXT: ret1158 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1159 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1160 %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1161 ret <vscale x 16 x float> %u1162}1163 1164define <vscale x 16 x float> @vmfsac_vv_nxv16f32_unmasked(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1165; CHECK-LABEL: vmfsac_vv_nxv16f32_unmasked:1166; CHECK: # %bb.0:1167; CHECK-NEXT: vl8re32.v v24, (a0)1168; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, ma1169; CHECK-NEXT: vfmsac.vv v24, v8, v161170; CHECK-NEXT: vmv8r.v v8, v241171; CHECK-NEXT: ret1172 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1173 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1174 %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1175 ret <vscale x 16 x float> %u1176}1177 1178define <vscale x 16 x float> @vmfsac_vf_nxv16f32(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1179; CHECK-LABEL: vmfsac_vf_nxv16f32:1180; CHECK: # %bb.0:1181; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, mu1182; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1183; CHECK-NEXT: vmv8r.v v8, v161184; CHECK-NEXT: ret1185 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01186 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1187 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1188 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1189 %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1190 ret <vscale x 16 x float> %u1191}1192 1193define <vscale x 16 x float> @vmfsac_vf_nxv16f32_commute(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1194; CHECK-LABEL: vmfsac_vf_nxv16f32_commute:1195; CHECK: # %bb.0:1196; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, mu1197; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1198; CHECK-NEXT: vmv8r.v v8, v161199; CHECK-NEXT: ret1200 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01201 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1202 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1203 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %a, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1204 %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1205 ret <vscale x 16 x float> %u1206}1207 1208define <vscale x 16 x float> @vmfsac_vf_nxv16f32_unmasked(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, i32 zeroext %evl) {1209; CHECK-LABEL: vmfsac_vf_nxv16f32_unmasked:1210; CHECK: # %bb.0:1211; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma1212; CHECK-NEXT: vfmsac.vf v16, fa0, v81213; CHECK-NEXT: vmv8r.v v8, v161214; CHECK-NEXT: ret1215 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01216 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1217 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1218 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1219 %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1220 ret <vscale x 16 x float> %u1221}1222 1223define <vscale x 16 x float> @vmfsac_vv_nxv16f32_ta(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1224; CHECK-LABEL: vmfsac_vv_nxv16f32_ta:1225; CHECK: # %bb.0:1226; CHECK-NEXT: vl8re32.v v24, (a0)1227; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu1228; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t1229; CHECK-NEXT: vmv.v.v v8, v241230; CHECK-NEXT: ret1231 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1232 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1233 %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1234 ret <vscale x 16 x float> %u1235}1236 1237define <vscale x 16 x float> @vmfsac_vf_nxv16f32_ta(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1238; CHECK-LABEL: vmfsac_vf_nxv16f32_ta:1239; CHECK: # %bb.0:1240; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu1241; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1242; CHECK-NEXT: vmv.v.v v8, v161243; CHECK-NEXT: ret1244 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01245 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1246 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1247 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1248 %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1249 ret <vscale x 16 x float> %u1250}1251 1252define <vscale x 16 x float> @vmfsac_vf_nxv16f32_commute_ta(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1253; CHECK-LABEL: vmfsac_vf_nxv16f32_commute_ta:1254; CHECK: # %bb.0:1255; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu1256; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1257; CHECK-NEXT: vmv.v.v v8, v161258; CHECK-NEXT: ret1259 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01260 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1261 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1262 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %a, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1263 %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1264 ret <vscale x 16 x float> %u1265}1266 1267define <vscale x 1 x double> @vmfsac_vv_nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1268; CHECK-LABEL: vmfsac_vv_nxv1f64:1269; CHECK: # %bb.0:1270; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1271; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t1272; CHECK-NEXT: vmv1r.v v8, v101273; CHECK-NEXT: ret1274 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1275 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1276 %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1277 ret <vscale x 1 x double> %u1278}1279 1280define <vscale x 1 x double> @vmfsac_vv_nxv1f64_unmasked(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1281; CHECK-LABEL: vmfsac_vv_nxv1f64_unmasked:1282; CHECK: # %bb.0:1283; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1284; CHECK-NEXT: vfmsac.vv v10, v8, v91285; CHECK-NEXT: vmv1r.v v8, v101286; CHECK-NEXT: ret1287 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1288 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1289 %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1290 ret <vscale x 1 x double> %u1291}1292 1293define <vscale x 1 x double> @vmfsac_vf_nxv1f64(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1294; CHECK-LABEL: vmfsac_vf_nxv1f64:1295; CHECK: # %bb.0:1296; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1297; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t1298; CHECK-NEXT: vmv1r.v v8, v91299; CHECK-NEXT: ret1300 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01301 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1302 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1303 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1304 %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1305 ret <vscale x 1 x double> %u1306}1307 1308define <vscale x 1 x double> @vmfsac_vf_nxv1f64_commute(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1309; CHECK-LABEL: vmfsac_vf_nxv1f64_commute:1310; CHECK: # %bb.0:1311; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1312; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t1313; CHECK-NEXT: vmv1r.v v8, v91314; CHECK-NEXT: ret1315 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01316 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1317 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1318 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %a, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1319 %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1320 ret <vscale x 1 x double> %u1321}1322 1323define <vscale x 1 x double> @vmfsac_vf_nxv1f64_unmasked(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, i32 zeroext %evl) {1324; CHECK-LABEL: vmfsac_vf_nxv1f64_unmasked:1325; CHECK: # %bb.0:1326; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1327; CHECK-NEXT: vfmsac.vf v9, fa0, v81328; CHECK-NEXT: vmv1r.v v8, v91329; CHECK-NEXT: ret1330 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01331 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1332 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1333 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1334 %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1335 ret <vscale x 1 x double> %u1336}1337 1338define <vscale x 1 x double> @vmfsac_vv_nxv1f64_ta(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1339; CHECK-LABEL: vmfsac_vv_nxv1f64_ta:1340; CHECK: # %bb.0:1341; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1342; CHECK-NEXT: vfmsac.vv v10, v8, v9, v0.t1343; CHECK-NEXT: vmv.v.v v8, v101344; CHECK-NEXT: ret1345 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1346 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1347 %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1348 ret <vscale x 1 x double> %u1349}1350 1351define <vscale x 1 x double> @vmfsac_vf_nxv1f64_ta(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1352; CHECK-LABEL: vmfsac_vf_nxv1f64_ta:1353; CHECK: # %bb.0:1354; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1355; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t1356; CHECK-NEXT: vmv.v.v v8, v91357; CHECK-NEXT: ret1358 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01359 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1360 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1361 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1362 %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1363 ret <vscale x 1 x double> %u1364}1365 1366define <vscale x 1 x double> @vmfsac_vf_nxv1f64_commute_ta(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1367; CHECK-LABEL: vmfsac_vf_nxv1f64_commute_ta:1368; CHECK: # %bb.0:1369; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1370; CHECK-NEXT: vfmsac.vf v9, fa0, v8, v0.t1371; CHECK-NEXT: vmv.v.v v8, v91372; CHECK-NEXT: ret1373 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01374 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1375 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1376 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %a, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1377 %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1378 ret <vscale x 1 x double> %u1379}1380 1381define <vscale x 2 x double> @vmfsac_vv_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1382; CHECK-LABEL: vmfsac_vv_nxv2f64:1383; CHECK: # %bb.0:1384; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1385; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t1386; CHECK-NEXT: vmv2r.v v8, v121387; CHECK-NEXT: ret1388 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1389 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1390 %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1391 ret <vscale x 2 x double> %u1392}1393 1394define <vscale x 2 x double> @vmfsac_vv_nxv2f64_unmasked(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1395; CHECK-LABEL: vmfsac_vv_nxv2f64_unmasked:1396; CHECK: # %bb.0:1397; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1398; CHECK-NEXT: vfmsac.vv v12, v8, v101399; CHECK-NEXT: vmv2r.v v8, v121400; CHECK-NEXT: ret1401 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1402 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1403 %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1404 ret <vscale x 2 x double> %u1405}1406 1407define <vscale x 2 x double> @vmfsac_vf_nxv2f64(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1408; CHECK-LABEL: vmfsac_vf_nxv2f64:1409; CHECK: # %bb.0:1410; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1411; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1412; CHECK-NEXT: vmv2r.v v8, v101413; CHECK-NEXT: ret1414 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01415 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1416 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1417 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1418 %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1419 ret <vscale x 2 x double> %u1420}1421 1422define <vscale x 2 x double> @vmfsac_vf_nxv2f64_commute(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1423; CHECK-LABEL: vmfsac_vf_nxv2f64_commute:1424; CHECK: # %bb.0:1425; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1426; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1427; CHECK-NEXT: vmv2r.v v8, v101428; CHECK-NEXT: ret1429 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01430 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1431 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1432 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %a, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1433 %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1434 ret <vscale x 2 x double> %u1435}1436 1437define <vscale x 2 x double> @vmfsac_vf_nxv2f64_unmasked(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, i32 zeroext %evl) {1438; CHECK-LABEL: vmfsac_vf_nxv2f64_unmasked:1439; CHECK: # %bb.0:1440; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1441; CHECK-NEXT: vfmsac.vf v10, fa0, v81442; CHECK-NEXT: vmv2r.v v8, v101443; CHECK-NEXT: ret1444 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01445 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1446 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1447 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1448 %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1449 ret <vscale x 2 x double> %u1450}1451 1452define <vscale x 2 x double> @vmfsac_vv_nxv2f64_ta(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1453; CHECK-LABEL: vmfsac_vv_nxv2f64_ta:1454; CHECK: # %bb.0:1455; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1456; CHECK-NEXT: vfmsac.vv v12, v8, v10, v0.t1457; CHECK-NEXT: vmv.v.v v8, v121458; CHECK-NEXT: ret1459 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1460 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1461 %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1462 ret <vscale x 2 x double> %u1463}1464 1465define <vscale x 2 x double> @vmfsac_vf_nxv2f64_ta(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1466; CHECK-LABEL: vmfsac_vf_nxv2f64_ta:1467; CHECK: # %bb.0:1468; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1469; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1470; CHECK-NEXT: vmv.v.v v8, v101471; CHECK-NEXT: ret1472 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01473 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1474 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1475 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1476 %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1477 ret <vscale x 2 x double> %u1478}1479 1480define <vscale x 2 x double> @vmfsac_vf_nxv2f64_commute_ta(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1481; CHECK-LABEL: vmfsac_vf_nxv2f64_commute_ta:1482; CHECK: # %bb.0:1483; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1484; CHECK-NEXT: vfmsac.vf v10, fa0, v8, v0.t1485; CHECK-NEXT: vmv.v.v v8, v101486; CHECK-NEXT: ret1487 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01488 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1489 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1490 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %a, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1491 %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1492 ret <vscale x 2 x double> %u1493}1494 1495define <vscale x 4 x double> @vmfsac_vv_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1496; CHECK-LABEL: vmfsac_vv_nxv4f64:1497; CHECK: # %bb.0:1498; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1499; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t1500; CHECK-NEXT: vmv4r.v v8, v161501; CHECK-NEXT: ret1502 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1503 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1504 %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1505 ret <vscale x 4 x double> %u1506}1507 1508define <vscale x 4 x double> @vmfsac_vv_nxv4f64_unmasked(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1509; CHECK-LABEL: vmfsac_vv_nxv4f64_unmasked:1510; CHECK: # %bb.0:1511; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1512; CHECK-NEXT: vfmsac.vv v16, v8, v121513; CHECK-NEXT: vmv4r.v v8, v161514; CHECK-NEXT: ret1515 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1516 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1517 %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1518 ret <vscale x 4 x double> %u1519}1520 1521define <vscale x 4 x double> @vmfsac_vf_nxv4f64(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1522; CHECK-LABEL: vmfsac_vf_nxv4f64:1523; CHECK: # %bb.0:1524; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1525; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1526; CHECK-NEXT: vmv4r.v v8, v121527; CHECK-NEXT: ret1528 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01529 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1530 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1531 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1532 %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1533 ret <vscale x 4 x double> %u1534}1535 1536define <vscale x 4 x double> @vmfsac_vf_nxv4f64_commute(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1537; CHECK-LABEL: vmfsac_vf_nxv4f64_commute:1538; CHECK: # %bb.0:1539; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1540; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1541; CHECK-NEXT: vmv4r.v v8, v121542; CHECK-NEXT: ret1543 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01544 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1545 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1546 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %a, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1547 %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1548 ret <vscale x 4 x double> %u1549}1550 1551define <vscale x 4 x double> @vmfsac_vf_nxv4f64_unmasked(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, i32 zeroext %evl) {1552; CHECK-LABEL: vmfsac_vf_nxv4f64_unmasked:1553; CHECK: # %bb.0:1554; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1555; CHECK-NEXT: vfmsac.vf v12, fa0, v81556; CHECK-NEXT: vmv4r.v v8, v121557; CHECK-NEXT: ret1558 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01559 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1560 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1561 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1562 %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1563 ret <vscale x 4 x double> %u1564}1565 1566define <vscale x 4 x double> @vmfsac_vv_nxv4f64_ta(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1567; CHECK-LABEL: vmfsac_vv_nxv4f64_ta:1568; CHECK: # %bb.0:1569; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1570; CHECK-NEXT: vfmsac.vv v16, v8, v12, v0.t1571; CHECK-NEXT: vmv.v.v v8, v161572; CHECK-NEXT: ret1573 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1574 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1575 %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1576 ret <vscale x 4 x double> %u1577}1578 1579define <vscale x 4 x double> @vmfsac_vf_nxv4f64_ta(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1580; CHECK-LABEL: vmfsac_vf_nxv4f64_ta:1581; CHECK: # %bb.0:1582; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1583; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1584; CHECK-NEXT: vmv.v.v v8, v121585; CHECK-NEXT: ret1586 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01587 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1588 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1589 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1590 %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1591 ret <vscale x 4 x double> %u1592}1593 1594define <vscale x 4 x double> @vmfsac_vf_nxv4f64_commute_ta(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1595; CHECK-LABEL: vmfsac_vf_nxv4f64_commute_ta:1596; CHECK: # %bb.0:1597; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1598; CHECK-NEXT: vfmsac.vf v12, fa0, v8, v0.t1599; CHECK-NEXT: vmv.v.v v8, v121600; CHECK-NEXT: ret1601 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01602 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1603 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1604 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %a, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1605 %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1606 ret <vscale x 4 x double> %u1607}1608 1609define <vscale x 8 x double> @vmfsac_vv_nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1610; CHECK-LABEL: vmfsac_vv_nxv8f64:1611; CHECK: # %bb.0:1612; CHECK-NEXT: vl8re64.v v24, (a0)1613; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, mu1614; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t1615; CHECK-NEXT: vmv8r.v v8, v241616; CHECK-NEXT: ret1617 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1618 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1619 %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1620 ret <vscale x 8 x double> %u1621}1622 1623define <vscale x 8 x double> @vmfsac_vv_nxv8f64_unmasked(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1624; CHECK-LABEL: vmfsac_vv_nxv8f64_unmasked:1625; CHECK: # %bb.0:1626; CHECK-NEXT: vl8re64.v v24, (a0)1627; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, ma1628; CHECK-NEXT: vfmsac.vv v24, v8, v161629; CHECK-NEXT: vmv8r.v v8, v241630; CHECK-NEXT: ret1631 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1632 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1633 %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1634 ret <vscale x 8 x double> %u1635}1636 1637define <vscale x 8 x double> @vmfsac_vf_nxv8f64(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1638; CHECK-LABEL: vmfsac_vf_nxv8f64:1639; CHECK: # %bb.0:1640; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, mu1641; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1642; CHECK-NEXT: vmv8r.v v8, v161643; CHECK-NEXT: ret1644 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01645 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1646 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1647 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1648 %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1649 ret <vscale x 8 x double> %u1650}1651 1652define <vscale x 8 x double> @vmfsac_vf_nxv8f64_commute(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1653; CHECK-LABEL: vmfsac_vf_nxv8f64_commute:1654; CHECK: # %bb.0:1655; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, mu1656; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1657; CHECK-NEXT: vmv8r.v v8, v161658; CHECK-NEXT: ret1659 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01660 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1661 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1662 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %a, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1663 %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1664 ret <vscale x 8 x double> %u1665}1666 1667define <vscale x 8 x double> @vmfsac_vf_nxv8f64_unmasked(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, i32 zeroext %evl) {1668; CHECK-LABEL: vmfsac_vf_nxv8f64_unmasked:1669; CHECK: # %bb.0:1670; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1671; CHECK-NEXT: vfmsac.vf v16, fa0, v81672; CHECK-NEXT: vmv8r.v v8, v161673; CHECK-NEXT: ret1674 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01675 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1676 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1677 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1678 %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1679 ret <vscale x 8 x double> %u1680}1681 1682define <vscale x 8 x double> @vmfsac_vv_nxv8f64_ta(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1683; CHECK-LABEL: vmfsac_vv_nxv8f64_ta:1684; CHECK: # %bb.0:1685; CHECK-NEXT: vl8re64.v v24, (a0)1686; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu1687; CHECK-NEXT: vfmsac.vv v24, v8, v16, v0.t1688; CHECK-NEXT: vmv.v.v v8, v241689; CHECK-NEXT: ret1690 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1691 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1692 %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1693 ret <vscale x 8 x double> %u1694}1695 1696define <vscale x 8 x double> @vmfsac_vf_nxv8f64_ta(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1697; CHECK-LABEL: vmfsac_vf_nxv8f64_ta:1698; CHECK: # %bb.0:1699; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu1700; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1701; CHECK-NEXT: vmv.v.v v8, v161702; CHECK-NEXT: ret1703 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01704 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1705 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1706 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1707 %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1708 ret <vscale x 8 x double> %u1709}1710 1711define <vscale x 8 x double> @vmfsac_vf_nxv8f64_commute_ta(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1712; CHECK-LABEL: vmfsac_vf_nxv8f64_commute_ta:1713; CHECK: # %bb.0:1714; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu1715; CHECK-NEXT: vfmsac.vf v16, fa0, v8, v0.t1716; CHECK-NEXT: vmv.v.v v8, v161717; CHECK-NEXT: ret1718 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01719 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1720 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1721 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %a, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1722 %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1723 ret <vscale x 8 x double> %u1724}1725