brintos

brintos / llvm-project-archived public Read only

0
0
Text · 99.0 KiB · 28a8ef0 Raw
1605 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s6 7define <vscale x 1 x half> @vfmacc_vv_nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vfmacc_vv_nxv1f16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu11; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t12; CHECK-NEXT:    vmv1r.v v8, v1013; CHECK-NEXT:    ret14  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)15  %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)16  ret <vscale x 1 x half> %u17}18 19define <vscale x 1 x half> @vfmacc_vv_nxv1f16_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {20; CHECK-LABEL: vfmacc_vv_nxv1f16_unmasked:21; CHECK:       # %bb.0:22; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma23; CHECK-NEXT:    vfmacc.vv v10, v8, v924; CHECK-NEXT:    vmv1r.v v8, v1025; CHECK-NEXT:    ret26  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)27  %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)28  ret <vscale x 1 x half> %u29}30 31define <vscale x 1 x half> @vfmacc_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {32; CHECK-LABEL: vfmacc_vf_nxv1f16:33; CHECK:       # %bb.0:34; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu35; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t36; CHECK-NEXT:    vmv1r.v v8, v937; CHECK-NEXT:    ret38  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 039  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer40  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)41  %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)42  ret <vscale x 1 x half> %u43}44 45define <vscale x 1 x half> @vfmacc_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {46; CHECK-LABEL: vfmacc_vf_nxv1f16_commute:47; CHECK:       # %bb.0:48; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu49; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t50; CHECK-NEXT:    vmv1r.v v8, v951; CHECK-NEXT:    ret52  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 053  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer54  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)55  %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)56  ret <vscale x 1 x half> %u57}58 59define <vscale x 1 x half> @vfmacc_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, i32 zeroext %evl) {60; CHECK-LABEL: vfmacc_vf_nxv1f16_unmasked:61; CHECK:       # %bb.0:62; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma63; CHECK-NEXT:    vfmacc.vf v9, fa0, v864; CHECK-NEXT:    vmv1r.v v8, v965; CHECK-NEXT:    ret66  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 067  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer68  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)69  %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)70  ret <vscale x 1 x half> %u71}72 73define <vscale x 1 x half> @vfmacc_vv_nxv1f16_ta(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {74; CHECK-LABEL: vfmacc_vv_nxv1f16_ta:75; CHECK:       # %bb.0:76; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu77; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t78; CHECK-NEXT:    vmv1r.v v8, v1079; CHECK-NEXT:    ret80  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)81  %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)82  ret <vscale x 1 x half> %u83}84 85define <vscale x 1 x half> @vfmacc_vf_nxv1f16_ta(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {86; CHECK-LABEL: vfmacc_vf_nxv1f16_ta:87; CHECK:       # %bb.0:88; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu89; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t90; CHECK-NEXT:    vmv1r.v v8, v991; CHECK-NEXT:    ret92  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 093  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer94  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)95  %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)96  ret <vscale x 1 x half> %u97}98 99define <vscale x 1 x half> @vfmacc_vf_nxv1f16_commute_ta(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {100; CHECK-LABEL: vfmacc_vf_nxv1f16_commute_ta:101; CHECK:       # %bb.0:102; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu103; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t104; CHECK-NEXT:    vmv1r.v v8, v9105; CHECK-NEXT:    ret106  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0107  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer108  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)109  %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)110  ret <vscale x 1 x half> %u111}112 113define <vscale x 2 x half> @vfmacc_vv_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {114; CHECK-LABEL: vfmacc_vv_nxv2f16:115; CHECK:       # %bb.0:116; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu117; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t118; CHECK-NEXT:    vmv1r.v v8, v10119; CHECK-NEXT:    ret120  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)121  %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)122  ret <vscale x 2 x half> %u123}124 125define <vscale x 2 x half> @vfmacc_vv_nxv2f16_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {126; CHECK-LABEL: vfmacc_vv_nxv2f16_unmasked:127; CHECK:       # %bb.0:128; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma129; CHECK-NEXT:    vfmacc.vv v10, v8, v9130; CHECK-NEXT:    vmv1r.v v8, v10131; CHECK-NEXT:    ret132  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)133  %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)134  ret <vscale x 2 x half> %u135}136 137define <vscale x 2 x half> @vfmacc_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {138; CHECK-LABEL: vfmacc_vf_nxv2f16:139; CHECK:       # %bb.0:140; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu141; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t142; CHECK-NEXT:    vmv1r.v v8, v9143; CHECK-NEXT:    ret144  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0145  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer146  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)147  %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)148  ret <vscale x 2 x half> %u149}150 151define <vscale x 2 x half> @vfmacc_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {152; CHECK-LABEL: vfmacc_vf_nxv2f16_commute:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu155; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t156; CHECK-NEXT:    vmv1r.v v8, v9157; CHECK-NEXT:    ret158  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0159  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer160  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)161  %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)162  ret <vscale x 2 x half> %u163}164 165define <vscale x 2 x half> @vfmacc_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, i32 zeroext %evl) {166; CHECK-LABEL: vfmacc_vf_nxv2f16_unmasked:167; CHECK:       # %bb.0:168; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma169; CHECK-NEXT:    vfmacc.vf v9, fa0, v8170; CHECK-NEXT:    vmv1r.v v8, v9171; CHECK-NEXT:    ret172  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0173  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer174  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)175  %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)176  ret <vscale x 2 x half> %u177}178 179define <vscale x 2 x half> @vfmacc_vv_nxv2f16_ta(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {180; CHECK-LABEL: vfmacc_vv_nxv2f16_ta:181; CHECK:       # %bb.0:182; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu183; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t184; CHECK-NEXT:    vmv1r.v v8, v10185; CHECK-NEXT:    ret186  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)187  %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)188  ret <vscale x 2 x half> %u189}190 191define <vscale x 2 x half> @vfmacc_vf_nxv2f16_ta(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {192; CHECK-LABEL: vfmacc_vf_nxv2f16_ta:193; CHECK:       # %bb.0:194; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu195; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t196; CHECK-NEXT:    vmv1r.v v8, v9197; CHECK-NEXT:    ret198  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0199  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer200  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)201  %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)202  ret <vscale x 2 x half> %u203}204 205define <vscale x 2 x half> @vfmacc_vf_nxv2f16_commute_ta(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {206; CHECK-LABEL: vfmacc_vf_nxv2f16_commute_ta:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu209; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t210; CHECK-NEXT:    vmv1r.v v8, v9211; CHECK-NEXT:    ret212  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0213  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer214  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)215  %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)216  ret <vscale x 2 x half> %u217}218 219define <vscale x 4 x half> @vfmacc_vv_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {220; CHECK-LABEL: vfmacc_vv_nxv4f16:221; CHECK:       # %bb.0:222; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu223; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t224; CHECK-NEXT:    vmv1r.v v8, v10225; CHECK-NEXT:    ret226  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)227  %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)228  ret <vscale x 4 x half> %u229}230 231define <vscale x 4 x half> @vfmacc_vv_nxv4f16_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {232; CHECK-LABEL: vfmacc_vv_nxv4f16_unmasked:233; CHECK:       # %bb.0:234; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma235; CHECK-NEXT:    vfmacc.vv v10, v8, v9236; CHECK-NEXT:    vmv1r.v v8, v10237; CHECK-NEXT:    ret238  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)239  %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)240  ret <vscale x 4 x half> %u241}242 243define <vscale x 4 x half> @vfmacc_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {244; CHECK-LABEL: vfmacc_vf_nxv4f16:245; CHECK:       # %bb.0:246; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu247; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t248; CHECK-NEXT:    vmv1r.v v8, v9249; CHECK-NEXT:    ret250  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0251  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer252  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)253  %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)254  ret <vscale x 4 x half> %u255}256 257define <vscale x 4 x half> @vfmacc_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {258; CHECK-LABEL: vfmacc_vf_nxv4f16_commute:259; CHECK:       # %bb.0:260; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu261; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t262; CHECK-NEXT:    vmv1r.v v8, v9263; CHECK-NEXT:    ret264  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0265  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer266  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)267  %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)268  ret <vscale x 4 x half> %u269}270 271define <vscale x 4 x half> @vfmacc_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, i32 zeroext %evl) {272; CHECK-LABEL: vfmacc_vf_nxv4f16_unmasked:273; CHECK:       # %bb.0:274; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma275; CHECK-NEXT:    vfmacc.vf v9, fa0, v8276; CHECK-NEXT:    vmv1r.v v8, v9277; CHECK-NEXT:    ret278  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0279  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer280  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)281  %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)282  ret <vscale x 4 x half> %u283}284 285define <vscale x 4 x half> @vfmacc_vv_nxv4f16_ta(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {286; CHECK-LABEL: vfmacc_vv_nxv4f16_ta:287; CHECK:       # %bb.0:288; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu289; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t290; CHECK-NEXT:    vmv.v.v v8, v10291; CHECK-NEXT:    ret292  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)293  %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)294  ret <vscale x 4 x half> %u295}296 297define <vscale x 4 x half> @vfmacc_vf_nxv4f16_ta(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {298; CHECK-LABEL: vfmacc_vf_nxv4f16_ta:299; CHECK:       # %bb.0:300; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu301; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t302; CHECK-NEXT:    vmv.v.v v8, v9303; CHECK-NEXT:    ret304  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0305  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer306  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)307  %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)308  ret <vscale x 4 x half> %u309}310 311define <vscale x 4 x half> @vfmacc_vf_nxv4f16_commute_ta(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {312; CHECK-LABEL: vfmacc_vf_nxv4f16_commute_ta:313; CHECK:       # %bb.0:314; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu315; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t316; CHECK-NEXT:    vmv.v.v v8, v9317; CHECK-NEXT:    ret318  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0319  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer320  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)321  %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)322  ret <vscale x 4 x half> %u323}324 325define <vscale x 8 x half> @vfmacc_vv_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {326; CHECK-LABEL: vfmacc_vv_nxv8f16:327; CHECK:       # %bb.0:328; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu329; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t330; CHECK-NEXT:    vmv2r.v v8, v12331; CHECK-NEXT:    ret332  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)333  %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)334  ret <vscale x 8 x half> %u335}336 337define <vscale x 8 x half> @vfmacc_vv_nxv8f16_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {338; CHECK-LABEL: vfmacc_vv_nxv8f16_unmasked:339; CHECK:       # %bb.0:340; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma341; CHECK-NEXT:    vfmacc.vv v12, v8, v10342; CHECK-NEXT:    vmv2r.v v8, v12343; CHECK-NEXT:    ret344  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)345  %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)346  ret <vscale x 8 x half> %u347}348 349define <vscale x 8 x half> @vfmacc_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {350; CHECK-LABEL: vfmacc_vf_nxv8f16:351; CHECK:       # %bb.0:352; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu353; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t354; CHECK-NEXT:    vmv2r.v v8, v10355; CHECK-NEXT:    ret356  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0357  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer358  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)359  %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)360  ret <vscale x 8 x half> %u361}362 363define <vscale x 8 x half> @vfmacc_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {364; CHECK-LABEL: vfmacc_vf_nxv8f16_commute:365; CHECK:       # %bb.0:366; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu367; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t368; CHECK-NEXT:    vmv2r.v v8, v10369; CHECK-NEXT:    ret370  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0371  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer372  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)373  %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)374  ret <vscale x 8 x half> %u375}376 377define <vscale x 8 x half> @vfmacc_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, i32 zeroext %evl) {378; CHECK-LABEL: vfmacc_vf_nxv8f16_unmasked:379; CHECK:       # %bb.0:380; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma381; CHECK-NEXT:    vfmacc.vf v10, fa0, v8382; CHECK-NEXT:    vmv2r.v v8, v10383; CHECK-NEXT:    ret384  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0385  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer386  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)387  %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)388  ret <vscale x 8 x half> %u389}390 391define <vscale x 8 x half> @vfmacc_vv_nxv8f16_ta(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {392; CHECK-LABEL: vfmacc_vv_nxv8f16_ta:393; CHECK:       # %bb.0:394; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu395; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t396; CHECK-NEXT:    vmv.v.v v8, v12397; CHECK-NEXT:    ret398  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)399  %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)400  ret <vscale x 8 x half> %u401}402 403define <vscale x 8 x half> @vfmacc_vf_nxv8f16_ta(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {404; CHECK-LABEL: vfmacc_vf_nxv8f16_ta:405; CHECK:       # %bb.0:406; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu407; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t408; CHECK-NEXT:    vmv.v.v v8, v10409; CHECK-NEXT:    ret410  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0411  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer412  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)413  %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)414  ret <vscale x 8 x half> %u415}416 417define <vscale x 8 x half> @vfmacc_vf_nxv8f16_commute_ta(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {418; CHECK-LABEL: vfmacc_vf_nxv8f16_commute_ta:419; CHECK:       # %bb.0:420; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu421; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t422; CHECK-NEXT:    vmv.v.v v8, v10423; CHECK-NEXT:    ret424  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0425  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer426  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)427  %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)428  ret <vscale x 8 x half> %u429}430 431define <vscale x 16 x half> @vfmacc_vv_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {432; CHECK-LABEL: vfmacc_vv_nxv16f16:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu435; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t436; CHECK-NEXT:    vmv4r.v v8, v16437; CHECK-NEXT:    ret438  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)439  %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)440  ret <vscale x 16 x half> %u441}442 443define <vscale x 16 x half> @vfmacc_vv_nxv16f16_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {444; CHECK-LABEL: vfmacc_vv_nxv16f16_unmasked:445; CHECK:       # %bb.0:446; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma447; CHECK-NEXT:    vfmacc.vv v16, v8, v12448; CHECK-NEXT:    vmv4r.v v8, v16449; CHECK-NEXT:    ret450  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)451  %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)452  ret <vscale x 16 x half> %u453}454 455define <vscale x 16 x half> @vfmacc_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {456; CHECK-LABEL: vfmacc_vf_nxv16f16:457; CHECK:       # %bb.0:458; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu459; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t460; CHECK-NEXT:    vmv4r.v v8, v12461; CHECK-NEXT:    ret462  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0463  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer464  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)465  %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)466  ret <vscale x 16 x half> %u467}468 469define <vscale x 16 x half> @vfmacc_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {470; CHECK-LABEL: vfmacc_vf_nxv16f16_commute:471; CHECK:       # %bb.0:472; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu473; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t474; CHECK-NEXT:    vmv4r.v v8, v12475; CHECK-NEXT:    ret476  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0477  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer478  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)479  %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)480  ret <vscale x 16 x half> %u481}482 483define <vscale x 16 x half> @vfmacc_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, i32 zeroext %evl) {484; CHECK-LABEL: vfmacc_vf_nxv16f16_unmasked:485; CHECK:       # %bb.0:486; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma487; CHECK-NEXT:    vfmacc.vf v12, fa0, v8488; CHECK-NEXT:    vmv4r.v v8, v12489; CHECK-NEXT:    ret490  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0491  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer492  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)493  %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)494  ret <vscale x 16 x half> %u495}496 497define <vscale x 16 x half> @vfmacc_vv_nxv16f16_ta(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {498; CHECK-LABEL: vfmacc_vv_nxv16f16_ta:499; CHECK:       # %bb.0:500; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu501; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t502; CHECK-NEXT:    vmv.v.v v8, v16503; CHECK-NEXT:    ret504  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)505  %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)506  ret <vscale x 16 x half> %u507}508 509define <vscale x 16 x half> @vfmacc_vf_nxv16f16_ta(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {510; CHECK-LABEL: vfmacc_vf_nxv16f16_ta:511; CHECK:       # %bb.0:512; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu513; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t514; CHECK-NEXT:    vmv.v.v v8, v12515; CHECK-NEXT:    ret516  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0517  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer518  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)519  %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)520  ret <vscale x 16 x half> %u521}522 523define <vscale x 16 x half> @vfmacc_vf_nxv16f16_commute_ta(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {524; CHECK-LABEL: vfmacc_vf_nxv16f16_commute_ta:525; CHECK:       # %bb.0:526; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu527; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t528; CHECK-NEXT:    vmv.v.v v8, v12529; CHECK-NEXT:    ret530  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0531  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer532  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)533  %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)534  ret <vscale x 16 x half> %u535}536 537define <vscale x 32 x half> @vfmacc_vv_nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {538; CHECK-LABEL: vfmacc_vv_nxv32f16:539; CHECK:       # %bb.0:540; CHECK-NEXT:    vl8re16.v v24, (a0)541; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu542; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t543; CHECK-NEXT:    vmv8r.v v8, v24544; CHECK-NEXT:    ret545  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)546  %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)547  ret <vscale x 32 x half> %u548}549 550define <vscale x 32 x half> @vfmacc_vv_nxv32f16_unmasked(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {551; CHECK-LABEL: vfmacc_vv_nxv32f16_unmasked:552; CHECK:       # %bb.0:553; CHECK-NEXT:    vl8re16.v v24, (a0)554; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma555; CHECK-NEXT:    vfmacc.vv v24, v8, v16556; CHECK-NEXT:    vmv8r.v v8, v24557; CHECK-NEXT:    ret558  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)559  %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)560  ret <vscale x 32 x half> %u561}562 563define <vscale x 32 x half> @vfmacc_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {564; CHECK-LABEL: vfmacc_vf_nxv32f16:565; CHECK:       # %bb.0:566; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu567; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t568; CHECK-NEXT:    vmv8r.v v8, v16569; CHECK-NEXT:    ret570  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0571  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer572  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)573  %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)574  ret <vscale x 32 x half> %u575}576 577define <vscale x 32 x half> @vfmacc_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {578; CHECK-LABEL: vfmacc_vf_nxv32f16_commute:579; CHECK:       # %bb.0:580; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu581; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t582; CHECK-NEXT:    vmv8r.v v8, v16583; CHECK-NEXT:    ret584  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0585  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer586  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)587  %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)588  ret <vscale x 32 x half> %u589}590 591define <vscale x 32 x half> @vfmacc_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, i32 zeroext %evl) {592; CHECK-LABEL: vfmacc_vf_nxv32f16_unmasked:593; CHECK:       # %bb.0:594; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma595; CHECK-NEXT:    vfmacc.vf v16, fa0, v8596; CHECK-NEXT:    vmv8r.v v8, v16597; CHECK-NEXT:    ret598  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0599  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer600  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)601  %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)602  ret <vscale x 32 x half> %u603}604 605define <vscale x 32 x half> @vfmacc_vv_nxv32f16_ta(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {606; CHECK-LABEL: vfmacc_vv_nxv32f16_ta:607; CHECK:       # %bb.0:608; CHECK-NEXT:    vl8re16.v v24, (a0)609; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu610; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t611; CHECK-NEXT:    vmv.v.v v8, v24612; CHECK-NEXT:    ret613  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)614  %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)615  ret <vscale x 32 x half> %u616}617 618define <vscale x 32 x half> @vfmacc_vf_nxv32f16_ta(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {619; CHECK-LABEL: vfmacc_vf_nxv32f16_ta:620; CHECK:       # %bb.0:621; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu622; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t623; CHECK-NEXT:    vmv.v.v v8, v16624; CHECK-NEXT:    ret625  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0626  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer627  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)628  %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)629  ret <vscale x 32 x half> %u630}631 632define <vscale x 32 x half> @vfmacc_vf_nxv32f16_commute_ta(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {633; CHECK-LABEL: vfmacc_vf_nxv32f16_commute_ta:634; CHECK:       # %bb.0:635; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu636; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t637; CHECK-NEXT:    vmv.v.v v8, v16638; CHECK-NEXT:    ret639  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0640  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer641  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)642  %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)643  ret <vscale x 32 x half> %u644}645 646define <vscale x 1 x float> @vfmacc_vv_nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {647; CHECK-LABEL: vfmacc_vv_nxv1f32:648; CHECK:       # %bb.0:649; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu650; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t651; CHECK-NEXT:    vmv1r.v v8, v10652; CHECK-NEXT:    ret653  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)654  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)655  ret <vscale x 1 x float> %u656}657 658define <vscale x 1 x float> @vfmacc_vv_nxv1f32_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {659; CHECK-LABEL: vfmacc_vv_nxv1f32_unmasked:660; CHECK:       # %bb.0:661; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma662; CHECK-NEXT:    vfmacc.vv v10, v8, v9663; CHECK-NEXT:    vmv1r.v v8, v10664; CHECK-NEXT:    ret665  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)666  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)667  ret <vscale x 1 x float> %u668}669 670define <vscale x 1 x float> @vfmacc_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {671; CHECK-LABEL: vfmacc_vf_nxv1f32:672; CHECK:       # %bb.0:673; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu674; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t675; CHECK-NEXT:    vmv1r.v v8, v9676; CHECK-NEXT:    ret677  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0678  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer679  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)680  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)681  ret <vscale x 1 x float> %u682}683 684define <vscale x 1 x float> @vfmacc_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {685; CHECK-LABEL: vfmacc_vf_nxv1f32_commute:686; CHECK:       # %bb.0:687; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu688; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t689; CHECK-NEXT:    vmv1r.v v8, v9690; CHECK-NEXT:    ret691  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0692  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer693  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)694  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)695  ret <vscale x 1 x float> %u696}697 698define <vscale x 1 x float> @vfmacc_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, i32 zeroext %evl) {699; CHECK-LABEL: vfmacc_vf_nxv1f32_unmasked:700; CHECK:       # %bb.0:701; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma702; CHECK-NEXT:    vfmacc.vf v9, fa0, v8703; CHECK-NEXT:    vmv1r.v v8, v9704; CHECK-NEXT:    ret705  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0706  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer707  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)708  %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)709  ret <vscale x 1 x float> %u710}711 712define <vscale x 1 x float> @vfmacc_vv_nxv1f32_ta(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {713; CHECK-LABEL: vfmacc_vv_nxv1f32_ta:714; CHECK:       # %bb.0:715; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu716; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t717; CHECK-NEXT:    vmv1r.v v8, v10718; CHECK-NEXT:    ret719  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)720  %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)721  ret <vscale x 1 x float> %u722}723 724define <vscale x 1 x float> @vfmacc_vf_nxv1f32_ta(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {725; CHECK-LABEL: vfmacc_vf_nxv1f32_ta:726; CHECK:       # %bb.0:727; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu728; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t729; CHECK-NEXT:    vmv1r.v v8, v9730; CHECK-NEXT:    ret731  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0732  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer733  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)734  %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)735  ret <vscale x 1 x float> %u736}737 738define <vscale x 1 x float> @vfmacc_vf_nxv1f32_commute_ta(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {739; CHECK-LABEL: vfmacc_vf_nxv1f32_commute_ta:740; CHECK:       # %bb.0:741; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu742; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t743; CHECK-NEXT:    vmv1r.v v8, v9744; CHECK-NEXT:    ret745  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0746  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer747  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)748  %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)749  ret <vscale x 1 x float> %u750}751 752define <vscale x 2 x float> @vfmacc_vv_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {753; CHECK-LABEL: vfmacc_vv_nxv2f32:754; CHECK:       # %bb.0:755; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu756; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t757; CHECK-NEXT:    vmv1r.v v8, v10758; CHECK-NEXT:    ret759  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)760  %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)761  ret <vscale x 2 x float> %u762}763 764define <vscale x 2 x float> @vfmacc_vv_nxv2f32_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {765; CHECK-LABEL: vfmacc_vv_nxv2f32_unmasked:766; CHECK:       # %bb.0:767; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma768; CHECK-NEXT:    vfmacc.vv v10, v8, v9769; CHECK-NEXT:    vmv1r.v v8, v10770; CHECK-NEXT:    ret771  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)772  %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)773  ret <vscale x 2 x float> %u774}775 776define <vscale x 2 x float> @vfmacc_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {777; CHECK-LABEL: vfmacc_vf_nxv2f32:778; CHECK:       # %bb.0:779; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu780; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t781; CHECK-NEXT:    vmv1r.v v8, v9782; CHECK-NEXT:    ret783  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0784  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer785  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)786  %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)787  ret <vscale x 2 x float> %u788}789 790define <vscale x 2 x float> @vfmacc_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {791; CHECK-LABEL: vfmacc_vf_nxv2f32_commute:792; CHECK:       # %bb.0:793; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu794; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t795; CHECK-NEXT:    vmv1r.v v8, v9796; CHECK-NEXT:    ret797  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0798  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer799  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)800  %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)801  ret <vscale x 2 x float> %u802}803 804define <vscale x 2 x float> @vfmacc_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, i32 zeroext %evl) {805; CHECK-LABEL: vfmacc_vf_nxv2f32_unmasked:806; CHECK:       # %bb.0:807; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma808; CHECK-NEXT:    vfmacc.vf v9, fa0, v8809; CHECK-NEXT:    vmv1r.v v8, v9810; CHECK-NEXT:    ret811  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0812  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer813  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)814  %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)815  ret <vscale x 2 x float> %u816}817 818define <vscale x 2 x float> @vfmacc_vv_nxv2f32_ta(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {819; CHECK-LABEL: vfmacc_vv_nxv2f32_ta:820; CHECK:       # %bb.0:821; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu822; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t823; CHECK-NEXT:    vmv.v.v v8, v10824; CHECK-NEXT:    ret825  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)826  %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)827  ret <vscale x 2 x float> %u828}829 830define <vscale x 2 x float> @vfmacc_vf_nxv2f32_ta(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {831; CHECK-LABEL: vfmacc_vf_nxv2f32_ta:832; CHECK:       # %bb.0:833; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu834; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t835; CHECK-NEXT:    vmv.v.v v8, v9836; CHECK-NEXT:    ret837  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0838  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer839  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)840  %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)841  ret <vscale x 2 x float> %u842}843 844define <vscale x 2 x float> @vfmacc_vf_nxv2f32_commute_ta(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {845; CHECK-LABEL: vfmacc_vf_nxv2f32_commute_ta:846; CHECK:       # %bb.0:847; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu848; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t849; CHECK-NEXT:    vmv.v.v v8, v9850; CHECK-NEXT:    ret851  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0852  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer853  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)854  %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)855  ret <vscale x 2 x float> %u856}857 858define <vscale x 4 x float> @vfmacc_vv_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {859; CHECK-LABEL: vfmacc_vv_nxv4f32:860; CHECK:       # %bb.0:861; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu862; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t863; CHECK-NEXT:    vmv2r.v v8, v12864; CHECK-NEXT:    ret865  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)866  %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)867  ret <vscale x 4 x float> %u868}869 870define <vscale x 4 x float> @vfmacc_vv_nxv4f32_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {871; CHECK-LABEL: vfmacc_vv_nxv4f32_unmasked:872; CHECK:       # %bb.0:873; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma874; CHECK-NEXT:    vfmacc.vv v12, v8, v10875; CHECK-NEXT:    vmv2r.v v8, v12876; CHECK-NEXT:    ret877  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)878  %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)879  ret <vscale x 4 x float> %u880}881 882define <vscale x 4 x float> @vfmacc_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {883; CHECK-LABEL: vfmacc_vf_nxv4f32:884; CHECK:       # %bb.0:885; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu886; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t887; CHECK-NEXT:    vmv2r.v v8, v10888; CHECK-NEXT:    ret889  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0890  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer891  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)892  %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)893  ret <vscale x 4 x float> %u894}895 896define <vscale x 4 x float> @vfmacc_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {897; CHECK-LABEL: vfmacc_vf_nxv4f32_commute:898; CHECK:       # %bb.0:899; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu900; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t901; CHECK-NEXT:    vmv2r.v v8, v10902; CHECK-NEXT:    ret903  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0904  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer905  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)906  %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)907  ret <vscale x 4 x float> %u908}909 910define <vscale x 4 x float> @vfmacc_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, i32 zeroext %evl) {911; CHECK-LABEL: vfmacc_vf_nxv4f32_unmasked:912; CHECK:       # %bb.0:913; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma914; CHECK-NEXT:    vfmacc.vf v10, fa0, v8915; CHECK-NEXT:    vmv2r.v v8, v10916; CHECK-NEXT:    ret917  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0918  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer919  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)920  %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)921  ret <vscale x 4 x float> %u922}923 924define <vscale x 4 x float> @vfmacc_vv_nxv4f32_ta(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {925; CHECK-LABEL: vfmacc_vv_nxv4f32_ta:926; CHECK:       # %bb.0:927; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu928; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t929; CHECK-NEXT:    vmv.v.v v8, v12930; CHECK-NEXT:    ret931  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)932  %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)933  ret <vscale x 4 x float> %u934}935 936define <vscale x 4 x float> @vfmacc_vf_nxv4f32_ta(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {937; CHECK-LABEL: vfmacc_vf_nxv4f32_ta:938; CHECK:       # %bb.0:939; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu940; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t941; CHECK-NEXT:    vmv.v.v v8, v10942; CHECK-NEXT:    ret943  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0944  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer945  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)946  %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)947  ret <vscale x 4 x float> %u948}949 950define <vscale x 4 x float> @vfmacc_vf_nxv4f32_commute_ta(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {951; CHECK-LABEL: vfmacc_vf_nxv4f32_commute_ta:952; CHECK:       # %bb.0:953; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu954; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t955; CHECK-NEXT:    vmv.v.v v8, v10956; CHECK-NEXT:    ret957  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0958  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer959  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)960  %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)961  ret <vscale x 4 x float> %u962}963 964define <vscale x 8 x float> @vfmacc_vv_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {965; CHECK-LABEL: vfmacc_vv_nxv8f32:966; CHECK:       # %bb.0:967; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu968; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t969; CHECK-NEXT:    vmv4r.v v8, v16970; CHECK-NEXT:    ret971  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)972  %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)973  ret <vscale x 8 x float> %u974}975 976define <vscale x 8 x float> @vfmacc_vv_nxv8f32_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {977; CHECK-LABEL: vfmacc_vv_nxv8f32_unmasked:978; CHECK:       # %bb.0:979; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma980; CHECK-NEXT:    vfmacc.vv v16, v8, v12981; CHECK-NEXT:    vmv4r.v v8, v16982; CHECK-NEXT:    ret983  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)984  %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)985  ret <vscale x 8 x float> %u986}987 988define <vscale x 8 x float> @vfmacc_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {989; CHECK-LABEL: vfmacc_vf_nxv8f32:990; CHECK:       # %bb.0:991; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu992; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t993; CHECK-NEXT:    vmv4r.v v8, v12994; CHECK-NEXT:    ret995  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0996  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer997  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)998  %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)999  ret <vscale x 8 x float> %u1000}1001 1002define <vscale x 8 x float> @vfmacc_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1003; CHECK-LABEL: vfmacc_vf_nxv8f32_commute:1004; CHECK:       # %bb.0:1005; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu1006; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1007; CHECK-NEXT:    vmv4r.v v8, v121008; CHECK-NEXT:    ret1009  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01010  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1011  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1012  %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1013  ret <vscale x 8 x float> %u1014}1015 1016define <vscale x 8 x float> @vfmacc_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, i32 zeroext %evl) {1017; CHECK-LABEL: vfmacc_vf_nxv8f32_unmasked:1018; CHECK:       # %bb.0:1019; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma1020; CHECK-NEXT:    vfmacc.vf v12, fa0, v81021; CHECK-NEXT:    vmv4r.v v8, v121022; CHECK-NEXT:    ret1023  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01024  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1025  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1026  %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1027  ret <vscale x 8 x float> %u1028}1029 1030define <vscale x 8 x float> @vfmacc_vv_nxv8f32_ta(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1031; CHECK-LABEL: vfmacc_vv_nxv8f32_ta:1032; CHECK:       # %bb.0:1033; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1034; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t1035; CHECK-NEXT:    vmv.v.v v8, v161036; CHECK-NEXT:    ret1037  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1038  %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1039  ret <vscale x 8 x float> %u1040}1041 1042define <vscale x 8 x float> @vfmacc_vf_nxv8f32_ta(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1043; CHECK-LABEL: vfmacc_vf_nxv8f32_ta:1044; CHECK:       # %bb.0:1045; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1046; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1047; CHECK-NEXT:    vmv.v.v v8, v121048; CHECK-NEXT:    ret1049  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01050  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1051  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1052  %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1053  ret <vscale x 8 x float> %u1054}1055 1056define <vscale x 8 x float> @vfmacc_vf_nxv8f32_commute_ta(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1057; CHECK-LABEL: vfmacc_vf_nxv8f32_commute_ta:1058; CHECK:       # %bb.0:1059; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1060; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1061; CHECK-NEXT:    vmv.v.v v8, v121062; CHECK-NEXT:    ret1063  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 01064  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1065  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1066  %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)1067  ret <vscale x 8 x float> %u1068}1069 1070define <vscale x 16 x float> @vfmacc_vv_nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1071; CHECK-LABEL: vfmacc_vv_nxv16f32:1072; CHECK:       # %bb.0:1073; CHECK-NEXT:    vl8re32.v v24, (a0)1074; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu1075; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t1076; CHECK-NEXT:    vmv8r.v v8, v241077; CHECK-NEXT:    ret1078  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1079  %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1080  ret <vscale x 16 x float> %u1081}1082 1083define <vscale x 16 x float> @vfmacc_vv_nxv16f32_unmasked(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1084; CHECK-LABEL: vfmacc_vv_nxv16f32_unmasked:1085; CHECK:       # %bb.0:1086; CHECK-NEXT:    vl8re32.v v24, (a0)1087; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma1088; CHECK-NEXT:    vfmacc.vv v24, v8, v161089; CHECK-NEXT:    vmv8r.v v8, v241090; CHECK-NEXT:    ret1091  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1092  %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1093  ret <vscale x 16 x float> %u1094}1095 1096define <vscale x 16 x float> @vfmacc_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1097; CHECK-LABEL: vfmacc_vf_nxv16f32:1098; CHECK:       # %bb.0:1099; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu1100; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1101; CHECK-NEXT:    vmv8r.v v8, v161102; CHECK-NEXT:    ret1103  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01104  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1105  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1106  %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1107  ret <vscale x 16 x float> %u1108}1109 1110define <vscale x 16 x float> @vfmacc_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1111; CHECK-LABEL: vfmacc_vf_nxv16f32_commute:1112; CHECK:       # %bb.0:1113; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu1114; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1115; CHECK-NEXT:    vmv8r.v v8, v161116; CHECK-NEXT:    ret1117  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01118  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1119  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1120  %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1121  ret <vscale x 16 x float> %u1122}1123 1124define <vscale x 16 x float> @vfmacc_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, i32 zeroext %evl) {1125; CHECK-LABEL: vfmacc_vf_nxv16f32_unmasked:1126; CHECK:       # %bb.0:1127; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma1128; CHECK-NEXT:    vfmacc.vf v16, fa0, v81129; CHECK-NEXT:    vmv8r.v v8, v161130; CHECK-NEXT:    ret1131  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01132  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1133  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1134  %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1135  ret <vscale x 16 x float> %u1136}1137 1138define <vscale x 16 x float> @vfmacc_vv_nxv16f32_ta(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1139; CHECK-LABEL: vfmacc_vv_nxv16f32_ta:1140; CHECK:       # %bb.0:1141; CHECK-NEXT:    vl8re32.v v24, (a0)1142; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu1143; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t1144; CHECK-NEXT:    vmv.v.v v8, v241145; CHECK-NEXT:    ret1146  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1147  %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1148  ret <vscale x 16 x float> %u1149}1150 1151define <vscale x 16 x float> @vfmacc_vf_nxv16f32_ta(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1152; CHECK-LABEL: vfmacc_vf_nxv16f32_ta:1153; CHECK:       # %bb.0:1154; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu1155; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1156; CHECK-NEXT:    vmv.v.v v8, v161157; CHECK-NEXT:    ret1158  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01159  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1160  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1161  %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1162  ret <vscale x 16 x float> %u1163}1164 1165define <vscale x 16 x float> @vfmacc_vf_nxv16f32_commute_ta(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {1166; CHECK-LABEL: vfmacc_vf_nxv16f32_commute_ta:1167; CHECK:       # %bb.0:1168; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu1169; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1170; CHECK-NEXT:    vmv.v.v v8, v161171; CHECK-NEXT:    ret1172  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 01173  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1174  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1175  %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)1176  ret <vscale x 16 x float> %u1177}1178 1179define <vscale x 1 x double> @vfmacc_vv_nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1180; CHECK-LABEL: vfmacc_vv_nxv1f64:1181; CHECK:       # %bb.0:1182; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1183; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t1184; CHECK-NEXT:    vmv1r.v v8, v101185; CHECK-NEXT:    ret1186  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1187  %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1188  ret <vscale x 1 x double> %u1189}1190 1191define <vscale x 1 x double> @vfmacc_vv_nxv1f64_unmasked(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1192; CHECK-LABEL: vfmacc_vv_nxv1f64_unmasked:1193; CHECK:       # %bb.0:1194; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1195; CHECK-NEXT:    vfmacc.vv v10, v8, v91196; CHECK-NEXT:    vmv1r.v v8, v101197; CHECK-NEXT:    ret1198  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1199  %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1200  ret <vscale x 1 x double> %u1201}1202 1203define <vscale x 1 x double> @vfmacc_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1204; CHECK-LABEL: vfmacc_vf_nxv1f64:1205; CHECK:       # %bb.0:1206; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1207; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t1208; CHECK-NEXT:    vmv1r.v v8, v91209; CHECK-NEXT:    ret1210  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01211  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1212  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1213  %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1214  ret <vscale x 1 x double> %u1215}1216 1217define <vscale x 1 x double> @vfmacc_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1218; CHECK-LABEL: vfmacc_vf_nxv1f64_commute:1219; CHECK:       # %bb.0:1220; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1221; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t1222; CHECK-NEXT:    vmv1r.v v8, v91223; CHECK-NEXT:    ret1224  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01225  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1226  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1227  %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1228  ret <vscale x 1 x double> %u1229}1230 1231define <vscale x 1 x double> @vfmacc_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, i32 zeroext %evl) {1232; CHECK-LABEL: vfmacc_vf_nxv1f64_unmasked:1233; CHECK:       # %bb.0:1234; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1235; CHECK-NEXT:    vfmacc.vf v9, fa0, v81236; CHECK-NEXT:    vmv1r.v v8, v91237; CHECK-NEXT:    ret1238  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01239  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1240  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1241  %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1242  ret <vscale x 1 x double> %u1243}1244 1245define <vscale x 1 x double> @vfmacc_vv_nxv1f64_ta(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1246; CHECK-LABEL: vfmacc_vv_nxv1f64_ta:1247; CHECK:       # %bb.0:1248; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1249; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t1250; CHECK-NEXT:    vmv.v.v v8, v101251; CHECK-NEXT:    ret1252  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1253  %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1254  ret <vscale x 1 x double> %u1255}1256 1257define <vscale x 1 x double> @vfmacc_vf_nxv1f64_ta(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1258; CHECK-LABEL: vfmacc_vf_nxv1f64_ta:1259; CHECK:       # %bb.0:1260; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1261; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t1262; CHECK-NEXT:    vmv.v.v v8, v91263; CHECK-NEXT:    ret1264  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01265  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1266  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1267  %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1268  ret <vscale x 1 x double> %u1269}1270 1271define <vscale x 1 x double> @vfmacc_vf_nxv1f64_commute_ta(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {1272; CHECK-LABEL: vfmacc_vf_nxv1f64_commute_ta:1273; CHECK:       # %bb.0:1274; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1275; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t1276; CHECK-NEXT:    vmv.v.v v8, v91277; CHECK-NEXT:    ret1278  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 01279  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1280  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1281  %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)1282  ret <vscale x 1 x double> %u1283}1284 1285define <vscale x 2 x double> @vfmacc_vv_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1286; CHECK-LABEL: vfmacc_vv_nxv2f64:1287; CHECK:       # %bb.0:1288; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1289; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t1290; CHECK-NEXT:    vmv2r.v v8, v121291; CHECK-NEXT:    ret1292  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1293  %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1294  ret <vscale x 2 x double> %u1295}1296 1297define <vscale x 2 x double> @vfmacc_vv_nxv2f64_unmasked(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1298; CHECK-LABEL: vfmacc_vv_nxv2f64_unmasked:1299; CHECK:       # %bb.0:1300; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1301; CHECK-NEXT:    vfmacc.vv v12, v8, v101302; CHECK-NEXT:    vmv2r.v v8, v121303; CHECK-NEXT:    ret1304  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1305  %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1306  ret <vscale x 2 x double> %u1307}1308 1309define <vscale x 2 x double> @vfmacc_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1310; CHECK-LABEL: vfmacc_vf_nxv2f64:1311; CHECK:       # %bb.0:1312; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1313; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t1314; CHECK-NEXT:    vmv2r.v v8, v101315; CHECK-NEXT:    ret1316  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01317  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1318  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1319  %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1320  ret <vscale x 2 x double> %u1321}1322 1323define <vscale x 2 x double> @vfmacc_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1324; CHECK-LABEL: vfmacc_vf_nxv2f64_commute:1325; CHECK:       # %bb.0:1326; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1327; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t1328; CHECK-NEXT:    vmv2r.v v8, v101329; CHECK-NEXT:    ret1330  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01331  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1332  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1333  %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1334  ret <vscale x 2 x double> %u1335}1336 1337define <vscale x 2 x double> @vfmacc_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, i32 zeroext %evl) {1338; CHECK-LABEL: vfmacc_vf_nxv2f64_unmasked:1339; CHECK:       # %bb.0:1340; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1341; CHECK-NEXT:    vfmacc.vf v10, fa0, v81342; CHECK-NEXT:    vmv2r.v v8, v101343; CHECK-NEXT:    ret1344  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01345  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1346  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1347  %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1348  ret <vscale x 2 x double> %u1349}1350 1351define <vscale x 2 x double> @vfmacc_vv_nxv2f64_ta(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1352; CHECK-LABEL: vfmacc_vv_nxv2f64_ta:1353; CHECK:       # %bb.0:1354; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1355; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t1356; CHECK-NEXT:    vmv.v.v v8, v121357; CHECK-NEXT:    ret1358  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1359  %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1360  ret <vscale x 2 x double> %u1361}1362 1363define <vscale x 2 x double> @vfmacc_vf_nxv2f64_ta(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1364; CHECK-LABEL: vfmacc_vf_nxv2f64_ta:1365; CHECK:       # %bb.0:1366; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1367; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t1368; CHECK-NEXT:    vmv.v.v v8, v101369; CHECK-NEXT:    ret1370  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01371  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1372  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1373  %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1374  ret <vscale x 2 x double> %u1375}1376 1377define <vscale x 2 x double> @vfmacc_vf_nxv2f64_commute_ta(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {1378; CHECK-LABEL: vfmacc_vf_nxv2f64_commute_ta:1379; CHECK:       # %bb.0:1380; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1381; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t1382; CHECK-NEXT:    vmv.v.v v8, v101383; CHECK-NEXT:    ret1384  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01385  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1386  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1387  %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)1388  ret <vscale x 2 x double> %u1389}1390 1391define <vscale x 4 x double> @vfmacc_vv_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1392; CHECK-LABEL: vfmacc_vv_nxv4f64:1393; CHECK:       # %bb.0:1394; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1395; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t1396; CHECK-NEXT:    vmv4r.v v8, v161397; CHECK-NEXT:    ret1398  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1399  %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1400  ret <vscale x 4 x double> %u1401}1402 1403define <vscale x 4 x double> @vfmacc_vv_nxv4f64_unmasked(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1404; CHECK-LABEL: vfmacc_vv_nxv4f64_unmasked:1405; CHECK:       # %bb.0:1406; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1407; CHECK-NEXT:    vfmacc.vv v16, v8, v121408; CHECK-NEXT:    vmv4r.v v8, v161409; CHECK-NEXT:    ret1410  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1411  %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1412  ret <vscale x 4 x double> %u1413}1414 1415define <vscale x 4 x double> @vfmacc_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1416; CHECK-LABEL: vfmacc_vf_nxv4f64:1417; CHECK:       # %bb.0:1418; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1419; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1420; CHECK-NEXT:    vmv4r.v v8, v121421; CHECK-NEXT:    ret1422  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01423  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1424  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1425  %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1426  ret <vscale x 4 x double> %u1427}1428 1429define <vscale x 4 x double> @vfmacc_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1430; CHECK-LABEL: vfmacc_vf_nxv4f64_commute:1431; CHECK:       # %bb.0:1432; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1433; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1434; CHECK-NEXT:    vmv4r.v v8, v121435; CHECK-NEXT:    ret1436  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01437  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1438  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1439  %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1440  ret <vscale x 4 x double> %u1441}1442 1443define <vscale x 4 x double> @vfmacc_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, i32 zeroext %evl) {1444; CHECK-LABEL: vfmacc_vf_nxv4f64_unmasked:1445; CHECK:       # %bb.0:1446; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1447; CHECK-NEXT:    vfmacc.vf v12, fa0, v81448; CHECK-NEXT:    vmv4r.v v8, v121449; CHECK-NEXT:    ret1450  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01451  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1452  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1453  %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1454  ret <vscale x 4 x double> %u1455}1456 1457define <vscale x 4 x double> @vfmacc_vv_nxv4f64_ta(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1458; CHECK-LABEL: vfmacc_vv_nxv4f64_ta:1459; CHECK:       # %bb.0:1460; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1461; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t1462; CHECK-NEXT:    vmv.v.v v8, v161463; CHECK-NEXT:    ret1464  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1465  %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1466  ret <vscale x 4 x double> %u1467}1468 1469define <vscale x 4 x double> @vfmacc_vf_nxv4f64_ta(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1470; CHECK-LABEL: vfmacc_vf_nxv4f64_ta:1471; CHECK:       # %bb.0:1472; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1473; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1474; CHECK-NEXT:    vmv.v.v v8, v121475; CHECK-NEXT:    ret1476  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01477  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1478  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1479  %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1480  ret <vscale x 4 x double> %u1481}1482 1483define <vscale x 4 x double> @vfmacc_vf_nxv4f64_commute_ta(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {1484; CHECK-LABEL: vfmacc_vf_nxv4f64_commute_ta:1485; CHECK:       # %bb.0:1486; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1487; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t1488; CHECK-NEXT:    vmv.v.v v8, v121489; CHECK-NEXT:    ret1490  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01491  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1492  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1493  %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)1494  ret <vscale x 4 x double> %u1495}1496 1497define <vscale x 8 x double> @vfmacc_vv_nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1498; CHECK-LABEL: vfmacc_vv_nxv8f64:1499; CHECK:       # %bb.0:1500; CHECK-NEXT:    vl8re64.v v24, (a0)1501; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, mu1502; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t1503; CHECK-NEXT:    vmv8r.v v8, v241504; CHECK-NEXT:    ret1505  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1506  %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1507  ret <vscale x 8 x double> %u1508}1509 1510define <vscale x 8 x double> @vfmacc_vv_nxv8f64_unmasked(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1511; CHECK-LABEL: vfmacc_vv_nxv8f64_unmasked:1512; CHECK:       # %bb.0:1513; CHECK-NEXT:    vl8re64.v v24, (a0)1514; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, ma1515; CHECK-NEXT:    vfmacc.vv v24, v8, v161516; CHECK-NEXT:    vmv8r.v v8, v241517; CHECK-NEXT:    ret1518  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1519  %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1520  ret <vscale x 8 x double> %u1521}1522 1523define <vscale x 8 x double> @vfmacc_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1524; CHECK-LABEL: vfmacc_vf_nxv8f64:1525; CHECK:       # %bb.0:1526; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu1527; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1528; CHECK-NEXT:    vmv8r.v v8, v161529; CHECK-NEXT:    ret1530  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01531  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1532  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1533  %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1534  ret <vscale x 8 x double> %u1535}1536 1537define <vscale x 8 x double> @vfmacc_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1538; CHECK-LABEL: vfmacc_vf_nxv8f64_commute:1539; CHECK:       # %bb.0:1540; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu1541; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1542; CHECK-NEXT:    vmv8r.v v8, v161543; CHECK-NEXT:    ret1544  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01545  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1546  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1547  %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1548  ret <vscale x 8 x double> %u1549}1550 1551define <vscale x 8 x double> @vfmacc_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, i32 zeroext %evl) {1552; CHECK-LABEL: vfmacc_vf_nxv8f64_unmasked:1553; CHECK:       # %bb.0:1554; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1555; CHECK-NEXT:    vfmacc.vf v16, fa0, v81556; CHECK-NEXT:    vmv8r.v v8, v161557; CHECK-NEXT:    ret1558  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01559  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1560  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1561  %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1562  ret <vscale x 8 x double> %u1563}1564 1565define <vscale x 8 x double> @vfmacc_vv_nxv8f64_ta(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1566; CHECK-LABEL: vfmacc_vv_nxv8f64_ta:1567; CHECK:       # %bb.0:1568; CHECK-NEXT:    vl8re64.v v24, (a0)1569; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu1570; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t1571; CHECK-NEXT:    vmv.v.v v8, v241572; CHECK-NEXT:    ret1573  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1574  %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1575  ret <vscale x 8 x double> %u1576}1577 1578define <vscale x 8 x double> @vfmacc_vf_nxv8f64_ta(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1579; CHECK-LABEL: vfmacc_vf_nxv8f64_ta:1580; CHECK:       # %bb.0:1581; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu1582; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1583; CHECK-NEXT:    vmv.v.v v8, v161584; CHECK-NEXT:    ret1585  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01586  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1587  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1588  %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1589  ret <vscale x 8 x double> %u1590}1591 1592define <vscale x 8 x double> @vfmacc_vf_nxv8f64_commute_ta(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {1593; CHECK-LABEL: vfmacc_vf_nxv8f64_commute_ta:1594; CHECK:       # %bb.0:1595; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu1596; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t1597; CHECK-NEXT:    vmv.v.v v8, v161598; CHECK-NEXT:    ret1599  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01600  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1601  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1602  %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)1603  ret <vscale x 8 x double> %u1604}1605