1845 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> @vfnmacc_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: vfnmacc_vv_nxv1f16:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu11; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t12; CHECK-NEXT: vmv1r.v v8, v1013; CHECK-NEXT: ret14 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)15 %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)16 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)17 %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)18 ret <vscale x 1 x half> %u19}20 21define <vscale x 1 x half> @vfnmacc_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) {22; CHECK-LABEL: vfnmacc_vv_nxv1f16_unmasked:23; CHECK: # %bb.0:24; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma25; CHECK-NEXT: vfnmacc.vv v10, v8, v926; CHECK-NEXT: vmv1r.v v8, v1027; CHECK-NEXT: ret28 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)29 %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)30 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)31 %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)32 ret <vscale x 1 x half> %u33}34 35define <vscale x 1 x half> @vfnmacc_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) {36; CHECK-LABEL: vfnmacc_vf_nxv1f16:37; CHECK: # %bb.0:38; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu39; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t40; CHECK-NEXT: vmv1r.v v8, v941; CHECK-NEXT: ret42 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 043 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer44 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)45 %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)46 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)47 %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)48 ret <vscale x 1 x half> %u49}50 51define <vscale x 1 x half> @vfnmacc_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) {52; CHECK-LABEL: vfnmacc_vf_nxv1f16_commute:53; CHECK: # %bb.0:54; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu55; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t56; CHECK-NEXT: vmv1r.v v8, v957; CHECK-NEXT: ret58 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 059 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer60 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)61 %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)62 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %nega, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)63 %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)64 ret <vscale x 1 x half> %u65}66 67define <vscale x 1 x half> @vfnmacc_vf_nxv1f16_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x half> %c, i32 zeroext %evl) {68; CHECK-LABEL: vfnmacc_vf_nxv1f16_unmasked:69; CHECK: # %bb.0:70; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma71; CHECK-NEXT: vfnmacc.vf v9, fa0, v872; CHECK-NEXT: vmv1r.v v8, v973; CHECK-NEXT: ret74 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 075 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer76 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)77 %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)78 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)79 %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)80 ret <vscale x 1 x half> %u81}82 83define <vscale x 1 x half> @vfnmacc_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) {84; CHECK-LABEL: vfnmacc_vv_nxv1f16_ta:85; CHECK: # %bb.0:86; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu87; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t88; CHECK-NEXT: vmv1r.v v8, v1089; CHECK-NEXT: ret90 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)91 %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)92 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)93 %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)94 ret <vscale x 1 x half> %u95}96 97define <vscale x 1 x half> @vfnmacc_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) {98; CHECK-LABEL: vfnmacc_vf_nxv1f16_ta:99; CHECK: # %bb.0:100; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu101; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t102; CHECK-NEXT: vmv1r.v v8, v9103; CHECK-NEXT: ret104 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0105 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer106 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)107 %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)108 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %vb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)109 %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)110 ret <vscale x 1 x half> %u111}112 113define <vscale x 1 x half> @vfnmacc_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) {114; CHECK-LABEL: vfnmacc_vf_nxv1f16_commute_ta:115; CHECK: # %bb.0:116; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu117; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t118; CHECK-NEXT: vmv1r.v v8, v9119; CHECK-NEXT: ret120 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0121 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer122 %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)123 %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)124 %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %nega, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)125 %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)126 ret <vscale x 1 x half> %u127}128 129define <vscale x 2 x half> @vfnmacc_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) {130; CHECK-LABEL: vfnmacc_vv_nxv2f16:131; CHECK: # %bb.0:132; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu133; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t134; CHECK-NEXT: vmv1r.v v8, v10135; CHECK-NEXT: ret136 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)137 %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)138 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %nega, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)139 %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)140 ret <vscale x 2 x half> %u141}142 143define <vscale x 2 x half> @vfnmacc_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) {144; CHECK-LABEL: vfnmacc_vv_nxv2f16_unmasked:145; CHECK: # %bb.0:146; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma147; CHECK-NEXT: vfnmacc.vv v10, v8, v9148; CHECK-NEXT: vmv1r.v v8, v10149; CHECK-NEXT: ret150 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)151 %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)152 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %nega, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)153 %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)154 ret <vscale x 2 x half> %u155}156 157define <vscale x 2 x half> @vfnmacc_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) {158; CHECK-LABEL: vfnmacc_vf_nxv2f16:159; CHECK: # %bb.0:160; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu161; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t162; CHECK-NEXT: vmv1r.v v8, v9163; CHECK-NEXT: ret164 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0165 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer166 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)167 %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)168 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %nega, <vscale x 2 x half> %vb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)169 %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)170 ret <vscale x 2 x half> %u171}172 173define <vscale x 2 x half> @vfnmacc_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) {174; CHECK-LABEL: vfnmacc_vf_nxv2f16_commute:175; CHECK: # %bb.0:176; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu177; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t178; CHECK-NEXT: vmv1r.v v8, v9179; CHECK-NEXT: ret180 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0181 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer182 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)183 %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)184 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %nega, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)185 %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)186 ret <vscale x 2 x half> %u187}188 189define <vscale x 2 x half> @vfnmacc_vf_nxv2f16_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x half> %c, i32 zeroext %evl) {190; CHECK-LABEL: vfnmacc_vf_nxv2f16_unmasked:191; CHECK: # %bb.0:192; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma193; CHECK-NEXT: vfnmacc.vf v9, fa0, v8194; CHECK-NEXT: vmv1r.v v8, v9195; CHECK-NEXT: ret196 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0197 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer198 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)199 %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> %nega, <vscale x 2 x half> %vb, <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.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <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> @vfnmacc_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) {206; CHECK-LABEL: vfnmacc_vv_nxv2f16_ta:207; CHECK: # %bb.0:208; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu209; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t210; CHECK-NEXT: vmv1r.v v8, v10211; CHECK-NEXT: ret212 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)213 %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)214 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %nega, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)215 %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)216 ret <vscale x 2 x half> %u217}218 219define <vscale x 2 x half> @vfnmacc_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) {220; CHECK-LABEL: vfnmacc_vf_nxv2f16_ta:221; CHECK: # %bb.0:222; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu223; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t224; CHECK-NEXT: vmv1r.v v8, v9225; CHECK-NEXT: ret226 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0227 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer228 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)229 %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> %nega, <vscale x 2 x half> %vb, <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 2 x half> @vfnmacc_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) {236; CHECK-LABEL: vfnmacc_vf_nxv2f16_commute_ta:237; CHECK: # %bb.0:238; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu239; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t240; CHECK-NEXT: vmv1r.v v8, v9241; CHECK-NEXT: ret242 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0243 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer244 %nega = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)245 %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)246 %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %nega, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)247 %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)248 ret <vscale x 2 x half> %u249}250 251define <vscale x 4 x half> @vfnmacc_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) {252; CHECK-LABEL: vfnmacc_vv_nxv4f16:253; CHECK: # %bb.0:254; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu255; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t256; CHECK-NEXT: vmv1r.v v8, v10257; CHECK-NEXT: ret258 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)259 %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)260 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)261 %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)262 ret <vscale x 4 x half> %u263}264 265define <vscale x 4 x half> @vfnmacc_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) {266; CHECK-LABEL: vfnmacc_vv_nxv4f16_unmasked:267; CHECK: # %bb.0:268; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma269; CHECK-NEXT: vfnmacc.vv v10, v8, v9270; CHECK-NEXT: vmv1r.v v8, v10271; CHECK-NEXT: ret272 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)273 %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)274 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)275 %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)276 ret <vscale x 4 x half> %u277}278 279define <vscale x 4 x half> @vfnmacc_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) {280; CHECK-LABEL: vfnmacc_vf_nxv4f16:281; CHECK: # %bb.0:282; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu283; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t284; CHECK-NEXT: vmv1r.v v8, v9285; CHECK-NEXT: ret286 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0287 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer288 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)289 %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)290 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)291 %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)292 ret <vscale x 4 x half> %u293}294 295define <vscale x 4 x half> @vfnmacc_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) {296; CHECK-LABEL: vfnmacc_vf_nxv4f16_commute:297; CHECK: # %bb.0:298; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu299; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t300; CHECK-NEXT: vmv1r.v v8, v9301; CHECK-NEXT: ret302 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0303 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer304 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)305 %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)306 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %nega, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)307 %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)308 ret <vscale x 4 x half> %u309}310 311define <vscale x 4 x half> @vfnmacc_vf_nxv4f16_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x half> %c, i32 zeroext %evl) {312; CHECK-LABEL: vfnmacc_vf_nxv4f16_unmasked:313; CHECK: # %bb.0:314; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma315; CHECK-NEXT: vfnmacc.vf v9, fa0, v8316; CHECK-NEXT: vmv1r.v v8, v9317; CHECK-NEXT: ret318 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0319 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer320 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)321 %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)322 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)323 %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)324 ret <vscale x 4 x half> %u325}326 327define <vscale x 4 x half> @vfnmacc_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) {328; CHECK-LABEL: vfnmacc_vv_nxv4f16_ta:329; CHECK: # %bb.0:330; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu331; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t332; CHECK-NEXT: vmv.v.v v8, v10333; CHECK-NEXT: ret334 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)335 %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)336 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)337 %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)338 ret <vscale x 4 x half> %u339}340 341define <vscale x 4 x half> @vfnmacc_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) {342; CHECK-LABEL: vfnmacc_vf_nxv4f16_ta:343; CHECK: # %bb.0:344; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu345; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t346; CHECK-NEXT: vmv.v.v v8, v9347; CHECK-NEXT: ret348 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0349 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer350 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)351 %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)352 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %nega, <vscale x 4 x half> %vb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)353 %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)354 ret <vscale x 4 x half> %u355}356 357define <vscale x 4 x half> @vfnmacc_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) {358; CHECK-LABEL: vfnmacc_vf_nxv4f16_commute_ta:359; CHECK: # %bb.0:360; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu361; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t362; CHECK-NEXT: vmv.v.v v8, v9363; CHECK-NEXT: ret364 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0365 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer366 %nega = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)367 %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)368 %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %nega, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)369 %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)370 ret <vscale x 4 x half> %u371}372 373define <vscale x 8 x half> @vfnmacc_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) {374; CHECK-LABEL: vfnmacc_vv_nxv8f16:375; CHECK: # %bb.0:376; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu377; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t378; CHECK-NEXT: vmv2r.v v8, v12379; CHECK-NEXT: ret380 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)381 %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)382 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %nega, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)383 %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)384 ret <vscale x 8 x half> %u385}386 387define <vscale x 8 x half> @vfnmacc_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) {388; CHECK-LABEL: vfnmacc_vv_nxv8f16_unmasked:389; CHECK: # %bb.0:390; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma391; CHECK-NEXT: vfnmacc.vv v12, v8, v10392; CHECK-NEXT: vmv2r.v v8, v12393; CHECK-NEXT: ret394 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)395 %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)396 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %nega, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)397 %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)398 ret <vscale x 8 x half> %u399}400 401define <vscale x 8 x half> @vfnmacc_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) {402; CHECK-LABEL: vfnmacc_vf_nxv8f16:403; CHECK: # %bb.0:404; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu405; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t406; CHECK-NEXT: vmv2r.v v8, v10407; CHECK-NEXT: ret408 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0409 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer410 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)411 %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)412 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %nega, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)413 %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)414 ret <vscale x 8 x half> %u415}416 417define <vscale x 8 x half> @vfnmacc_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) {418; CHECK-LABEL: vfnmacc_vf_nxv8f16_commute:419; CHECK: # %bb.0:420; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu421; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t422; CHECK-NEXT: vmv2r.v v8, v10423; CHECK-NEXT: ret424 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0425 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer426 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)427 %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> %vb, <vscale x 8 x half> %nega, <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.merge.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> @vfnmacc_vf_nxv8f16_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x half> %c, i32 zeroext %evl) {434; CHECK-LABEL: vfnmacc_vf_nxv8f16_unmasked:435; CHECK: # %bb.0:436; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma437; CHECK-NEXT: vfnmacc.vf v10, fa0, v8438; CHECK-NEXT: vmv2r.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 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)443 %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)444 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %nega, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)445 %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)446 ret <vscale x 8 x half> %u447}448 449define <vscale x 8 x half> @vfnmacc_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) {450; CHECK-LABEL: vfnmacc_vv_nxv8f16_ta:451; CHECK: # %bb.0:452; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu453; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t454; CHECK-NEXT: vmv.v.v v8, v12455; CHECK-NEXT: ret456 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)457 %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> %nega, <vscale x 8 x half> %b, <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 8 x half> @vfnmacc_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) {464; CHECK-LABEL: vfnmacc_vf_nxv8f16_ta:465; CHECK: # %bb.0:466; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu467; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t468; CHECK-NEXT: vmv.v.v v8, v10469; CHECK-NEXT: ret470 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0471 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer472 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)473 %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)474 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %nega, <vscale x 8 x half> %vb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)475 %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)476 ret <vscale x 8 x half> %u477}478 479define <vscale x 8 x half> @vfnmacc_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) {480; CHECK-LABEL: vfnmacc_vf_nxv8f16_commute_ta:481; CHECK: # %bb.0:482; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu483; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t484; CHECK-NEXT: vmv.v.v v8, v10485; CHECK-NEXT: ret486 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0487 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer488 %nega = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)489 %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)490 %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %nega, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)491 %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)492 ret <vscale x 8 x half> %u493}494 495define <vscale x 16 x half> @vfnmacc_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) {496; CHECK-LABEL: vfnmacc_vv_nxv16f16:497; CHECK: # %bb.0:498; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu499; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t500; CHECK-NEXT: vmv4r.v v8, v16501; CHECK-NEXT: ret502 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)503 %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)504 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)505 %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)506 ret <vscale x 16 x half> %u507}508 509define <vscale x 16 x half> @vfnmacc_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) {510; CHECK-LABEL: vfnmacc_vv_nxv16f16_unmasked:511; CHECK: # %bb.0:512; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma513; CHECK-NEXT: vfnmacc.vv v16, v8, v12514; CHECK-NEXT: vmv4r.v v8, v16515; CHECK-NEXT: ret516 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)517 %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)518 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)519 %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)520 ret <vscale x 16 x half> %u521}522 523define <vscale x 16 x half> @vfnmacc_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) {524; CHECK-LABEL: vfnmacc_vf_nxv16f16:525; CHECK: # %bb.0:526; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu527; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t528; CHECK-NEXT: vmv4r.v v8, v12529; CHECK-NEXT: ret530 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0531 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer532 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)533 %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)534 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)535 %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)536 ret <vscale x 16 x half> %u537}538 539define <vscale x 16 x half> @vfnmacc_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) {540; CHECK-LABEL: vfnmacc_vf_nxv16f16_commute:541; CHECK: # %bb.0:542; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu543; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t544; CHECK-NEXT: vmv4r.v v8, v12545; CHECK-NEXT: ret546 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0547 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer548 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)549 %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)550 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %nega, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)551 %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)552 ret <vscale x 16 x half> %u553}554 555define <vscale x 16 x half> @vfnmacc_vf_nxv16f16_unmasked(<vscale x 16 x half> %a, half %b, <vscale x 16 x half> %c, i32 zeroext %evl) {556; CHECK-LABEL: vfnmacc_vf_nxv16f16_unmasked:557; CHECK: # %bb.0:558; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma559; CHECK-NEXT: vfnmacc.vf v12, fa0, v8560; CHECK-NEXT: vmv4r.v v8, v12561; CHECK-NEXT: ret562 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0563 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer564 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)565 %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)566 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)567 %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)568 ret <vscale x 16 x half> %u569}570 571define <vscale x 16 x half> @vfnmacc_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) {572; CHECK-LABEL: vfnmacc_vv_nxv16f16_ta:573; CHECK: # %bb.0:574; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu575; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t576; CHECK-NEXT: vmv.v.v v8, v16577; CHECK-NEXT: ret578 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)579 %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)580 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)581 %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)582 ret <vscale x 16 x half> %u583}584 585define <vscale x 16 x half> @vfnmacc_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) {586; CHECK-LABEL: vfnmacc_vf_nxv16f16_ta:587; CHECK: # %bb.0:588; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu589; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t590; CHECK-NEXT: vmv.v.v v8, v12591; CHECK-NEXT: ret592 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0593 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer594 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)595 %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)596 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %nega, <vscale x 16 x half> %vb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)597 %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)598 ret <vscale x 16 x half> %u599}600 601define <vscale x 16 x half> @vfnmacc_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) {602; CHECK-LABEL: vfnmacc_vf_nxv16f16_commute_ta:603; CHECK: # %bb.0:604; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu605; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t606; CHECK-NEXT: vmv.v.v v8, v12607; CHECK-NEXT: ret608 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0609 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer610 %nega = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)611 %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)612 %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %nega, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)613 %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)614 ret <vscale x 16 x half> %u615}616 617define <vscale x 32 x half> @vfnmacc_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) {618; CHECK-LABEL: vfnmacc_vv_nxv32f16:619; CHECK: # %bb.0:620; CHECK-NEXT: vl8re16.v v24, (a0)621; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, mu622; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t623; CHECK-NEXT: vmv8r.v v8, v24624; CHECK-NEXT: ret625 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)626 %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)627 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)628 %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)629 ret <vscale x 32 x half> %u630}631 632define <vscale x 32 x half> @vfnmacc_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) {633; CHECK-LABEL: vfnmacc_vv_nxv32f16_unmasked:634; CHECK: # %bb.0:635; CHECK-NEXT: vl8re16.v v24, (a0)636; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, ma637; CHECK-NEXT: vfnmacc.vv v24, v8, v16638; CHECK-NEXT: vmv8r.v v8, v24639; CHECK-NEXT: ret640 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)641 %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)642 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)643 %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)644 ret <vscale x 32 x half> %u645}646 647define <vscale x 32 x half> @vfnmacc_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) {648; CHECK-LABEL: vfnmacc_vf_nxv32f16:649; CHECK: # %bb.0:650; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, mu651; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t652; CHECK-NEXT: vmv8r.v v8, v16653; CHECK-NEXT: ret654 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0655 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer656 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)657 %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)658 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)659 %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)660 ret <vscale x 32 x half> %u661}662 663define <vscale x 32 x half> @vfnmacc_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) {664; CHECK-LABEL: vfnmacc_vf_nxv32f16_commute:665; CHECK: # %bb.0:666; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, mu667; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t668; CHECK-NEXT: vmv8r.v v8, v16669; CHECK-NEXT: ret670 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0671 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer672 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)673 %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> %vb, <vscale x 32 x half> %nega, <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.merge.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> @vfnmacc_vf_nxv32f16_unmasked(<vscale x 32 x half> %a, half %b, <vscale x 32 x half> %c, i32 zeroext %evl) {680; CHECK-LABEL: vfnmacc_vf_nxv32f16_unmasked:681; CHECK: # %bb.0:682; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma683; CHECK-NEXT: vfnmacc.vf v16, fa0, v8684; CHECK-NEXT: vmv8r.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 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)689 %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)690 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)691 %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)692 ret <vscale x 32 x half> %u693}694 695define <vscale x 32 x half> @vfnmacc_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) {696; CHECK-LABEL: vfnmacc_vv_nxv32f16_ta:697; CHECK: # %bb.0:698; CHECK-NEXT: vl8re16.v v24, (a0)699; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu700; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t701; CHECK-NEXT: vmv.v.v v8, v24702; CHECK-NEXT: ret703 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)704 %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)705 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)706 %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)707 ret <vscale x 32 x half> %u708}709 710define <vscale x 32 x half> @vfnmacc_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) {711; CHECK-LABEL: vfnmacc_vf_nxv32f16_ta:712; CHECK: # %bb.0:713; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu714; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t715; CHECK-NEXT: vmv.v.v v8, v16716; CHECK-NEXT: ret717 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0718 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer719 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)720 %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)721 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %nega, <vscale x 32 x half> %vb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)722 %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)723 ret <vscale x 32 x half> %u724}725 726define <vscale x 32 x half> @vfnmacc_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) {727; CHECK-LABEL: vfnmacc_vf_nxv32f16_commute_ta:728; CHECK: # %bb.0:729; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu730; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t731; CHECK-NEXT: vmv.v.v v8, v16732; CHECK-NEXT: ret733 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0734 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer735 %nega = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x i1> splat (i1 -1), i32 %evl)736 %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)737 %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %nega, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 -1), i32 %evl)738 %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)739 ret <vscale x 32 x half> %u740}741 742define <vscale x 1 x float> @vfnmacc_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) {743; CHECK-LABEL: vfnmacc_vv_nxv1f32:744; CHECK: # %bb.0:745; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu746; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t747; CHECK-NEXT: vmv1r.v v8, v10748; CHECK-NEXT: ret749 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)750 %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)751 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)752 %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)753 ret <vscale x 1 x float> %u754}755 756define <vscale x 1 x float> @vfnmacc_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) {757; CHECK-LABEL: vfnmacc_vv_nxv1f32_unmasked:758; CHECK: # %bb.0:759; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma760; CHECK-NEXT: vfnmacc.vv v10, v8, v9761; CHECK-NEXT: vmv1r.v v8, v10762; CHECK-NEXT: ret763 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)764 %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)765 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)766 %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)767 ret <vscale x 1 x float> %u768}769 770define <vscale x 1 x float> @vfnmacc_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) {771; CHECK-LABEL: vfnmacc_vf_nxv1f32:772; CHECK: # %bb.0:773; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu774; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t775; CHECK-NEXT: vmv1r.v v8, v9776; CHECK-NEXT: ret777 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0778 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer779 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)780 %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)781 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)782 %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)783 ret <vscale x 1 x float> %u784}785 786define <vscale x 1 x float> @vfnmacc_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) {787; CHECK-LABEL: vfnmacc_vf_nxv1f32_commute:788; CHECK: # %bb.0:789; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu790; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t791; CHECK-NEXT: vmv1r.v v8, v9792; CHECK-NEXT: ret793 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0794 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer795 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)796 %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)797 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %nega, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)798 %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)799 ret <vscale x 1 x float> %u800}801 802define <vscale x 1 x float> @vfnmacc_vf_nxv1f32_unmasked(<vscale x 1 x float> %a, float %b, <vscale x 1 x float> %c, i32 zeroext %evl) {803; CHECK-LABEL: vfnmacc_vf_nxv1f32_unmasked:804; CHECK: # %bb.0:805; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma806; CHECK-NEXT: vfnmacc.vf v9, fa0, v8807; CHECK-NEXT: vmv1r.v v8, v9808; CHECK-NEXT: ret809 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0810 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer811 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)812 %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)813 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)814 %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)815 ret <vscale x 1 x float> %u816}817 818define <vscale x 1 x float> @vfnmacc_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) {819; CHECK-LABEL: vfnmacc_vv_nxv1f32_ta:820; CHECK: # %bb.0:821; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu822; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t823; CHECK-NEXT: vmv1r.v v8, v10824; CHECK-NEXT: ret825 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)826 %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)827 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)828 %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)829 ret <vscale x 1 x float> %u830}831 832define <vscale x 1 x float> @vfnmacc_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) {833; CHECK-LABEL: vfnmacc_vf_nxv1f32_ta:834; CHECK: # %bb.0:835; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu836; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t837; CHECK-NEXT: vmv1r.v v8, v9838; CHECK-NEXT: ret839 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0840 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer841 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)842 %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)843 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)844 %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)845 ret <vscale x 1 x float> %u846}847 848define <vscale x 1 x float> @vfnmacc_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) {849; CHECK-LABEL: vfnmacc_vf_nxv1f32_commute_ta:850; CHECK: # %bb.0:851; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu852; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t853; CHECK-NEXT: vmv1r.v v8, v9854; CHECK-NEXT: ret855 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0856 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer857 %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)858 %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)859 %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %nega, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)860 %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)861 ret <vscale x 1 x float> %u862}863 864define <vscale x 2 x float> @vfnmacc_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) {865; CHECK-LABEL: vfnmacc_vv_nxv2f32:866; CHECK: # %bb.0:867; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu868; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t869; CHECK-NEXT: vmv1r.v v8, v10870; CHECK-NEXT: ret871 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)872 %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)873 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)874 %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)875 ret <vscale x 2 x float> %u876}877 878define <vscale x 2 x float> @vfnmacc_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) {879; CHECK-LABEL: vfnmacc_vv_nxv2f32_unmasked:880; CHECK: # %bb.0:881; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma882; CHECK-NEXT: vfnmacc.vv v10, v8, v9883; CHECK-NEXT: vmv1r.v v8, v10884; CHECK-NEXT: ret885 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)886 %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> %nega, <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.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <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> @vfnmacc_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) {893; CHECK-LABEL: vfnmacc_vf_nxv2f32:894; CHECK: # %bb.0:895; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu896; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t897; CHECK-NEXT: vmv1r.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 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)902 %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)903 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)904 %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)905 ret <vscale x 2 x float> %u906}907 908define <vscale x 2 x float> @vfnmacc_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) {909; CHECK-LABEL: vfnmacc_vf_nxv2f32_commute:910; CHECK: # %bb.0:911; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu912; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t913; CHECK-NEXT: vmv1r.v v8, v9914; CHECK-NEXT: ret915 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0916 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer917 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)918 %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)919 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %nega, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)920 %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)921 ret <vscale x 2 x float> %u922}923 924define <vscale x 2 x float> @vfnmacc_vf_nxv2f32_unmasked(<vscale x 2 x float> %a, float %b, <vscale x 2 x float> %c, i32 zeroext %evl) {925; CHECK-LABEL: vfnmacc_vf_nxv2f32_unmasked:926; CHECK: # %bb.0:927; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma928; CHECK-NEXT: vfnmacc.vf v9, fa0, v8929; CHECK-NEXT: vmv1r.v v8, v9930; CHECK-NEXT: ret931 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0932 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer933 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)934 %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)935 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)936 %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)937 ret <vscale x 2 x float> %u938}939 940define <vscale x 2 x float> @vfnmacc_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) {941; CHECK-LABEL: vfnmacc_vv_nxv2f32_ta:942; CHECK: # %bb.0:943; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu944; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t945; CHECK-NEXT: vmv.v.v v8, v10946; CHECK-NEXT: ret947 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)948 %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)949 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)950 %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)951 ret <vscale x 2 x float> %u952}953 954define <vscale x 2 x float> @vfnmacc_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) {955; CHECK-LABEL: vfnmacc_vf_nxv2f32_ta:956; CHECK: # %bb.0:957; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu958; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t959; CHECK-NEXT: vmv.v.v v8, v9960; CHECK-NEXT: ret961 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0962 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer963 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)964 %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)965 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)966 %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)967 ret <vscale x 2 x float> %u968}969 970define <vscale x 2 x float> @vfnmacc_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) {971; CHECK-LABEL: vfnmacc_vf_nxv2f32_commute_ta:972; CHECK: # %bb.0:973; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu974; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t975; CHECK-NEXT: vmv.v.v v8, v9976; CHECK-NEXT: ret977 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0978 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer979 %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)980 %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)981 %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %nega, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)982 %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)983 ret <vscale x 2 x float> %u984}985 986define <vscale x 4 x float> @vfnmacc_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) {987; CHECK-LABEL: vfnmacc_vv_nxv4f32:988; CHECK: # %bb.0:989; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu990; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t991; CHECK-NEXT: vmv2r.v v8, v12992; CHECK-NEXT: ret993 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)994 %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)995 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)996 %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)997 ret <vscale x 4 x float> %u998}999 1000define <vscale x 4 x float> @vfnmacc_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) {1001; CHECK-LABEL: vfnmacc_vv_nxv4f32_unmasked:1002; CHECK: # %bb.0:1003; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma1004; CHECK-NEXT: vfnmacc.vv v12, v8, v101005; CHECK-NEXT: vmv2r.v v8, v121006; CHECK-NEXT: ret1007 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1008 %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)1009 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1010 %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)1011 ret <vscale x 4 x float> %u1012}1013 1014define <vscale x 4 x float> @vfnmacc_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) {1015; CHECK-LABEL: vfnmacc_vf_nxv4f32:1016; CHECK: # %bb.0:1017; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu1018; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1019; CHECK-NEXT: vmv2r.v v8, v101020; CHECK-NEXT: ret1021 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01022 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1023 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1024 %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)1025 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1026 %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)1027 ret <vscale x 4 x float> %u1028}1029 1030define <vscale x 4 x float> @vfnmacc_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) {1031; CHECK-LABEL: vfnmacc_vf_nxv4f32_commute:1032; CHECK: # %bb.0:1033; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu1034; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1035; CHECK-NEXT: vmv2r.v v8, v101036; CHECK-NEXT: ret1037 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01038 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1039 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1040 %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)1041 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %nega, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1042 %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)1043 ret <vscale x 4 x float> %u1044}1045 1046define <vscale x 4 x float> @vfnmacc_vf_nxv4f32_unmasked(<vscale x 4 x float> %a, float %b, <vscale x 4 x float> %c, i32 zeroext %evl) {1047; CHECK-LABEL: vfnmacc_vf_nxv4f32_unmasked:1048; CHECK: # %bb.0:1049; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma1050; CHECK-NEXT: vfnmacc.vf v10, fa0, v81051; CHECK-NEXT: vmv2r.v v8, v101052; CHECK-NEXT: ret1053 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01054 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1055 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1056 %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)1057 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1058 %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)1059 ret <vscale x 4 x float> %u1060}1061 1062define <vscale x 4 x float> @vfnmacc_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) {1063; CHECK-LABEL: vfnmacc_vv_nxv4f32_ta:1064; CHECK: # %bb.0:1065; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1066; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t1067; CHECK-NEXT: vmv.v.v v8, v121068; CHECK-NEXT: ret1069 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1070 %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)1071 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1072 %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)1073 ret <vscale x 4 x float> %u1074}1075 1076define <vscale x 4 x float> @vfnmacc_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) {1077; CHECK-LABEL: vfnmacc_vf_nxv4f32_ta:1078; CHECK: # %bb.0:1079; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1080; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1081; CHECK-NEXT: vmv.v.v v8, v101082; CHECK-NEXT: ret1083 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01084 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1085 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1086 %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)1087 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1088 %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)1089 ret <vscale x 4 x float> %u1090}1091 1092define <vscale x 4 x float> @vfnmacc_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) {1093; CHECK-LABEL: vfnmacc_vf_nxv4f32_commute_ta:1094; CHECK: # %bb.0:1095; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1096; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1097; CHECK-NEXT: vmv.v.v v8, v101098; CHECK-NEXT: ret1099 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 01100 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1101 %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1102 %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)1103 %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %nega, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1104 %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)1105 ret <vscale x 4 x float> %u1106}1107 1108define <vscale x 8 x float> @vfnmacc_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) {1109; CHECK-LABEL: vfnmacc_vv_nxv8f32:1110; CHECK: # %bb.0:1111; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1112; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1113; CHECK-NEXT: vmv4r.v v8, v161114; CHECK-NEXT: ret1115 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1116 %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)1117 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1118 %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)1119 ret <vscale x 8 x float> %u1120}1121 1122define <vscale x 8 x float> @vfnmacc_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) {1123; CHECK-LABEL: vfnmacc_vv_nxv8f32_unmasked:1124; CHECK: # %bb.0:1125; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1126; CHECK-NEXT: vfnmacc.vv v16, v8, v121127; CHECK-NEXT: vmv4r.v v8, v161128; CHECK-NEXT: ret1129 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1130 %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)1131 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1132 %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)1133 ret <vscale x 8 x float> %u1134}1135 1136define <vscale x 8 x float> @vfnmacc_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) {1137; CHECK-LABEL: vfnmacc_vf_nxv8f32:1138; CHECK: # %bb.0:1139; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1140; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1141; CHECK-NEXT: vmv4r.v v8, v121142; CHECK-NEXT: ret1143 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01144 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1145 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1146 %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)1147 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1148 %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)1149 ret <vscale x 8 x float> %u1150}1151 1152define <vscale x 8 x float> @vfnmacc_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) {1153; CHECK-LABEL: vfnmacc_vf_nxv8f32_commute:1154; CHECK: # %bb.0:1155; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1156; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1157; CHECK-NEXT: vmv4r.v v8, v121158; CHECK-NEXT: ret1159 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01160 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1161 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1162 %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)1163 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %nega, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1164 %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)1165 ret <vscale x 8 x float> %u1166}1167 1168define <vscale x 8 x float> @vfnmacc_vf_nxv8f32_unmasked(<vscale x 8 x float> %a, float %b, <vscale x 8 x float> %c, i32 zeroext %evl) {1169; CHECK-LABEL: vfnmacc_vf_nxv8f32_unmasked:1170; CHECK: # %bb.0:1171; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1172; CHECK-NEXT: vfnmacc.vf v12, fa0, v81173; CHECK-NEXT: vmv4r.v v8, v121174; CHECK-NEXT: ret1175 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01176 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1177 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1178 %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)1179 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1180 %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)1181 ret <vscale x 8 x float> %u1182}1183 1184define <vscale x 8 x float> @vfnmacc_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) {1185; CHECK-LABEL: vfnmacc_vv_nxv8f32_ta:1186; CHECK: # %bb.0:1187; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1188; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1189; CHECK-NEXT: vmv.v.v v8, v161190; CHECK-NEXT: ret1191 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1192 %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)1193 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1194 %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)1195 ret <vscale x 8 x float> %u1196}1197 1198define <vscale x 8 x float> @vfnmacc_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) {1199; CHECK-LABEL: vfnmacc_vf_nxv8f32_ta:1200; CHECK: # %bb.0:1201; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1202; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1203; CHECK-NEXT: vmv.v.v v8, v121204; CHECK-NEXT: ret1205 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01206 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1207 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1208 %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)1209 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1210 %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)1211 ret <vscale x 8 x float> %u1212}1213 1214define <vscale x 8 x float> @vfnmacc_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) {1215; CHECK-LABEL: vfnmacc_vf_nxv8f32_commute_ta:1216; CHECK: # %bb.0:1217; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1218; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1219; CHECK-NEXT: vmv.v.v v8, v121220; CHECK-NEXT: ret1221 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01222 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1223 %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1224 %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)1225 %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %nega, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1226 %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)1227 ret <vscale x 8 x float> %u1228}1229 1230define <vscale x 16 x float> @vfnmacc_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) {1231; CHECK-LABEL: vfnmacc_vv_nxv16f32:1232; CHECK: # %bb.0:1233; CHECK-NEXT: vl8re32.v v24, (a0)1234; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, mu1235; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t1236; CHECK-NEXT: vmv8r.v v8, v241237; CHECK-NEXT: ret1238 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1239 %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)1240 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1241 %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)1242 ret <vscale x 16 x float> %u1243}1244 1245define <vscale x 16 x float> @vfnmacc_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) {1246; CHECK-LABEL: vfnmacc_vv_nxv16f32_unmasked:1247; CHECK: # %bb.0:1248; CHECK-NEXT: vl8re32.v v24, (a0)1249; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, ma1250; CHECK-NEXT: vfnmacc.vv v24, v8, v161251; CHECK-NEXT: vmv8r.v v8, v241252; CHECK-NEXT: ret1253 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1254 %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)1255 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1256 %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)1257 ret <vscale x 16 x float> %u1258}1259 1260define <vscale x 16 x float> @vfnmacc_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) {1261; CHECK-LABEL: vfnmacc_vf_nxv16f32:1262; CHECK: # %bb.0:1263; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, mu1264; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1265; CHECK-NEXT: vmv8r.v v8, v161266; CHECK-NEXT: ret1267 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01268 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1269 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1270 %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)1271 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1272 %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)1273 ret <vscale x 16 x float> %u1274}1275 1276define <vscale x 16 x float> @vfnmacc_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) {1277; CHECK-LABEL: vfnmacc_vf_nxv16f32_commute:1278; CHECK: # %bb.0:1279; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, mu1280; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1281; CHECK-NEXT: vmv8r.v v8, v161282; CHECK-NEXT: ret1283 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01284 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1285 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1286 %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)1287 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %nega, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1288 %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)1289 ret <vscale x 16 x float> %u1290}1291 1292define <vscale x 16 x float> @vfnmacc_vf_nxv16f32_unmasked(<vscale x 16 x float> %a, float %b, <vscale x 16 x float> %c, i32 zeroext %evl) {1293; CHECK-LABEL: vfnmacc_vf_nxv16f32_unmasked:1294; CHECK: # %bb.0:1295; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma1296; CHECK-NEXT: vfnmacc.vf v16, fa0, v81297; CHECK-NEXT: vmv8r.v v8, v161298; CHECK-NEXT: ret1299 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01300 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1301 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1302 %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)1303 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1304 %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)1305 ret <vscale x 16 x float> %u1306}1307 1308define <vscale x 16 x float> @vfnmacc_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) {1309; CHECK-LABEL: vfnmacc_vv_nxv16f32_ta:1310; CHECK: # %bb.0:1311; CHECK-NEXT: vl8re32.v v24, (a0)1312; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu1313; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t1314; CHECK-NEXT: vmv.v.v v8, v241315; CHECK-NEXT: ret1316 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1317 %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)1318 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1319 %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)1320 ret <vscale x 16 x float> %u1321}1322 1323define <vscale x 16 x float> @vfnmacc_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) {1324; CHECK-LABEL: vfnmacc_vf_nxv16f32_ta:1325; CHECK: # %bb.0:1326; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu1327; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1328; CHECK-NEXT: vmv.v.v v8, v161329; CHECK-NEXT: ret1330 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01331 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1332 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1333 %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)1334 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1335 %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)1336 ret <vscale x 16 x float> %u1337}1338 1339define <vscale x 16 x float> @vfnmacc_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) {1340; CHECK-LABEL: vfnmacc_vf_nxv16f32_commute_ta:1341; CHECK: # %bb.0:1342; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu1343; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1344; CHECK-NEXT: vmv.v.v v8, v161345; CHECK-NEXT: ret1346 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01347 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1348 %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1349 %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)1350 %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %nega, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1351 %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)1352 ret <vscale x 16 x float> %u1353}1354 1355define <vscale x 1 x double> @vfnmacc_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) {1356; CHECK-LABEL: vfnmacc_vv_nxv1f64:1357; CHECK: # %bb.0:1358; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1359; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t1360; CHECK-NEXT: vmv1r.v v8, v101361; CHECK-NEXT: ret1362 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1363 %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)1364 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1365 %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)1366 ret <vscale x 1 x double> %u1367}1368 1369define <vscale x 1 x double> @vfnmacc_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) {1370; CHECK-LABEL: vfnmacc_vv_nxv1f64_unmasked:1371; CHECK: # %bb.0:1372; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1373; CHECK-NEXT: vfnmacc.vv v10, v8, v91374; CHECK-NEXT: vmv1r.v v8, v101375; CHECK-NEXT: ret1376 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1377 %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)1378 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1379 %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)1380 ret <vscale x 1 x double> %u1381}1382 1383define <vscale x 1 x double> @vfnmacc_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) {1384; CHECK-LABEL: vfnmacc_vf_nxv1f64:1385; CHECK: # %bb.0:1386; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1387; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1388; CHECK-NEXT: vmv1r.v v8, v91389; CHECK-NEXT: ret1390 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01391 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1392 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1393 %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)1394 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1395 %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)1396 ret <vscale x 1 x double> %u1397}1398 1399define <vscale x 1 x double> @vfnmacc_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) {1400; CHECK-LABEL: vfnmacc_vf_nxv1f64_commute:1401; CHECK: # %bb.0:1402; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1403; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1404; CHECK-NEXT: vmv1r.v v8, v91405; CHECK-NEXT: ret1406 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01407 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1408 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1409 %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)1410 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %nega, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1411 %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)1412 ret <vscale x 1 x double> %u1413}1414 1415define <vscale x 1 x double> @vfnmacc_vf_nxv1f64_unmasked(<vscale x 1 x double> %a, double %b, <vscale x 1 x double> %c, i32 zeroext %evl) {1416; CHECK-LABEL: vfnmacc_vf_nxv1f64_unmasked:1417; CHECK: # %bb.0:1418; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1419; CHECK-NEXT: vfnmacc.vf v9, fa0, v81420; CHECK-NEXT: vmv1r.v v8, v91421; CHECK-NEXT: ret1422 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01423 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1424 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1425 %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)1426 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1427 %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)1428 ret <vscale x 1 x double> %u1429}1430 1431define <vscale x 1 x double> @vfnmacc_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) {1432; CHECK-LABEL: vfnmacc_vv_nxv1f64_ta:1433; CHECK: # %bb.0:1434; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1435; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t1436; CHECK-NEXT: vmv.v.v v8, v101437; CHECK-NEXT: ret1438 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1439 %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)1440 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1441 %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)1442 ret <vscale x 1 x double> %u1443}1444 1445define <vscale x 1 x double> @vfnmacc_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) {1446; CHECK-LABEL: vfnmacc_vf_nxv1f64_ta:1447; CHECK: # %bb.0:1448; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1449; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1450; CHECK-NEXT: vmv.v.v v8, v91451; CHECK-NEXT: ret1452 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01453 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1454 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1455 %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)1456 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1457 %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)1458 ret <vscale x 1 x double> %u1459}1460 1461define <vscale x 1 x double> @vfnmacc_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) {1462; CHECK-LABEL: vfnmacc_vf_nxv1f64_commute_ta:1463; CHECK: # %bb.0:1464; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1465; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1466; CHECK-NEXT: vmv.v.v v8, v91467; CHECK-NEXT: ret1468 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01469 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1470 %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1471 %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)1472 %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %nega, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1473 %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)1474 ret <vscale x 1 x double> %u1475}1476 1477define <vscale x 2 x double> @vfnmacc_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) {1478; CHECK-LABEL: vfnmacc_vv_nxv2f64:1479; CHECK: # %bb.0:1480; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1481; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t1482; CHECK-NEXT: vmv2r.v v8, v121483; CHECK-NEXT: ret1484 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1485 %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)1486 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1487 %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)1488 ret <vscale x 2 x double> %u1489}1490 1491define <vscale x 2 x double> @vfnmacc_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) {1492; CHECK-LABEL: vfnmacc_vv_nxv2f64_unmasked:1493; CHECK: # %bb.0:1494; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1495; CHECK-NEXT: vfnmacc.vv v12, v8, v101496; CHECK-NEXT: vmv2r.v v8, v121497; CHECK-NEXT: ret1498 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1499 %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)1500 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1501 %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)1502 ret <vscale x 2 x double> %u1503}1504 1505define <vscale x 2 x double> @vfnmacc_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) {1506; CHECK-LABEL: vfnmacc_vf_nxv2f64:1507; CHECK: # %bb.0:1508; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1509; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1510; CHECK-NEXT: vmv2r.v v8, v101511; CHECK-NEXT: ret1512 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01513 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1514 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1515 %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)1516 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1517 %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)1518 ret <vscale x 2 x double> %u1519}1520 1521define <vscale x 2 x double> @vfnmacc_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) {1522; CHECK-LABEL: vfnmacc_vf_nxv2f64_commute:1523; CHECK: # %bb.0:1524; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1525; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1526; CHECK-NEXT: vmv2r.v v8, v101527; CHECK-NEXT: ret1528 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01529 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1530 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1531 %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)1532 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %nega, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1533 %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)1534 ret <vscale x 2 x double> %u1535}1536 1537define <vscale x 2 x double> @vfnmacc_vf_nxv2f64_unmasked(<vscale x 2 x double> %a, double %b, <vscale x 2 x double> %c, i32 zeroext %evl) {1538; CHECK-LABEL: vfnmacc_vf_nxv2f64_unmasked:1539; CHECK: # %bb.0:1540; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1541; CHECK-NEXT: vfnmacc.vf v10, fa0, v81542; CHECK-NEXT: vmv2r.v v8, v101543; CHECK-NEXT: ret1544 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01545 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1546 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1547 %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)1548 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1549 %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)1550 ret <vscale x 2 x double> %u1551}1552 1553define <vscale x 2 x double> @vfnmacc_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) {1554; CHECK-LABEL: vfnmacc_vv_nxv2f64_ta:1555; CHECK: # %bb.0:1556; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1557; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t1558; CHECK-NEXT: vmv.v.v v8, v121559; CHECK-NEXT: ret1560 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1561 %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)1562 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1563 %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)1564 ret <vscale x 2 x double> %u1565}1566 1567define <vscale x 2 x double> @vfnmacc_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) {1568; CHECK-LABEL: vfnmacc_vf_nxv2f64_ta:1569; CHECK: # %bb.0:1570; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1571; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1572; CHECK-NEXT: vmv.v.v v8, v101573; CHECK-NEXT: ret1574 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01575 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1576 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1577 %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)1578 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1579 %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)1580 ret <vscale x 2 x double> %u1581}1582 1583define <vscale x 2 x double> @vfnmacc_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) {1584; CHECK-LABEL: vfnmacc_vf_nxv2f64_commute_ta:1585; CHECK: # %bb.0:1586; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1587; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1588; CHECK-NEXT: vmv.v.v v8, v101589; CHECK-NEXT: ret1590 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01591 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1592 %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1593 %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)1594 %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %nega, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1595 %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)1596 ret <vscale x 2 x double> %u1597}1598 1599define <vscale x 4 x double> @vfnmacc_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) {1600; CHECK-LABEL: vfnmacc_vv_nxv4f64:1601; CHECK: # %bb.0:1602; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1603; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1604; CHECK-NEXT: vmv4r.v v8, v161605; CHECK-NEXT: ret1606 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1607 %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)1608 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1609 %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)1610 ret <vscale x 4 x double> %u1611}1612 1613define <vscale x 4 x double> @vfnmacc_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) {1614; CHECK-LABEL: vfnmacc_vv_nxv4f64_unmasked:1615; CHECK: # %bb.0:1616; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1617; CHECK-NEXT: vfnmacc.vv v16, v8, v121618; CHECK-NEXT: vmv4r.v v8, v161619; CHECK-NEXT: ret1620 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1621 %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)1622 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1623 %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)1624 ret <vscale x 4 x double> %u1625}1626 1627define <vscale x 4 x double> @vfnmacc_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) {1628; CHECK-LABEL: vfnmacc_vf_nxv4f64:1629; CHECK: # %bb.0:1630; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1631; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1632; CHECK-NEXT: vmv4r.v v8, v121633; CHECK-NEXT: ret1634 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01635 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1636 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1637 %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)1638 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1639 %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)1640 ret <vscale x 4 x double> %u1641}1642 1643define <vscale x 4 x double> @vfnmacc_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) {1644; CHECK-LABEL: vfnmacc_vf_nxv4f64_commute:1645; CHECK: # %bb.0:1646; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1647; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1648; CHECK-NEXT: vmv4r.v v8, v121649; CHECK-NEXT: ret1650 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01651 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1652 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1653 %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)1654 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %nega, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1655 %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)1656 ret <vscale x 4 x double> %u1657}1658 1659define <vscale x 4 x double> @vfnmacc_vf_nxv4f64_unmasked(<vscale x 4 x double> %a, double %b, <vscale x 4 x double> %c, i32 zeroext %evl) {1660; CHECK-LABEL: vfnmacc_vf_nxv4f64_unmasked:1661; CHECK: # %bb.0:1662; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1663; CHECK-NEXT: vfnmacc.vf v12, fa0, v81664; CHECK-NEXT: vmv4r.v v8, v121665; CHECK-NEXT: ret1666 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01667 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1668 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1669 %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)1670 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1671 %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)1672 ret <vscale x 4 x double> %u1673}1674 1675define <vscale x 4 x double> @vfnmacc_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) {1676; CHECK-LABEL: vfnmacc_vv_nxv4f64_ta:1677; CHECK: # %bb.0:1678; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1679; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1680; CHECK-NEXT: vmv.v.v v8, v161681; CHECK-NEXT: ret1682 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1683 %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)1684 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1685 %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)1686 ret <vscale x 4 x double> %u1687}1688 1689define <vscale x 4 x double> @vfnmacc_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) {1690; CHECK-LABEL: vfnmacc_vf_nxv4f64_ta:1691; CHECK: # %bb.0:1692; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1693; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1694; CHECK-NEXT: vmv.v.v v8, v121695; CHECK-NEXT: ret1696 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01697 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1698 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1699 %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)1700 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1701 %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)1702 ret <vscale x 4 x double> %u1703}1704 1705define <vscale x 4 x double> @vfnmacc_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) {1706; CHECK-LABEL: vfnmacc_vf_nxv4f64_commute_ta:1707; CHECK: # %bb.0:1708; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1709; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1710; CHECK-NEXT: vmv.v.v v8, v121711; CHECK-NEXT: ret1712 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01713 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1714 %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1715 %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)1716 %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %nega, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1717 %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)1718 ret <vscale x 4 x double> %u1719}1720 1721define <vscale x 8 x double> @vfnmacc_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) {1722; CHECK-LABEL: vfnmacc_vv_nxv8f64:1723; CHECK: # %bb.0:1724; CHECK-NEXT: vl8re64.v v24, (a0)1725; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, mu1726; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t1727; CHECK-NEXT: vmv8r.v v8, v241728; CHECK-NEXT: ret1729 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1730 %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)1731 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1732 %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)1733 ret <vscale x 8 x double> %u1734}1735 1736define <vscale x 8 x double> @vfnmacc_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) {1737; CHECK-LABEL: vfnmacc_vv_nxv8f64_unmasked:1738; CHECK: # %bb.0:1739; CHECK-NEXT: vl8re64.v v24, (a0)1740; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, ma1741; CHECK-NEXT: vfnmacc.vv v24, v8, v161742; CHECK-NEXT: vmv8r.v v8, v241743; CHECK-NEXT: ret1744 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1745 %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)1746 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1747 %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)1748 ret <vscale x 8 x double> %u1749}1750 1751define <vscale x 8 x double> @vfnmacc_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) {1752; CHECK-LABEL: vfnmacc_vf_nxv8f64:1753; CHECK: # %bb.0:1754; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, mu1755; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1756; CHECK-NEXT: vmv8r.v v8, v161757; CHECK-NEXT: ret1758 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01759 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1760 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1761 %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)1762 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1763 %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)1764 ret <vscale x 8 x double> %u1765}1766 1767define <vscale x 8 x double> @vfnmacc_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) {1768; CHECK-LABEL: vfnmacc_vf_nxv8f64_commute:1769; CHECK: # %bb.0:1770; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, mu1771; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1772; CHECK-NEXT: vmv8r.v v8, v161773; CHECK-NEXT: ret1774 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01775 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1776 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1777 %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)1778 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %nega, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1779 %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)1780 ret <vscale x 8 x double> %u1781}1782 1783define <vscale x 8 x double> @vfnmacc_vf_nxv8f64_unmasked(<vscale x 8 x double> %a, double %b, <vscale x 8 x double> %c, i32 zeroext %evl) {1784; CHECK-LABEL: vfnmacc_vf_nxv8f64_unmasked:1785; CHECK: # %bb.0:1786; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1787; CHECK-NEXT: vfnmacc.vf v16, fa0, v81788; CHECK-NEXT: vmv8r.v v8, v161789; CHECK-NEXT: ret1790 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01791 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1792 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1793 %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)1794 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1795 %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)1796 ret <vscale x 8 x double> %u1797}1798 1799define <vscale x 8 x double> @vfnmacc_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) {1800; CHECK-LABEL: vfnmacc_vv_nxv8f64_ta:1801; CHECK: # %bb.0:1802; CHECK-NEXT: vl8re64.v v24, (a0)1803; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu1804; CHECK-NEXT: vfnmacc.vv v24, v8, v16, v0.t1805; CHECK-NEXT: vmv.v.v v8, v241806; CHECK-NEXT: ret1807 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1808 %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)1809 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1810 %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)1811 ret <vscale x 8 x double> %u1812}1813 1814define <vscale x 8 x double> @vfnmacc_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) {1815; CHECK-LABEL: vfnmacc_vf_nxv8f64_ta:1816; CHECK: # %bb.0:1817; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu1818; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1819; CHECK-NEXT: vmv.v.v v8, v161820; CHECK-NEXT: ret1821 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01822 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1823 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1824 %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)1825 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1826 %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)1827 ret <vscale x 8 x double> %u1828}1829 1830define <vscale x 8 x double> @vfnmacc_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) {1831; CHECK-LABEL: vfnmacc_vf_nxv8f64_commute_ta:1832; CHECK: # %bb.0:1833; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu1834; CHECK-NEXT: vfnmacc.vf v16, fa0, v8, v0.t1835; CHECK-NEXT: vmv.v.v v8, v161836; CHECK-NEXT: ret1837 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01838 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1839 %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1840 %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)1841 %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %nega, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1842 %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)1843 ret <vscale x 8 x double> %u1844}1845