brintos

brintos / llvm-project-archived public Read only

0
0
Text · 122.9 KiB · 2ad7ac9 Raw
2054 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v,+m -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+v,+m -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV646 7define <vscale x 1 x i8> @vmacc_vv_nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vmacc_vv_nxv1i8:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, mu11; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t12; CHECK-NEXT:    vmv1r.v v8, v1013; CHECK-NEXT:    ret14  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)15  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)16  %u = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)17  ret <vscale x 1 x i8> %u18}19 20define <vscale x 1 x i8> @vmacc_vv_nxv1i8_unmasked(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {21; CHECK-LABEL: vmacc_vv_nxv1i8_unmasked:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma24; CHECK-NEXT:    vmacc.vv v10, v8, v925; CHECK-NEXT:    vmv1r.v v8, v1026; CHECK-NEXT:    ret27  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)28  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)29  %u = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)30  ret <vscale x 1 x i8> %u31}32 33define <vscale x 1 x i8> @vmacc_vx_nxv1i8(<vscale x 1 x i8> %a, i8 %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {34; CHECK-LABEL: vmacc_vx_nxv1i8:35; CHECK:       # %bb.0:36; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, tu, mu37; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t38; CHECK-NEXT:    vmv1r.v v8, v939; CHECK-NEXT:    ret40  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 041  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer42  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)43  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)44  %u = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)45  ret <vscale x 1 x i8> %u46}47 48define <vscale x 1 x i8> @vmacc_vx_nxv1i8_unmasked(<vscale x 1 x i8> %a, i8 %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {49; CHECK-LABEL: vmacc_vx_nxv1i8_unmasked:50; CHECK:       # %bb.0:51; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, tu, ma52; CHECK-NEXT:    vmacc.vx v9, a0, v853; CHECK-NEXT:    vmv1r.v v8, v954; CHECK-NEXT:    ret55  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 056  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer57  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)58  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)59  %u = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)60  ret <vscale x 1 x i8> %u61}62 63define <vscale x 1 x i8> @vmacc_vv_nxv1i8_ta(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {64; CHECK-LABEL: vmacc_vv_nxv1i8_ta:65; CHECK:       # %bb.0:66; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu67; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t68; CHECK-NEXT:    vmv1r.v v8, v1069; CHECK-NEXT:    ret70  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)71  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)72  %u = call <vscale x 1 x i8> @llvm.vp.select.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)73  ret <vscale x 1 x i8> %u74}75 76define <vscale x 1 x i8> @vmacc_vx_nxv1i8_ta(<vscale x 1 x i8> %a, i8 %b, <vscale x 1 x i8> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {77; CHECK-LABEL: vmacc_vx_nxv1i8_ta:78; CHECK:       # %bb.0:79; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu80; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t81; CHECK-NEXT:    vmv1r.v v8, v982; CHECK-NEXT:    ret83  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 084  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer85  %x = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)86  %y = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)87  %u = call <vscale x 1 x i8> @llvm.vp.select.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %y, <vscale x 1 x i8> %c, i32 %evl)88  ret <vscale x 1 x i8> %u89}90 91define <vscale x 2 x i8> @vmacc_vv_nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {92; CHECK-LABEL: vmacc_vv_nxv2i8:93; CHECK:       # %bb.0:94; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, mu95; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t96; CHECK-NEXT:    vmv1r.v v8, v1097; CHECK-NEXT:    ret98  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)99  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)100  %u = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)101  ret <vscale x 2 x i8> %u102}103 104define <vscale x 2 x i8> @vmacc_vv_nxv2i8_unmasked(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {105; CHECK-LABEL: vmacc_vv_nxv2i8_unmasked:106; CHECK:       # %bb.0:107; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, ma108; CHECK-NEXT:    vmacc.vv v10, v8, v9109; CHECK-NEXT:    vmv1r.v v8, v10110; CHECK-NEXT:    ret111  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)112  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)113  %u = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)114  ret <vscale x 2 x i8> %u115}116 117define <vscale x 2 x i8> @vmacc_vx_nxv2i8(<vscale x 2 x i8> %a, i8 %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {118; CHECK-LABEL: vmacc_vx_nxv2i8:119; CHECK:       # %bb.0:120; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, mu121; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t122; CHECK-NEXT:    vmv1r.v v8, v9123; CHECK-NEXT:    ret124  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0125  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer126  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)127  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)128  %u = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)129  ret <vscale x 2 x i8> %u130}131 132define <vscale x 2 x i8> @vmacc_vx_nxv2i8_unmasked(<vscale x 2 x i8> %a, i8 %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {133; CHECK-LABEL: vmacc_vx_nxv2i8_unmasked:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, ma136; CHECK-NEXT:    vmacc.vx v9, a0, v8137; CHECK-NEXT:    vmv1r.v v8, v9138; CHECK-NEXT:    ret139  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0140  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer141  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)142  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)143  %u = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)144  ret <vscale x 2 x i8> %u145}146 147define <vscale x 2 x i8> @vmacc_vv_nxv2i8_ta(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {148; CHECK-LABEL: vmacc_vv_nxv2i8_ta:149; CHECK:       # %bb.0:150; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu151; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t152; CHECK-NEXT:    vmv1r.v v8, v10153; CHECK-NEXT:    ret154  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)155  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)156  %u = call <vscale x 2 x i8> @llvm.vp.select.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)157  ret <vscale x 2 x i8> %u158}159 160define <vscale x 2 x i8> @vmacc_vx_nxv2i8_ta(<vscale x 2 x i8> %a, i8 %b, <vscale x 2 x i8> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {161; CHECK-LABEL: vmacc_vx_nxv2i8_ta:162; CHECK:       # %bb.0:163; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu164; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t165; CHECK-NEXT:    vmv1r.v v8, v9166; CHECK-NEXT:    ret167  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0168  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer169  %x = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)170  %y = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)171  %u = call <vscale x 2 x i8> @llvm.vp.select.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %y, <vscale x 2 x i8> %c, i32 %evl)172  ret <vscale x 2 x i8> %u173}174 175define <vscale x 4 x i8> @vmacc_vv_nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {176; CHECK-LABEL: vmacc_vv_nxv4i8:177; CHECK:       # %bb.0:178; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, mu179; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t180; CHECK-NEXT:    vmv1r.v v8, v10181; CHECK-NEXT:    ret182  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)183  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)184  %u = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)185  ret <vscale x 4 x i8> %u186}187 188define <vscale x 4 x i8> @vmacc_vv_nxv4i8_unmasked(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {189; CHECK-LABEL: vmacc_vv_nxv4i8_unmasked:190; CHECK:       # %bb.0:191; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma192; CHECK-NEXT:    vmacc.vv v10, v8, v9193; CHECK-NEXT:    vmv1r.v v8, v10194; CHECK-NEXT:    ret195  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)196  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)197  %u = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)198  ret <vscale x 4 x i8> %u199}200 201define <vscale x 4 x i8> @vmacc_vx_nxv4i8(<vscale x 4 x i8> %a, i8 %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {202; CHECK-LABEL: vmacc_vx_nxv4i8:203; CHECK:       # %bb.0:204; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, mu205; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t206; CHECK-NEXT:    vmv1r.v v8, v9207; CHECK-NEXT:    ret208  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0209  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer210  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)211  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)212  %u = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)213  ret <vscale x 4 x i8> %u214}215 216define <vscale x 4 x i8> @vmacc_vx_nxv4i8_unmasked(<vscale x 4 x i8> %a, i8 %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {217; CHECK-LABEL: vmacc_vx_nxv4i8_unmasked:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma220; CHECK-NEXT:    vmacc.vx v9, a0, v8221; CHECK-NEXT:    vmv1r.v v8, v9222; CHECK-NEXT:    ret223  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0224  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer225  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)226  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)227  %u = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)228  ret <vscale x 4 x i8> %u229}230 231define <vscale x 4 x i8> @vmacc_vv_nxv4i8_ta(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {232; CHECK-LABEL: vmacc_vv_nxv4i8_ta:233; CHECK:       # %bb.0:234; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu235; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t236; CHECK-NEXT:    vmv1r.v v8, v10237; CHECK-NEXT:    ret238  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)239  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)240  %u = call <vscale x 4 x i8> @llvm.vp.select.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)241  ret <vscale x 4 x i8> %u242}243 244define <vscale x 4 x i8> @vmacc_vx_nxv4i8_ta(<vscale x 4 x i8> %a, i8 %b, <vscale x 4 x i8> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {245; CHECK-LABEL: vmacc_vx_nxv4i8_ta:246; CHECK:       # %bb.0:247; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu248; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t249; CHECK-NEXT:    vmv1r.v v8, v9250; CHECK-NEXT:    ret251  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0252  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer253  %x = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)254  %y = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)255  %u = call <vscale x 4 x i8> @llvm.vp.select.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)256  ret <vscale x 4 x i8> %u257}258 259define <vscale x 8 x i8> @vmacc_vv_nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {260; CHECK-LABEL: vmacc_vv_nxv8i8:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, mu263; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t264; CHECK-NEXT:    vmv1r.v v8, v10265; CHECK-NEXT:    ret266  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)267  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)268  %u = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)269  ret <vscale x 8 x i8> %u270}271 272define <vscale x 8 x i8> @vmacc_vv_nxv8i8_unmasked(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {273; CHECK-LABEL: vmacc_vv_nxv8i8_unmasked:274; CHECK:       # %bb.0:275; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, ma276; CHECK-NEXT:    vmacc.vv v10, v8, v9277; CHECK-NEXT:    vmv1r.v v8, v10278; CHECK-NEXT:    ret279  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)280  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)281  %u = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)282  ret <vscale x 8 x i8> %u283}284 285define <vscale x 8 x i8> @vmacc_vx_nxv8i8(<vscale x 8 x i8> %a, i8 %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {286; CHECK-LABEL: vmacc_vx_nxv8i8:287; CHECK:       # %bb.0:288; CHECK-NEXT:    vsetvli zero, a1, e8, m1, tu, mu289; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t290; CHECK-NEXT:    vmv1r.v v8, v9291; CHECK-NEXT:    ret292  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0293  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer294  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)295  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)296  %u = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)297  ret <vscale x 8 x i8> %u298}299 300define <vscale x 8 x i8> @vmacc_vx_nxv8i8_unmasked(<vscale x 8 x i8> %a, i8 %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: vmacc_vx_nxv8i8_unmasked:302; CHECK:       # %bb.0:303; CHECK-NEXT:    vsetvli zero, a1, e8, m1, tu, ma304; CHECK-NEXT:    vmacc.vx v9, a0, v8305; CHECK-NEXT:    vmv1r.v v8, v9306; CHECK-NEXT:    ret307  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0308  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer309  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)310  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)311  %u = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)312  ret <vscale x 8 x i8> %u313}314 315define <vscale x 8 x i8> @vmacc_vv_nxv8i8_ta(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {316; CHECK-LABEL: vmacc_vv_nxv8i8_ta:317; CHECK:       # %bb.0:318; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu319; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t320; CHECK-NEXT:    vmv.v.v v8, v10321; CHECK-NEXT:    ret322  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)323  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)324  %u = call <vscale x 8 x i8> @llvm.vp.select.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)325  ret <vscale x 8 x i8> %u326}327 328define <vscale x 8 x i8> @vmacc_vx_nxv8i8_ta(<vscale x 8 x i8> %a, i8 %b, <vscale x 8 x i8> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {329; CHECK-LABEL: vmacc_vx_nxv8i8_ta:330; CHECK:       # %bb.0:331; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu332; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t333; CHECK-NEXT:    vmv.v.v v8, v9334; CHECK-NEXT:    ret335  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0336  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer337  %x = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)338  %y = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)339  %u = call <vscale x 8 x i8> @llvm.vp.select.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %y, <vscale x 8 x i8> %c, i32 %evl)340  ret <vscale x 8 x i8> %u341}342 343define <vscale x 16 x i8> @vmacc_vv_nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {344; CHECK-LABEL: vmacc_vv_nxv16i8:345; CHECK:       # %bb.0:346; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, mu347; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t348; CHECK-NEXT:    vmv2r.v v8, v12349; CHECK-NEXT:    ret350  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)351  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)352  %u = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)353  ret <vscale x 16 x i8> %u354}355 356define <vscale x 16 x i8> @vmacc_vv_nxv16i8_unmasked(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {357; CHECK-LABEL: vmacc_vv_nxv16i8_unmasked:358; CHECK:       # %bb.0:359; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma360; CHECK-NEXT:    vmacc.vv v12, v8, v10361; CHECK-NEXT:    vmv2r.v v8, v12362; CHECK-NEXT:    ret363  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)364  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)365  %u = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)366  ret <vscale x 16 x i8> %u367}368 369define <vscale x 16 x i8> @vmacc_vx_nxv16i8(<vscale x 16 x i8> %a, i8 %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {370; CHECK-LABEL: vmacc_vx_nxv16i8:371; CHECK:       # %bb.0:372; CHECK-NEXT:    vsetvli zero, a1, e8, m2, tu, mu373; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t374; CHECK-NEXT:    vmv2r.v v8, v10375; CHECK-NEXT:    ret376  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0377  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer378  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)379  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)380  %u = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)381  ret <vscale x 16 x i8> %u382}383 384define <vscale x 16 x i8> @vmacc_vx_nxv16i8_unmasked(<vscale x 16 x i8> %a, i8 %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {385; CHECK-LABEL: vmacc_vx_nxv16i8_unmasked:386; CHECK:       # %bb.0:387; CHECK-NEXT:    vsetvli zero, a1, e8, m2, tu, ma388; CHECK-NEXT:    vmacc.vx v10, a0, v8389; CHECK-NEXT:    vmv2r.v v8, v10390; CHECK-NEXT:    ret391  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0392  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer393  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)394  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)395  %u = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)396  ret <vscale x 16 x i8> %u397}398 399define <vscale x 16 x i8> @vmacc_vv_nxv16i8_ta(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {400; CHECK-LABEL: vmacc_vv_nxv16i8_ta:401; CHECK:       # %bb.0:402; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu403; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t404; CHECK-NEXT:    vmv.v.v v8, v12405; CHECK-NEXT:    ret406  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)407  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)408  %u = call <vscale x 16 x i8> @llvm.vp.select.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)409  ret <vscale x 16 x i8> %u410}411 412define <vscale x 16 x i8> @vmacc_vx_nxv16i8_ta(<vscale x 16 x i8> %a, i8 %b, <vscale x 16 x i8> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {413; CHECK-LABEL: vmacc_vx_nxv16i8_ta:414; CHECK:       # %bb.0:415; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu416; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t417; CHECK-NEXT:    vmv.v.v v8, v10418; CHECK-NEXT:    ret419  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0420  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer421  %x = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)422  %y = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)423  %u = call <vscale x 16 x i8> @llvm.vp.select.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %y, <vscale x 16 x i8> %c, i32 %evl)424  ret <vscale x 16 x i8> %u425}426 427define <vscale x 32 x i8> @vmacc_vv_nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {428; CHECK-LABEL: vmacc_vv_nxv32i8:429; CHECK:       # %bb.0:430; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, mu431; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t432; CHECK-NEXT:    vmv4r.v v8, v16433; CHECK-NEXT:    ret434  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)435  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)436  %u = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)437  ret <vscale x 32 x i8> %u438}439 440define <vscale x 32 x i8> @vmacc_vv_nxv32i8_unmasked(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {441; CHECK-LABEL: vmacc_vv_nxv32i8_unmasked:442; CHECK:       # %bb.0:443; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma444; CHECK-NEXT:    vmacc.vv v16, v8, v12445; CHECK-NEXT:    vmv4r.v v8, v16446; CHECK-NEXT:    ret447  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)448  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)449  %u = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)450  ret <vscale x 32 x i8> %u451}452 453define <vscale x 32 x i8> @vmacc_vx_nxv32i8(<vscale x 32 x i8> %a, i8 %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {454; CHECK-LABEL: vmacc_vx_nxv32i8:455; CHECK:       # %bb.0:456; CHECK-NEXT:    vsetvli zero, a1, e8, m4, tu, mu457; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t458; CHECK-NEXT:    vmv4r.v v8, v12459; CHECK-NEXT:    ret460  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0461  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer462  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)463  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)464  %u = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)465  ret <vscale x 32 x i8> %u466}467 468define <vscale x 32 x i8> @vmacc_vx_nxv32i8_unmasked(<vscale x 32 x i8> %a, i8 %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {469; CHECK-LABEL: vmacc_vx_nxv32i8_unmasked:470; CHECK:       # %bb.0:471; CHECK-NEXT:    vsetvli zero, a1, e8, m4, tu, ma472; CHECK-NEXT:    vmacc.vx v12, a0, v8473; CHECK-NEXT:    vmv4r.v v8, v12474; CHECK-NEXT:    ret475  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0476  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer477  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)478  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)479  %u = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)480  ret <vscale x 32 x i8> %u481}482 483define <vscale x 32 x i8> @vmacc_vv_nxv32i8_ta(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {484; CHECK-LABEL: vmacc_vv_nxv32i8_ta:485; CHECK:       # %bb.0:486; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu487; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t488; CHECK-NEXT:    vmv.v.v v8, v16489; CHECK-NEXT:    ret490  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)491  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)492  %u = call <vscale x 32 x i8> @llvm.vp.select.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)493  ret <vscale x 32 x i8> %u494}495 496define <vscale x 32 x i8> @vmacc_vx_nxv32i8_ta(<vscale x 32 x i8> %a, i8 %b, <vscale x 32 x i8> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {497; CHECK-LABEL: vmacc_vx_nxv32i8_ta:498; CHECK:       # %bb.0:499; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu500; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t501; CHECK-NEXT:    vmv.v.v v8, v12502; CHECK-NEXT:    ret503  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0504  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer505  %x = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)506  %y = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)507  %u = call <vscale x 32 x i8> @llvm.vp.select.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %y, <vscale x 32 x i8> %c, i32 %evl)508  ret <vscale x 32 x i8> %u509}510 511define <vscale x 64 x i8> @vmacc_vv_nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {512; CHECK-LABEL: vmacc_vv_nxv64i8:513; CHECK:       # %bb.0:514; CHECK-NEXT:    vl8r.v v24, (a0)515; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, mu516; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t517; CHECK-NEXT:    vmv8r.v v8, v24518; CHECK-NEXT:    ret519  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 -1), i32 %evl)520  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)521  %u = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)522  ret <vscale x 64 x i8> %u523}524 525define <vscale x 64 x i8> @vmacc_vv_nxv64i8_unmasked(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {526; CHECK-LABEL: vmacc_vv_nxv64i8_unmasked:527; CHECK:       # %bb.0:528; CHECK-NEXT:    vl8r.v v24, (a0)529; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, ma530; CHECK-NEXT:    vmacc.vv v24, v8, v16531; CHECK-NEXT:    vmv8r.v v8, v24532; CHECK-NEXT:    ret533  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 -1), i32 %evl)534  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)535  %u = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> splat (i1 -1), <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)536  ret <vscale x 64 x i8> %u537}538 539define <vscale x 64 x i8> @vmacc_vx_nxv64i8(<vscale x 64 x i8> %a, i8 %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {540; CHECK-LABEL: vmacc_vx_nxv64i8:541; CHECK:       # %bb.0:542; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, mu543; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t544; CHECK-NEXT:    vmv8r.v v8, v16545; CHECK-NEXT:    ret546  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0547  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer548  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 -1), i32 %evl)549  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)550  %u = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)551  ret <vscale x 64 x i8> %u552}553 554define <vscale x 64 x i8> @vmacc_vx_nxv64i8_unmasked(<vscale x 64 x i8> %a, i8 %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {555; CHECK-LABEL: vmacc_vx_nxv64i8_unmasked:556; CHECK:       # %bb.0:557; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, ma558; CHECK-NEXT:    vmacc.vx v16, a0, v8559; CHECK-NEXT:    vmv8r.v v8, v16560; CHECK-NEXT:    ret561  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0562  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer563  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 -1), i32 %evl)564  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)565  %u = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> splat (i1 -1), <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)566  ret <vscale x 64 x i8> %u567}568 569define <vscale x 64 x i8> @vmacc_vv_nxv64i8_ta(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {570; CHECK-LABEL: vmacc_vv_nxv64i8_ta:571; CHECK:       # %bb.0:572; CHECK-NEXT:    vl8r.v v24, (a0)573; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu574; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t575; CHECK-NEXT:    vmv.v.v v8, v24576; CHECK-NEXT:    ret577  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 -1), i32 %evl)578  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)579  %u = call <vscale x 64 x i8> @llvm.vp.select.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)580  ret <vscale x 64 x i8> %u581}582 583define <vscale x 64 x i8> @vmacc_vx_nxv64i8_ta(<vscale x 64 x i8> %a, i8 %b, <vscale x 64 x i8> %c,  <vscale x 64 x i1> %m, i32 zeroext %evl) {584; CHECK-LABEL: vmacc_vx_nxv64i8_ta:585; CHECK:       # %bb.0:586; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu587; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t588; CHECK-NEXT:    vmv.v.v v8, v16589; CHECK-NEXT:    ret590  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0591  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer592  %x = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 -1), i32 %evl)593  %y = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %c, <vscale x 64 x i1> splat (i1 -1), i32 %evl)594  %u = call <vscale x 64 x i8> @llvm.vp.select.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %y, <vscale x 64 x i8> %c, i32 %evl)595  ret <vscale x 64 x i8> %u596}597 598define <vscale x 1 x i16> @vmacc_vv_nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {599; CHECK-LABEL: vmacc_vv_nxv1i16:600; CHECK:       # %bb.0:601; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu602; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t603; CHECK-NEXT:    vmv1r.v v8, v10604; CHECK-NEXT:    ret605  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)606  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)607  %u = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)608  ret <vscale x 1 x i16> %u609}610 611define <vscale x 1 x i16> @vmacc_vv_nxv1i16_unmasked(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {612; CHECK-LABEL: vmacc_vv_nxv1i16_unmasked:613; CHECK:       # %bb.0:614; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma615; CHECK-NEXT:    vmacc.vv v10, v8, v9616; CHECK-NEXT:    vmv1r.v v8, v10617; CHECK-NEXT:    ret618  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)619  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)620  %u = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)621  ret <vscale x 1 x i16> %u622}623 624define <vscale x 1 x i16> @vmacc_vx_nxv1i16(<vscale x 1 x i16> %a, i16 %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {625; CHECK-LABEL: vmacc_vx_nxv1i16:626; CHECK:       # %bb.0:627; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, mu628; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t629; CHECK-NEXT:    vmv1r.v v8, v9630; CHECK-NEXT:    ret631  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0632  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer633  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)634  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)635  %u = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)636  ret <vscale x 1 x i16> %u637}638 639define <vscale x 1 x i16> @vmacc_vx_nxv1i16_unmasked(<vscale x 1 x i16> %a, i16 %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {640; CHECK-LABEL: vmacc_vx_nxv1i16_unmasked:641; CHECK:       # %bb.0:642; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, ma643; CHECK-NEXT:    vmacc.vx v9, a0, v8644; CHECK-NEXT:    vmv1r.v v8, v9645; CHECK-NEXT:    ret646  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0647  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer648  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)649  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)650  %u = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)651  ret <vscale x 1 x i16> %u652}653 654define <vscale x 1 x i16> @vmacc_vv_nxv1i16_ta(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {655; CHECK-LABEL: vmacc_vv_nxv1i16_ta:656; CHECK:       # %bb.0:657; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu658; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t659; CHECK-NEXT:    vmv1r.v v8, v10660; CHECK-NEXT:    ret661  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)662  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)663  %u = call <vscale x 1 x i16> @llvm.vp.select.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)664  ret <vscale x 1 x i16> %u665}666 667define <vscale x 1 x i16> @vmacc_vx_nxv1i16_ta(<vscale x 1 x i16> %a, i16 %b, <vscale x 1 x i16> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {668; CHECK-LABEL: vmacc_vx_nxv1i16_ta:669; CHECK:       # %bb.0:670; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu671; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t672; CHECK-NEXT:    vmv1r.v v8, v9673; CHECK-NEXT:    ret674  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0675  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer676  %x = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)677  %y = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)678  %u = call <vscale x 1 x i16> @llvm.vp.select.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %y, <vscale x 1 x i16> %c, i32 %evl)679  ret <vscale x 1 x i16> %u680}681 682define <vscale x 2 x i16> @vmacc_vv_nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {683; CHECK-LABEL: vmacc_vv_nxv2i16:684; CHECK:       # %bb.0:685; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu686; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t687; CHECK-NEXT:    vmv1r.v v8, v10688; CHECK-NEXT:    ret689  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)690  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)691  %u = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)692  ret <vscale x 2 x i16> %u693}694 695define <vscale x 2 x i16> @vmacc_vv_nxv2i16_unmasked(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {696; CHECK-LABEL: vmacc_vv_nxv2i16_unmasked:697; CHECK:       # %bb.0:698; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma699; CHECK-NEXT:    vmacc.vv v10, v8, v9700; CHECK-NEXT:    vmv1r.v v8, v10701; CHECK-NEXT:    ret702  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)703  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)704  %u = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)705  ret <vscale x 2 x i16> %u706}707 708define <vscale x 2 x i16> @vmacc_vx_nxv2i16(<vscale x 2 x i16> %a, i16 %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {709; CHECK-LABEL: vmacc_vx_nxv2i16:710; CHECK:       # %bb.0:711; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, mu712; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t713; CHECK-NEXT:    vmv1r.v v8, v9714; CHECK-NEXT:    ret715  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0716  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer717  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)718  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)719  %u = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)720  ret <vscale x 2 x i16> %u721}722 723define <vscale x 2 x i16> @vmacc_vx_nxv2i16_unmasked(<vscale x 2 x i16> %a, i16 %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {724; CHECK-LABEL: vmacc_vx_nxv2i16_unmasked:725; CHECK:       # %bb.0:726; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, ma727; CHECK-NEXT:    vmacc.vx v9, a0, v8728; CHECK-NEXT:    vmv1r.v v8, v9729; CHECK-NEXT:    ret730  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0731  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer732  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)733  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)734  %u = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)735  ret <vscale x 2 x i16> %u736}737 738define <vscale x 2 x i16> @vmacc_vv_nxv2i16_ta(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {739; CHECK-LABEL: vmacc_vv_nxv2i16_ta:740; CHECK:       # %bb.0:741; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu742; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t743; CHECK-NEXT:    vmv1r.v v8, v10744; CHECK-NEXT:    ret745  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)746  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)747  %u = call <vscale x 2 x i16> @llvm.vp.select.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)748  ret <vscale x 2 x i16> %u749}750 751define <vscale x 2 x i16> @vmacc_vx_nxv2i16_ta(<vscale x 2 x i16> %a, i16 %b, <vscale x 2 x i16> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {752; CHECK-LABEL: vmacc_vx_nxv2i16_ta:753; CHECK:       # %bb.0:754; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu755; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t756; CHECK-NEXT:    vmv1r.v v8, v9757; CHECK-NEXT:    ret758  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0759  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer760  %x = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)761  %y = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)762  %u = call <vscale x 2 x i16> @llvm.vp.select.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %y, <vscale x 2 x i16> %c, i32 %evl)763  ret <vscale x 2 x i16> %u764}765 766define <vscale x 4 x i16> @vmacc_vv_nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {767; CHECK-LABEL: vmacc_vv_nxv4i16:768; CHECK:       # %bb.0:769; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu770; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t771; CHECK-NEXT:    vmv1r.v v8, v10772; CHECK-NEXT:    ret773  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)774  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)775  %u = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)776  ret <vscale x 4 x i16> %u777}778 779define <vscale x 4 x i16> @vmacc_vv_nxv4i16_unmasked(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {780; CHECK-LABEL: vmacc_vv_nxv4i16_unmasked:781; CHECK:       # %bb.0:782; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma783; CHECK-NEXT:    vmacc.vv v10, v8, v9784; CHECK-NEXT:    vmv1r.v v8, v10785; CHECK-NEXT:    ret786  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)787  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)788  %u = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)789  ret <vscale x 4 x i16> %u790}791 792define <vscale x 4 x i16> @vmacc_vx_nxv4i16(<vscale x 4 x i16> %a, i16 %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {793; CHECK-LABEL: vmacc_vx_nxv4i16:794; CHECK:       # %bb.0:795; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, mu796; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t797; CHECK-NEXT:    vmv1r.v v8, v9798; CHECK-NEXT:    ret799  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0800  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer801  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)802  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)803  %u = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)804  ret <vscale x 4 x i16> %u805}806 807define <vscale x 4 x i16> @vmacc_vx_nxv4i16_unmasked(<vscale x 4 x i16> %a, i16 %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {808; CHECK-LABEL: vmacc_vx_nxv4i16_unmasked:809; CHECK:       # %bb.0:810; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, ma811; CHECK-NEXT:    vmacc.vx v9, a0, v8812; CHECK-NEXT:    vmv1r.v v8, v9813; CHECK-NEXT:    ret814  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0815  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer816  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)817  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)818  %u = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)819  ret <vscale x 4 x i16> %u820}821 822define <vscale x 4 x i16> @vmacc_vv_nxv4i16_ta(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {823; CHECK-LABEL: vmacc_vv_nxv4i16_ta:824; CHECK:       # %bb.0:825; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu826; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t827; CHECK-NEXT:    vmv.v.v v8, v10828; CHECK-NEXT:    ret829  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)830  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)831  %u = call <vscale x 4 x i16> @llvm.vp.select.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)832  ret <vscale x 4 x i16> %u833}834 835define <vscale x 4 x i16> @vmacc_vx_nxv4i16_ta(<vscale x 4 x i16> %a, i16 %b, <vscale x 4 x i16> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {836; CHECK-LABEL: vmacc_vx_nxv4i16_ta:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu839; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t840; CHECK-NEXT:    vmv.v.v v8, v9841; CHECK-NEXT:    ret842  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0843  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer844  %x = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)845  %y = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)846  %u = call <vscale x 4 x i16> @llvm.vp.select.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %y, <vscale x 4 x i16> %c, i32 %evl)847  ret <vscale x 4 x i16> %u848}849 850define <vscale x 8 x i16> @vmacc_vv_nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {851; CHECK-LABEL: vmacc_vv_nxv8i16:852; CHECK:       # %bb.0:853; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu854; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t855; CHECK-NEXT:    vmv2r.v v8, v12856; CHECK-NEXT:    ret857  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)858  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)859  %u = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)860  ret <vscale x 8 x i16> %u861}862 863define <vscale x 8 x i16> @vmacc_vv_nxv8i16_unmasked(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {864; CHECK-LABEL: vmacc_vv_nxv8i16_unmasked:865; CHECK:       # %bb.0:866; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma867; CHECK-NEXT:    vmacc.vv v12, v8, v10868; CHECK-NEXT:    vmv2r.v v8, v12869; CHECK-NEXT:    ret870  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)871  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)872  %u = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)873  ret <vscale x 8 x i16> %u874}875 876define <vscale x 8 x i16> @vmacc_vx_nxv8i16(<vscale x 8 x i16> %a, i16 %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {877; CHECK-LABEL: vmacc_vx_nxv8i16:878; CHECK:       # %bb.0:879; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, mu880; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t881; CHECK-NEXT:    vmv2r.v v8, v10882; CHECK-NEXT:    ret883  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0884  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer885  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)886  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)887  %u = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)888  ret <vscale x 8 x i16> %u889}890 891define <vscale x 8 x i16> @vmacc_vx_nxv8i16_unmasked(<vscale x 8 x i16> %a, i16 %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {892; CHECK-LABEL: vmacc_vx_nxv8i16_unmasked:893; CHECK:       # %bb.0:894; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, ma895; CHECK-NEXT:    vmacc.vx v10, a0, v8896; CHECK-NEXT:    vmv2r.v v8, v10897; CHECK-NEXT:    ret898  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0899  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer900  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)901  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)902  %u = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)903  ret <vscale x 8 x i16> %u904}905 906define <vscale x 8 x i16> @vmacc_vv_nxv8i16_ta(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {907; CHECK-LABEL: vmacc_vv_nxv8i16_ta:908; CHECK:       # %bb.0:909; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu910; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t911; CHECK-NEXT:    vmv.v.v v8, v12912; CHECK-NEXT:    ret913  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)914  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)915  %u = call <vscale x 8 x i16> @llvm.vp.select.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)916  ret <vscale x 8 x i16> %u917}918 919define <vscale x 8 x i16> @vmacc_vx_nxv8i16_ta(<vscale x 8 x i16> %a, i16 %b, <vscale x 8 x i16> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {920; CHECK-LABEL: vmacc_vx_nxv8i16_ta:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu923; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t924; CHECK-NEXT:    vmv.v.v v8, v10925; CHECK-NEXT:    ret926  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0927  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer928  %x = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)929  %y = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)930  %u = call <vscale x 8 x i16> @llvm.vp.select.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %y, <vscale x 8 x i16> %c, i32 %evl)931  ret <vscale x 8 x i16> %u932}933 934define <vscale x 16 x i16> @vmacc_vv_nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {935; CHECK-LABEL: vmacc_vv_nxv16i16:936; CHECK:       # %bb.0:937; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu938; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t939; CHECK-NEXT:    vmv4r.v v8, v16940; CHECK-NEXT:    ret941  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)942  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)943  %u = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)944  ret <vscale x 16 x i16> %u945}946 947define <vscale x 16 x i16> @vmacc_vv_nxv16i16_unmasked(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {948; CHECK-LABEL: vmacc_vv_nxv16i16_unmasked:949; CHECK:       # %bb.0:950; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma951; CHECK-NEXT:    vmacc.vv v16, v8, v12952; CHECK-NEXT:    vmv4r.v v8, v16953; CHECK-NEXT:    ret954  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)955  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)956  %u = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)957  ret <vscale x 16 x i16> %u958}959 960define <vscale x 16 x i16> @vmacc_vx_nxv16i16(<vscale x 16 x i16> %a, i16 %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {961; CHECK-LABEL: vmacc_vx_nxv16i16:962; CHECK:       # %bb.0:963; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, mu964; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t965; CHECK-NEXT:    vmv4r.v v8, v12966; CHECK-NEXT:    ret967  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0968  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer969  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)970  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)971  %u = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)972  ret <vscale x 16 x i16> %u973}974 975define <vscale x 16 x i16> @vmacc_vx_nxv16i16_unmasked(<vscale x 16 x i16> %a, i16 %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {976; CHECK-LABEL: vmacc_vx_nxv16i16_unmasked:977; CHECK:       # %bb.0:978; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, ma979; CHECK-NEXT:    vmacc.vx v12, a0, v8980; CHECK-NEXT:    vmv4r.v v8, v12981; CHECK-NEXT:    ret982  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0983  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer984  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)985  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)986  %u = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)987  ret <vscale x 16 x i16> %u988}989 990define <vscale x 16 x i16> @vmacc_vv_nxv16i16_ta(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {991; CHECK-LABEL: vmacc_vv_nxv16i16_ta:992; CHECK:       # %bb.0:993; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu994; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t995; CHECK-NEXT:    vmv.v.v v8, v16996; CHECK-NEXT:    ret997  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)998  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)999  %u = call <vscale x 16 x i16> @llvm.vp.select.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)1000  ret <vscale x 16 x i16> %u1001}1002 1003define <vscale x 16 x i16> @vmacc_vx_nxv16i16_ta(<vscale x 16 x i16> %a, i16 %b, <vscale x 16 x i16> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1004; CHECK-LABEL: vmacc_vx_nxv16i16_ta:1005; CHECK:       # %bb.0:1006; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu1007; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t1008; CHECK-NEXT:    vmv.v.v v8, v121009; CHECK-NEXT:    ret1010  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 01011  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer1012  %x = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1013  %y = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1014  %u = call <vscale x 16 x i16> @llvm.vp.select.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %y, <vscale x 16 x i16> %c, i32 %evl)1015  ret <vscale x 16 x i16> %u1016}1017 1018define <vscale x 32 x i16> @vmacc_vv_nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1019; CHECK-LABEL: vmacc_vv_nxv32i16:1020; CHECK:       # %bb.0:1021; CHECK-NEXT:    vl8re16.v v24, (a0)1022; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu1023; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t1024; CHECK-NEXT:    vmv8r.v v8, v241025; CHECK-NEXT:    ret1026  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1027  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1028  %u = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1029  ret <vscale x 32 x i16> %u1030}1031 1032define <vscale x 32 x i16> @vmacc_vv_nxv32i16_unmasked(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1033; CHECK-LABEL: vmacc_vv_nxv32i16_unmasked:1034; CHECK:       # %bb.0:1035; CHECK-NEXT:    vl8re16.v v24, (a0)1036; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma1037; CHECK-NEXT:    vmacc.vv v24, v8, v161038; CHECK-NEXT:    vmv8r.v v8, v241039; CHECK-NEXT:    ret1040  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1041  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1042  %u = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1043  ret <vscale x 32 x i16> %u1044}1045 1046define <vscale x 32 x i16> @vmacc_vx_nxv32i16(<vscale x 32 x i16> %a, i16 %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1047; CHECK-LABEL: vmacc_vx_nxv32i16:1048; CHECK:       # %bb.0:1049; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu1050; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t1051; CHECK-NEXT:    vmv8r.v v8, v161052; CHECK-NEXT:    ret1053  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 01054  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer1055  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1056  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1057  %u = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1058  ret <vscale x 32 x i16> %u1059}1060 1061define <vscale x 32 x i16> @vmacc_vx_nxv32i16_unmasked(<vscale x 32 x i16> %a, i16 %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1062; CHECK-LABEL: vmacc_vx_nxv32i16_unmasked:1063; CHECK:       # %bb.0:1064; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma1065; CHECK-NEXT:    vmacc.vx v16, a0, v81066; CHECK-NEXT:    vmv8r.v v8, v161067; CHECK-NEXT:    ret1068  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 01069  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer1070  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1071  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1072  %u = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1073  ret <vscale x 32 x i16> %u1074}1075 1076define <vscale x 32 x i16> @vmacc_vv_nxv32i16_ta(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1077; CHECK-LABEL: vmacc_vv_nxv32i16_ta:1078; CHECK:       # %bb.0:1079; CHECK-NEXT:    vl8re16.v v24, (a0)1080; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu1081; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t1082; CHECK-NEXT:    vmv.v.v v8, v241083; CHECK-NEXT:    ret1084  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1085  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1086  %u = call <vscale x 32 x i16> @llvm.vp.select.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1087  ret <vscale x 32 x i16> %u1088}1089 1090define <vscale x 32 x i16> @vmacc_vx_nxv32i16_ta(<vscale x 32 x i16> %a, i16 %b, <vscale x 32 x i16> %c,  <vscale x 32 x i1> %m, i32 zeroext %evl) {1091; CHECK-LABEL: vmacc_vx_nxv32i16_ta:1092; CHECK:       # %bb.0:1093; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu1094; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t1095; CHECK-NEXT:    vmv.v.v v8, v161096; CHECK-NEXT:    ret1097  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 01098  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer1099  %x = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1100  %y = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)1101  %u = call <vscale x 32 x i16> @llvm.vp.select.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %y, <vscale x 32 x i16> %c, i32 %evl)1102  ret <vscale x 32 x i16> %u1103}1104 1105define <vscale x 1 x i32> @vmacc_vv_nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1106; CHECK-LABEL: vmacc_vv_nxv1i32:1107; CHECK:       # %bb.0:1108; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu1109; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1110; CHECK-NEXT:    vmv1r.v v8, v101111; CHECK-NEXT:    ret1112  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1113  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1114  %u = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1115  ret <vscale x 1 x i32> %u1116}1117 1118define <vscale x 1 x i32> @vmacc_vv_nxv1i32_unmasked(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1119; CHECK-LABEL: vmacc_vv_nxv1i32_unmasked:1120; CHECK:       # %bb.0:1121; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma1122; CHECK-NEXT:    vmacc.vv v10, v8, v91123; CHECK-NEXT:    vmv1r.v v8, v101124; CHECK-NEXT:    ret1125  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1126  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1127  %u = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1128  ret <vscale x 1 x i32> %u1129}1130 1131define <vscale x 1 x i32> @vmacc_vx_nxv1i32(<vscale x 1 x i32> %a, i32 %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1132; CHECK-LABEL: vmacc_vx_nxv1i32:1133; CHECK:       # %bb.0:1134; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, mu1135; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t1136; CHECK-NEXT:    vmv1r.v v8, v91137; CHECK-NEXT:    ret1138  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01139  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1140  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1141  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1142  %u = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1143  ret <vscale x 1 x i32> %u1144}1145 1146define <vscale x 1 x i32> @vmacc_vx_nxv1i32_unmasked(<vscale x 1 x i32> %a, i32 %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1147; CHECK-LABEL: vmacc_vx_nxv1i32_unmasked:1148; CHECK:       # %bb.0:1149; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, ma1150; CHECK-NEXT:    vmacc.vx v9, a0, v81151; CHECK-NEXT:    vmv1r.v v8, v91152; CHECK-NEXT:    ret1153  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01154  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1155  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1156  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1157  %u = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1158  ret <vscale x 1 x i32> %u1159}1160 1161define <vscale x 1 x i32> @vmacc_vv_nxv1i32_ta(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1162; CHECK-LABEL: vmacc_vv_nxv1i32_ta:1163; CHECK:       # %bb.0:1164; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu1165; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1166; CHECK-NEXT:    vmv1r.v v8, v101167; CHECK-NEXT:    ret1168  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1169  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1170  %u = call <vscale x 1 x i32> @llvm.vp.select.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1171  ret <vscale x 1 x i32> %u1172}1173 1174define <vscale x 1 x i32> @vmacc_vx_nxv1i32_ta(<vscale x 1 x i32> %a, i32 %b, <vscale x 1 x i32> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1175; CHECK-LABEL: vmacc_vx_nxv1i32_ta:1176; CHECK:       # %bb.0:1177; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu1178; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t1179; CHECK-NEXT:    vmv1r.v v8, v91180; CHECK-NEXT:    ret1181  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01182  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1183  %x = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1184  %y = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1185  %u = call <vscale x 1 x i32> @llvm.vp.select.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %y, <vscale x 1 x i32> %c, i32 %evl)1186  ret <vscale x 1 x i32> %u1187}1188 1189define <vscale x 2 x i32> @vmacc_vv_nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1190; CHECK-LABEL: vmacc_vv_nxv2i32:1191; CHECK:       # %bb.0:1192; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu1193; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1194; CHECK-NEXT:    vmv1r.v v8, v101195; CHECK-NEXT:    ret1196  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1197  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1198  %u = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1199  ret <vscale x 2 x i32> %u1200}1201 1202define <vscale x 2 x i32> @vmacc_vv_nxv2i32_unmasked(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1203; CHECK-LABEL: vmacc_vv_nxv2i32_unmasked:1204; CHECK:       # %bb.0:1205; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma1206; CHECK-NEXT:    vmacc.vv v10, v8, v91207; CHECK-NEXT:    vmv1r.v v8, v101208; CHECK-NEXT:    ret1209  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1210  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1211  %u = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1212  ret <vscale x 2 x i32> %u1213}1214 1215define <vscale x 2 x i32> @vmacc_vx_nxv2i32(<vscale x 2 x i32> %a, i32 %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1216; CHECK-LABEL: vmacc_vx_nxv2i32:1217; CHECK:       # %bb.0:1218; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu1219; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t1220; CHECK-NEXT:    vmv1r.v v8, v91221; CHECK-NEXT:    ret1222  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01223  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1224  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1225  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1226  %u = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1227  ret <vscale x 2 x i32> %u1228}1229 1230define <vscale x 2 x i32> @vmacc_vx_nxv2i32_unmasked(<vscale x 2 x i32> %a, i32 %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1231; CHECK-LABEL: vmacc_vx_nxv2i32_unmasked:1232; CHECK:       # %bb.0:1233; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, ma1234; CHECK-NEXT:    vmacc.vx v9, a0, v81235; CHECK-NEXT:    vmv1r.v v8, v91236; CHECK-NEXT:    ret1237  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01238  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1239  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1240  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1241  %u = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1242  ret <vscale x 2 x i32> %u1243}1244 1245define <vscale x 2 x i32> @vmacc_vv_nxv2i32_ta(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1246; CHECK-LABEL: vmacc_vv_nxv2i32_ta:1247; CHECK:       # %bb.0:1248; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu1249; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1250; CHECK-NEXT:    vmv.v.v v8, v101251; CHECK-NEXT:    ret1252  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1253  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1254  %u = call <vscale x 2 x i32> @llvm.vp.select.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1255  ret <vscale x 2 x i32> %u1256}1257 1258define <vscale x 2 x i32> @vmacc_vx_nxv2i32_ta(<vscale x 2 x i32> %a, i32 %b, <vscale x 2 x i32> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1259; CHECK-LABEL: vmacc_vx_nxv2i32_ta:1260; CHECK:       # %bb.0:1261; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu1262; CHECK-NEXT:    vmacc.vx v9, a0, v8, v0.t1263; CHECK-NEXT:    vmv.v.v v8, v91264; CHECK-NEXT:    ret1265  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01266  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1267  %x = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1268  %y = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1269  %u = call <vscale x 2 x i32> @llvm.vp.select.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %y, <vscale x 2 x i32> %c, i32 %evl)1270  ret <vscale x 2 x i32> %u1271}1272 1273define <vscale x 4 x i32> @vmacc_vv_nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1274; CHECK-LABEL: vmacc_vv_nxv4i32:1275; CHECK:       # %bb.0:1276; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu1277; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t1278; CHECK-NEXT:    vmv2r.v v8, v121279; CHECK-NEXT:    ret1280  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1281  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1282  %u = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1283  ret <vscale x 4 x i32> %u1284}1285 1286define <vscale x 4 x i32> @vmacc_vv_nxv4i32_unmasked(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1287; CHECK-LABEL: vmacc_vv_nxv4i32_unmasked:1288; CHECK:       # %bb.0:1289; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma1290; CHECK-NEXT:    vmacc.vv v12, v8, v101291; CHECK-NEXT:    vmv2r.v v8, v121292; CHECK-NEXT:    ret1293  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1294  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1295  %u = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1296  ret <vscale x 4 x i32> %u1297}1298 1299define <vscale x 4 x i32> @vmacc_vx_nxv4i32(<vscale x 4 x i32> %a, i32 %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1300; CHECK-LABEL: vmacc_vx_nxv4i32:1301; CHECK:       # %bb.0:1302; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, mu1303; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t1304; CHECK-NEXT:    vmv2r.v v8, v101305; CHECK-NEXT:    ret1306  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01307  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1308  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1309  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1310  %u = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1311  ret <vscale x 4 x i32> %u1312}1313 1314define <vscale x 4 x i32> @vmacc_vx_nxv4i32_unmasked(<vscale x 4 x i32> %a, i32 %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1315; CHECK-LABEL: vmacc_vx_nxv4i32_unmasked:1316; CHECK:       # %bb.0:1317; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, ma1318; CHECK-NEXT:    vmacc.vx v10, a0, v81319; CHECK-NEXT:    vmv2r.v v8, v101320; CHECK-NEXT:    ret1321  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01322  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1323  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1324  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1325  %u = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1326  ret <vscale x 4 x i32> %u1327}1328 1329define <vscale x 4 x i32> @vmacc_vv_nxv4i32_ta(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1330; CHECK-LABEL: vmacc_vv_nxv4i32_ta:1331; CHECK:       # %bb.0:1332; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu1333; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t1334; CHECK-NEXT:    vmv.v.v v8, v121335; CHECK-NEXT:    ret1336  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1337  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1338  %u = call <vscale x 4 x i32> @llvm.vp.select.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1339  ret <vscale x 4 x i32> %u1340}1341 1342define <vscale x 4 x i32> @vmacc_vx_nxv4i32_ta(<vscale x 4 x i32> %a, i32 %b, <vscale x 4 x i32> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1343; CHECK-LABEL: vmacc_vx_nxv4i32_ta:1344; CHECK:       # %bb.0:1345; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu1346; CHECK-NEXT:    vmacc.vx v10, a0, v8, v0.t1347; CHECK-NEXT:    vmv.v.v v8, v101348; CHECK-NEXT:    ret1349  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01350  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1351  %x = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1352  %y = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1353  %u = call <vscale x 4 x i32> @llvm.vp.select.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %y, <vscale x 4 x i32> %c, i32 %evl)1354  ret <vscale x 4 x i32> %u1355}1356 1357define <vscale x 8 x i32> @vmacc_vv_nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1358; CHECK-LABEL: vmacc_vv_nxv8i32:1359; CHECK:       # %bb.0:1360; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu1361; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t1362; CHECK-NEXT:    vmv4r.v v8, v161363; CHECK-NEXT:    ret1364  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1365  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1366  %u = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1367  ret <vscale x 8 x i32> %u1368}1369 1370define <vscale x 8 x i32> @vmacc_vv_nxv8i32_unmasked(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1371; CHECK-LABEL: vmacc_vv_nxv8i32_unmasked:1372; CHECK:       # %bb.0:1373; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma1374; CHECK-NEXT:    vmacc.vv v16, v8, v121375; CHECK-NEXT:    vmv4r.v v8, v161376; CHECK-NEXT:    ret1377  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1378  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1379  %u = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1380  ret <vscale x 8 x i32> %u1381}1382 1383define <vscale x 8 x i32> @vmacc_vx_nxv8i32(<vscale x 8 x i32> %a, i32 %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1384; CHECK-LABEL: vmacc_vx_nxv8i32:1385; CHECK:       # %bb.0:1386; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, mu1387; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t1388; CHECK-NEXT:    vmv4r.v v8, v121389; CHECK-NEXT:    ret1390  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01391  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1392  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1393  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1394  %u = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1395  ret <vscale x 8 x i32> %u1396}1397 1398define <vscale x 8 x i32> @vmacc_vx_nxv8i32_unmasked(<vscale x 8 x i32> %a, i32 %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1399; CHECK-LABEL: vmacc_vx_nxv8i32_unmasked:1400; CHECK:       # %bb.0:1401; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, ma1402; CHECK-NEXT:    vmacc.vx v12, a0, v81403; CHECK-NEXT:    vmv4r.v v8, v121404; CHECK-NEXT:    ret1405  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01406  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1407  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1408  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1409  %u = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1410  ret <vscale x 8 x i32> %u1411}1412 1413define <vscale x 8 x i32> @vmacc_vv_nxv8i32_ta(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1414; CHECK-LABEL: vmacc_vv_nxv8i32_ta:1415; CHECK:       # %bb.0:1416; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1417; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t1418; CHECK-NEXT:    vmv.v.v v8, v161419; CHECK-NEXT:    ret1420  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1421  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1422  %u = call <vscale x 8 x i32> @llvm.vp.select.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1423  ret <vscale x 8 x i32> %u1424}1425 1426define <vscale x 8 x i32> @vmacc_vx_nxv8i32_ta(<vscale x 8 x i32> %a, i32 %b, <vscale x 8 x i32> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1427; CHECK-LABEL: vmacc_vx_nxv8i32_ta:1428; CHECK:       # %bb.0:1429; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu1430; CHECK-NEXT:    vmacc.vx v12, a0, v8, v0.t1431; CHECK-NEXT:    vmv.v.v v8, v121432; CHECK-NEXT:    ret1433  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01434  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1435  %x = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1436  %y = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1437  %u = call <vscale x 8 x i32> @llvm.vp.select.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %y, <vscale x 8 x i32> %c, i32 %evl)1438  ret <vscale x 8 x i32> %u1439}1440 1441define <vscale x 16 x i32> @vmacc_vv_nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1442; CHECK-LABEL: vmacc_vv_nxv16i32:1443; CHECK:       # %bb.0:1444; CHECK-NEXT:    vl8re32.v v24, (a0)1445; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu1446; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t1447; CHECK-NEXT:    vmv8r.v v8, v241448; CHECK-NEXT:    ret1449  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1450  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1451  %u = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1452  ret <vscale x 16 x i32> %u1453}1454 1455define <vscale x 16 x i32> @vmacc_vv_nxv16i32_unmasked(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1456; CHECK-LABEL: vmacc_vv_nxv16i32_unmasked:1457; CHECK:       # %bb.0:1458; CHECK-NEXT:    vl8re32.v v24, (a0)1459; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma1460; CHECK-NEXT:    vmacc.vv v24, v8, v161461; CHECK-NEXT:    vmv8r.v v8, v241462; CHECK-NEXT:    ret1463  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1464  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1465  %u = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1466  ret <vscale x 16 x i32> %u1467}1468 1469define <vscale x 16 x i32> @vmacc_vx_nxv16i32(<vscale x 16 x i32> %a, i32 %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1470; CHECK-LABEL: vmacc_vx_nxv16i32:1471; CHECK:       # %bb.0:1472; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu1473; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t1474; CHECK-NEXT:    vmv8r.v v8, v161475; CHECK-NEXT:    ret1476  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01477  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1478  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1479  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1480  %u = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1481  ret <vscale x 16 x i32> %u1482}1483 1484define <vscale x 16 x i32> @vmacc_vx_nxv16i32_unmasked(<vscale x 16 x i32> %a, i32 %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1485; CHECK-LABEL: vmacc_vx_nxv16i32_unmasked:1486; CHECK:       # %bb.0:1487; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma1488; CHECK-NEXT:    vmacc.vx v16, a0, v81489; CHECK-NEXT:    vmv8r.v v8, v161490; CHECK-NEXT:    ret1491  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01492  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1493  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1494  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1495  %u = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1496  ret <vscale x 16 x i32> %u1497}1498 1499define <vscale x 16 x i32> @vmacc_vv_nxv16i32_ta(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1500; CHECK-LABEL: vmacc_vv_nxv16i32_ta:1501; CHECK:       # %bb.0:1502; CHECK-NEXT:    vl8re32.v v24, (a0)1503; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu1504; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t1505; CHECK-NEXT:    vmv.v.v v8, v241506; CHECK-NEXT:    ret1507  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1508  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1509  %u = call <vscale x 16 x i32> @llvm.vp.select.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1510  ret <vscale x 16 x i32> %u1511}1512 1513define <vscale x 16 x i32> @vmacc_vx_nxv16i32_ta(<vscale x 16 x i32> %a, i32 %b, <vscale x 16 x i32> %c,  <vscale x 16 x i1> %m, i32 zeroext %evl) {1514; CHECK-LABEL: vmacc_vx_nxv16i32_ta:1515; CHECK:       # %bb.0:1516; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu1517; CHECK-NEXT:    vmacc.vx v16, a0, v8, v0.t1518; CHECK-NEXT:    vmv.v.v v8, v161519; CHECK-NEXT:    ret1520  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01521  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1522  %x = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1523  %y = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)1524  %u = call <vscale x 16 x i32> @llvm.vp.select.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %y, <vscale x 16 x i32> %c, i32 %evl)1525  ret <vscale x 16 x i32> %u1526}1527 1528define <vscale x 1 x i64> @vmacc_vv_nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1529; CHECK-LABEL: vmacc_vv_nxv1i64:1530; CHECK:       # %bb.0:1531; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1532; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1533; CHECK-NEXT:    vmv1r.v v8, v101534; CHECK-NEXT:    ret1535  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1536  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1537  %u = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1538  ret <vscale x 1 x i64> %u1539}1540 1541define <vscale x 1 x i64> @vmacc_vv_nxv1i64_unmasked(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1542; CHECK-LABEL: vmacc_vv_nxv1i64_unmasked:1543; CHECK:       # %bb.0:1544; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1545; CHECK-NEXT:    vmacc.vv v10, v8, v91546; CHECK-NEXT:    vmv1r.v v8, v101547; CHECK-NEXT:    ret1548  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1549  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1550  %u = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1551  ret <vscale x 1 x i64> %u1552}1553 1554define <vscale x 1 x i64> @vmacc_vx_nxv1i64(<vscale x 1 x i64> %a, i64 %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1555; RV32-LABEL: vmacc_vx_nxv1i64:1556; RV32:       # %bb.0:1557; RV32-NEXT:    addi sp, sp, -161558; RV32-NEXT:    .cfi_def_cfa_offset 161559; RV32-NEXT:    sw a0, 8(sp)1560; RV32-NEXT:    sw a1, 12(sp)1561; RV32-NEXT:    addi a0, sp, 81562; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1563; RV32-NEXT:    vlse64.v v10, (a0), zero1564; RV32-NEXT:    vsetvli zero, zero, e64, m1, tu, mu1565; RV32-NEXT:    vmacc.vv v9, v8, v10, v0.t1566; RV32-NEXT:    vmv1r.v v8, v91567; RV32-NEXT:    addi sp, sp, 161568; RV32-NEXT:    .cfi_def_cfa_offset 01569; RV32-NEXT:    ret1570;1571; RV64-LABEL: vmacc_vx_nxv1i64:1572; RV64:       # %bb.0:1573; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, mu1574; RV64-NEXT:    vmacc.vx v9, a0, v8, v0.t1575; RV64-NEXT:    vmv1r.v v8, v91576; RV64-NEXT:    ret1577  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01578  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1579  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1580  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1581  %u = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1582  ret <vscale x 1 x i64> %u1583}1584 1585define <vscale x 1 x i64> @vmacc_vx_nxv1i64_unmasked(<vscale x 1 x i64> %a, i64 %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1586; RV32-LABEL: vmacc_vx_nxv1i64_unmasked:1587; RV32:       # %bb.0:1588; RV32-NEXT:    addi sp, sp, -161589; RV32-NEXT:    .cfi_def_cfa_offset 161590; RV32-NEXT:    sw a0, 8(sp)1591; RV32-NEXT:    sw a1, 12(sp)1592; RV32-NEXT:    addi a0, sp, 81593; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1594; RV32-NEXT:    vlse64.v v10, (a0), zero1595; RV32-NEXT:    vsetvli zero, zero, e64, m1, tu, ma1596; RV32-NEXT:    vmacc.vv v9, v8, v101597; RV32-NEXT:    vmv1r.v v8, v91598; RV32-NEXT:    addi sp, sp, 161599; RV32-NEXT:    .cfi_def_cfa_offset 01600; RV32-NEXT:    ret1601;1602; RV64-LABEL: vmacc_vx_nxv1i64_unmasked:1603; RV64:       # %bb.0:1604; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, ma1605; RV64-NEXT:    vmacc.vx v9, a0, v81606; RV64-NEXT:    vmv1r.v v8, v91607; RV64-NEXT:    ret1608  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01609  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1610  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1611  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1612  %u = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1613  ret <vscale x 1 x i64> %u1614}1615 1616define <vscale x 1 x i64> @vmacc_vv_nxv1i64_ta(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1617; CHECK-LABEL: vmacc_vv_nxv1i64_ta:1618; CHECK:       # %bb.0:1619; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1620; CHECK-NEXT:    vmacc.vv v10, v8, v9, v0.t1621; CHECK-NEXT:    vmv.v.v v8, v101622; CHECK-NEXT:    ret1623  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1624  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1625  %u = call <vscale x 1 x i64> @llvm.vp.select.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1626  ret <vscale x 1 x i64> %u1627}1628 1629define <vscale x 1 x i64> @vmacc_vx_nxv1i64_ta(<vscale x 1 x i64> %a, i64 %b, <vscale x 1 x i64> %c,  <vscale x 1 x i1> %m, i32 zeroext %evl) {1630; RV32-LABEL: vmacc_vx_nxv1i64_ta:1631; RV32:       # %bb.0:1632; RV32-NEXT:    addi sp, sp, -161633; RV32-NEXT:    .cfi_def_cfa_offset 161634; RV32-NEXT:    sw a0, 8(sp)1635; RV32-NEXT:    sw a1, 12(sp)1636; RV32-NEXT:    addi a0, sp, 81637; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, mu1638; RV32-NEXT:    vlse64.v v10, (a0), zero1639; RV32-NEXT:    vmacc.vv v9, v8, v10, v0.t1640; RV32-NEXT:    vmv.v.v v8, v91641; RV32-NEXT:    addi sp, sp, 161642; RV32-NEXT:    .cfi_def_cfa_offset 01643; RV32-NEXT:    ret1644;1645; RV64-LABEL: vmacc_vx_nxv1i64_ta:1646; RV64:       # %bb.0:1647; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, mu1648; RV64-NEXT:    vmacc.vx v9, a0, v8, v0.t1649; RV64-NEXT:    vmv.v.v v8, v91650; RV64-NEXT:    ret1651  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01652  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1653  %x = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1654  %y = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)1655  %u = call <vscale x 1 x i64> @llvm.vp.select.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %y, <vscale x 1 x i64> %c, i32 %evl)1656  ret <vscale x 1 x i64> %u1657}1658 1659define <vscale x 2 x i64> @vmacc_vv_nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1660; CHECK-LABEL: vmacc_vv_nxv2i64:1661; CHECK:       # %bb.0:1662; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1663; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t1664; CHECK-NEXT:    vmv2r.v v8, v121665; CHECK-NEXT:    ret1666  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1667  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1668  %u = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1669  ret <vscale x 2 x i64> %u1670}1671 1672define <vscale x 2 x i64> @vmacc_vv_nxv2i64_unmasked(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1673; CHECK-LABEL: vmacc_vv_nxv2i64_unmasked:1674; CHECK:       # %bb.0:1675; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1676; CHECK-NEXT:    vmacc.vv v12, v8, v101677; CHECK-NEXT:    vmv2r.v v8, v121678; CHECK-NEXT:    ret1679  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1680  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1681  %u = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1682  ret <vscale x 2 x i64> %u1683}1684 1685define <vscale x 2 x i64> @vmacc_vx_nxv2i64(<vscale x 2 x i64> %a, i64 %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1686; RV32-LABEL: vmacc_vx_nxv2i64:1687; RV32:       # %bb.0:1688; RV32-NEXT:    addi sp, sp, -161689; RV32-NEXT:    .cfi_def_cfa_offset 161690; RV32-NEXT:    sw a0, 8(sp)1691; RV32-NEXT:    sw a1, 12(sp)1692; RV32-NEXT:    addi a0, sp, 81693; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1694; RV32-NEXT:    vlse64.v v12, (a0), zero1695; RV32-NEXT:    vsetvli zero, zero, e64, m2, tu, mu1696; RV32-NEXT:    vmacc.vv v10, v8, v12, v0.t1697; RV32-NEXT:    vmv2r.v v8, v101698; RV32-NEXT:    addi sp, sp, 161699; RV32-NEXT:    .cfi_def_cfa_offset 01700; RV32-NEXT:    ret1701;1702; RV64-LABEL: vmacc_vx_nxv2i64:1703; RV64:       # %bb.0:1704; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, mu1705; RV64-NEXT:    vmacc.vx v10, a0, v8, v0.t1706; RV64-NEXT:    vmv2r.v v8, v101707; RV64-NEXT:    ret1708  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01709  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1710  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1711  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1712  %u = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1713  ret <vscale x 2 x i64> %u1714}1715 1716define <vscale x 2 x i64> @vmacc_vx_nxv2i64_unmasked(<vscale x 2 x i64> %a, i64 %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1717; RV32-LABEL: vmacc_vx_nxv2i64_unmasked:1718; RV32:       # %bb.0:1719; RV32-NEXT:    addi sp, sp, -161720; RV32-NEXT:    .cfi_def_cfa_offset 161721; RV32-NEXT:    sw a0, 8(sp)1722; RV32-NEXT:    sw a1, 12(sp)1723; RV32-NEXT:    addi a0, sp, 81724; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1725; RV32-NEXT:    vlse64.v v12, (a0), zero1726; RV32-NEXT:    vsetvli zero, zero, e64, m2, tu, ma1727; RV32-NEXT:    vmacc.vv v10, v8, v121728; RV32-NEXT:    vmv2r.v v8, v101729; RV32-NEXT:    addi sp, sp, 161730; RV32-NEXT:    .cfi_def_cfa_offset 01731; RV32-NEXT:    ret1732;1733; RV64-LABEL: vmacc_vx_nxv2i64_unmasked:1734; RV64:       # %bb.0:1735; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, ma1736; RV64-NEXT:    vmacc.vx v10, a0, v81737; RV64-NEXT:    vmv2r.v v8, v101738; RV64-NEXT:    ret1739  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01740  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1741  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1742  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1743  %u = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1744  ret <vscale x 2 x i64> %u1745}1746 1747define <vscale x 2 x i64> @vmacc_vv_nxv2i64_ta(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1748; CHECK-LABEL: vmacc_vv_nxv2i64_ta:1749; CHECK:       # %bb.0:1750; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1751; CHECK-NEXT:    vmacc.vv v12, v8, v10, v0.t1752; CHECK-NEXT:    vmv.v.v v8, v121753; CHECK-NEXT:    ret1754  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1755  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1756  %u = call <vscale x 2 x i64> @llvm.vp.select.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1757  ret <vscale x 2 x i64> %u1758}1759 1760define <vscale x 2 x i64> @vmacc_vx_nxv2i64_ta(<vscale x 2 x i64> %a, i64 %b, <vscale x 2 x i64> %c,  <vscale x 2 x i1> %m, i32 zeroext %evl) {1761; RV32-LABEL: vmacc_vx_nxv2i64_ta:1762; RV32:       # %bb.0:1763; RV32-NEXT:    addi sp, sp, -161764; RV32-NEXT:    .cfi_def_cfa_offset 161765; RV32-NEXT:    sw a0, 8(sp)1766; RV32-NEXT:    sw a1, 12(sp)1767; RV32-NEXT:    addi a0, sp, 81768; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, mu1769; RV32-NEXT:    vlse64.v v12, (a0), zero1770; RV32-NEXT:    vmacc.vv v10, v8, v12, v0.t1771; RV32-NEXT:    vmv.v.v v8, v101772; RV32-NEXT:    addi sp, sp, 161773; RV32-NEXT:    .cfi_def_cfa_offset 01774; RV32-NEXT:    ret1775;1776; RV64-LABEL: vmacc_vx_nxv2i64_ta:1777; RV64:       # %bb.0:1778; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, mu1779; RV64-NEXT:    vmacc.vx v10, a0, v8, v0.t1780; RV64-NEXT:    vmv.v.v v8, v101781; RV64-NEXT:    ret1782  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01783  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1784  %x = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1785  %y = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)1786  %u = call <vscale x 2 x i64> @llvm.vp.select.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %y, <vscale x 2 x i64> %c, i32 %evl)1787  ret <vscale x 2 x i64> %u1788}1789 1790define <vscale x 4 x i64> @vmacc_vv_nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1791; CHECK-LABEL: vmacc_vv_nxv4i64:1792; CHECK:       # %bb.0:1793; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1794; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t1795; CHECK-NEXT:    vmv4r.v v8, v161796; CHECK-NEXT:    ret1797  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1798  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1799  %u = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1800  ret <vscale x 4 x i64> %u1801}1802 1803define <vscale x 4 x i64> @vmacc_vv_nxv4i64_unmasked(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1804; CHECK-LABEL: vmacc_vv_nxv4i64_unmasked:1805; CHECK:       # %bb.0:1806; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1807; CHECK-NEXT:    vmacc.vv v16, v8, v121808; CHECK-NEXT:    vmv4r.v v8, v161809; CHECK-NEXT:    ret1810  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1811  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1812  %u = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1813  ret <vscale x 4 x i64> %u1814}1815 1816define <vscale x 4 x i64> @vmacc_vx_nxv4i64(<vscale x 4 x i64> %a, i64 %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1817; RV32-LABEL: vmacc_vx_nxv4i64:1818; RV32:       # %bb.0:1819; RV32-NEXT:    addi sp, sp, -161820; RV32-NEXT:    .cfi_def_cfa_offset 161821; RV32-NEXT:    sw a0, 8(sp)1822; RV32-NEXT:    sw a1, 12(sp)1823; RV32-NEXT:    addi a0, sp, 81824; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1825; RV32-NEXT:    vlse64.v v16, (a0), zero1826; RV32-NEXT:    vsetvli zero, zero, e64, m4, tu, mu1827; RV32-NEXT:    vmacc.vv v12, v8, v16, v0.t1828; RV32-NEXT:    vmv4r.v v8, v121829; RV32-NEXT:    addi sp, sp, 161830; RV32-NEXT:    .cfi_def_cfa_offset 01831; RV32-NEXT:    ret1832;1833; RV64-LABEL: vmacc_vx_nxv4i64:1834; RV64:       # %bb.0:1835; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, mu1836; RV64-NEXT:    vmacc.vx v12, a0, v8, v0.t1837; RV64-NEXT:    vmv4r.v v8, v121838; RV64-NEXT:    ret1839  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01840  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1841  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1842  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1843  %u = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1844  ret <vscale x 4 x i64> %u1845}1846 1847define <vscale x 4 x i64> @vmacc_vx_nxv4i64_unmasked(<vscale x 4 x i64> %a, i64 %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1848; RV32-LABEL: vmacc_vx_nxv4i64_unmasked:1849; RV32:       # %bb.0:1850; RV32-NEXT:    addi sp, sp, -161851; RV32-NEXT:    .cfi_def_cfa_offset 161852; RV32-NEXT:    sw a0, 8(sp)1853; RV32-NEXT:    sw a1, 12(sp)1854; RV32-NEXT:    addi a0, sp, 81855; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1856; RV32-NEXT:    vlse64.v v16, (a0), zero1857; RV32-NEXT:    vsetvli zero, zero, e64, m4, tu, ma1858; RV32-NEXT:    vmacc.vv v12, v8, v161859; RV32-NEXT:    vmv4r.v v8, v121860; RV32-NEXT:    addi sp, sp, 161861; RV32-NEXT:    .cfi_def_cfa_offset 01862; RV32-NEXT:    ret1863;1864; RV64-LABEL: vmacc_vx_nxv4i64_unmasked:1865; RV64:       # %bb.0:1866; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, ma1867; RV64-NEXT:    vmacc.vx v12, a0, v81868; RV64-NEXT:    vmv4r.v v8, v121869; RV64-NEXT:    ret1870  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01871  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1872  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1873  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1874  %u = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1875  ret <vscale x 4 x i64> %u1876}1877 1878define <vscale x 4 x i64> @vmacc_vv_nxv4i64_ta(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1879; CHECK-LABEL: vmacc_vv_nxv4i64_ta:1880; CHECK:       # %bb.0:1881; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1882; CHECK-NEXT:    vmacc.vv v16, v8, v12, v0.t1883; CHECK-NEXT:    vmv.v.v v8, v161884; CHECK-NEXT:    ret1885  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1886  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1887  %u = call <vscale x 4 x i64> @llvm.vp.select.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1888  ret <vscale x 4 x i64> %u1889}1890 1891define <vscale x 4 x i64> @vmacc_vx_nxv4i64_ta(<vscale x 4 x i64> %a, i64 %b, <vscale x 4 x i64> %c,  <vscale x 4 x i1> %m, i32 zeroext %evl) {1892; RV32-LABEL: vmacc_vx_nxv4i64_ta:1893; RV32:       # %bb.0:1894; RV32-NEXT:    addi sp, sp, -161895; RV32-NEXT:    .cfi_def_cfa_offset 161896; RV32-NEXT:    sw a0, 8(sp)1897; RV32-NEXT:    sw a1, 12(sp)1898; RV32-NEXT:    addi a0, sp, 81899; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, mu1900; RV32-NEXT:    vlse64.v v16, (a0), zero1901; RV32-NEXT:    vmacc.vv v12, v8, v16, v0.t1902; RV32-NEXT:    vmv.v.v v8, v121903; RV32-NEXT:    addi sp, sp, 161904; RV32-NEXT:    .cfi_def_cfa_offset 01905; RV32-NEXT:    ret1906;1907; RV64-LABEL: vmacc_vx_nxv4i64_ta:1908; RV64:       # %bb.0:1909; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, mu1910; RV64-NEXT:    vmacc.vx v12, a0, v8, v0.t1911; RV64-NEXT:    vmv.v.v v8, v121912; RV64-NEXT:    ret1913  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01914  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1915  %x = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1916  %y = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)1917  %u = call <vscale x 4 x i64> @llvm.vp.select.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %y, <vscale x 4 x i64> %c, i32 %evl)1918  ret <vscale x 4 x i64> %u1919}1920 1921define <vscale x 8 x i64> @vmacc_vv_nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1922; CHECK-LABEL: vmacc_vv_nxv8i64:1923; CHECK:       # %bb.0:1924; CHECK-NEXT:    vl8re64.v v24, (a0)1925; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, mu1926; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t1927; CHECK-NEXT:    vmv8r.v v8, v241928; CHECK-NEXT:    ret1929  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1930  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1931  %u = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)1932  ret <vscale x 8 x i64> %u1933}1934 1935define <vscale x 8 x i64> @vmacc_vv_nxv8i64_unmasked(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1936; CHECK-LABEL: vmacc_vv_nxv8i64_unmasked:1937; CHECK:       # %bb.0:1938; CHECK-NEXT:    vl8re64.v v24, (a0)1939; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, ma1940; CHECK-NEXT:    vmacc.vv v24, v8, v161941; CHECK-NEXT:    vmv8r.v v8, v241942; CHECK-NEXT:    ret1943  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1944  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1945  %u = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)1946  ret <vscale x 8 x i64> %u1947}1948 1949define <vscale x 8 x i64> @vmacc_vx_nxv8i64(<vscale x 8 x i64> %a, i64 %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1950; RV32-LABEL: vmacc_vx_nxv8i64:1951; RV32:       # %bb.0:1952; RV32-NEXT:    addi sp, sp, -161953; RV32-NEXT:    .cfi_def_cfa_offset 161954; RV32-NEXT:    sw a0, 8(sp)1955; RV32-NEXT:    sw a1, 12(sp)1956; RV32-NEXT:    addi a0, sp, 81957; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1958; RV32-NEXT:    vlse64.v v24, (a0), zero1959; RV32-NEXT:    vsetvli zero, zero, e64, m8, tu, mu1960; RV32-NEXT:    vmacc.vv v16, v8, v24, v0.t1961; RV32-NEXT:    vmv8r.v v8, v161962; RV32-NEXT:    addi sp, sp, 161963; RV32-NEXT:    .cfi_def_cfa_offset 01964; RV32-NEXT:    ret1965;1966; RV64-LABEL: vmacc_vx_nxv8i64:1967; RV64:       # %bb.0:1968; RV64-NEXT:    vsetvli zero, a1, e64, m8, tu, mu1969; RV64-NEXT:    vmacc.vx v16, a0, v8, v0.t1970; RV64-NEXT:    vmv8r.v v8, v161971; RV64-NEXT:    ret1972  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01973  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1974  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1975  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)1976  %u = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)1977  ret <vscale x 8 x i64> %u1978}1979 1980define <vscale x 8 x i64> @vmacc_vx_nxv8i64_unmasked(<vscale x 8 x i64> %a, i64 %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {1981; RV32-LABEL: vmacc_vx_nxv8i64_unmasked:1982; RV32:       # %bb.0:1983; RV32-NEXT:    addi sp, sp, -161984; RV32-NEXT:    .cfi_def_cfa_offset 161985; RV32-NEXT:    sw a0, 8(sp)1986; RV32-NEXT:    sw a1, 12(sp)1987; RV32-NEXT:    addi a0, sp, 81988; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1989; RV32-NEXT:    vlse64.v v24, (a0), zero1990; RV32-NEXT:    vsetvli zero, zero, e64, m8, tu, ma1991; RV32-NEXT:    vmacc.vv v16, v8, v241992; RV32-NEXT:    vmv8r.v v8, v161993; RV32-NEXT:    addi sp, sp, 161994; RV32-NEXT:    .cfi_def_cfa_offset 01995; RV32-NEXT:    ret1996;1997; RV64-LABEL: vmacc_vx_nxv8i64_unmasked:1998; RV64:       # %bb.0:1999; RV64-NEXT:    vsetvli zero, a1, e64, m8, tu, ma2000; RV64-NEXT:    vmacc.vx v16, a0, v82001; RV64-NEXT:    vmv8r.v v8, v162002; RV64-NEXT:    ret2003  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 02004  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer2005  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2006  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2007  %u = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)2008  ret <vscale x 8 x i64> %u2009}2010 2011define <vscale x 8 x i64> @vmacc_vv_nxv8i64_ta(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {2012; CHECK-LABEL: vmacc_vv_nxv8i64_ta:2013; CHECK:       # %bb.0:2014; CHECK-NEXT:    vl8re64.v v24, (a0)2015; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu2016; CHECK-NEXT:    vmacc.vv v24, v8, v16, v0.t2017; CHECK-NEXT:    vmv.v.v v8, v242018; CHECK-NEXT:    ret2019  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2020  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2021  %u = call <vscale x 8 x i64> @llvm.vp.select.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)2022  ret <vscale x 8 x i64> %u2023}2024 2025define <vscale x 8 x i64> @vmacc_vx_nxv8i64_ta(<vscale x 8 x i64> %a, i64 %b, <vscale x 8 x i64> %c,  <vscale x 8 x i1> %m, i32 zeroext %evl) {2026; RV32-LABEL: vmacc_vx_nxv8i64_ta:2027; RV32:       # %bb.0:2028; RV32-NEXT:    addi sp, sp, -162029; RV32-NEXT:    .cfi_def_cfa_offset 162030; RV32-NEXT:    sw a0, 8(sp)2031; RV32-NEXT:    sw a1, 12(sp)2032; RV32-NEXT:    addi a0, sp, 82033; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, mu2034; RV32-NEXT:    vlse64.v v24, (a0), zero2035; RV32-NEXT:    vmacc.vv v16, v8, v24, v0.t2036; RV32-NEXT:    vmv.v.v v8, v162037; RV32-NEXT:    addi sp, sp, 162038; RV32-NEXT:    .cfi_def_cfa_offset 02039; RV32-NEXT:    ret2040;2041; RV64-LABEL: vmacc_vx_nxv8i64_ta:2042; RV64:       # %bb.0:2043; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, mu2044; RV64-NEXT:    vmacc.vx v16, a0, v8, v0.t2045; RV64-NEXT:    vmv.v.v v8, v162046; RV64-NEXT:    ret2047  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 02048  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer2049  %x = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2050  %y = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)2051  %u = call <vscale x 8 x i64> @llvm.vp.select.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %y, <vscale x 8 x i64> %c, i32 %evl)2052  ret <vscale x 8 x i64> %u2053}2054