brintos

brintos / llvm-project-archived public Read only

0
0
Text · 83.2 KiB · 3bcf749 Raw
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