1470 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 <2 x half> @vfnmacc_vv_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vfnmacc_vv_v2f16: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 <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)15 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)16 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)17 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)18 ret <2 x half> %u19}20 21define <2 x half> @vfnmacc_vv_v2f16_unmasked(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {22; CHECK-LABEL: vfnmacc_vv_v2f16_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 <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)29 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)30 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)31 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)32 ret <2 x half> %u33}34 35define <2 x half> @vfnmacc_vf_v2f16(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {36; CHECK-LABEL: vfnmacc_vf_v2f16: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 <2 x half> poison, half %b, i32 043 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer44 %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)45 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)46 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)47 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)48 ret <2 x half> %u49}50 51define <2 x half> @vfnmacc_vf_v2f16_commute(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {52; CHECK-LABEL: vfnmacc_vf_v2f16_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 <2 x half> poison, half %b, i32 059 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer60 %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)61 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)62 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %nega, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)63 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)64 ret <2 x half> %u65}66 67define <2 x half> @vfnmacc_vf_v2f16_unmasked(<2 x half> %a, half %b, <2 x half> %c, i32 zeroext %evl) {68; CHECK-LABEL: vfnmacc_vf_v2f16_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 <2 x half> poison, half %b, i32 075 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer76 %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)77 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)78 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)79 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)80 ret <2 x half> %u81}82 83define <2 x half> @vfnmacc_vv_v2f16_ta(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {84; CHECK-LABEL: vfnmacc_vv_v2f16_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 <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)91 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)92 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)93 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)94 ret <2 x half> %u95}96 97define <2 x half> @vfnmacc_vf_v2f16_ta(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {98; CHECK-LABEL: vfnmacc_vf_v2f16_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 <2 x half> poison, half %b, i32 0105 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer106 %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)107 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)108 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)109 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)110 ret <2 x half> %u111}112 113define <2 x half> @vfnmacc_vf_v2f16_commute_ta(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {114; CHECK-LABEL: vfnmacc_vf_v2f16_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 <2 x half> poison, half %b, i32 0121 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer122 %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)123 %negc = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)124 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %nega, <2 x half> %negc, <2 x i1> splat (i1 -1), i32 %evl)125 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)126 ret <2 x half> %u127}128 129define <4 x half> @vfnmacc_vv_v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {130; CHECK-LABEL: vfnmacc_vv_v4f16: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 <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)137 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)138 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)139 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)140 ret <4 x half> %u141}142 143define <4 x half> @vfnmacc_vv_v4f16_unmasked(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {144; CHECK-LABEL: vfnmacc_vv_v4f16_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 <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)151 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)152 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)153 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)154 ret <4 x half> %u155}156 157define <4 x half> @vfnmacc_vf_v4f16(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {158; CHECK-LABEL: vfnmacc_vf_v4f16: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 <4 x half> poison, half %b, i32 0165 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer166 %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)167 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)168 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)169 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)170 ret <4 x half> %u171}172 173define <4 x half> @vfnmacc_vf_v4f16_commute(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {174; CHECK-LABEL: vfnmacc_vf_v4f16_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 <4 x half> poison, half %b, i32 0181 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer182 %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)183 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)184 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %nega, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)185 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)186 ret <4 x half> %u187}188 189define <4 x half> @vfnmacc_vf_v4f16_unmasked(<4 x half> %a, half %b, <4 x half> %c, i32 zeroext %evl) {190; CHECK-LABEL: vfnmacc_vf_v4f16_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 <4 x half> poison, half %b, i32 0197 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer198 %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)199 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)200 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)201 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)202 ret <4 x half> %u203}204 205define <4 x half> @vfnmacc_vv_v4f16_ta(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {206; CHECK-LABEL: vfnmacc_vv_v4f16_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 <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)213 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)214 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)215 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)216 ret <4 x half> %u217}218 219define <4 x half> @vfnmacc_vf_v4f16_ta(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {220; CHECK-LABEL: vfnmacc_vf_v4f16_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 <4 x half> poison, half %b, i32 0227 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer228 %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)229 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)230 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)231 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)232 ret <4 x half> %u233}234 235define <4 x half> @vfnmacc_vf_v4f16_commute_ta(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {236; CHECK-LABEL: vfnmacc_vf_v4f16_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 <4 x half> poison, half %b, i32 0243 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer244 %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)245 %negc = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)246 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %nega, <4 x half> %negc, <4 x i1> splat (i1 -1), i32 %evl)247 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)248 ret <4 x half> %u249}250 251define <8 x half> @vfnmacc_vv_v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {252; CHECK-LABEL: vfnmacc_vv_v8f16: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 <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)259 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)260 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)261 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)262 ret <8 x half> %u263}264 265define <8 x half> @vfnmacc_vv_v8f16_unmasked(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {266; CHECK-LABEL: vfnmacc_vv_v8f16_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 <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)273 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)274 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)275 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)276 ret <8 x half> %u277}278 279define <8 x half> @vfnmacc_vf_v8f16(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {280; CHECK-LABEL: vfnmacc_vf_v8f16: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 <8 x half> poison, half %b, i32 0287 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer288 %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)289 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)290 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)291 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)292 ret <8 x half> %u293}294 295define <8 x half> @vfnmacc_vf_v8f16_commute(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {296; CHECK-LABEL: vfnmacc_vf_v8f16_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 <8 x half> poison, half %b, i32 0303 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer304 %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)305 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)306 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %nega, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)307 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)308 ret <8 x half> %u309}310 311define <8 x half> @vfnmacc_vf_v8f16_unmasked(<8 x half> %a, half %b, <8 x half> %c, i32 zeroext %evl) {312; CHECK-LABEL: vfnmacc_vf_v8f16_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 <8 x half> poison, half %b, i32 0319 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer320 %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)321 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)322 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)323 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)324 ret <8 x half> %u325}326 327define <8 x half> @vfnmacc_vv_v8f16_ta(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {328; CHECK-LABEL: vfnmacc_vv_v8f16_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 <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)335 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)336 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)337 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)338 ret <8 x half> %u339}340 341define <8 x half> @vfnmacc_vf_v8f16_ta(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {342; CHECK-LABEL: vfnmacc_vf_v8f16_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 <8 x half> poison, half %b, i32 0349 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer350 %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)351 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)352 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)353 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)354 ret <8 x half> %u355}356 357define <8 x half> @vfnmacc_vf_v8f16_commute_ta(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {358; CHECK-LABEL: vfnmacc_vf_v8f16_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 <8 x half> poison, half %b, i32 0365 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer366 %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)367 %negc = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)368 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %nega, <8 x half> %negc, <8 x i1> splat (i1 -1), i32 %evl)369 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)370 ret <8 x half> %u371}372 373define <16 x half> @vfnmacc_vv_v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {374; CHECK-LABEL: vfnmacc_vv_v16f16: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 <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)381 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)382 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)383 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)384 ret <16 x half> %u385}386 387define <16 x half> @vfnmacc_vv_v16f16_unmasked(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {388; CHECK-LABEL: vfnmacc_vv_v16f16_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 <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)395 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)396 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)397 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)398 ret <16 x half> %u399}400 401define <16 x half> @vfnmacc_vf_v16f16(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {402; CHECK-LABEL: vfnmacc_vf_v16f16: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 <16 x half> poison, half %b, i32 0409 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer410 %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)411 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)412 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)413 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)414 ret <16 x half> %u415}416 417define <16 x half> @vfnmacc_vf_v16f16_commute(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {418; CHECK-LABEL: vfnmacc_vf_v16f16_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 <16 x half> poison, half %b, i32 0425 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer426 %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)427 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)428 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %nega, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)429 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)430 ret <16 x half> %u431}432 433define <16 x half> @vfnmacc_vf_v16f16_unmasked(<16 x half> %a, half %b, <16 x half> %c, i32 zeroext %evl) {434; CHECK-LABEL: vfnmacc_vf_v16f16_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 <16 x half> poison, half %b, i32 0441 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer442 %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)443 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)444 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)445 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)446 ret <16 x half> %u447}448 449define <16 x half> @vfnmacc_vv_v16f16_ta(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {450; CHECK-LABEL: vfnmacc_vv_v16f16_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 <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)457 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)458 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)459 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)460 ret <16 x half> %u461}462 463define <16 x half> @vfnmacc_vf_v16f16_ta(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {464; CHECK-LABEL: vfnmacc_vf_v16f16_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 <16 x half> poison, half %b, i32 0471 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer472 %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)473 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)474 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)475 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)476 ret <16 x half> %u477}478 479define <16 x half> @vfnmacc_vf_v16f16_commute_ta(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {480; CHECK-LABEL: vfnmacc_vf_v16f16_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 <16 x half> poison, half %b, i32 0487 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer488 %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)489 %negc = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)490 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %nega, <16 x half> %negc, <16 x i1> splat (i1 -1), i32 %evl)491 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)492 ret <16 x half> %u493}494 495define <32 x half> @vfnmacc_vv_v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {496; CHECK-LABEL: vfnmacc_vv_v32f16: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 <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)503 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)504 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %b, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)505 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)506 ret <32 x half> %u507}508 509define <32 x half> @vfnmacc_vv_v32f16_unmasked(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {510; CHECK-LABEL: vfnmacc_vv_v32f16_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 <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)517 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)518 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %b, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)519 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)520 ret <32 x half> %u521}522 523define <32 x half> @vfnmacc_vf_v32f16(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {524; CHECK-LABEL: vfnmacc_vf_v32f16: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 <32 x half> poison, half %b, i32 0531 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer532 %nega = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)533 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)534 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)535 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)536 ret <32 x half> %u537}538 539define <32 x half> @vfnmacc_vf_v32f16_commute(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {540; CHECK-LABEL: vfnmacc_vf_v32f16_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 <32 x half> poison, half %b, i32 0547 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer548 %nega = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)549 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)550 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %nega, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)551 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)552 ret <32 x half> %u553}554 555define <32 x half> @vfnmacc_vf_v32f16_unmasked(<32 x half> %a, half %b, <32 x half> %c, i32 zeroext %evl) {556; CHECK-LABEL: vfnmacc_vf_v32f16_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 <32 x half> poison, half %b, i32 0563 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer564 %nega = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)565 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)566 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)567 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)568 ret <32 x half> %u569}570 571define <32 x half> @vfnmacc_vv_v32f16_ta(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {572; CHECK-LABEL: vfnmacc_vv_v32f16_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 <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)579 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)580 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %b, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)581 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)582 ret <32 x half> %u583}584 585define <32 x half> @vfnmacc_vf_v32f16_ta(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {586; CHECK-LABEL: vfnmacc_vf_v32f16_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 <32 x half> poison, half %b, i32 0593 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer594 %nega = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)595 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)596 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)597 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)598 ret <32 x half> %u599}600 601define <32 x half> @vfnmacc_vf_v32f16_commute_ta(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {602; CHECK-LABEL: vfnmacc_vf_v32f16_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 <32 x half> poison, half %b, i32 0609 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer610 %nega = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)611 %negc = call <32 x half> @llvm.vp.fneg.v32f16(<32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)612 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %nega, <32 x half> %negc, <32 x i1> splat (i1 -1), i32 %evl)613 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)614 ret <32 x half> %u615}616 617define <2 x float> @vfnmacc_vv_v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {618; CHECK-LABEL: vfnmacc_vv_v2f32:619; CHECK: # %bb.0:620; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu621; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t622; CHECK-NEXT: vmv1r.v v8, v10623; CHECK-NEXT: ret624 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)625 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)626 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)627 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)628 ret <2 x float> %u629}630 631define <2 x float> @vfnmacc_vv_v2f32_unmasked(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {632; CHECK-LABEL: vfnmacc_vv_v2f32_unmasked:633; CHECK: # %bb.0:634; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma635; CHECK-NEXT: vfnmacc.vv v10, v8, v9636; CHECK-NEXT: vmv1r.v v8, v10637; CHECK-NEXT: ret638 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)639 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)640 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)641 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)642 ret <2 x float> %u643}644 645define <2 x float> @vfnmacc_vf_v2f32(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {646; CHECK-LABEL: vfnmacc_vf_v2f32:647; CHECK: # %bb.0:648; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu649; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t650; CHECK-NEXT: vmv1r.v v8, v9651; CHECK-NEXT: ret652 %elt.head = insertelement <2 x float> poison, float %b, i32 0653 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer654 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)655 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)656 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)657 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)658 ret <2 x float> %u659}660 661define <2 x float> @vfnmacc_vf_v2f32_commute(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {662; CHECK-LABEL: vfnmacc_vf_v2f32_commute:663; CHECK: # %bb.0:664; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu665; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t666; CHECK-NEXT: vmv1r.v v8, v9667; CHECK-NEXT: ret668 %elt.head = insertelement <2 x float> poison, float %b, i32 0669 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer670 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)671 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)672 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %nega, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)673 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)674 ret <2 x float> %u675}676 677define <2 x float> @vfnmacc_vf_v2f32_unmasked(<2 x float> %a, float %b, <2 x float> %c, i32 zeroext %evl) {678; CHECK-LABEL: vfnmacc_vf_v2f32_unmasked:679; CHECK: # %bb.0:680; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma681; CHECK-NEXT: vfnmacc.vf v9, fa0, v8682; CHECK-NEXT: vmv1r.v v8, v9683; CHECK-NEXT: ret684 %elt.head = insertelement <2 x float> poison, float %b, i32 0685 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer686 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)687 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)688 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)689 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)690 ret <2 x float> %u691}692 693define <2 x float> @vfnmacc_vv_v2f32_ta(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {694; CHECK-LABEL: vfnmacc_vv_v2f32_ta:695; CHECK: # %bb.0:696; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu697; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t698; CHECK-NEXT: vmv1r.v v8, v10699; CHECK-NEXT: ret700 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)701 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)702 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)703 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)704 ret <2 x float> %u705}706 707define <2 x float> @vfnmacc_vf_v2f32_ta(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {708; CHECK-LABEL: vfnmacc_vf_v2f32_ta:709; CHECK: # %bb.0:710; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu711; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t712; CHECK-NEXT: vmv1r.v v8, v9713; CHECK-NEXT: ret714 %elt.head = insertelement <2 x float> poison, float %b, i32 0715 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer716 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)717 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)718 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)719 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)720 ret <2 x float> %u721}722 723define <2 x float> @vfnmacc_vf_v2f32_commute_ta(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {724; CHECK-LABEL: vfnmacc_vf_v2f32_commute_ta:725; CHECK: # %bb.0:726; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu727; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t728; CHECK-NEXT: vmv1r.v v8, v9729; CHECK-NEXT: ret730 %elt.head = insertelement <2 x float> poison, float %b, i32 0731 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer732 %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)733 %negc = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)734 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %nega, <2 x float> %negc, <2 x i1> splat (i1 -1), i32 %evl)735 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)736 ret <2 x float> %u737}738 739define <4 x float> @vfnmacc_vv_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {740; CHECK-LABEL: vfnmacc_vv_v4f32:741; CHECK: # %bb.0:742; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu743; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t744; CHECK-NEXT: vmv1r.v v8, v10745; CHECK-NEXT: ret746 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)747 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)748 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)749 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)750 ret <4 x float> %u751}752 753define <4 x float> @vfnmacc_vv_v4f32_unmasked(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {754; CHECK-LABEL: vfnmacc_vv_v4f32_unmasked:755; CHECK: # %bb.0:756; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma757; CHECK-NEXT: vfnmacc.vv v10, v8, v9758; CHECK-NEXT: vmv1r.v v8, v10759; CHECK-NEXT: ret760 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)761 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)762 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)763 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)764 ret <4 x float> %u765}766 767define <4 x float> @vfnmacc_vf_v4f32(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {768; CHECK-LABEL: vfnmacc_vf_v4f32:769; CHECK: # %bb.0:770; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu771; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t772; CHECK-NEXT: vmv1r.v v8, v9773; CHECK-NEXT: ret774 %elt.head = insertelement <4 x float> poison, float %b, i32 0775 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer776 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)777 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)778 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)779 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)780 ret <4 x float> %u781}782 783define <4 x float> @vfnmacc_vf_v4f32_commute(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {784; CHECK-LABEL: vfnmacc_vf_v4f32_commute:785; CHECK: # %bb.0:786; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu787; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t788; CHECK-NEXT: vmv1r.v v8, v9789; CHECK-NEXT: ret790 %elt.head = insertelement <4 x float> poison, float %b, i32 0791 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer792 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)793 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)794 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %nega, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)795 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)796 ret <4 x float> %u797}798 799define <4 x float> @vfnmacc_vf_v4f32_unmasked(<4 x float> %a, float %b, <4 x float> %c, i32 zeroext %evl) {800; CHECK-LABEL: vfnmacc_vf_v4f32_unmasked:801; CHECK: # %bb.0:802; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma803; CHECK-NEXT: vfnmacc.vf v9, fa0, v8804; CHECK-NEXT: vmv1r.v v8, v9805; CHECK-NEXT: ret806 %elt.head = insertelement <4 x float> poison, float %b, i32 0807 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer808 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)809 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)810 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)811 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)812 ret <4 x float> %u813}814 815define <4 x float> @vfnmacc_vv_v4f32_ta(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {816; CHECK-LABEL: vfnmacc_vv_v4f32_ta:817; CHECK: # %bb.0:818; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu819; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t820; CHECK-NEXT: vmv.v.v v8, v10821; CHECK-NEXT: ret822 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)823 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)824 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)825 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)826 ret <4 x float> %u827}828 829define <4 x float> @vfnmacc_vf_v4f32_ta(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {830; CHECK-LABEL: vfnmacc_vf_v4f32_ta:831; CHECK: # %bb.0:832; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu833; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t834; CHECK-NEXT: vmv.v.v v8, v9835; CHECK-NEXT: ret836 %elt.head = insertelement <4 x float> poison, float %b, i32 0837 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer838 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)839 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)840 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)841 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)842 ret <4 x float> %u843}844 845define <4 x float> @vfnmacc_vf_v4f32_commute_ta(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {846; CHECK-LABEL: vfnmacc_vf_v4f32_commute_ta:847; CHECK: # %bb.0:848; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu849; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t850; CHECK-NEXT: vmv.v.v v8, v9851; CHECK-NEXT: ret852 %elt.head = insertelement <4 x float> poison, float %b, i32 0853 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer854 %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)855 %negc = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)856 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %nega, <4 x float> %negc, <4 x i1> splat (i1 -1), i32 %evl)857 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)858 ret <4 x float> %u859}860 861define <8 x float> @vfnmacc_vv_v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {862; CHECK-LABEL: vfnmacc_vv_v8f32:863; CHECK: # %bb.0:864; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu865; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t866; CHECK-NEXT: vmv2r.v v8, v12867; CHECK-NEXT: ret868 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)869 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)870 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)871 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)872 ret <8 x float> %u873}874 875define <8 x float> @vfnmacc_vv_v8f32_unmasked(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {876; CHECK-LABEL: vfnmacc_vv_v8f32_unmasked:877; CHECK: # %bb.0:878; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma879; CHECK-NEXT: vfnmacc.vv v12, v8, v10880; CHECK-NEXT: vmv2r.v v8, v12881; CHECK-NEXT: ret882 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)883 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)884 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)885 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)886 ret <8 x float> %u887}888 889define <8 x float> @vfnmacc_vf_v8f32(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {890; CHECK-LABEL: vfnmacc_vf_v8f32:891; CHECK: # %bb.0:892; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu893; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t894; CHECK-NEXT: vmv2r.v v8, v10895; CHECK-NEXT: ret896 %elt.head = insertelement <8 x float> poison, float %b, i32 0897 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer898 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)899 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)900 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)901 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)902 ret <8 x float> %u903}904 905define <8 x float> @vfnmacc_vf_v8f32_commute(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {906; CHECK-LABEL: vfnmacc_vf_v8f32_commute:907; CHECK: # %bb.0:908; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu909; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t910; CHECK-NEXT: vmv2r.v v8, v10911; CHECK-NEXT: ret912 %elt.head = insertelement <8 x float> poison, float %b, i32 0913 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer914 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)915 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)916 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %nega, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)917 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)918 ret <8 x float> %u919}920 921define <8 x float> @vfnmacc_vf_v8f32_unmasked(<8 x float> %a, float %b, <8 x float> %c, i32 zeroext %evl) {922; CHECK-LABEL: vfnmacc_vf_v8f32_unmasked:923; CHECK: # %bb.0:924; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma925; CHECK-NEXT: vfnmacc.vf v10, fa0, v8926; CHECK-NEXT: vmv2r.v v8, v10927; CHECK-NEXT: ret928 %elt.head = insertelement <8 x float> poison, float %b, i32 0929 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer930 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)931 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)932 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)933 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)934 ret <8 x float> %u935}936 937define <8 x float> @vfnmacc_vv_v8f32_ta(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {938; CHECK-LABEL: vfnmacc_vv_v8f32_ta:939; CHECK: # %bb.0:940; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu941; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t942; CHECK-NEXT: vmv.v.v v8, v12943; CHECK-NEXT: ret944 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)945 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)946 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)947 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)948 ret <8 x float> %u949}950 951define <8 x float> @vfnmacc_vf_v8f32_ta(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {952; CHECK-LABEL: vfnmacc_vf_v8f32_ta:953; CHECK: # %bb.0:954; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu955; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t956; CHECK-NEXT: vmv.v.v v8, v10957; CHECK-NEXT: ret958 %elt.head = insertelement <8 x float> poison, float %b, i32 0959 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer960 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)961 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)962 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)963 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)964 ret <8 x float> %u965}966 967define <8 x float> @vfnmacc_vf_v8f32_commute_ta(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {968; CHECK-LABEL: vfnmacc_vf_v8f32_commute_ta:969; CHECK: # %bb.0:970; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu971; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t972; CHECK-NEXT: vmv.v.v v8, v10973; CHECK-NEXT: ret974 %elt.head = insertelement <8 x float> poison, float %b, i32 0975 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer976 %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)977 %negc = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)978 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %nega, <8 x float> %negc, <8 x i1> splat (i1 -1), i32 %evl)979 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)980 ret <8 x float> %u981}982 983define <16 x float> @vfnmacc_vv_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {984; CHECK-LABEL: vfnmacc_vv_v16f32:985; CHECK: # %bb.0:986; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu987; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t988; CHECK-NEXT: vmv4r.v v8, v16989; CHECK-NEXT: ret990 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)991 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)992 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)993 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)994 ret <16 x float> %u995}996 997define <16 x float> @vfnmacc_vv_v16f32_unmasked(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {998; CHECK-LABEL: vfnmacc_vv_v16f32_unmasked:999; CHECK: # %bb.0:1000; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1001; CHECK-NEXT: vfnmacc.vv v16, v8, v121002; CHECK-NEXT: vmv4r.v v8, v161003; CHECK-NEXT: ret1004 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1005 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1006 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1007 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)1008 ret <16 x float> %u1009}1010 1011define <16 x float> @vfnmacc_vf_v16f32(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1012; CHECK-LABEL: vfnmacc_vf_v16f32:1013; CHECK: # %bb.0:1014; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1015; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1016; CHECK-NEXT: vmv4r.v v8, v121017; CHECK-NEXT: ret1018 %elt.head = insertelement <16 x float> poison, float %b, i32 01019 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1020 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1021 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1022 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1023 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1024 ret <16 x float> %u1025}1026 1027define <16 x float> @vfnmacc_vf_v16f32_commute(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1028; CHECK-LABEL: vfnmacc_vf_v16f32_commute:1029; CHECK: # %bb.0:1030; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1031; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1032; CHECK-NEXT: vmv4r.v v8, v121033; CHECK-NEXT: ret1034 %elt.head = insertelement <16 x float> poison, float %b, i32 01035 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1036 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1037 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1038 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %nega, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1039 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1040 ret <16 x float> %u1041}1042 1043define <16 x float> @vfnmacc_vf_v16f32_unmasked(<16 x float> %a, float %b, <16 x float> %c, i32 zeroext %evl) {1044; CHECK-LABEL: vfnmacc_vf_v16f32_unmasked:1045; CHECK: # %bb.0:1046; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1047; CHECK-NEXT: vfnmacc.vf v12, fa0, v81048; CHECK-NEXT: vmv4r.v v8, v121049; CHECK-NEXT: ret1050 %elt.head = insertelement <16 x float> poison, float %b, i32 01051 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1052 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1053 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1054 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1055 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)1056 ret <16 x float> %u1057}1058 1059define <16 x float> @vfnmacc_vv_v16f32_ta(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1060; CHECK-LABEL: vfnmacc_vv_v16f32_ta:1061; CHECK: # %bb.0:1062; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1063; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1064; CHECK-NEXT: vmv.v.v v8, v161065; CHECK-NEXT: ret1066 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1067 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1068 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1069 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1070 ret <16 x float> %u1071}1072 1073define <16 x float> @vfnmacc_vf_v16f32_ta(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1074; CHECK-LABEL: vfnmacc_vf_v16f32_ta:1075; CHECK: # %bb.0:1076; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1077; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1078; CHECK-NEXT: vmv.v.v v8, v121079; CHECK-NEXT: ret1080 %elt.head = insertelement <16 x float> poison, float %b, i32 01081 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1082 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1083 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1084 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1085 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1086 ret <16 x float> %u1087}1088 1089define <16 x float> @vfnmacc_vf_v16f32_commute_ta(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1090; CHECK-LABEL: vfnmacc_vf_v16f32_commute_ta:1091; CHECK: # %bb.0:1092; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1093; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1094; CHECK-NEXT: vmv.v.v v8, v121095; CHECK-NEXT: ret1096 %elt.head = insertelement <16 x float> poison, float %b, i32 01097 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1098 %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1099 %negc = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1100 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %nega, <16 x float> %negc, <16 x i1> splat (i1 -1), i32 %evl)1101 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1102 ret <16 x float> %u1103}1104 1105define <2 x double> @vfnmacc_vv_v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1106; CHECK-LABEL: vfnmacc_vv_v2f64:1107; CHECK: # %bb.0:1108; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1109; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t1110; CHECK-NEXT: vmv1r.v v8, v101111; CHECK-NEXT: ret1112 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1113 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1114 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1115 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1116 ret <2 x double> %u1117}1118 1119define <2 x double> @vfnmacc_vv_v2f64_unmasked(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1120; CHECK-LABEL: vfnmacc_vv_v2f64_unmasked:1121; CHECK: # %bb.0:1122; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1123; CHECK-NEXT: vfnmacc.vv v10, v8, v91124; CHECK-NEXT: vmv1r.v v8, v101125; CHECK-NEXT: ret1126 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1127 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1128 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1129 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)1130 ret <2 x double> %u1131}1132 1133define <2 x double> @vfnmacc_vf_v2f64(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1134; CHECK-LABEL: vfnmacc_vf_v2f64:1135; CHECK: # %bb.0:1136; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1137; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1138; CHECK-NEXT: vmv1r.v v8, v91139; CHECK-NEXT: ret1140 %elt.head = insertelement <2 x double> poison, double %b, i32 01141 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1142 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1143 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1144 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1145 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1146 ret <2 x double> %u1147}1148 1149define <2 x double> @vfnmacc_vf_v2f64_commute(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1150; CHECK-LABEL: vfnmacc_vf_v2f64_commute:1151; CHECK: # %bb.0:1152; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1153; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1154; CHECK-NEXT: vmv1r.v v8, v91155; CHECK-NEXT: ret1156 %elt.head = insertelement <2 x double> poison, double %b, i32 01157 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1158 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1159 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1160 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %nega, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1161 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1162 ret <2 x double> %u1163}1164 1165define <2 x double> @vfnmacc_vf_v2f64_unmasked(<2 x double> %a, double %b, <2 x double> %c, i32 zeroext %evl) {1166; CHECK-LABEL: vfnmacc_vf_v2f64_unmasked:1167; CHECK: # %bb.0:1168; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1169; CHECK-NEXT: vfnmacc.vf v9, fa0, v81170; CHECK-NEXT: vmv1r.v v8, v91171; CHECK-NEXT: ret1172 %elt.head = insertelement <2 x double> poison, double %b, i32 01173 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1174 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1175 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1176 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1177 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)1178 ret <2 x double> %u1179}1180 1181define <2 x double> @vfnmacc_vv_v2f64_ta(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1182; CHECK-LABEL: vfnmacc_vv_v2f64_ta:1183; CHECK: # %bb.0:1184; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1185; CHECK-NEXT: vfnmacc.vv v10, v8, v9, v0.t1186; CHECK-NEXT: vmv.v.v v8, v101187; CHECK-NEXT: ret1188 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1189 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1190 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1191 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1192 ret <2 x double> %u1193}1194 1195define <2 x double> @vfnmacc_vf_v2f64_ta(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1196; CHECK-LABEL: vfnmacc_vf_v2f64_ta:1197; CHECK: # %bb.0:1198; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1199; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1200; CHECK-NEXT: vmv.v.v v8, v91201; CHECK-NEXT: ret1202 %elt.head = insertelement <2 x double> poison, double %b, i32 01203 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1204 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1205 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1206 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1207 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1208 ret <2 x double> %u1209}1210 1211define <2 x double> @vfnmacc_vf_v2f64_commute_ta(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1212; CHECK-LABEL: vfnmacc_vf_v2f64_commute_ta:1213; CHECK: # %bb.0:1214; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1215; CHECK-NEXT: vfnmacc.vf v9, fa0, v8, v0.t1216; CHECK-NEXT: vmv.v.v v8, v91217; CHECK-NEXT: ret1218 %elt.head = insertelement <2 x double> poison, double %b, i32 01219 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1220 %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1221 %negc = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1222 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %nega, <2 x double> %negc, <2 x i1> splat (i1 -1), i32 %evl)1223 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1224 ret <2 x double> %u1225}1226 1227define <4 x double> @vfnmacc_vv_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1228; CHECK-LABEL: vfnmacc_vv_v4f64:1229; CHECK: # %bb.0:1230; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1231; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t1232; CHECK-NEXT: vmv2r.v v8, v121233; CHECK-NEXT: ret1234 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1235 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1236 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1237 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1238 ret <4 x double> %u1239}1240 1241define <4 x double> @vfnmacc_vv_v4f64_unmasked(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1242; CHECK-LABEL: vfnmacc_vv_v4f64_unmasked:1243; CHECK: # %bb.0:1244; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1245; CHECK-NEXT: vfnmacc.vv v12, v8, v101246; CHECK-NEXT: vmv2r.v v8, v121247; CHECK-NEXT: ret1248 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1249 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1250 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1251 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1252 ret <4 x double> %u1253}1254 1255define <4 x double> @vfnmacc_vf_v4f64(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1256; CHECK-LABEL: vfnmacc_vf_v4f64:1257; CHECK: # %bb.0:1258; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1259; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1260; CHECK-NEXT: vmv2r.v v8, v101261; CHECK-NEXT: ret1262 %elt.head = insertelement <4 x double> poison, double %b, i32 01263 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1264 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1265 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1266 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1267 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1268 ret <4 x double> %u1269}1270 1271define <4 x double> @vfnmacc_vf_v4f64_commute(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1272; CHECK-LABEL: vfnmacc_vf_v4f64_commute:1273; CHECK: # %bb.0:1274; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1275; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1276; CHECK-NEXT: vmv2r.v v8, v101277; CHECK-NEXT: ret1278 %elt.head = insertelement <4 x double> poison, double %b, i32 01279 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1280 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1281 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1282 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %nega, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1283 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1284 ret <4 x double> %u1285}1286 1287define <4 x double> @vfnmacc_vf_v4f64_unmasked(<4 x double> %a, double %b, <4 x double> %c, i32 zeroext %evl) {1288; CHECK-LABEL: vfnmacc_vf_v4f64_unmasked:1289; CHECK: # %bb.0:1290; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1291; CHECK-NEXT: vfnmacc.vf v10, fa0, v81292; CHECK-NEXT: vmv2r.v v8, v101293; CHECK-NEXT: ret1294 %elt.head = insertelement <4 x double> poison, double %b, i32 01295 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1296 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1297 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1298 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1299 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1300 ret <4 x double> %u1301}1302 1303define <4 x double> @vfnmacc_vv_v4f64_ta(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1304; CHECK-LABEL: vfnmacc_vv_v4f64_ta:1305; CHECK: # %bb.0:1306; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1307; CHECK-NEXT: vfnmacc.vv v12, v8, v10, v0.t1308; CHECK-NEXT: vmv.v.v v8, v121309; CHECK-NEXT: ret1310 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1311 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1312 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1313 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1314 ret <4 x double> %u1315}1316 1317define <4 x double> @vfnmacc_vf_v4f64_ta(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1318; CHECK-LABEL: vfnmacc_vf_v4f64_ta:1319; CHECK: # %bb.0:1320; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1321; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1322; CHECK-NEXT: vmv.v.v v8, v101323; CHECK-NEXT: ret1324 %elt.head = insertelement <4 x double> poison, double %b, i32 01325 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1326 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1327 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1328 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1329 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1330 ret <4 x double> %u1331}1332 1333define <4 x double> @vfnmacc_vf_v4f64_commute_ta(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1334; CHECK-LABEL: vfnmacc_vf_v4f64_commute_ta:1335; CHECK: # %bb.0:1336; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1337; CHECK-NEXT: vfnmacc.vf v10, fa0, v8, v0.t1338; CHECK-NEXT: vmv.v.v v8, v101339; CHECK-NEXT: ret1340 %elt.head = insertelement <4 x double> poison, double %b, i32 01341 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1342 %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1343 %negc = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1344 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %nega, <4 x double> %negc, <4 x i1> splat (i1 -1), i32 %evl)1345 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1346 ret <4 x double> %u1347}1348 1349define <8 x double> @vfnmacc_vv_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1350; CHECK-LABEL: vfnmacc_vv_v8f64:1351; CHECK: # %bb.0:1352; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1353; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1354; CHECK-NEXT: vmv4r.v v8, v161355; CHECK-NEXT: ret1356 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1357 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1358 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1359 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1360 ret <8 x double> %u1361}1362 1363define <8 x double> @vfnmacc_vv_v8f64_unmasked(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1364; CHECK-LABEL: vfnmacc_vv_v8f64_unmasked:1365; CHECK: # %bb.0:1366; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1367; CHECK-NEXT: vfnmacc.vv v16, v8, v121368; CHECK-NEXT: vmv4r.v v8, v161369; CHECK-NEXT: ret1370 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1371 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1372 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1373 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1374 ret <8 x double> %u1375}1376 1377define <8 x double> @vfnmacc_vf_v8f64(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1378; CHECK-LABEL: vfnmacc_vf_v8f64:1379; CHECK: # %bb.0:1380; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1381; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1382; CHECK-NEXT: vmv4r.v v8, v121383; CHECK-NEXT: ret1384 %elt.head = insertelement <8 x double> poison, double %b, i32 01385 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1386 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1387 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1388 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1389 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1390 ret <8 x double> %u1391}1392 1393define <8 x double> @vfnmacc_vf_v8f64_commute(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1394; CHECK-LABEL: vfnmacc_vf_v8f64_commute:1395; CHECK: # %bb.0:1396; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1397; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1398; CHECK-NEXT: vmv4r.v v8, v121399; CHECK-NEXT: ret1400 %elt.head = insertelement <8 x double> poison, double %b, i32 01401 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1402 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1403 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1404 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %nega, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1405 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1406 ret <8 x double> %u1407}1408 1409define <8 x double> @vfnmacc_vf_v8f64_unmasked(<8 x double> %a, double %b, <8 x double> %c, i32 zeroext %evl) {1410; CHECK-LABEL: vfnmacc_vf_v8f64_unmasked:1411; CHECK: # %bb.0:1412; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1413; CHECK-NEXT: vfnmacc.vf v12, fa0, v81414; CHECK-NEXT: vmv4r.v v8, v121415; CHECK-NEXT: ret1416 %elt.head = insertelement <8 x double> poison, double %b, i32 01417 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1418 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1419 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1420 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1421 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1422 ret <8 x double> %u1423}1424 1425define <8 x double> @vfnmacc_vv_v8f64_ta(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1426; CHECK-LABEL: vfnmacc_vv_v8f64_ta:1427; CHECK: # %bb.0:1428; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1429; CHECK-NEXT: vfnmacc.vv v16, v8, v12, v0.t1430; CHECK-NEXT: vmv.v.v v8, v161431; CHECK-NEXT: ret1432 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1433 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1434 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1435 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1436 ret <8 x double> %u1437}1438 1439define <8 x double> @vfnmacc_vf_v8f64_ta(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1440; CHECK-LABEL: vfnmacc_vf_v8f64_ta:1441; CHECK: # %bb.0:1442; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1443; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1444; CHECK-NEXT: vmv.v.v v8, v121445; CHECK-NEXT: ret1446 %elt.head = insertelement <8 x double> poison, double %b, i32 01447 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1448 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1449 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1450 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1451 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1452 ret <8 x double> %u1453}1454 1455define <8 x double> @vfnmacc_vf_v8f64_commute_ta(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1456; CHECK-LABEL: vfnmacc_vf_v8f64_commute_ta:1457; CHECK: # %bb.0:1458; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1459; CHECK-NEXT: vfnmacc.vf v12, fa0, v8, v0.t1460; CHECK-NEXT: vmv.v.v v8, v121461; CHECK-NEXT: ret1462 %elt.head = insertelement <8 x double> poison, double %b, i32 01463 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1464 %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1465 %negc = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1466 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %nega, <8 x double> %negc, <8 x i1> splat (i1 -1), i32 %evl)1467 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1468 ret <8 x double> %u1469}1470