1662 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 <2 x i8> @vmacc_vv_nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vmacc_vv_nxv2i8: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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)15 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)16 %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)17 ret <2 x i8> %u18}19 20define <2 x i8> @vmacc_vv_nxv2i8_unmasked(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {21; CHECK-LABEL: vmacc_vv_nxv2i8_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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)28 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)29 %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> splat (i1 -1), <2 x i8> %y, <2 x i8> %c, i32 %evl)30 ret <2 x i8> %u31}32 33define <2 x i8> @vmacc_vx_nxv2i8(<2 x i8> %a, i8 %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {34; CHECK-LABEL: vmacc_vx_nxv2i8: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 <2 x i8> poison, i8 %b, i32 041 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer42 %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)43 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)44 %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)45 ret <2 x i8> %u46}47 48define <2 x i8> @vmacc_vx_nxv2i8_unmasked(<2 x i8> %a, i8 %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {49; CHECK-LABEL: vmacc_vx_nxv2i8_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 <2 x i8> poison, i8 %b, i32 056 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer57 %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)58 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)59 %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> splat (i1 -1), <2 x i8> %y, <2 x i8> %c, i32 %evl)60 ret <2 x i8> %u61}62 63define <2 x i8> @vmacc_vv_nxv2i8_ta(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {64; CHECK-LABEL: vmacc_vv_nxv2i8_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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)71 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)72 %u = call <2 x i8> @llvm.vp.select.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)73 ret <2 x i8> %u74}75 76define <2 x i8> @vmacc_vx_nxv2i8_ta(<2 x i8> %a, i8 %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {77; CHECK-LABEL: vmacc_vx_nxv2i8_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 <2 x i8> poison, i8 %b, i32 084 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer85 %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)86 %y = call <2 x i8> @llvm.vp.add.nxv2i8(<2 x i8> %x, <2 x i8> %c, <2 x i1> splat (i1 -1), i32 %evl)87 %u = call <2 x i8> @llvm.vp.select.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)88 ret <2 x i8> %u89}90 91define <4 x i8> @vmacc_vv_nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {92; CHECK-LABEL: vmacc_vv_nxv4i8: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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)99 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)100 %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)101 ret <4 x i8> %u102}103 104define <4 x i8> @vmacc_vv_nxv4i8_unmasked(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {105; CHECK-LABEL: vmacc_vv_nxv4i8_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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)112 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)113 %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> splat (i1 -1), <4 x i8> %y, <4 x i8> %c, i32 %evl)114 ret <4 x i8> %u115}116 117define <4 x i8> @vmacc_vx_nxv4i8(<4 x i8> %a, i8 %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {118; CHECK-LABEL: vmacc_vx_nxv4i8: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 <4 x i8> poison, i8 %b, i32 0125 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer126 %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)127 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)128 %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)129 ret <4 x i8> %u130}131 132define <4 x i8> @vmacc_vx_nxv4i8_unmasked(<4 x i8> %a, i8 %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {133; CHECK-LABEL: vmacc_vx_nxv4i8_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 <4 x i8> poison, i8 %b, i32 0140 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer141 %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)142 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)143 %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> splat (i1 -1), <4 x i8> %y, <4 x i8> %c, i32 %evl)144 ret <4 x i8> %u145}146 147define <4 x i8> @vmacc_vv_nxv4i8_ta(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {148; CHECK-LABEL: vmacc_vv_nxv4i8_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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)155 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)156 %u = call <4 x i8> @llvm.vp.select.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)157 ret <4 x i8> %u158}159 160define <4 x i8> @vmacc_vx_nxv4i8_ta(<4 x i8> %a, i8 %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {161; CHECK-LABEL: vmacc_vx_nxv4i8_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 <4 x i8> poison, i8 %b, i32 0168 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer169 %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)170 %y = call <4 x i8> @llvm.vp.add.nxv4i8(<4 x i8> %x, <4 x i8> %c, <4 x i1> splat (i1 -1), i32 %evl)171 %u = call <4 x i8> @llvm.vp.select.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)172 ret <4 x i8> %u173}174 175define <8 x i8> @vmacc_vv_nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {176; CHECK-LABEL: vmacc_vv_nxv8i8: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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)183 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)184 %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)185 ret <8 x i8> %u186}187 188define <8 x i8> @vmacc_vv_nxv8i8_unmasked(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {189; CHECK-LABEL: vmacc_vv_nxv8i8_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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)196 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)197 %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> splat (i1 -1), <8 x i8> %y, <8 x i8> %c, i32 %evl)198 ret <8 x i8> %u199}200 201define <8 x i8> @vmacc_vx_nxv8i8(<8 x i8> %a, i8 %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {202; CHECK-LABEL: vmacc_vx_nxv8i8: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 <8 x i8> poison, i8 %b, i32 0209 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer210 %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)211 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)212 %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)213 ret <8 x i8> %u214}215 216define <8 x i8> @vmacc_vx_nxv8i8_unmasked(<8 x i8> %a, i8 %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {217; CHECK-LABEL: vmacc_vx_nxv8i8_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 <8 x i8> poison, i8 %b, i32 0224 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer225 %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)226 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)227 %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> splat (i1 -1), <8 x i8> %y, <8 x i8> %c, i32 %evl)228 ret <8 x i8> %u229}230 231define <8 x i8> @vmacc_vv_nxv8i8_ta(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {232; CHECK-LABEL: vmacc_vv_nxv8i8_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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)239 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)240 %u = call <8 x i8> @llvm.vp.select.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)241 ret <8 x i8> %u242}243 244define <8 x i8> @vmacc_vx_nxv8i8_ta(<8 x i8> %a, i8 %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {245; CHECK-LABEL: vmacc_vx_nxv8i8_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 <8 x i8> poison, i8 %b, i32 0252 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer253 %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)254 %y = call <8 x i8> @llvm.vp.add.nxv8i8(<8 x i8> %x, <8 x i8> %c, <8 x i1> splat (i1 -1), i32 %evl)255 %u = call <8 x i8> @llvm.vp.select.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)256 ret <8 x i8> %u257}258 259define <16 x i8> @vmacc_vv_nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {260; CHECK-LABEL: vmacc_vv_nxv16i8: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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)267 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)268 %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)269 ret <16 x i8> %u270}271 272define <16 x i8> @vmacc_vv_nxv16i8_unmasked(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {273; CHECK-LABEL: vmacc_vv_nxv16i8_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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)280 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)281 %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> splat (i1 -1), <16 x i8> %y, <16 x i8> %c, i32 %evl)282 ret <16 x i8> %u283}284 285define <16 x i8> @vmacc_vx_nxv16i8(<16 x i8> %a, i8 %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {286; CHECK-LABEL: vmacc_vx_nxv16i8: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 <16 x i8> poison, i8 %b, i32 0293 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer294 %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)295 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)296 %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)297 ret <16 x i8> %u298}299 300define <16 x i8> @vmacc_vx_nxv16i8_unmasked(<16 x i8> %a, i8 %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: vmacc_vx_nxv16i8_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 <16 x i8> poison, i8 %b, i32 0308 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer309 %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)310 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)311 %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> splat (i1 -1), <16 x i8> %y, <16 x i8> %c, i32 %evl)312 ret <16 x i8> %u313}314 315define <16 x i8> @vmacc_vv_nxv16i8_ta(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {316; CHECK-LABEL: vmacc_vv_nxv16i8_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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)323 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)324 %u = call <16 x i8> @llvm.vp.select.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)325 ret <16 x i8> %u326}327 328define <16 x i8> @vmacc_vx_nxv16i8_ta(<16 x i8> %a, i8 %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {329; CHECK-LABEL: vmacc_vx_nxv16i8_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 <16 x i8> poison, i8 %b, i32 0336 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer337 %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)338 %y = call <16 x i8> @llvm.vp.add.nxv16i8(<16 x i8> %x, <16 x i8> %c, <16 x i1> splat (i1 -1), i32 %evl)339 %u = call <16 x i8> @llvm.vp.select.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)340 ret <16 x i8> %u341}342 343define <32 x i8> @vmacc_vv_nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {344; CHECK-LABEL: vmacc_vv_nxv32i8: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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)351 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)352 %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)353 ret <32 x i8> %u354}355 356define <32 x i8> @vmacc_vv_nxv32i8_unmasked(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {357; CHECK-LABEL: vmacc_vv_nxv32i8_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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)364 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)365 %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> splat (i1 -1), <32 x i8> %y, <32 x i8> %c, i32 %evl)366 ret <32 x i8> %u367}368 369define <32 x i8> @vmacc_vx_nxv32i8(<32 x i8> %a, i8 %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {370; CHECK-LABEL: vmacc_vx_nxv32i8: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 <32 x i8> poison, i8 %b, i32 0377 %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer378 %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)379 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)380 %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)381 ret <32 x i8> %u382}383 384define <32 x i8> @vmacc_vx_nxv32i8_unmasked(<32 x i8> %a, i8 %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {385; CHECK-LABEL: vmacc_vx_nxv32i8_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 <32 x i8> poison, i8 %b, i32 0392 %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer393 %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)394 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)395 %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> splat (i1 -1), <32 x i8> %y, <32 x i8> %c, i32 %evl)396 ret <32 x i8> %u397}398 399define <32 x i8> @vmacc_vv_nxv32i8_ta(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {400; CHECK-LABEL: vmacc_vv_nxv32i8_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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)407 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)408 %u = call <32 x i8> @llvm.vp.select.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)409 ret <32 x i8> %u410}411 412define <32 x i8> @vmacc_vx_nxv32i8_ta(<32 x i8> %a, i8 %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {413; CHECK-LABEL: vmacc_vx_nxv32i8_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 <32 x i8> poison, i8 %b, i32 0420 %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer421 %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)422 %y = call <32 x i8> @llvm.vp.add.nxv32i8(<32 x i8> %x, <32 x i8> %c, <32 x i1> splat (i1 -1), i32 %evl)423 %u = call <32 x i8> @llvm.vp.select.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)424 ret <32 x i8> %u425}426 427define <64 x i8> @vmacc_vv_nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {428; CHECK-LABEL: vmacc_vv_nxv64i8: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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)435 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)436 %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)437 ret <64 x i8> %u438}439 440define <64 x i8> @vmacc_vv_nxv64i8_unmasked(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {441; CHECK-LABEL: vmacc_vv_nxv64i8_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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)448 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)449 %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> splat (i1 -1), <64 x i8> %y, <64 x i8> %c, i32 %evl)450 ret <64 x i8> %u451}452 453define <64 x i8> @vmacc_vx_nxv64i8(<64 x i8> %a, i8 %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {454; CHECK-LABEL: vmacc_vx_nxv64i8: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 <64 x i8> poison, i8 %b, i32 0461 %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer462 %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)463 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)464 %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)465 ret <64 x i8> %u466}467 468define <64 x i8> @vmacc_vx_nxv64i8_unmasked(<64 x i8> %a, i8 %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {469; CHECK-LABEL: vmacc_vx_nxv64i8_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 <64 x i8> poison, i8 %b, i32 0476 %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer477 %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)478 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)479 %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> splat (i1 -1), <64 x i8> %y, <64 x i8> %c, i32 %evl)480 ret <64 x i8> %u481}482 483define <64 x i8> @vmacc_vv_nxv64i8_ta(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {484; CHECK-LABEL: vmacc_vv_nxv64i8_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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)491 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)492 %u = call <64 x i8> @llvm.vp.select.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)493 ret <64 x i8> %u494}495 496define <64 x i8> @vmacc_vx_nxv64i8_ta(<64 x i8> %a, i8 %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {497; CHECK-LABEL: vmacc_vx_nxv64i8_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 <64 x i8> poison, i8 %b, i32 0504 %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer505 %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)506 %y = call <64 x i8> @llvm.vp.add.nxv64i8(<64 x i8> %x, <64 x i8> %c, <64 x i1> splat (i1 -1), i32 %evl)507 %u = call <64 x i8> @llvm.vp.select.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)508 ret <64 x i8> %u509}510 511define <2 x i16> @vmacc_vv_nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {512; CHECK-LABEL: vmacc_vv_nxv2i16:513; CHECK: # %bb.0:514; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu515; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t516; CHECK-NEXT: vmv1r.v v8, v10517; CHECK-NEXT: ret518 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)519 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)520 %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)521 ret <2 x i16> %u522}523 524define <2 x i16> @vmacc_vv_nxv2i16_unmasked(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {525; CHECK-LABEL: vmacc_vv_nxv2i16_unmasked:526; CHECK: # %bb.0:527; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma528; CHECK-NEXT: vmacc.vv v10, v8, v9529; CHECK-NEXT: vmv1r.v v8, v10530; CHECK-NEXT: ret531 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)532 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)533 %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> splat (i1 -1), <2 x i16> %y, <2 x i16> %c, i32 %evl)534 ret <2 x i16> %u535}536 537define <2 x i16> @vmacc_vx_nxv2i16(<2 x i16> %a, i16 %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {538; CHECK-LABEL: vmacc_vx_nxv2i16:539; CHECK: # %bb.0:540; CHECK-NEXT: vsetvli zero, a1, e16, mf4, tu, mu541; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t542; CHECK-NEXT: vmv1r.v v8, v9543; CHECK-NEXT: ret544 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0545 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer546 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)547 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)548 %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)549 ret <2 x i16> %u550}551 552define <2 x i16> @vmacc_vx_nxv2i16_unmasked(<2 x i16> %a, i16 %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {553; CHECK-LABEL: vmacc_vx_nxv2i16_unmasked:554; CHECK: # %bb.0:555; CHECK-NEXT: vsetvli zero, a1, e16, mf4, tu, ma556; CHECK-NEXT: vmacc.vx v9, a0, v8557; CHECK-NEXT: vmv1r.v v8, v9558; CHECK-NEXT: ret559 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0560 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer561 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)562 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)563 %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> splat (i1 -1), <2 x i16> %y, <2 x i16> %c, i32 %evl)564 ret <2 x i16> %u565}566 567define <2 x i16> @vmacc_vv_nxv2i16_ta(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {568; CHECK-LABEL: vmacc_vv_nxv2i16_ta:569; CHECK: # %bb.0:570; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu571; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t572; CHECK-NEXT: vmv1r.v v8, v10573; CHECK-NEXT: ret574 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)575 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)576 %u = call <2 x i16> @llvm.vp.select.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)577 ret <2 x i16> %u578}579 580define <2 x i16> @vmacc_vx_nxv2i16_ta(<2 x i16> %a, i16 %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {581; CHECK-LABEL: vmacc_vx_nxv2i16_ta:582; CHECK: # %bb.0:583; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu584; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t585; CHECK-NEXT: vmv1r.v v8, v9586; CHECK-NEXT: ret587 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0588 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer589 %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)590 %y = call <2 x i16> @llvm.vp.add.nxv2i16(<2 x i16> %x, <2 x i16> %c, <2 x i1> splat (i1 -1), i32 %evl)591 %u = call <2 x i16> @llvm.vp.select.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)592 ret <2 x i16> %u593}594 595define <4 x i16> @vmacc_vv_nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {596; CHECK-LABEL: vmacc_vv_nxv4i16:597; CHECK: # %bb.0:598; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu599; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t600; CHECK-NEXT: vmv1r.v v8, v10601; CHECK-NEXT: ret602 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)603 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)604 %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)605 ret <4 x i16> %u606}607 608define <4 x i16> @vmacc_vv_nxv4i16_unmasked(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {609; CHECK-LABEL: vmacc_vv_nxv4i16_unmasked:610; CHECK: # %bb.0:611; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma612; CHECK-NEXT: vmacc.vv v10, v8, v9613; CHECK-NEXT: vmv1r.v v8, v10614; CHECK-NEXT: ret615 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)616 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)617 %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> splat (i1 -1), <4 x i16> %y, <4 x i16> %c, i32 %evl)618 ret <4 x i16> %u619}620 621define <4 x i16> @vmacc_vx_nxv4i16(<4 x i16> %a, i16 %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {622; CHECK-LABEL: vmacc_vx_nxv4i16:623; CHECK: # %bb.0:624; CHECK-NEXT: vsetvli zero, a1, e16, mf2, tu, mu625; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t626; CHECK-NEXT: vmv1r.v v8, v9627; CHECK-NEXT: ret628 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0629 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer630 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)631 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)632 %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)633 ret <4 x i16> %u634}635 636define <4 x i16> @vmacc_vx_nxv4i16_unmasked(<4 x i16> %a, i16 %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {637; CHECK-LABEL: vmacc_vx_nxv4i16_unmasked:638; CHECK: # %bb.0:639; CHECK-NEXT: vsetvli zero, a1, e16, mf2, tu, ma640; CHECK-NEXT: vmacc.vx v9, a0, v8641; CHECK-NEXT: vmv1r.v v8, v9642; CHECK-NEXT: ret643 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0644 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer645 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)646 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)647 %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> splat (i1 -1), <4 x i16> %y, <4 x i16> %c, i32 %evl)648 ret <4 x i16> %u649}650 651define <4 x i16> @vmacc_vv_nxv4i16_ta(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {652; CHECK-LABEL: vmacc_vv_nxv4i16_ta:653; CHECK: # %bb.0:654; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu655; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t656; CHECK-NEXT: vmv1r.v v8, v10657; CHECK-NEXT: ret658 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)659 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)660 %u = call <4 x i16> @llvm.vp.select.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)661 ret <4 x i16> %u662}663 664define <4 x i16> @vmacc_vx_nxv4i16_ta(<4 x i16> %a, i16 %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {665; CHECK-LABEL: vmacc_vx_nxv4i16_ta:666; CHECK: # %bb.0:667; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu668; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t669; CHECK-NEXT: vmv1r.v v8, v9670; CHECK-NEXT: ret671 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0672 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer673 %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)674 %y = call <4 x i16> @llvm.vp.add.nxv4i16(<4 x i16> %x, <4 x i16> %c, <4 x i1> splat (i1 -1), i32 %evl)675 %u = call <4 x i16> @llvm.vp.select.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)676 ret <4 x i16> %u677}678 679define <8 x i16> @vmacc_vv_nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {680; CHECK-LABEL: vmacc_vv_nxv8i16:681; CHECK: # %bb.0:682; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu683; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t684; CHECK-NEXT: vmv1r.v v8, v10685; CHECK-NEXT: ret686 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)687 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)688 %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)689 ret <8 x i16> %u690}691 692define <8 x i16> @vmacc_vv_nxv8i16_unmasked(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {693; CHECK-LABEL: vmacc_vv_nxv8i16_unmasked:694; CHECK: # %bb.0:695; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma696; CHECK-NEXT: vmacc.vv v10, v8, v9697; CHECK-NEXT: vmv1r.v v8, v10698; CHECK-NEXT: ret699 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)700 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)701 %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> splat (i1 -1), <8 x i16> %y, <8 x i16> %c, i32 %evl)702 ret <8 x i16> %u703}704 705define <8 x i16> @vmacc_vx_nxv8i16(<8 x i16> %a, i16 %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {706; CHECK-LABEL: vmacc_vx_nxv8i16:707; CHECK: # %bb.0:708; CHECK-NEXT: vsetvli zero, a1, e16, m1, tu, mu709; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t710; CHECK-NEXT: vmv1r.v v8, v9711; CHECK-NEXT: ret712 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0713 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer714 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)715 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)716 %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)717 ret <8 x i16> %u718}719 720define <8 x i16> @vmacc_vx_nxv8i16_unmasked(<8 x i16> %a, i16 %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {721; CHECK-LABEL: vmacc_vx_nxv8i16_unmasked:722; CHECK: # %bb.0:723; CHECK-NEXT: vsetvli zero, a1, e16, m1, tu, ma724; CHECK-NEXT: vmacc.vx v9, a0, v8725; CHECK-NEXT: vmv1r.v v8, v9726; CHECK-NEXT: ret727 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0728 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer729 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)730 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)731 %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> splat (i1 -1), <8 x i16> %y, <8 x i16> %c, i32 %evl)732 ret <8 x i16> %u733}734 735define <8 x i16> @vmacc_vv_nxv8i16_ta(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {736; CHECK-LABEL: vmacc_vv_nxv8i16_ta:737; CHECK: # %bb.0:738; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu739; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t740; CHECK-NEXT: vmv.v.v v8, v10741; CHECK-NEXT: ret742 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)743 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)744 %u = call <8 x i16> @llvm.vp.select.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)745 ret <8 x i16> %u746}747 748define <8 x i16> @vmacc_vx_nxv8i16_ta(<8 x i16> %a, i16 %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {749; CHECK-LABEL: vmacc_vx_nxv8i16_ta:750; CHECK: # %bb.0:751; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu752; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t753; CHECK-NEXT: vmv.v.v v8, v9754; CHECK-NEXT: ret755 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0756 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer757 %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)758 %y = call <8 x i16> @llvm.vp.add.nxv8i16(<8 x i16> %x, <8 x i16> %c, <8 x i1> splat (i1 -1), i32 %evl)759 %u = call <8 x i16> @llvm.vp.select.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)760 ret <8 x i16> %u761}762 763define <16 x i16> @vmacc_vv_nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {764; CHECK-LABEL: vmacc_vv_nxv16i16:765; CHECK: # %bb.0:766; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu767; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t768; CHECK-NEXT: vmv2r.v v8, v12769; CHECK-NEXT: ret770 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)771 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)772 %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)773 ret <16 x i16> %u774}775 776define <16 x i16> @vmacc_vv_nxv16i16_unmasked(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {777; CHECK-LABEL: vmacc_vv_nxv16i16_unmasked:778; CHECK: # %bb.0:779; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma780; CHECK-NEXT: vmacc.vv v12, v8, v10781; CHECK-NEXT: vmv2r.v v8, v12782; CHECK-NEXT: ret783 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)784 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)785 %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> splat (i1 -1), <16 x i16> %y, <16 x i16> %c, i32 %evl)786 ret <16 x i16> %u787}788 789define <16 x i16> @vmacc_vx_nxv16i16(<16 x i16> %a, i16 %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {790; CHECK-LABEL: vmacc_vx_nxv16i16:791; CHECK: # %bb.0:792; CHECK-NEXT: vsetvli zero, a1, e16, m2, tu, mu793; CHECK-NEXT: vmacc.vx v10, a0, v8, v0.t794; CHECK-NEXT: vmv2r.v v8, v10795; CHECK-NEXT: ret796 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0797 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer798 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)799 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)800 %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)801 ret <16 x i16> %u802}803 804define <16 x i16> @vmacc_vx_nxv16i16_unmasked(<16 x i16> %a, i16 %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {805; CHECK-LABEL: vmacc_vx_nxv16i16_unmasked:806; CHECK: # %bb.0:807; CHECK-NEXT: vsetvli zero, a1, e16, m2, tu, ma808; CHECK-NEXT: vmacc.vx v10, a0, v8809; CHECK-NEXT: vmv2r.v v8, v10810; CHECK-NEXT: ret811 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0812 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer813 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)814 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)815 %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> splat (i1 -1), <16 x i16> %y, <16 x i16> %c, i32 %evl)816 ret <16 x i16> %u817}818 819define <16 x i16> @vmacc_vv_nxv16i16_ta(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {820; CHECK-LABEL: vmacc_vv_nxv16i16_ta:821; CHECK: # %bb.0:822; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu823; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t824; CHECK-NEXT: vmv.v.v v8, v12825; CHECK-NEXT: ret826 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)827 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)828 %u = call <16 x i16> @llvm.vp.select.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)829 ret <16 x i16> %u830}831 832define <16 x i16> @vmacc_vx_nxv16i16_ta(<16 x i16> %a, i16 %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {833; CHECK-LABEL: vmacc_vx_nxv16i16_ta:834; CHECK: # %bb.0:835; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu836; CHECK-NEXT: vmacc.vx v10, a0, v8, v0.t837; CHECK-NEXT: vmv.v.v v8, v10838; CHECK-NEXT: ret839 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0840 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer841 %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)842 %y = call <16 x i16> @llvm.vp.add.nxv16i16(<16 x i16> %x, <16 x i16> %c, <16 x i1> splat (i1 -1), i32 %evl)843 %u = call <16 x i16> @llvm.vp.select.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)844 ret <16 x i16> %u845}846 847define <32 x i16> @vmacc_vv_nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {848; CHECK-LABEL: vmacc_vv_nxv32i16:849; CHECK: # %bb.0:850; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu851; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t852; CHECK-NEXT: vmv4r.v v8, v16853; CHECK-NEXT: ret854 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)855 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)856 %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)857 ret <32 x i16> %u858}859 860define <32 x i16> @vmacc_vv_nxv32i16_unmasked(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {861; CHECK-LABEL: vmacc_vv_nxv32i16_unmasked:862; CHECK: # %bb.0:863; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma864; CHECK-NEXT: vmacc.vv v16, v8, v12865; CHECK-NEXT: vmv4r.v v8, v16866; CHECK-NEXT: ret867 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)868 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)869 %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> splat (i1 -1), <32 x i16> %y, <32 x i16> %c, i32 %evl)870 ret <32 x i16> %u871}872 873define <32 x i16> @vmacc_vx_nxv32i16(<32 x i16> %a, i16 %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {874; CHECK-LABEL: vmacc_vx_nxv32i16:875; CHECK: # %bb.0:876; CHECK-NEXT: vsetvli zero, a1, e16, m4, tu, mu877; CHECK-NEXT: vmacc.vx v12, a0, v8, v0.t878; CHECK-NEXT: vmv4r.v v8, v12879; CHECK-NEXT: ret880 %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0881 %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer882 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)883 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)884 %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)885 ret <32 x i16> %u886}887 888define <32 x i16> @vmacc_vx_nxv32i16_unmasked(<32 x i16> %a, i16 %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {889; CHECK-LABEL: vmacc_vx_nxv32i16_unmasked:890; CHECK: # %bb.0:891; CHECK-NEXT: vsetvli zero, a1, e16, m4, tu, ma892; CHECK-NEXT: vmacc.vx v12, a0, v8893; CHECK-NEXT: vmv4r.v v8, v12894; CHECK-NEXT: ret895 %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0896 %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer897 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)898 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)899 %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> splat (i1 -1), <32 x i16> %y, <32 x i16> %c, i32 %evl)900 ret <32 x i16> %u901}902 903define <32 x i16> @vmacc_vv_nxv32i16_ta(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {904; CHECK-LABEL: vmacc_vv_nxv32i16_ta:905; CHECK: # %bb.0:906; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu907; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t908; CHECK-NEXT: vmv.v.v v8, v16909; CHECK-NEXT: ret910 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)911 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)912 %u = call <32 x i16> @llvm.vp.select.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)913 ret <32 x i16> %u914}915 916define <32 x i16> @vmacc_vx_nxv32i16_ta(<32 x i16> %a, i16 %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {917; CHECK-LABEL: vmacc_vx_nxv32i16_ta:918; CHECK: # %bb.0:919; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu920; CHECK-NEXT: vmacc.vx v12, a0, v8, v0.t921; CHECK-NEXT: vmv.v.v v8, v12922; CHECK-NEXT: ret923 %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0924 %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer925 %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)926 %y = call <32 x i16> @llvm.vp.add.nxv32i16(<32 x i16> %x, <32 x i16> %c, <32 x i1> splat (i1 -1), i32 %evl)927 %u = call <32 x i16> @llvm.vp.select.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)928 ret <32 x i16> %u929}930 931define <2 x i32> @vmacc_vv_nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {932; CHECK-LABEL: vmacc_vv_nxv2i32:933; CHECK: # %bb.0:934; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu935; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t936; CHECK-NEXT: vmv1r.v v8, v10937; CHECK-NEXT: ret938 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)939 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)940 %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)941 ret <2 x i32> %u942}943 944define <2 x i32> @vmacc_vv_nxv2i32_unmasked(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {945; CHECK-LABEL: vmacc_vv_nxv2i32_unmasked:946; CHECK: # %bb.0:947; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma948; CHECK-NEXT: vmacc.vv v10, v8, v9949; CHECK-NEXT: vmv1r.v v8, v10950; CHECK-NEXT: ret951 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)952 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)953 %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> splat (i1 -1), <2 x i32> %y, <2 x i32> %c, i32 %evl)954 ret <2 x i32> %u955}956 957define <2 x i32> @vmacc_vx_nxv2i32(<2 x i32> %a, i32 %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {958; CHECK-LABEL: vmacc_vx_nxv2i32:959; CHECK: # %bb.0:960; CHECK-NEXT: vsetvli zero, a1, e32, mf2, tu, mu961; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t962; CHECK-NEXT: vmv1r.v v8, v9963; CHECK-NEXT: ret964 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0965 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer966 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)967 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)968 %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)969 ret <2 x i32> %u970}971 972define <2 x i32> @vmacc_vx_nxv2i32_unmasked(<2 x i32> %a, i32 %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {973; CHECK-LABEL: vmacc_vx_nxv2i32_unmasked:974; CHECK: # %bb.0:975; CHECK-NEXT: vsetvli zero, a1, e32, mf2, tu, ma976; CHECK-NEXT: vmacc.vx v9, a0, v8977; CHECK-NEXT: vmv1r.v v8, v9978; CHECK-NEXT: ret979 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0980 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer981 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)982 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)983 %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> splat (i1 -1), <2 x i32> %y, <2 x i32> %c, i32 %evl)984 ret <2 x i32> %u985}986 987define <2 x i32> @vmacc_vv_nxv2i32_ta(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {988; CHECK-LABEL: vmacc_vv_nxv2i32_ta:989; CHECK: # %bb.0:990; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu991; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t992; CHECK-NEXT: vmv1r.v v8, v10993; CHECK-NEXT: ret994 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)995 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)996 %u = call <2 x i32> @llvm.vp.select.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)997 ret <2 x i32> %u998}999 1000define <2 x i32> @vmacc_vx_nxv2i32_ta(<2 x i32> %a, i32 %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {1001; CHECK-LABEL: vmacc_vx_nxv2i32_ta:1002; CHECK: # %bb.0:1003; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu1004; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t1005; CHECK-NEXT: vmv1r.v v8, v91006; CHECK-NEXT: ret1007 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 01008 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer1009 %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)1010 %y = call <2 x i32> @llvm.vp.add.nxv2i32(<2 x i32> %x, <2 x i32> %c, <2 x i1> splat (i1 -1), i32 %evl)1011 %u = call <2 x i32> @llvm.vp.select.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)1012 ret <2 x i32> %u1013}1014 1015define <4 x i32> @vmacc_vv_nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1016; CHECK-LABEL: vmacc_vv_nxv4i32:1017; CHECK: # %bb.0:1018; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu1019; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t1020; CHECK-NEXT: vmv1r.v v8, v101021; CHECK-NEXT: ret1022 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)1023 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1024 %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)1025 ret <4 x i32> %u1026}1027 1028define <4 x i32> @vmacc_vv_nxv4i32_unmasked(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1029; CHECK-LABEL: vmacc_vv_nxv4i32_unmasked:1030; CHECK: # %bb.0:1031; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma1032; CHECK-NEXT: vmacc.vv v10, v8, v91033; CHECK-NEXT: vmv1r.v v8, v101034; CHECK-NEXT: ret1035 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)1036 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1037 %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> splat (i1 -1), <4 x i32> %y, <4 x i32> %c, i32 %evl)1038 ret <4 x i32> %u1039}1040 1041define <4 x i32> @vmacc_vx_nxv4i32(<4 x i32> %a, i32 %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1042; CHECK-LABEL: vmacc_vx_nxv4i32:1043; CHECK: # %bb.0:1044; CHECK-NEXT: vsetvli zero, a1, e32, m1, tu, mu1045; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t1046; CHECK-NEXT: vmv1r.v v8, v91047; CHECK-NEXT: ret1048 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 01049 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer1050 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)1051 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1052 %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)1053 ret <4 x i32> %u1054}1055 1056define <4 x i32> @vmacc_vx_nxv4i32_unmasked(<4 x i32> %a, i32 %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1057; CHECK-LABEL: vmacc_vx_nxv4i32_unmasked:1058; CHECK: # %bb.0:1059; CHECK-NEXT: vsetvli zero, a1, e32, m1, tu, ma1060; CHECK-NEXT: vmacc.vx v9, a0, v81061; CHECK-NEXT: vmv1r.v v8, v91062; CHECK-NEXT: ret1063 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 01064 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer1065 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)1066 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1067 %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> splat (i1 -1), <4 x i32> %y, <4 x i32> %c, i32 %evl)1068 ret <4 x i32> %u1069}1070 1071define <4 x i32> @vmacc_vv_nxv4i32_ta(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1072; CHECK-LABEL: vmacc_vv_nxv4i32_ta:1073; CHECK: # %bb.0:1074; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu1075; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t1076; CHECK-NEXT: vmv.v.v v8, v101077; CHECK-NEXT: ret1078 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)1079 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1080 %u = call <4 x i32> @llvm.vp.select.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)1081 ret <4 x i32> %u1082}1083 1084define <4 x i32> @vmacc_vx_nxv4i32_ta(<4 x i32> %a, i32 %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {1085; CHECK-LABEL: vmacc_vx_nxv4i32_ta:1086; CHECK: # %bb.0:1087; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu1088; CHECK-NEXT: vmacc.vx v9, a0, v8, v0.t1089; CHECK-NEXT: vmv.v.v v8, v91090; CHECK-NEXT: ret1091 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 01092 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer1093 %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)1094 %y = call <4 x i32> @llvm.vp.add.nxv4i32(<4 x i32> %x, <4 x i32> %c, <4 x i1> splat (i1 -1), i32 %evl)1095 %u = call <4 x i32> @llvm.vp.select.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)1096 ret <4 x i32> %u1097}1098 1099define <8 x i32> @vmacc_vv_nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1100; CHECK-LABEL: vmacc_vv_nxv8i32:1101; CHECK: # %bb.0:1102; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu1103; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t1104; CHECK-NEXT: vmv2r.v v8, v121105; CHECK-NEXT: ret1106 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)1107 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1108 %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)1109 ret <8 x i32> %u1110}1111 1112define <8 x i32> @vmacc_vv_nxv8i32_unmasked(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1113; CHECK-LABEL: vmacc_vv_nxv8i32_unmasked:1114; CHECK: # %bb.0:1115; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma1116; CHECK-NEXT: vmacc.vv v12, v8, v101117; CHECK-NEXT: vmv2r.v v8, v121118; CHECK-NEXT: ret1119 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)1120 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1121 %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> splat (i1 -1), <8 x i32> %y, <8 x i32> %c, i32 %evl)1122 ret <8 x i32> %u1123}1124 1125define <8 x i32> @vmacc_vx_nxv8i32(<8 x i32> %a, i32 %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1126; CHECK-LABEL: vmacc_vx_nxv8i32:1127; CHECK: # %bb.0:1128; CHECK-NEXT: vsetvli zero, a1, e32, m2, tu, mu1129; CHECK-NEXT: vmacc.vx v10, a0, v8, v0.t1130; CHECK-NEXT: vmv2r.v v8, v101131; CHECK-NEXT: ret1132 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01133 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1134 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)1135 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1136 %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)1137 ret <8 x i32> %u1138}1139 1140define <8 x i32> @vmacc_vx_nxv8i32_unmasked(<8 x i32> %a, i32 %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1141; CHECK-LABEL: vmacc_vx_nxv8i32_unmasked:1142; CHECK: # %bb.0:1143; CHECK-NEXT: vsetvli zero, a1, e32, m2, tu, ma1144; CHECK-NEXT: vmacc.vx v10, a0, v81145; CHECK-NEXT: vmv2r.v v8, v101146; CHECK-NEXT: ret1147 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01148 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1149 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)1150 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1151 %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> splat (i1 -1), <8 x i32> %y, <8 x i32> %c, i32 %evl)1152 ret <8 x i32> %u1153}1154 1155define <8 x i32> @vmacc_vv_nxv8i32_ta(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1156; CHECK-LABEL: vmacc_vv_nxv8i32_ta:1157; CHECK: # %bb.0:1158; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu1159; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t1160; CHECK-NEXT: vmv.v.v v8, v121161; CHECK-NEXT: ret1162 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)1163 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1164 %u = call <8 x i32> @llvm.vp.select.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)1165 ret <8 x i32> %u1166}1167 1168define <8 x i32> @vmacc_vx_nxv8i32_ta(<8 x i32> %a, i32 %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {1169; CHECK-LABEL: vmacc_vx_nxv8i32_ta:1170; CHECK: # %bb.0:1171; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu1172; CHECK-NEXT: vmacc.vx v10, a0, v8, v0.t1173; CHECK-NEXT: vmv.v.v v8, v101174; CHECK-NEXT: ret1175 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 01176 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer1177 %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)1178 %y = call <8 x i32> @llvm.vp.add.nxv8i32(<8 x i32> %x, <8 x i32> %c, <8 x i1> splat (i1 -1), i32 %evl)1179 %u = call <8 x i32> @llvm.vp.select.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)1180 ret <8 x i32> %u1181}1182 1183define <16 x i32> @vmacc_vv_nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1184; CHECK-LABEL: vmacc_vv_nxv16i32:1185; CHECK: # %bb.0:1186; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu1187; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t1188; CHECK-NEXT: vmv4r.v v8, v161189; CHECK-NEXT: ret1190 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)1191 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1192 %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)1193 ret <16 x i32> %u1194}1195 1196define <16 x i32> @vmacc_vv_nxv16i32_unmasked(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1197; CHECK-LABEL: vmacc_vv_nxv16i32_unmasked:1198; CHECK: # %bb.0:1199; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1200; CHECK-NEXT: vmacc.vv v16, v8, v121201; CHECK-NEXT: vmv4r.v v8, v161202; CHECK-NEXT: ret1203 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)1204 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1205 %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> splat (i1 -1), <16 x i32> %y, <16 x i32> %c, i32 %evl)1206 ret <16 x i32> %u1207}1208 1209define <16 x i32> @vmacc_vx_nxv16i32(<16 x i32> %a, i32 %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1210; CHECK-LABEL: vmacc_vx_nxv16i32:1211; CHECK: # %bb.0:1212; CHECK-NEXT: vsetvli zero, a1, e32, m4, tu, mu1213; CHECK-NEXT: vmacc.vx v12, a0, v8, v0.t1214; CHECK-NEXT: vmv4r.v v8, v121215; CHECK-NEXT: ret1216 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 01217 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer1218 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)1219 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1220 %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)1221 ret <16 x i32> %u1222}1223 1224define <16 x i32> @vmacc_vx_nxv16i32_unmasked(<16 x i32> %a, i32 %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1225; CHECK-LABEL: vmacc_vx_nxv16i32_unmasked:1226; CHECK: # %bb.0:1227; CHECK-NEXT: vsetvli zero, a1, e32, m4, tu, ma1228; CHECK-NEXT: vmacc.vx v12, a0, v81229; CHECK-NEXT: vmv4r.v v8, v121230; CHECK-NEXT: ret1231 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 01232 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer1233 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)1234 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1235 %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> splat (i1 -1), <16 x i32> %y, <16 x i32> %c, i32 %evl)1236 ret <16 x i32> %u1237}1238 1239define <16 x i32> @vmacc_vv_nxv16i32_ta(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1240; CHECK-LABEL: vmacc_vv_nxv16i32_ta:1241; CHECK: # %bb.0:1242; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu1243; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t1244; CHECK-NEXT: vmv.v.v v8, v161245; CHECK-NEXT: ret1246 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)1247 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1248 %u = call <16 x i32> @llvm.vp.select.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)1249 ret <16 x i32> %u1250}1251 1252define <16 x i32> @vmacc_vx_nxv16i32_ta(<16 x i32> %a, i32 %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {1253; CHECK-LABEL: vmacc_vx_nxv16i32_ta:1254; CHECK: # %bb.0:1255; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu1256; CHECK-NEXT: vmacc.vx v12, a0, v8, v0.t1257; CHECK-NEXT: vmv.v.v v8, v121258; CHECK-NEXT: ret1259 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 01260 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer1261 %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)1262 %y = call <16 x i32> @llvm.vp.add.nxv16i32(<16 x i32> %x, <16 x i32> %c, <16 x i1> splat (i1 -1), i32 %evl)1263 %u = call <16 x i32> @llvm.vp.select.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)1264 ret <16 x i32> %u1265}1266 1267define <2 x i64> @vmacc_vv_nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1268; CHECK-LABEL: vmacc_vv_nxv2i64:1269; CHECK: # %bb.0:1270; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1271; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t1272; CHECK-NEXT: vmv1r.v v8, v101273; CHECK-NEXT: ret1274 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)1275 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1276 %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)1277 ret <2 x i64> %u1278}1279 1280define <2 x i64> @vmacc_vv_nxv2i64_unmasked(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1281; CHECK-LABEL: vmacc_vv_nxv2i64_unmasked:1282; CHECK: # %bb.0:1283; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1284; CHECK-NEXT: vmacc.vv v10, v8, v91285; CHECK-NEXT: vmv1r.v v8, v101286; CHECK-NEXT: ret1287 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)1288 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1289 %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> splat (i1 -1), <2 x i64> %y, <2 x i64> %c, i32 %evl)1290 ret <2 x i64> %u1291}1292 1293define <2 x i64> @vmacc_vx_nxv2i64(<2 x i64> %a, i64 %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1294; RV32-LABEL: vmacc_vx_nxv2i64:1295; RV32: # %bb.0:1296; RV32-NEXT: addi sp, sp, -161297; RV32-NEXT: .cfi_def_cfa_offset 161298; RV32-NEXT: sw a0, 8(sp)1299; RV32-NEXT: sw a1, 12(sp)1300; RV32-NEXT: addi a0, sp, 81301; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1302; RV32-NEXT: vlse64.v v10, (a0), zero1303; RV32-NEXT: vsetvli zero, a2, e64, m1, tu, mu1304; RV32-NEXT: vmacc.vv v9, v8, v10, v0.t1305; RV32-NEXT: vmv1r.v v8, v91306; RV32-NEXT: addi sp, sp, 161307; RV32-NEXT: .cfi_def_cfa_offset 01308; RV32-NEXT: ret1309;1310; RV64-LABEL: vmacc_vx_nxv2i64:1311; RV64: # %bb.0:1312; RV64-NEXT: vsetvli zero, a1, e64, m1, tu, mu1313; RV64-NEXT: vmacc.vx v9, a0, v8, v0.t1314; RV64-NEXT: vmv1r.v v8, v91315; RV64-NEXT: ret1316 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 01317 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer1318 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)1319 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1320 %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)1321 ret <2 x i64> %u1322}1323 1324define <2 x i64> @vmacc_vx_nxv2i64_unmasked(<2 x i64> %a, i64 %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1325; RV32-LABEL: vmacc_vx_nxv2i64_unmasked:1326; RV32: # %bb.0:1327; RV32-NEXT: addi sp, sp, -161328; RV32-NEXT: .cfi_def_cfa_offset 161329; RV32-NEXT: sw a0, 8(sp)1330; RV32-NEXT: sw a1, 12(sp)1331; RV32-NEXT: addi a0, sp, 81332; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1333; RV32-NEXT: vlse64.v v10, (a0), zero1334; RV32-NEXT: vsetvli zero, a2, e64, m1, tu, ma1335; RV32-NEXT: vmacc.vv v9, v8, v101336; RV32-NEXT: vmv1r.v v8, v91337; RV32-NEXT: addi sp, sp, 161338; RV32-NEXT: .cfi_def_cfa_offset 01339; RV32-NEXT: ret1340;1341; RV64-LABEL: vmacc_vx_nxv2i64_unmasked:1342; RV64: # %bb.0:1343; RV64-NEXT: vsetvli zero, a1, e64, m1, tu, ma1344; RV64-NEXT: vmacc.vx v9, a0, v81345; RV64-NEXT: vmv1r.v v8, v91346; RV64-NEXT: ret1347 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 01348 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer1349 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)1350 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1351 %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> splat (i1 -1), <2 x i64> %y, <2 x i64> %c, i32 %evl)1352 ret <2 x i64> %u1353}1354 1355define <2 x i64> @vmacc_vv_nxv2i64_ta(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1356; CHECK-LABEL: vmacc_vv_nxv2i64_ta:1357; CHECK: # %bb.0:1358; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1359; CHECK-NEXT: vmacc.vv v10, v8, v9, v0.t1360; CHECK-NEXT: vmv.v.v v8, v101361; CHECK-NEXT: ret1362 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)1363 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1364 %u = call <2 x i64> @llvm.vp.select.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)1365 ret <2 x i64> %u1366}1367 1368define <2 x i64> @vmacc_vx_nxv2i64_ta(<2 x i64> %a, i64 %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {1369; RV32-LABEL: vmacc_vx_nxv2i64_ta:1370; RV32: # %bb.0:1371; RV32-NEXT: addi sp, sp, -161372; RV32-NEXT: .cfi_def_cfa_offset 161373; RV32-NEXT: sw a0, 8(sp)1374; RV32-NEXT: sw a1, 12(sp)1375; RV32-NEXT: addi a0, sp, 81376; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma1377; RV32-NEXT: vlse64.v v10, (a0), zero1378; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, mu1379; RV32-NEXT: vmacc.vv v9, v8, v10, v0.t1380; RV32-NEXT: vmv.v.v v8, v91381; RV32-NEXT: addi sp, sp, 161382; RV32-NEXT: .cfi_def_cfa_offset 01383; RV32-NEXT: ret1384;1385; RV64-LABEL: vmacc_vx_nxv2i64_ta:1386; RV64: # %bb.0:1387; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, mu1388; RV64-NEXT: vmacc.vx v9, a0, v8, v0.t1389; RV64-NEXT: vmv.v.v v8, v91390; RV64-NEXT: ret1391 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 01392 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer1393 %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)1394 %y = call <2 x i64> @llvm.vp.add.nxv2i64(<2 x i64> %x, <2 x i64> %c, <2 x i1> splat (i1 -1), i32 %evl)1395 %u = call <2 x i64> @llvm.vp.select.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)1396 ret <2 x i64> %u1397}1398 1399define <4 x i64> @vmacc_vv_nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1400; CHECK-LABEL: vmacc_vv_nxv4i64:1401; CHECK: # %bb.0:1402; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1403; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t1404; CHECK-NEXT: vmv2r.v v8, v121405; CHECK-NEXT: ret1406 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)1407 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1408 %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)1409 ret <4 x i64> %u1410}1411 1412define <4 x i64> @vmacc_vv_nxv4i64_unmasked(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1413; CHECK-LABEL: vmacc_vv_nxv4i64_unmasked:1414; CHECK: # %bb.0:1415; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1416; CHECK-NEXT: vmacc.vv v12, v8, v101417; CHECK-NEXT: vmv2r.v v8, v121418; CHECK-NEXT: ret1419 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)1420 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1421 %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> splat (i1 -1), <4 x i64> %y, <4 x i64> %c, i32 %evl)1422 ret <4 x i64> %u1423}1424 1425define <4 x i64> @vmacc_vx_nxv4i64(<4 x i64> %a, i64 %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1426; RV32-LABEL: vmacc_vx_nxv4i64:1427; RV32: # %bb.0:1428; RV32-NEXT: addi sp, sp, -161429; RV32-NEXT: .cfi_def_cfa_offset 161430; RV32-NEXT: sw a0, 8(sp)1431; RV32-NEXT: sw a1, 12(sp)1432; RV32-NEXT: addi a0, sp, 81433; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma1434; RV32-NEXT: vlse64.v v12, (a0), zero1435; RV32-NEXT: vsetvli zero, a2, e64, m2, tu, mu1436; RV32-NEXT: vmacc.vv v10, v8, v12, v0.t1437; RV32-NEXT: vmv2r.v v8, v101438; RV32-NEXT: addi sp, sp, 161439; RV32-NEXT: .cfi_def_cfa_offset 01440; RV32-NEXT: ret1441;1442; RV64-LABEL: vmacc_vx_nxv4i64:1443; RV64: # %bb.0:1444; RV64-NEXT: vsetvli zero, a1, e64, m2, tu, mu1445; RV64-NEXT: vmacc.vx v10, a0, v8, v0.t1446; RV64-NEXT: vmv2r.v v8, v101447; RV64-NEXT: ret1448 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 01449 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer1450 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)1451 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1452 %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)1453 ret <4 x i64> %u1454}1455 1456define <4 x i64> @vmacc_vx_nxv4i64_unmasked(<4 x i64> %a, i64 %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1457; RV32-LABEL: vmacc_vx_nxv4i64_unmasked:1458; RV32: # %bb.0:1459; RV32-NEXT: addi sp, sp, -161460; RV32-NEXT: .cfi_def_cfa_offset 161461; RV32-NEXT: sw a0, 8(sp)1462; RV32-NEXT: sw a1, 12(sp)1463; RV32-NEXT: addi a0, sp, 81464; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma1465; RV32-NEXT: vlse64.v v12, (a0), zero1466; RV32-NEXT: vsetvli zero, a2, e64, m2, tu, ma1467; RV32-NEXT: vmacc.vv v10, v8, v121468; RV32-NEXT: vmv2r.v v8, v101469; RV32-NEXT: addi sp, sp, 161470; RV32-NEXT: .cfi_def_cfa_offset 01471; RV32-NEXT: ret1472;1473; RV64-LABEL: vmacc_vx_nxv4i64_unmasked:1474; RV64: # %bb.0:1475; RV64-NEXT: vsetvli zero, a1, e64, m2, tu, ma1476; RV64-NEXT: vmacc.vx v10, a0, v81477; RV64-NEXT: vmv2r.v v8, v101478; RV64-NEXT: ret1479 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 01480 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer1481 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)1482 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1483 %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> splat (i1 -1), <4 x i64> %y, <4 x i64> %c, i32 %evl)1484 ret <4 x i64> %u1485}1486 1487define <4 x i64> @vmacc_vv_nxv4i64_ta(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1488; CHECK-LABEL: vmacc_vv_nxv4i64_ta:1489; CHECK: # %bb.0:1490; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1491; CHECK-NEXT: vmacc.vv v12, v8, v10, v0.t1492; CHECK-NEXT: vmv.v.v v8, v121493; CHECK-NEXT: ret1494 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)1495 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1496 %u = call <4 x i64> @llvm.vp.select.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)1497 ret <4 x i64> %u1498}1499 1500define <4 x i64> @vmacc_vx_nxv4i64_ta(<4 x i64> %a, i64 %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {1501; RV32-LABEL: vmacc_vx_nxv4i64_ta:1502; RV32: # %bb.0:1503; RV32-NEXT: addi sp, sp, -161504; RV32-NEXT: .cfi_def_cfa_offset 161505; RV32-NEXT: sw a0, 8(sp)1506; RV32-NEXT: sw a1, 12(sp)1507; RV32-NEXT: addi a0, sp, 81508; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma1509; RV32-NEXT: vlse64.v v12, (a0), zero1510; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, mu1511; RV32-NEXT: vmacc.vv v10, v8, v12, v0.t1512; RV32-NEXT: vmv.v.v v8, v101513; RV32-NEXT: addi sp, sp, 161514; RV32-NEXT: .cfi_def_cfa_offset 01515; RV32-NEXT: ret1516;1517; RV64-LABEL: vmacc_vx_nxv4i64_ta:1518; RV64: # %bb.0:1519; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, mu1520; RV64-NEXT: vmacc.vx v10, a0, v8, v0.t1521; RV64-NEXT: vmv.v.v v8, v101522; RV64-NEXT: ret1523 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 01524 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer1525 %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)1526 %y = call <4 x i64> @llvm.vp.add.nxv4i64(<4 x i64> %x, <4 x i64> %c, <4 x i1> splat (i1 -1), i32 %evl)1527 %u = call <4 x i64> @llvm.vp.select.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)1528 ret <4 x i64> %u1529}1530 1531define <8 x i64> @vmacc_vv_nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1532; CHECK-LABEL: vmacc_vv_nxv8i64:1533; CHECK: # %bb.0:1534; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1535; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t1536; CHECK-NEXT: vmv4r.v v8, v161537; CHECK-NEXT: ret1538 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)1539 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1540 %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)1541 ret <8 x i64> %u1542}1543 1544define <8 x i64> @vmacc_vv_nxv8i64_unmasked(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1545; CHECK-LABEL: vmacc_vv_nxv8i64_unmasked:1546; CHECK: # %bb.0:1547; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1548; CHECK-NEXT: vmacc.vv v16, v8, v121549; CHECK-NEXT: vmv4r.v v8, v161550; CHECK-NEXT: ret1551 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)1552 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1553 %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> splat (i1 -1), <8 x i64> %y, <8 x i64> %c, i32 %evl)1554 ret <8 x i64> %u1555}1556 1557define <8 x i64> @vmacc_vx_nxv8i64(<8 x i64> %a, i64 %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1558; RV32-LABEL: vmacc_vx_nxv8i64:1559; RV32: # %bb.0:1560; RV32-NEXT: addi sp, sp, -161561; RV32-NEXT: .cfi_def_cfa_offset 161562; RV32-NEXT: sw a0, 8(sp)1563; RV32-NEXT: sw a1, 12(sp)1564; RV32-NEXT: addi a0, sp, 81565; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1566; RV32-NEXT: vlse64.v v16, (a0), zero1567; RV32-NEXT: vsetvli zero, a2, e64, m4, tu, mu1568; RV32-NEXT: vmacc.vv v12, v8, v16, v0.t1569; RV32-NEXT: vmv4r.v v8, v121570; RV32-NEXT: addi sp, sp, 161571; RV32-NEXT: .cfi_def_cfa_offset 01572; RV32-NEXT: ret1573;1574; RV64-LABEL: vmacc_vx_nxv8i64:1575; RV64: # %bb.0:1576; RV64-NEXT: vsetvli zero, a1, e64, m4, tu, mu1577; RV64-NEXT: vmacc.vx v12, a0, v8, v0.t1578; RV64-NEXT: vmv4r.v v8, v121579; RV64-NEXT: ret1580 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01581 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1582 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)1583 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1584 %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)1585 ret <8 x i64> %u1586}1587 1588define <8 x i64> @vmacc_vx_nxv8i64_unmasked(<8 x i64> %a, i64 %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1589; RV32-LABEL: vmacc_vx_nxv8i64_unmasked:1590; RV32: # %bb.0:1591; RV32-NEXT: addi sp, sp, -161592; RV32-NEXT: .cfi_def_cfa_offset 161593; RV32-NEXT: sw a0, 8(sp)1594; RV32-NEXT: sw a1, 12(sp)1595; RV32-NEXT: addi a0, sp, 81596; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1597; RV32-NEXT: vlse64.v v16, (a0), zero1598; RV32-NEXT: vsetvli zero, a2, e64, m4, tu, ma1599; RV32-NEXT: vmacc.vv v12, v8, v161600; RV32-NEXT: vmv4r.v v8, v121601; RV32-NEXT: addi sp, sp, 161602; RV32-NEXT: .cfi_def_cfa_offset 01603; RV32-NEXT: ret1604;1605; RV64-LABEL: vmacc_vx_nxv8i64_unmasked:1606; RV64: # %bb.0:1607; RV64-NEXT: vsetvli zero, a1, e64, m4, tu, ma1608; RV64-NEXT: vmacc.vx v12, a0, v81609; RV64-NEXT: vmv4r.v v8, v121610; RV64-NEXT: ret1611 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01612 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1613 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)1614 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1615 %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> splat (i1 -1), <8 x i64> %y, <8 x i64> %c, i32 %evl)1616 ret <8 x i64> %u1617}1618 1619define <8 x i64> @vmacc_vv_nxv8i64_ta(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1620; CHECK-LABEL: vmacc_vv_nxv8i64_ta:1621; CHECK: # %bb.0:1622; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1623; CHECK-NEXT: vmacc.vv v16, v8, v12, v0.t1624; CHECK-NEXT: vmv.v.v v8, v161625; CHECK-NEXT: ret1626 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)1627 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1628 %u = call <8 x i64> @llvm.vp.select.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)1629 ret <8 x i64> %u1630}1631 1632define <8 x i64> @vmacc_vx_nxv8i64_ta(<8 x i64> %a, i64 %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {1633; RV32-LABEL: vmacc_vx_nxv8i64_ta:1634; RV32: # %bb.0:1635; RV32-NEXT: addi sp, sp, -161636; RV32-NEXT: .cfi_def_cfa_offset 161637; RV32-NEXT: sw a0, 8(sp)1638; RV32-NEXT: sw a1, 12(sp)1639; RV32-NEXT: addi a0, sp, 81640; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma1641; RV32-NEXT: vlse64.v v16, (a0), zero1642; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, mu1643; RV32-NEXT: vmacc.vv v12, v8, v16, v0.t1644; RV32-NEXT: vmv.v.v v8, v121645; RV32-NEXT: addi sp, sp, 161646; RV32-NEXT: .cfi_def_cfa_offset 01647; RV32-NEXT: ret1648;1649; RV64-LABEL: vmacc_vx_nxv8i64_ta:1650; RV64: # %bb.0:1651; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, mu1652; RV64-NEXT: vmacc.vx v12, a0, v8, v0.t1653; RV64-NEXT: vmv.v.v v8, v121654; RV64-NEXT: ret1655 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 01656 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer1657 %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)1658 %y = call <8 x i64> @llvm.vp.add.nxv8i64(<8 x i64> %x, <8 x i64> %c, <8 x i1> splat (i1 -1), i32 %evl)1659 %u = call <8 x i64> @llvm.vp.select.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)1660 ret <8 x i64> %u1661}1662