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