Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vnmsac-vp.ll
blob2e0daa66c82a7d3aaafb5f59cc8a8d5179cce2d2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+m -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v,+m -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
8 declare <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
9 declare <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1>, <vscale x 1 x i8>, <vscale x 1 x i8>, i32)
10 declare <vscale x 1 x i8> @llvm.vp.select.nxv1i8(<vscale x 1 x i1>, <vscale x 1 x i8>, <vscale x 1 x i8>, i32)
12 define <vscale x 1 x i8> @vnmsac_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) {
13 ; CHECK-LABEL: vnmsac_vv_nxv1i8:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, mu
16 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
17 ; CHECK-NEXT:    vmv1r.v v8, v10
18 ; CHECK-NEXT:    ret
19   %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)
20   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
21   %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)
22   ret <vscale x 1 x i8> %u
25 define <vscale x 1 x i8> @vnmsac_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) {
26 ; CHECK-LABEL: vnmsac_vv_nxv1i8_unmasked:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma
29 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
30 ; CHECK-NEXT:    vmv1r.v v8, v10
31 ; CHECK-NEXT:    ret
32   %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)
33   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
34   %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)
35   ret <vscale x 1 x i8> %u
38 define <vscale x 1 x i8> @vnmsac_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) {
39 ; CHECK-LABEL: vnmsac_vx_nxv1i8:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, tu, mu
42 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
43 ; CHECK-NEXT:    vmv1r.v v8, v9
44 ; CHECK-NEXT:    ret
45   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
46   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
47   %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)
48   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
49   %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)
50   ret <vscale x 1 x i8> %u
53 define <vscale x 1 x i8> @vnmsac_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) {
54 ; CHECK-LABEL: vnmsac_vx_nxv1i8_unmasked:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, tu, ma
57 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
58 ; CHECK-NEXT:    vmv1r.v v8, v9
59 ; CHECK-NEXT:    ret
60   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
61   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
62   %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)
63   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
64   %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)
65   ret <vscale x 1 x i8> %u
68 define <vscale x 1 x i8> @vnmsac_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) {
69 ; CHECK-LABEL: vnmsac_vv_nxv1i8_ta:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
72 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
73 ; CHECK-NEXT:    vmv1r.v v8, v10
74 ; CHECK-NEXT:    ret
75   %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)
76   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
77   %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)
78   ret <vscale x 1 x i8> %u
81 define <vscale x 1 x i8> @vnmsac_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) {
82 ; CHECK-LABEL: vnmsac_vx_nxv1i8_ta:
83 ; CHECK:       # %bb.0:
84 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu
85 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
86 ; CHECK-NEXT:    vmv1r.v v8, v9
87 ; CHECK-NEXT:    ret
88   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
89   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
90   %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)
91   %y = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i8> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
92   %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)
93   ret <vscale x 1 x i8> %u
96 declare <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
97 declare <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
98 declare <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1>, <vscale x 2 x i8>, <vscale x 2 x i8>, i32)
99 declare <vscale x 2 x i8> @llvm.vp.select.nxv2i8(<vscale x 2 x i1>, <vscale x 2 x i8>, <vscale x 2 x i8>, i32)
101 define <vscale x 2 x i8> @vnmsac_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) {
102 ; CHECK-LABEL: vnmsac_vv_nxv2i8:
103 ; CHECK:       # %bb.0:
104 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, mu
105 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
106 ; CHECK-NEXT:    vmv1r.v v8, v10
107 ; CHECK-NEXT:    ret
108   %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)
109   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
110   %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)
111   ret <vscale x 2 x i8> %u
114 define <vscale x 2 x i8> @vnmsac_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) {
115 ; CHECK-LABEL: vnmsac_vv_nxv2i8_unmasked:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, ma
118 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
119 ; CHECK-NEXT:    vmv1r.v v8, v10
120 ; CHECK-NEXT:    ret
121   %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)
122   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
123   %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)
124   ret <vscale x 2 x i8> %u
127 define <vscale x 2 x i8> @vnmsac_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) {
128 ; CHECK-LABEL: vnmsac_vx_nxv2i8:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, mu
131 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
132 ; CHECK-NEXT:    vmv1r.v v8, v9
133 ; CHECK-NEXT:    ret
134   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
135   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
136   %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)
137   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
138   %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)
139   ret <vscale x 2 x i8> %u
142 define <vscale x 2 x i8> @vnmsac_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) {
143 ; CHECK-LABEL: vnmsac_vx_nxv2i8_unmasked:
144 ; CHECK:       # %bb.0:
145 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, ma
146 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
147 ; CHECK-NEXT:    vmv1r.v v8, v9
148 ; CHECK-NEXT:    ret
149   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
150   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
151   %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)
152   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
153   %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)
154   ret <vscale x 2 x i8> %u
157 define <vscale x 2 x i8> @vnmsac_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) {
158 ; CHECK-LABEL: vnmsac_vv_nxv2i8_ta:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
161 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
162 ; CHECK-NEXT:    vmv1r.v v8, v10
163 ; CHECK-NEXT:    ret
164   %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)
165   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
166   %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)
167   ret <vscale x 2 x i8> %u
170 define <vscale x 2 x i8> @vnmsac_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) {
171 ; CHECK-LABEL: vnmsac_vx_nxv2i8_ta:
172 ; CHECK:       # %bb.0:
173 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu
174 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
175 ; CHECK-NEXT:    vmv1r.v v8, v9
176 ; CHECK-NEXT:    ret
177   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
178   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
179   %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)
180   %y = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %c, <vscale x 2 x i8> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
181   %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)
182   ret <vscale x 2 x i8> %u
185 declare <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
186 declare <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
187 declare <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1>, <vscale x 4 x i8>, <vscale x 4 x i8>, i32)
188 declare <vscale x 4 x i8> @llvm.vp.select.nxv4i8(<vscale x 4 x i1>, <vscale x 4 x i8>, <vscale x 4 x i8>, i32)
190 define <vscale x 4 x i8> @vnmsac_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) {
191 ; CHECK-LABEL: vnmsac_vv_nxv4i8:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, mu
194 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
195 ; CHECK-NEXT:    vmv1r.v v8, v10
196 ; CHECK-NEXT:    ret
197   %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)
198   %y = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
199   %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)
200   ret <vscale x 4 x i8> %u
203 define <vscale x 4 x i8> @vnmsac_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) {
204 ; CHECK-LABEL: vnmsac_vv_nxv4i8_unmasked:
205 ; CHECK:       # %bb.0:
206 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma
207 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
208 ; CHECK-NEXT:    vmv1r.v v8, v10
209 ; CHECK-NEXT:    ret
210   %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)
211   %y = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <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> splat (i1 -1), <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)
213   ret <vscale x 4 x i8> %u
216 define <vscale x 4 x i8> @vnmsac_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) {
217 ; CHECK-LABEL: vnmsac_vx_nxv4i8:
218 ; CHECK:       # %bb.0:
219 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, mu
220 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
221 ; CHECK-NEXT:    vmv1r.v v8, v9
222 ; CHECK-NEXT:    ret
223   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
224   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
225   %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.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <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> %m, <vscale x 4 x i8> %y, <vscale x 4 x i8> %c, i32 %evl)
228   ret <vscale x 4 x i8> %u
231 define <vscale x 4 x i8> @vnmsac_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) {
232 ; CHECK-LABEL: vnmsac_vx_nxv4i8_unmasked:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma
235 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
236 ; CHECK-NEXT:    vmv1r.v v8, v9
237 ; CHECK-NEXT:    ret
238   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
239   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
240   %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)
241   %y = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
242   %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)
243   ret <vscale x 4 x i8> %u
246 define <vscale x 4 x i8> @vnmsac_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) {
247 ; CHECK-LABEL: vnmsac_vv_nxv4i8_ta:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
250 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
251 ; CHECK-NEXT:    vmv1r.v v8, v10
252 ; CHECK-NEXT:    ret
253   %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)
254   %y = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <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> %u
259 define <vscale x 4 x i8> @vnmsac_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) {
260 ; CHECK-LABEL: vnmsac_vx_nxv4i8_ta:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu
263 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
264 ; CHECK-NEXT:    vmv1r.v v8, v9
265 ; CHECK-NEXT:    ret
266   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
267   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
268   %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)
269   %y = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %c, <vscale x 4 x i8> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
270   %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)
271   ret <vscale x 4 x i8> %u
274 declare <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
275 declare <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
276 declare <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1>, <vscale x 8 x i8>, <vscale x 8 x i8>, i32)
277 declare <vscale x 8 x i8> @llvm.vp.select.nxv8i8(<vscale x 8 x i1>, <vscale x 8 x i8>, <vscale x 8 x i8>, i32)
279 define <vscale x 8 x i8> @vnmsac_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) {
280 ; CHECK-LABEL: vnmsac_vv_nxv8i8:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, mu
283 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
284 ; CHECK-NEXT:    vmv1r.v v8, v10
285 ; CHECK-NEXT:    ret
286   %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)
287   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
288   %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)
289   ret <vscale x 8 x i8> %u
292 define <vscale x 8 x i8> @vnmsac_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) {
293 ; CHECK-LABEL: vnmsac_vv_nxv8i8_unmasked:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, ma
296 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
297 ; CHECK-NEXT:    vmv1r.v v8, v10
298 ; CHECK-NEXT:    ret
299   %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)
300   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
301   %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)
302   ret <vscale x 8 x i8> %u
305 define <vscale x 8 x i8> @vnmsac_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) {
306 ; CHECK-LABEL: vnmsac_vx_nxv8i8:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, tu, mu
309 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
310 ; CHECK-NEXT:    vmv1r.v v8, v9
311 ; CHECK-NEXT:    ret
312   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
313   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
314   %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)
315   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
316   %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)
317   ret <vscale x 8 x i8> %u
320 define <vscale x 8 x i8> @vnmsac_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) {
321 ; CHECK-LABEL: vnmsac_vx_nxv8i8_unmasked:
322 ; CHECK:       # %bb.0:
323 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, tu, ma
324 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
325 ; CHECK-NEXT:    vmv1r.v v8, v9
326 ; CHECK-NEXT:    ret
327   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
328   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
329   %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)
330   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
331   %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)
332   ret <vscale x 8 x i8> %u
335 define <vscale x 8 x i8> @vnmsac_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) {
336 ; CHECK-LABEL: vnmsac_vv_nxv8i8_ta:
337 ; CHECK:       # %bb.0:
338 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
339 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
340 ; CHECK-NEXT:    vmv.v.v v8, v10
341 ; CHECK-NEXT:    ret
342   %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)
343   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
344   %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)
345   ret <vscale x 8 x i8> %u
348 define <vscale x 8 x i8> @vnmsac_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) {
349 ; CHECK-LABEL: vnmsac_vx_nxv8i8_ta:
350 ; CHECK:       # %bb.0:
351 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu
352 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
353 ; CHECK-NEXT:    vmv.v.v v8, v9
354 ; CHECK-NEXT:    ret
355   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
356   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
357   %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)
358   %y = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %c, <vscale x 8 x i8> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
359   %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)
360   ret <vscale x 8 x i8> %u
363 declare <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
364 declare <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
365 declare <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>, i32)
366 declare <vscale x 16 x i8> @llvm.vp.select.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>, i32)
368 define <vscale x 16 x i8> @vnmsac_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) {
369 ; CHECK-LABEL: vnmsac_vv_nxv16i8:
370 ; CHECK:       # %bb.0:
371 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, mu
372 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
373 ; CHECK-NEXT:    vmv2r.v v8, v12
374 ; CHECK-NEXT:    ret
375   %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)
376   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
377   %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)
378   ret <vscale x 16 x i8> %u
381 define <vscale x 16 x i8> @vnmsac_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) {
382 ; CHECK-LABEL: vnmsac_vv_nxv16i8_unmasked:
383 ; CHECK:       # %bb.0:
384 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma
385 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
386 ; CHECK-NEXT:    vmv2r.v v8, v12
387 ; CHECK-NEXT:    ret
388   %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)
389   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
390   %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)
391   ret <vscale x 16 x i8> %u
394 define <vscale x 16 x i8> @vnmsac_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) {
395 ; CHECK-LABEL: vnmsac_vx_nxv16i8:
396 ; CHECK:       # %bb.0:
397 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, tu, mu
398 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
399 ; CHECK-NEXT:    vmv2r.v v8, v10
400 ; CHECK-NEXT:    ret
401   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
402   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
403   %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)
404   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
405   %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)
406   ret <vscale x 16 x i8> %u
409 define <vscale x 16 x i8> @vnmsac_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) {
410 ; CHECK-LABEL: vnmsac_vx_nxv16i8_unmasked:
411 ; CHECK:       # %bb.0:
412 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, tu, ma
413 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8
414 ; CHECK-NEXT:    vmv2r.v v8, v10
415 ; CHECK-NEXT:    ret
416   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
417   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
418   %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)
419   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
420   %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)
421   ret <vscale x 16 x i8> %u
424 define <vscale x 16 x i8> @vnmsac_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) {
425 ; CHECK-LABEL: vnmsac_vv_nxv16i8_ta:
426 ; CHECK:       # %bb.0:
427 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
428 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
429 ; CHECK-NEXT:    vmv.v.v v8, v12
430 ; CHECK-NEXT:    ret
431   %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)
432   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
433   %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)
434   ret <vscale x 16 x i8> %u
437 define <vscale x 16 x i8> @vnmsac_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) {
438 ; CHECK-LABEL: vnmsac_vx_nxv16i8_ta:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu
441 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
442 ; CHECK-NEXT:    vmv.v.v v8, v10
443 ; CHECK-NEXT:    ret
444   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
445   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
446   %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)
447   %y = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %c, <vscale x 16 x i8> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
448   %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)
449   ret <vscale x 16 x i8> %u
452 declare <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
453 declare <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
454 declare <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1>, <vscale x 32 x i8>, <vscale x 32 x i8>, i32)
455 declare <vscale x 32 x i8> @llvm.vp.select.nxv32i8(<vscale x 32 x i1>, <vscale x 32 x i8>, <vscale x 32 x i8>, i32)
457 define <vscale x 32 x i8> @vnmsac_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) {
458 ; CHECK-LABEL: vnmsac_vv_nxv32i8:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, mu
461 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
462 ; CHECK-NEXT:    vmv4r.v v8, v16
463 ; CHECK-NEXT:    ret
464   %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)
465   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
466   %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)
467   ret <vscale x 32 x i8> %u
470 define <vscale x 32 x i8> @vnmsac_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) {
471 ; CHECK-LABEL: vnmsac_vv_nxv32i8_unmasked:
472 ; CHECK:       # %bb.0:
473 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma
474 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
475 ; CHECK-NEXT:    vmv4r.v v8, v16
476 ; CHECK-NEXT:    ret
477   %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)
478   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <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> %u
483 define <vscale x 32 x i8> @vnmsac_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) {
484 ; CHECK-LABEL: vnmsac_vx_nxv32i8:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, tu, mu
487 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
488 ; CHECK-NEXT:    vmv4r.v v8, v12
489 ; CHECK-NEXT:    ret
490   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
491   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
492   %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)
493   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
494   %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)
495   ret <vscale x 32 x i8> %u
498 define <vscale x 32 x i8> @vnmsac_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) {
499 ; CHECK-LABEL: vnmsac_vx_nxv32i8_unmasked:
500 ; CHECK:       # %bb.0:
501 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, tu, ma
502 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8
503 ; CHECK-NEXT:    vmv4r.v v8, v12
504 ; CHECK-NEXT:    ret
505   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
506   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
507   %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)
508   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
509   %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)
510   ret <vscale x 32 x i8> %u
513 define <vscale x 32 x i8> @vnmsac_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) {
514 ; CHECK-LABEL: vnmsac_vv_nxv32i8_ta:
515 ; CHECK:       # %bb.0:
516 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
517 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
518 ; CHECK-NEXT:    vmv.v.v v8, v16
519 ; CHECK-NEXT:    ret
520   %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)
521   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
522   %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)
523   ret <vscale x 32 x i8> %u
526 define <vscale x 32 x i8> @vnmsac_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) {
527 ; CHECK-LABEL: vnmsac_vx_nxv32i8_ta:
528 ; CHECK:       # %bb.0:
529 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
530 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
531 ; CHECK-NEXT:    vmv.v.v v8, v12
532 ; CHECK-NEXT:    ret
533   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
534   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
535   %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)
536   %y = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %c, <vscale x 32 x i8> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
537   %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)
538   ret <vscale x 32 x i8> %u
541 declare <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
542 declare <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
543 declare <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1>, <vscale x 64 x i8>, <vscale x 64 x i8>, i32)
544 declare <vscale x 64 x i8> @llvm.vp.select.nxv64i8(<vscale x 64 x i1>, <vscale x 64 x i8>, <vscale x 64 x i8>, i32)
546 define <vscale x 64 x i8> @vnmsac_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) {
547 ; CHECK-LABEL: vnmsac_vv_nxv64i8:
548 ; CHECK:       # %bb.0:
549 ; CHECK-NEXT:    vl8r.v v24, (a0)
550 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, mu
551 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
552 ; CHECK-NEXT:    vmv8r.v v8, v24
553 ; CHECK-NEXT:    ret
554   %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)
555   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
556   %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)
557   ret <vscale x 64 x i8> %u
560 define <vscale x 64 x i8> @vnmsac_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) {
561 ; CHECK-LABEL: vnmsac_vv_nxv64i8_unmasked:
562 ; CHECK:       # %bb.0:
563 ; CHECK-NEXT:    vl8r.v v24, (a0)
564 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, ma
565 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16
566 ; CHECK-NEXT:    vmv8r.v v8, v24
567 ; CHECK-NEXT:    ret
568   %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)
569   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
570   %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)
571   ret <vscale x 64 x i8> %u
574 define <vscale x 64 x i8> @vnmsac_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) {
575 ; CHECK-LABEL: vnmsac_vx_nxv64i8:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, mu
578 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
579 ; CHECK-NEXT:    vmv8r.v v8, v16
580 ; CHECK-NEXT:    ret
581   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
582   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
583   %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)
584   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
585   %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)
586   ret <vscale x 64 x i8> %u
589 define <vscale x 64 x i8> @vnmsac_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) {
590 ; CHECK-LABEL: vnmsac_vx_nxv64i8_unmasked:
591 ; CHECK:       # %bb.0:
592 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, tu, ma
593 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8
594 ; CHECK-NEXT:    vmv8r.v v8, v16
595 ; CHECK-NEXT:    ret
596   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
597   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
598   %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)
599   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
600   %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)
601   ret <vscale x 64 x i8> %u
604 define <vscale x 64 x i8> @vnmsac_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) {
605 ; CHECK-LABEL: vnmsac_vv_nxv64i8_ta:
606 ; CHECK:       # %bb.0:
607 ; CHECK-NEXT:    vl8r.v v24, (a0)
608 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
609 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
610 ; CHECK-NEXT:    vmv.v.v v8, v24
611 ; CHECK-NEXT:    ret
612   %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)
613   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
614   %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)
615   ret <vscale x 64 x i8> %u
618 define <vscale x 64 x i8> @vnmsac_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) {
619 ; CHECK-LABEL: vnmsac_vx_nxv64i8_ta:
620 ; CHECK:       # %bb.0:
621 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
622 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
623 ; CHECK-NEXT:    vmv.v.v v8, v16
624 ; CHECK-NEXT:    ret
625   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
626   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
627   %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)
628   %y = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %c, <vscale x 64 x i8> %x, <vscale x 64 x i1> splat (i1 -1), i32 %evl)
629   %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)
630   ret <vscale x 64 x i8> %u
633 declare <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
634 declare <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
635 declare <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1>, <vscale x 1 x i16>, <vscale x 1 x i16>, i32)
636 declare <vscale x 1 x i16> @llvm.vp.select.nxv1i16(<vscale x 1 x i1>, <vscale x 1 x i16>, <vscale x 1 x i16>, i32)
638 define <vscale x 1 x i16> @vnmsac_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) {
639 ; CHECK-LABEL: vnmsac_vv_nxv1i16:
640 ; CHECK:       # %bb.0:
641 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
642 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
643 ; CHECK-NEXT:    vmv1r.v v8, v10
644 ; CHECK-NEXT:    ret
645   %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)
646   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
647   %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)
648   ret <vscale x 1 x i16> %u
651 define <vscale x 1 x i16> @vnmsac_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) {
652 ; CHECK-LABEL: vnmsac_vv_nxv1i16_unmasked:
653 ; CHECK:       # %bb.0:
654 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
655 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
656 ; CHECK-NEXT:    vmv1r.v v8, v10
657 ; CHECK-NEXT:    ret
658   %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)
659   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
660   %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)
661   ret <vscale x 1 x i16> %u
664 define <vscale x 1 x i16> @vnmsac_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) {
665 ; CHECK-LABEL: vnmsac_vx_nxv1i16:
666 ; CHECK:       # %bb.0:
667 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, mu
668 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
669 ; CHECK-NEXT:    vmv1r.v v8, v9
670 ; CHECK-NEXT:    ret
671   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
672   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
673   %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)
674   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
675   %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)
676   ret <vscale x 1 x i16> %u
679 define <vscale x 1 x i16> @vnmsac_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) {
680 ; CHECK-LABEL: vnmsac_vx_nxv1i16_unmasked:
681 ; CHECK:       # %bb.0:
682 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, ma
683 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
684 ; CHECK-NEXT:    vmv1r.v v8, v9
685 ; CHECK-NEXT:    ret
686   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
687   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
688   %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)
689   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
690   %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)
691   ret <vscale x 1 x i16> %u
694 define <vscale x 1 x i16> @vnmsac_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) {
695 ; CHECK-LABEL: vnmsac_vv_nxv1i16_ta:
696 ; CHECK:       # %bb.0:
697 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
698 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
699 ; CHECK-NEXT:    vmv1r.v v8, v10
700 ; CHECK-NEXT:    ret
701   %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)
702   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
703   %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)
704   ret <vscale x 1 x i16> %u
707 define <vscale x 1 x i16> @vnmsac_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) {
708 ; CHECK-LABEL: vnmsac_vx_nxv1i16_ta:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
711 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
712 ; CHECK-NEXT:    vmv1r.v v8, v9
713 ; CHECK-NEXT:    ret
714   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
715   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
716   %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)
717   %y = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %c, <vscale x 1 x i16> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
718   %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)
719   ret <vscale x 1 x i16> %u
722 declare <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
723 declare <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
724 declare <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1>, <vscale x 2 x i16>, <vscale x 2 x i16>, i32)
725 declare <vscale x 2 x i16> @llvm.vp.select.nxv2i16(<vscale x 2 x i1>, <vscale x 2 x i16>, <vscale x 2 x i16>, i32)
727 define <vscale x 2 x i16> @vnmsac_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) {
728 ; CHECK-LABEL: vnmsac_vv_nxv2i16:
729 ; CHECK:       # %bb.0:
730 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
731 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
732 ; CHECK-NEXT:    vmv1r.v v8, v10
733 ; CHECK-NEXT:    ret
734   %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)
735   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
736   %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)
737   ret <vscale x 2 x i16> %u
740 define <vscale x 2 x i16> @vnmsac_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) {
741 ; CHECK-LABEL: vnmsac_vv_nxv2i16_unmasked:
742 ; CHECK:       # %bb.0:
743 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
744 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
745 ; CHECK-NEXT:    vmv1r.v v8, v10
746 ; CHECK-NEXT:    ret
747   %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)
748   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
749   %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)
750   ret <vscale x 2 x i16> %u
753 define <vscale x 2 x i16> @vnmsac_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) {
754 ; CHECK-LABEL: vnmsac_vx_nxv2i16:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, mu
757 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
758 ; CHECK-NEXT:    vmv1r.v v8, v9
759 ; CHECK-NEXT:    ret
760   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
761   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
762   %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)
763   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
764   %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)
765   ret <vscale x 2 x i16> %u
768 define <vscale x 2 x i16> @vnmsac_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) {
769 ; CHECK-LABEL: vnmsac_vx_nxv2i16_unmasked:
770 ; CHECK:       # %bb.0:
771 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, ma
772 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
773 ; CHECK-NEXT:    vmv1r.v v8, v9
774 ; CHECK-NEXT:    ret
775   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
776   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
777   %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)
778   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
779   %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)
780   ret <vscale x 2 x i16> %u
783 define <vscale x 2 x i16> @vnmsac_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) {
784 ; CHECK-LABEL: vnmsac_vv_nxv2i16_ta:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
787 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
788 ; CHECK-NEXT:    vmv1r.v v8, v10
789 ; CHECK-NEXT:    ret
790   %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)
791   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
792   %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)
793   ret <vscale x 2 x i16> %u
796 define <vscale x 2 x i16> @vnmsac_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) {
797 ; CHECK-LABEL: vnmsac_vx_nxv2i16_ta:
798 ; CHECK:       # %bb.0:
799 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
800 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
801 ; CHECK-NEXT:    vmv1r.v v8, v9
802 ; CHECK-NEXT:    ret
803   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
804   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
805   %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)
806   %y = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %c, <vscale x 2 x i16> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
807   %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)
808   ret <vscale x 2 x i16> %u
811 declare <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
812 declare <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
813 declare <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1>, <vscale x 4 x i16>, <vscale x 4 x i16>, i32)
814 declare <vscale x 4 x i16> @llvm.vp.select.nxv4i16(<vscale x 4 x i1>, <vscale x 4 x i16>, <vscale x 4 x i16>, i32)
816 define <vscale x 4 x i16> @vnmsac_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) {
817 ; CHECK-LABEL: vnmsac_vv_nxv4i16:
818 ; CHECK:       # %bb.0:
819 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
820 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
821 ; CHECK-NEXT:    vmv1r.v v8, v10
822 ; CHECK-NEXT:    ret
823   %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)
824   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
825   %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)
826   ret <vscale x 4 x i16> %u
829 define <vscale x 4 x i16> @vnmsac_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) {
830 ; CHECK-LABEL: vnmsac_vv_nxv4i16_unmasked:
831 ; CHECK:       # %bb.0:
832 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
833 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
834 ; CHECK-NEXT:    vmv1r.v v8, v10
835 ; CHECK-NEXT:    ret
836   %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)
837   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
838   %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)
839   ret <vscale x 4 x i16> %u
842 define <vscale x 4 x i16> @vnmsac_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) {
843 ; CHECK-LABEL: vnmsac_vx_nxv4i16:
844 ; CHECK:       # %bb.0:
845 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, mu
846 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
847 ; CHECK-NEXT:    vmv1r.v v8, v9
848 ; CHECK-NEXT:    ret
849   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
850   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
851   %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)
852   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
853   %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)
854   ret <vscale x 4 x i16> %u
857 define <vscale x 4 x i16> @vnmsac_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) {
858 ; CHECK-LABEL: vnmsac_vx_nxv4i16_unmasked:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, ma
861 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
862 ; CHECK-NEXT:    vmv1r.v v8, v9
863 ; CHECK-NEXT:    ret
864   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
865   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
866   %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)
867   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
868   %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)
869   ret <vscale x 4 x i16> %u
872 define <vscale x 4 x i16> @vnmsac_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) {
873 ; CHECK-LABEL: vnmsac_vv_nxv4i16_ta:
874 ; CHECK:       # %bb.0:
875 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
876 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
877 ; CHECK-NEXT:    vmv.v.v v8, v10
878 ; CHECK-NEXT:    ret
879   %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)
880   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
881   %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)
882   ret <vscale x 4 x i16> %u
885 define <vscale x 4 x i16> @vnmsac_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) {
886 ; CHECK-LABEL: vnmsac_vx_nxv4i16_ta:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
889 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
890 ; CHECK-NEXT:    vmv.v.v v8, v9
891 ; CHECK-NEXT:    ret
892   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
893   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
894   %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)
895   %y = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %c, <vscale x 4 x i16> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
896   %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)
897   ret <vscale x 4 x i16> %u
900 declare <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
901 declare <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
902 declare <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
903 declare <vscale x 8 x i16> @llvm.vp.select.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
905 define <vscale x 8 x i16> @vnmsac_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) {
906 ; CHECK-LABEL: vnmsac_vv_nxv8i16:
907 ; CHECK:       # %bb.0:
908 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
909 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
910 ; CHECK-NEXT:    vmv2r.v v8, v12
911 ; CHECK-NEXT:    ret
912   %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)
913   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
914   %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)
915   ret <vscale x 8 x i16> %u
918 define <vscale x 8 x i16> @vnmsac_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) {
919 ; CHECK-LABEL: vnmsac_vv_nxv8i16_unmasked:
920 ; CHECK:       # %bb.0:
921 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
922 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
923 ; CHECK-NEXT:    vmv2r.v v8, v12
924 ; CHECK-NEXT:    ret
925   %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)
926   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
927   %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)
928   ret <vscale x 8 x i16> %u
931 define <vscale x 8 x i16> @vnmsac_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) {
932 ; CHECK-LABEL: vnmsac_vx_nxv8i16:
933 ; CHECK:       # %bb.0:
934 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, mu
935 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
936 ; CHECK-NEXT:    vmv2r.v v8, v10
937 ; CHECK-NEXT:    ret
938   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
939   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
940   %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)
941   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
942   %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)
943   ret <vscale x 8 x i16> %u
946 define <vscale x 8 x i16> @vnmsac_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) {
947 ; CHECK-LABEL: vnmsac_vx_nxv8i16_unmasked:
948 ; CHECK:       # %bb.0:
949 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, ma
950 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8
951 ; CHECK-NEXT:    vmv2r.v v8, v10
952 ; CHECK-NEXT:    ret
953   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
954   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
955   %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)
956   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
957   %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)
958   ret <vscale x 8 x i16> %u
961 define <vscale x 8 x i16> @vnmsac_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) {
962 ; CHECK-LABEL: vnmsac_vv_nxv8i16_ta:
963 ; CHECK:       # %bb.0:
964 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
965 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
966 ; CHECK-NEXT:    vmv.v.v v8, v12
967 ; CHECK-NEXT:    ret
968   %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)
969   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
970   %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)
971   ret <vscale x 8 x i16> %u
974 define <vscale x 8 x i16> @vnmsac_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) {
975 ; CHECK-LABEL: vnmsac_vx_nxv8i16_ta:
976 ; CHECK:       # %bb.0:
977 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
978 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
979 ; CHECK-NEXT:    vmv.v.v v8, v10
980 ; CHECK-NEXT:    ret
981   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
982   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
983   %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)
984   %y = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %c, <vscale x 8 x i16> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
985   %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)
986   ret <vscale x 8 x i16> %u
989 declare <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
990 declare <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
991 declare <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1>, <vscale x 16 x i16>, <vscale x 16 x i16>, i32)
992 declare <vscale x 16 x i16> @llvm.vp.select.nxv16i16(<vscale x 16 x i1>, <vscale x 16 x i16>, <vscale x 16 x i16>, i32)
994 define <vscale x 16 x i16> @vnmsac_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) {
995 ; CHECK-LABEL: vnmsac_vv_nxv16i16:
996 ; CHECK:       # %bb.0:
997 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
998 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
999 ; CHECK-NEXT:    vmv4r.v v8, v16
1000 ; CHECK-NEXT:    ret
1001   %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)
1002   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1003   %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)
1004   ret <vscale x 16 x i16> %u
1007 define <vscale x 16 x i16> @vnmsac_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) {
1008 ; CHECK-LABEL: vnmsac_vv_nxv16i16_unmasked:
1009 ; CHECK:       # %bb.0:
1010 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
1011 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
1012 ; CHECK-NEXT:    vmv4r.v v8, v16
1013 ; CHECK-NEXT:    ret
1014   %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)
1015   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1016   %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)
1017   ret <vscale x 16 x i16> %u
1020 define <vscale x 16 x i16> @vnmsac_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) {
1021 ; CHECK-LABEL: vnmsac_vx_nxv16i16:
1022 ; CHECK:       # %bb.0:
1023 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, mu
1024 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1025 ; CHECK-NEXT:    vmv4r.v v8, v12
1026 ; CHECK-NEXT:    ret
1027   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
1028   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
1029   %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)
1030   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1031   %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)
1032   ret <vscale x 16 x i16> %u
1035 define <vscale x 16 x i16> @vnmsac_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) {
1036 ; CHECK-LABEL: vnmsac_vx_nxv16i16_unmasked:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, ma
1039 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8
1040 ; CHECK-NEXT:    vmv4r.v v8, v12
1041 ; CHECK-NEXT:    ret
1042   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
1043   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
1044   %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)
1045   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1046   %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)
1047   ret <vscale x 16 x i16> %u
1050 define <vscale x 16 x i16> @vnmsac_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) {
1051 ; CHECK-LABEL: vnmsac_vv_nxv16i16_ta:
1052 ; CHECK:       # %bb.0:
1053 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
1054 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1055 ; CHECK-NEXT:    vmv.v.v v8, v16
1056 ; CHECK-NEXT:    ret
1057   %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)
1058   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1059   %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)
1060   ret <vscale x 16 x i16> %u
1063 define <vscale x 16 x i16> @vnmsac_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) {
1064 ; CHECK-LABEL: vnmsac_vx_nxv16i16_ta:
1065 ; CHECK:       # %bb.0:
1066 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
1067 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1068 ; CHECK-NEXT:    vmv.v.v v8, v12
1069 ; CHECK-NEXT:    ret
1070   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
1071   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
1072   %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)
1073   %y = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %c, <vscale x 16 x i16> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1074   %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)
1075   ret <vscale x 16 x i16> %u
1078 declare <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
1079 declare <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
1080 declare <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1>, <vscale x 32 x i16>, <vscale x 32 x i16>, i32)
1081 declare <vscale x 32 x i16> @llvm.vp.select.nxv32i16(<vscale x 32 x i1>, <vscale x 32 x i16>, <vscale x 32 x i16>, i32)
1083 define <vscale x 32 x i16> @vnmsac_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) {
1084 ; CHECK-LABEL: vnmsac_vv_nxv32i16:
1085 ; CHECK:       # %bb.0:
1086 ; CHECK-NEXT:    vl8re16.v v24, (a0)
1087 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu
1088 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
1089 ; CHECK-NEXT:    vmv8r.v v8, v24
1090 ; CHECK-NEXT:    ret
1091   %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)
1092   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1093   %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)
1094   ret <vscale x 32 x i16> %u
1097 define <vscale x 32 x i16> @vnmsac_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) {
1098 ; CHECK-LABEL: vnmsac_vv_nxv32i16_unmasked:
1099 ; CHECK:       # %bb.0:
1100 ; CHECK-NEXT:    vl8re16.v v24, (a0)
1101 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma
1102 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16
1103 ; CHECK-NEXT:    vmv8r.v v8, v24
1104 ; CHECK-NEXT:    ret
1105   %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)
1106   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1107   %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)
1108   ret <vscale x 32 x i16> %u
1111 define <vscale x 32 x i16> @vnmsac_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) {
1112 ; CHECK-LABEL: vnmsac_vx_nxv32i16:
1113 ; CHECK:       # %bb.0:
1114 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu
1115 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
1116 ; CHECK-NEXT:    vmv8r.v v8, v16
1117 ; CHECK-NEXT:    ret
1118   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
1119   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
1120   %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)
1121   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1122   %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)
1123   ret <vscale x 32 x i16> %u
1126 define <vscale x 32 x i16> @vnmsac_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) {
1127 ; CHECK-LABEL: vnmsac_vx_nxv32i16_unmasked:
1128 ; CHECK:       # %bb.0:
1129 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma
1130 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8
1131 ; CHECK-NEXT:    vmv8r.v v8, v16
1132 ; CHECK-NEXT:    ret
1133   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
1134   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
1135   %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)
1136   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1137   %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)
1138   ret <vscale x 32 x i16> %u
1141 define <vscale x 32 x i16> @vnmsac_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) {
1142 ; CHECK-LABEL: vnmsac_vv_nxv32i16_ta:
1143 ; CHECK:       # %bb.0:
1144 ; CHECK-NEXT:    vl8re16.v v24, (a0)
1145 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
1146 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
1147 ; CHECK-NEXT:    vmv.v.v v8, v24
1148 ; CHECK-NEXT:    ret
1149   %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)
1150   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1151   %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)
1152   ret <vscale x 32 x i16> %u
1155 define <vscale x 32 x i16> @vnmsac_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) {
1156 ; CHECK-LABEL: vnmsac_vx_nxv32i16_ta:
1157 ; CHECK:       # %bb.0:
1158 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
1159 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
1160 ; CHECK-NEXT:    vmv.v.v v8, v16
1161 ; CHECK-NEXT:    ret
1162   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
1163   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
1164   %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)
1165   %y = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %c, <vscale x 32 x i16> %x, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
1166   %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)
1167   ret <vscale x 32 x i16> %u
1170 declare <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
1171 declare <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
1172 declare <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1>, <vscale x 1 x i32>, <vscale x 1 x i32>, i32)
1173 declare <vscale x 1 x i32> @llvm.vp.select.nxv1i32(<vscale x 1 x i1>, <vscale x 1 x i32>, <vscale x 1 x i32>, i32)
1175 define <vscale x 1 x i32> @vnmsac_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) {
1176 ; CHECK-LABEL: vnmsac_vv_nxv1i32:
1177 ; CHECK:       # %bb.0:
1178 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
1179 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1180 ; CHECK-NEXT:    vmv1r.v v8, v10
1181 ; CHECK-NEXT:    ret
1182   %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)
1183   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1184   %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)
1185   ret <vscale x 1 x i32> %u
1188 define <vscale x 1 x i32> @vnmsac_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) {
1189 ; CHECK-LABEL: vnmsac_vv_nxv1i32_unmasked:
1190 ; CHECK:       # %bb.0:
1191 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
1192 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1193 ; CHECK-NEXT:    vmv1r.v v8, v10
1194 ; CHECK-NEXT:    ret
1195   %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)
1196   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1197   %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)
1198   ret <vscale x 1 x i32> %u
1201 define <vscale x 1 x i32> @vnmsac_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) {
1202 ; CHECK-LABEL: vnmsac_vx_nxv1i32:
1203 ; CHECK:       # %bb.0:
1204 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, mu
1205 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1206 ; CHECK-NEXT:    vmv1r.v v8, v9
1207 ; CHECK-NEXT:    ret
1208   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1209   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1210   %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)
1211   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1212   %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)
1213   ret <vscale x 1 x i32> %u
1216 define <vscale x 1 x i32> @vnmsac_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) {
1217 ; CHECK-LABEL: vnmsac_vx_nxv1i32_unmasked:
1218 ; CHECK:       # %bb.0:
1219 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, ma
1220 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
1221 ; CHECK-NEXT:    vmv1r.v v8, v9
1222 ; CHECK-NEXT:    ret
1223   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1224   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1225   %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)
1226   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1227   %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)
1228   ret <vscale x 1 x i32> %u
1231 define <vscale x 1 x i32> @vnmsac_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) {
1232 ; CHECK-LABEL: vnmsac_vv_nxv1i32_ta:
1233 ; CHECK:       # %bb.0:
1234 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1235 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1236 ; CHECK-NEXT:    vmv1r.v v8, v10
1237 ; CHECK-NEXT:    ret
1238   %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)
1239   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1240   %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)
1241   ret <vscale x 1 x i32> %u
1244 define <vscale x 1 x i32> @vnmsac_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) {
1245 ; CHECK-LABEL: vnmsac_vx_nxv1i32_ta:
1246 ; CHECK:       # %bb.0:
1247 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
1248 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1249 ; CHECK-NEXT:    vmv1r.v v8, v9
1250 ; CHECK-NEXT:    ret
1251   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1252   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1253   %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)
1254   %y = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %c, <vscale x 1 x i32> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1255   %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)
1256   ret <vscale x 1 x i32> %u
1259 declare <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
1260 declare <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
1261 declare <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1>, <vscale x 2 x i32>, <vscale x 2 x i32>, i32)
1262 declare <vscale x 2 x i32> @llvm.vp.select.nxv2i32(<vscale x 2 x i1>, <vscale x 2 x i32>, <vscale x 2 x i32>, i32)
1264 define <vscale x 2 x i32> @vnmsac_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) {
1265 ; CHECK-LABEL: vnmsac_vv_nxv2i32:
1266 ; CHECK:       # %bb.0:
1267 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
1268 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1269 ; CHECK-NEXT:    vmv1r.v v8, v10
1270 ; CHECK-NEXT:    ret
1271   %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)
1272   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1273   %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)
1274   ret <vscale x 2 x i32> %u
1277 define <vscale x 2 x i32> @vnmsac_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) {
1278 ; CHECK-LABEL: vnmsac_vv_nxv2i32_unmasked:
1279 ; CHECK:       # %bb.0:
1280 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
1281 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1282 ; CHECK-NEXT:    vmv1r.v v8, v10
1283 ; CHECK-NEXT:    ret
1284   %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)
1285   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1286   %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)
1287   ret <vscale x 2 x i32> %u
1290 define <vscale x 2 x i32> @vnmsac_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) {
1291 ; CHECK-LABEL: vnmsac_vx_nxv2i32:
1292 ; CHECK:       # %bb.0:
1293 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
1294 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1295 ; CHECK-NEXT:    vmv1r.v v8, v9
1296 ; CHECK-NEXT:    ret
1297   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1298   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1299   %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)
1300   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1301   %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)
1302   ret <vscale x 2 x i32> %u
1305 define <vscale x 2 x i32> @vnmsac_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) {
1306 ; CHECK-LABEL: vnmsac_vx_nxv2i32_unmasked:
1307 ; CHECK:       # %bb.0:
1308 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, ma
1309 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
1310 ; CHECK-NEXT:    vmv1r.v v8, v9
1311 ; CHECK-NEXT:    ret
1312   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1313   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1314   %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)
1315   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1316   %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)
1317   ret <vscale x 2 x i32> %u
1320 define <vscale x 2 x i32> @vnmsac_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) {
1321 ; CHECK-LABEL: vnmsac_vv_nxv2i32_ta:
1322 ; CHECK:       # %bb.0:
1323 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1324 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1325 ; CHECK-NEXT:    vmv.v.v v8, v10
1326 ; CHECK-NEXT:    ret
1327   %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)
1328   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1329   %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)
1330   ret <vscale x 2 x i32> %u
1333 define <vscale x 2 x i32> @vnmsac_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) {
1334 ; CHECK-LABEL: vnmsac_vx_nxv2i32_ta:
1335 ; CHECK:       # %bb.0:
1336 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
1337 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1338 ; CHECK-NEXT:    vmv.v.v v8, v9
1339 ; CHECK-NEXT:    ret
1340   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1341   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1342   %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)
1343   %y = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %c, <vscale x 2 x i32> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1344   %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)
1345   ret <vscale x 2 x i32> %u
1348 declare <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1349 declare <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1350 declare <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
1351 declare <vscale x 4 x i32> @llvm.vp.select.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
1353 define <vscale x 4 x i32> @vnmsac_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) {
1354 ; CHECK-LABEL: vnmsac_vv_nxv4i32:
1355 ; CHECK:       # %bb.0:
1356 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
1357 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1358 ; CHECK-NEXT:    vmv2r.v v8, v12
1359 ; CHECK-NEXT:    ret
1360   %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)
1361   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1362   %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)
1363   ret <vscale x 4 x i32> %u
1366 define <vscale x 4 x i32> @vnmsac_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) {
1367 ; CHECK-LABEL: vnmsac_vv_nxv4i32_unmasked:
1368 ; CHECK:       # %bb.0:
1369 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
1370 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
1371 ; CHECK-NEXT:    vmv2r.v v8, v12
1372 ; CHECK-NEXT:    ret
1373   %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)
1374   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1375   %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)
1376   ret <vscale x 4 x i32> %u
1379 define <vscale x 4 x i32> @vnmsac_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) {
1380 ; CHECK-LABEL: vnmsac_vx_nxv4i32:
1381 ; CHECK:       # %bb.0:
1382 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, mu
1383 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1384 ; CHECK-NEXT:    vmv2r.v v8, v10
1385 ; CHECK-NEXT:    ret
1386   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1387   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1388   %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)
1389   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1390   %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)
1391   ret <vscale x 4 x i32> %u
1394 define <vscale x 4 x i32> @vnmsac_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) {
1395 ; CHECK-LABEL: vnmsac_vx_nxv4i32_unmasked:
1396 ; CHECK:       # %bb.0:
1397 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, ma
1398 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8
1399 ; CHECK-NEXT:    vmv2r.v v8, v10
1400 ; CHECK-NEXT:    ret
1401   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1402   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1403   %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)
1404   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1405   %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)
1406   ret <vscale x 4 x i32> %u
1409 define <vscale x 4 x i32> @vnmsac_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) {
1410 ; CHECK-LABEL: vnmsac_vv_nxv4i32_ta:
1411 ; CHECK:       # %bb.0:
1412 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1413 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1414 ; CHECK-NEXT:    vmv.v.v v8, v12
1415 ; CHECK-NEXT:    ret
1416   %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)
1417   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1418   %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)
1419   ret <vscale x 4 x i32> %u
1422 define <vscale x 4 x i32> @vnmsac_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) {
1423 ; CHECK-LABEL: vnmsac_vx_nxv4i32_ta:
1424 ; CHECK:       # %bb.0:
1425 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
1426 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1427 ; CHECK-NEXT:    vmv.v.v v8, v10
1428 ; CHECK-NEXT:    ret
1429   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1430   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1431   %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)
1432   %y = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %c, <vscale x 4 x i32> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1433   %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)
1434   ret <vscale x 4 x i32> %u
1437 declare <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1438 declare <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1439 declare <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1>, <vscale x 8 x i32>, <vscale x 8 x i32>, i32)
1440 declare <vscale x 8 x i32> @llvm.vp.select.nxv8i32(<vscale x 8 x i1>, <vscale x 8 x i32>, <vscale x 8 x i32>, i32)
1442 define <vscale x 8 x i32> @vnmsac_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) {
1443 ; CHECK-LABEL: vnmsac_vv_nxv8i32:
1444 ; CHECK:       # %bb.0:
1445 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1446 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1447 ; CHECK-NEXT:    vmv4r.v v8, v16
1448 ; CHECK-NEXT:    ret
1449   %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)
1450   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1451   %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)
1452   ret <vscale x 8 x i32> %u
1455 define <vscale x 8 x i32> @vnmsac_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) {
1456 ; CHECK-LABEL: vnmsac_vv_nxv8i32_unmasked:
1457 ; CHECK:       # %bb.0:
1458 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1459 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
1460 ; CHECK-NEXT:    vmv4r.v v8, v16
1461 ; CHECK-NEXT:    ret
1462   %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)
1463   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1464   %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)
1465   ret <vscale x 8 x i32> %u
1468 define <vscale x 8 x i32> @vnmsac_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) {
1469 ; CHECK-LABEL: vnmsac_vx_nxv8i32:
1470 ; CHECK:       # %bb.0:
1471 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, mu
1472 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1473 ; CHECK-NEXT:    vmv4r.v v8, v12
1474 ; CHECK-NEXT:    ret
1475   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1476   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1477   %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)
1478   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1479   %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)
1480   ret <vscale x 8 x i32> %u
1483 define <vscale x 8 x i32> @vnmsac_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) {
1484 ; CHECK-LABEL: vnmsac_vx_nxv8i32_unmasked:
1485 ; CHECK:       # %bb.0:
1486 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, ma
1487 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8
1488 ; CHECK-NEXT:    vmv4r.v v8, v12
1489 ; CHECK-NEXT:    ret
1490   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1491   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1492   %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)
1493   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1494   %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)
1495   ret <vscale x 8 x i32> %u
1498 define <vscale x 8 x i32> @vnmsac_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) {
1499 ; CHECK-LABEL: vnmsac_vv_nxv8i32_ta:
1500 ; CHECK:       # %bb.0:
1501 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1502 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1503 ; CHECK-NEXT:    vmv.v.v v8, v16
1504 ; CHECK-NEXT:    ret
1505   %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)
1506   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1507   %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)
1508   ret <vscale x 8 x i32> %u
1511 define <vscale x 8 x i32> @vnmsac_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) {
1512 ; CHECK-LABEL: vnmsac_vx_nxv8i32_ta:
1513 ; CHECK:       # %bb.0:
1514 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
1515 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1516 ; CHECK-NEXT:    vmv.v.v v8, v12
1517 ; CHECK-NEXT:    ret
1518   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1519   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1520   %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)
1521   %y = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %c, <vscale x 8 x i32> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1522   %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)
1523   ret <vscale x 8 x i32> %u
1526 declare <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1527 declare <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1528 declare <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1>, <vscale x 16 x i32>, <vscale x 16 x i32>, i32)
1529 declare <vscale x 16 x i32> @llvm.vp.select.nxv16i32(<vscale x 16 x i1>, <vscale x 16 x i32>, <vscale x 16 x i32>, i32)
1531 define <vscale x 16 x i32> @vnmsac_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) {
1532 ; CHECK-LABEL: vnmsac_vv_nxv16i32:
1533 ; CHECK:       # %bb.0:
1534 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1535 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu
1536 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
1537 ; CHECK-NEXT:    vmv8r.v v8, v24
1538 ; CHECK-NEXT:    ret
1539   %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)
1540   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1541   %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)
1542   ret <vscale x 16 x i32> %u
1545 define <vscale x 16 x i32> @vnmsac_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) {
1546 ; CHECK-LABEL: vnmsac_vv_nxv16i32_unmasked:
1547 ; CHECK:       # %bb.0:
1548 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1549 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma
1550 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16
1551 ; CHECK-NEXT:    vmv8r.v v8, v24
1552 ; CHECK-NEXT:    ret
1553   %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)
1554   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1555   %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)
1556   ret <vscale x 16 x i32> %u
1559 define <vscale x 16 x i32> @vnmsac_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) {
1560 ; CHECK-LABEL: vnmsac_vx_nxv16i32:
1561 ; CHECK:       # %bb.0:
1562 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu
1563 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
1564 ; CHECK-NEXT:    vmv8r.v v8, v16
1565 ; CHECK-NEXT:    ret
1566   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1567   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1568   %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)
1569   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1570   %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)
1571   ret <vscale x 16 x i32> %u
1574 define <vscale x 16 x i32> @vnmsac_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) {
1575 ; CHECK-LABEL: vnmsac_vx_nxv16i32_unmasked:
1576 ; CHECK:       # %bb.0:
1577 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma
1578 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8
1579 ; CHECK-NEXT:    vmv8r.v v8, v16
1580 ; CHECK-NEXT:    ret
1581   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1582   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1583   %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)
1584   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1585   %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)
1586   ret <vscale x 16 x i32> %u
1589 define <vscale x 16 x i32> @vnmsac_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) {
1590 ; CHECK-LABEL: vnmsac_vv_nxv16i32_ta:
1591 ; CHECK:       # %bb.0:
1592 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1593 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1594 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
1595 ; CHECK-NEXT:    vmv.v.v v8, v24
1596 ; CHECK-NEXT:    ret
1597   %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)
1598   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1599   %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)
1600   ret <vscale x 16 x i32> %u
1603 define <vscale x 16 x i32> @vnmsac_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) {
1604 ; CHECK-LABEL: vnmsac_vx_nxv16i32_ta:
1605 ; CHECK:       # %bb.0:
1606 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1607 ; CHECK-NEXT:    vnmsac.vx v16, a0, v8, v0.t
1608 ; CHECK-NEXT:    vmv.v.v v8, v16
1609 ; CHECK-NEXT:    ret
1610   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1611   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1612   %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)
1613   %y = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %c, <vscale x 16 x i32> %x, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1614   %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)
1615   ret <vscale x 16 x i32> %u
1618 declare <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1619 declare <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1620 declare <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1>, <vscale x 1 x i64>, <vscale x 1 x i64>, i32)
1621 declare <vscale x 1 x i64> @llvm.vp.select.nxv1i64(<vscale x 1 x i1>, <vscale x 1 x i64>, <vscale x 1 x i64>, i32)
1623 define <vscale x 1 x i64> @vnmsac_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) {
1624 ; CHECK-LABEL: vnmsac_vv_nxv1i64:
1625 ; CHECK:       # %bb.0:
1626 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1627 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1628 ; CHECK-NEXT:    vmv1r.v v8, v10
1629 ; CHECK-NEXT:    ret
1630   %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)
1631   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1632   %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)
1633   ret <vscale x 1 x i64> %u
1636 define <vscale x 1 x i64> @vnmsac_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) {
1637 ; CHECK-LABEL: vnmsac_vv_nxv1i64_unmasked:
1638 ; CHECK:       # %bb.0:
1639 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1640 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1641 ; CHECK-NEXT:    vmv1r.v v8, v10
1642 ; CHECK-NEXT:    ret
1643   %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)
1644   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1645   %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)
1646   ret <vscale x 1 x i64> %u
1649 define <vscale x 1 x i64> @vnmsac_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) {
1650 ; RV32-LABEL: vnmsac_vx_nxv1i64:
1651 ; RV32:       # %bb.0:
1652 ; RV32-NEXT:    addi sp, sp, -16
1653 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1654 ; RV32-NEXT:    sw a0, 8(sp)
1655 ; RV32-NEXT:    sw a1, 12(sp)
1656 ; RV32-NEXT:    addi a0, sp, 8
1657 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1658 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1659 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, tu, mu
1660 ; RV32-NEXT:    vnmsac.vv v9, v8, v10, v0.t
1661 ; RV32-NEXT:    vmv1r.v v8, v9
1662 ; RV32-NEXT:    addi sp, sp, 16
1663 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1664 ; RV32-NEXT:    ret
1666 ; RV64-LABEL: vnmsac_vx_nxv1i64:
1667 ; RV64:       # %bb.0:
1668 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, mu
1669 ; RV64-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1670 ; RV64-NEXT:    vmv1r.v v8, v9
1671 ; RV64-NEXT:    ret
1672   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1673   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1674   %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)
1675   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1676   %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)
1677   ret <vscale x 1 x i64> %u
1680 define <vscale x 1 x i64> @vnmsac_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) {
1681 ; RV32-LABEL: vnmsac_vx_nxv1i64_unmasked:
1682 ; RV32:       # %bb.0:
1683 ; RV32-NEXT:    addi sp, sp, -16
1684 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1685 ; RV32-NEXT:    sw a0, 8(sp)
1686 ; RV32-NEXT:    sw a1, 12(sp)
1687 ; RV32-NEXT:    addi a0, sp, 8
1688 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1689 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1690 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, tu, ma
1691 ; RV32-NEXT:    vnmsac.vv v9, v8, v10
1692 ; RV32-NEXT:    vmv1r.v v8, v9
1693 ; RV32-NEXT:    addi sp, sp, 16
1694 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1695 ; RV32-NEXT:    ret
1697 ; RV64-LABEL: vnmsac_vx_nxv1i64_unmasked:
1698 ; RV64:       # %bb.0:
1699 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, ma
1700 ; RV64-NEXT:    vnmsac.vx v9, a0, v8
1701 ; RV64-NEXT:    vmv1r.v v8, v9
1702 ; RV64-NEXT:    ret
1703   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1704   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1705   %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)
1706   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1707   %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)
1708   ret <vscale x 1 x i64> %u
1711 define <vscale x 1 x i64> @vnmsac_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) {
1712 ; CHECK-LABEL: vnmsac_vv_nxv1i64_ta:
1713 ; CHECK:       # %bb.0:
1714 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1715 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1716 ; CHECK-NEXT:    vmv.v.v v8, v10
1717 ; CHECK-NEXT:    ret
1718   %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)
1719   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1720   %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)
1721   ret <vscale x 1 x i64> %u
1724 define <vscale x 1 x i64> @vnmsac_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) {
1725 ; RV32-LABEL: vnmsac_vx_nxv1i64_ta:
1726 ; RV32:       # %bb.0:
1727 ; RV32-NEXT:    addi sp, sp, -16
1728 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1729 ; RV32-NEXT:    sw a0, 8(sp)
1730 ; RV32-NEXT:    sw a1, 12(sp)
1731 ; RV32-NEXT:    addi a0, sp, 8
1732 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1733 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1734 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, mu
1735 ; RV32-NEXT:    vnmsac.vv v9, v8, v10, v0.t
1736 ; RV32-NEXT:    vmv.v.v v8, v9
1737 ; RV32-NEXT:    addi sp, sp, 16
1738 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1739 ; RV32-NEXT:    ret
1741 ; RV64-LABEL: vnmsac_vx_nxv1i64_ta:
1742 ; RV64:       # %bb.0:
1743 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, mu
1744 ; RV64-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1745 ; RV64-NEXT:    vmv.v.v v8, v9
1746 ; RV64-NEXT:    ret
1747   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1748   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1749   %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)
1750   %y = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %c, <vscale x 1 x i64> %x, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1751   %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)
1752   ret <vscale x 1 x i64> %u
1755 declare <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1756 declare <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1757 declare <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>, i32)
1758 declare <vscale x 2 x i64> @llvm.vp.select.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>, i32)
1760 define <vscale x 2 x i64> @vnmsac_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) {
1761 ; CHECK-LABEL: vnmsac_vv_nxv2i64:
1762 ; CHECK:       # %bb.0:
1763 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1764 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1765 ; CHECK-NEXT:    vmv2r.v v8, v12
1766 ; CHECK-NEXT:    ret
1767   %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)
1768   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1769   %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)
1770   ret <vscale x 2 x i64> %u
1773 define <vscale x 2 x i64> @vnmsac_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) {
1774 ; CHECK-LABEL: vnmsac_vv_nxv2i64_unmasked:
1775 ; CHECK:       # %bb.0:
1776 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1777 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
1778 ; CHECK-NEXT:    vmv2r.v v8, v12
1779 ; CHECK-NEXT:    ret
1780   %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)
1781   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1782   %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)
1783   ret <vscale x 2 x i64> %u
1786 define <vscale x 2 x i64> @vnmsac_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) {
1787 ; RV32-LABEL: vnmsac_vx_nxv2i64:
1788 ; RV32:       # %bb.0:
1789 ; RV32-NEXT:    addi sp, sp, -16
1790 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1791 ; RV32-NEXT:    sw a0, 8(sp)
1792 ; RV32-NEXT:    sw a1, 12(sp)
1793 ; RV32-NEXT:    addi a0, sp, 8
1794 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1795 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1796 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, tu, mu
1797 ; RV32-NEXT:    vnmsac.vv v10, v8, v12, v0.t
1798 ; RV32-NEXT:    vmv2r.v v8, v10
1799 ; RV32-NEXT:    addi sp, sp, 16
1800 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1801 ; RV32-NEXT:    ret
1803 ; RV64-LABEL: vnmsac_vx_nxv2i64:
1804 ; RV64:       # %bb.0:
1805 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, mu
1806 ; RV64-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1807 ; RV64-NEXT:    vmv2r.v v8, v10
1808 ; RV64-NEXT:    ret
1809   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1810   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1811   %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)
1812   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1813   %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)
1814   ret <vscale x 2 x i64> %u
1817 define <vscale x 2 x i64> @vnmsac_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) {
1818 ; RV32-LABEL: vnmsac_vx_nxv2i64_unmasked:
1819 ; RV32:       # %bb.0:
1820 ; RV32-NEXT:    addi sp, sp, -16
1821 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1822 ; RV32-NEXT:    sw a0, 8(sp)
1823 ; RV32-NEXT:    sw a1, 12(sp)
1824 ; RV32-NEXT:    addi a0, sp, 8
1825 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1826 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1827 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, tu, ma
1828 ; RV32-NEXT:    vnmsac.vv v10, v8, v12
1829 ; RV32-NEXT:    vmv2r.v v8, v10
1830 ; RV32-NEXT:    addi sp, sp, 16
1831 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1832 ; RV32-NEXT:    ret
1834 ; RV64-LABEL: vnmsac_vx_nxv2i64_unmasked:
1835 ; RV64:       # %bb.0:
1836 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, ma
1837 ; RV64-NEXT:    vnmsac.vx v10, a0, v8
1838 ; RV64-NEXT:    vmv2r.v v8, v10
1839 ; RV64-NEXT:    ret
1840   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1841   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1842   %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)
1843   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1844   %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)
1845   ret <vscale x 2 x i64> %u
1848 define <vscale x 2 x i64> @vnmsac_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) {
1849 ; CHECK-LABEL: vnmsac_vv_nxv2i64_ta:
1850 ; CHECK:       # %bb.0:
1851 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1852 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1853 ; CHECK-NEXT:    vmv.v.v v8, v12
1854 ; CHECK-NEXT:    ret
1855   %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)
1856   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1857   %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)
1858   ret <vscale x 2 x i64> %u
1861 define <vscale x 2 x i64> @vnmsac_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) {
1862 ; RV32-LABEL: vnmsac_vx_nxv2i64_ta:
1863 ; RV32:       # %bb.0:
1864 ; RV32-NEXT:    addi sp, sp, -16
1865 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1866 ; RV32-NEXT:    sw a0, 8(sp)
1867 ; RV32-NEXT:    sw a1, 12(sp)
1868 ; RV32-NEXT:    addi a0, sp, 8
1869 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1870 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1871 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, mu
1872 ; RV32-NEXT:    vnmsac.vv v10, v8, v12, v0.t
1873 ; RV32-NEXT:    vmv.v.v v8, v10
1874 ; RV32-NEXT:    addi sp, sp, 16
1875 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1876 ; RV32-NEXT:    ret
1878 ; RV64-LABEL: vnmsac_vx_nxv2i64_ta:
1879 ; RV64:       # %bb.0:
1880 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, mu
1881 ; RV64-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1882 ; RV64-NEXT:    vmv.v.v v8, v10
1883 ; RV64-NEXT:    ret
1884   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1885   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1886   %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)
1887   %y = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %c, <vscale x 2 x i64> %x, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1888   %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)
1889   ret <vscale x 2 x i64> %u
1892 declare <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1893 declare <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1894 declare <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1>, <vscale x 4 x i64>, <vscale x 4 x i64>, i32)
1895 declare <vscale x 4 x i64> @llvm.vp.select.nxv4i64(<vscale x 4 x i1>, <vscale x 4 x i64>, <vscale x 4 x i64>, i32)
1897 define <vscale x 4 x i64> @vnmsac_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) {
1898 ; CHECK-LABEL: vnmsac_vv_nxv4i64:
1899 ; CHECK:       # %bb.0:
1900 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1901 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1902 ; CHECK-NEXT:    vmv4r.v v8, v16
1903 ; CHECK-NEXT:    ret
1904   %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)
1905   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1906   %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)
1907   ret <vscale x 4 x i64> %u
1910 define <vscale x 4 x i64> @vnmsac_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) {
1911 ; CHECK-LABEL: vnmsac_vv_nxv4i64_unmasked:
1912 ; CHECK:       # %bb.0:
1913 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1914 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
1915 ; CHECK-NEXT:    vmv4r.v v8, v16
1916 ; CHECK-NEXT:    ret
1917   %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)
1918   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1919   %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)
1920   ret <vscale x 4 x i64> %u
1923 define <vscale x 4 x i64> @vnmsac_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) {
1924 ; RV32-LABEL: vnmsac_vx_nxv4i64:
1925 ; RV32:       # %bb.0:
1926 ; RV32-NEXT:    addi sp, sp, -16
1927 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1928 ; RV32-NEXT:    sw a0, 8(sp)
1929 ; RV32-NEXT:    sw a1, 12(sp)
1930 ; RV32-NEXT:    addi a0, sp, 8
1931 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1932 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1933 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, tu, mu
1934 ; RV32-NEXT:    vnmsac.vv v12, v8, v16, v0.t
1935 ; RV32-NEXT:    vmv4r.v v8, v12
1936 ; RV32-NEXT:    addi sp, sp, 16
1937 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1938 ; RV32-NEXT:    ret
1940 ; RV64-LABEL: vnmsac_vx_nxv4i64:
1941 ; RV64:       # %bb.0:
1942 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, mu
1943 ; RV64-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1944 ; RV64-NEXT:    vmv4r.v v8, v12
1945 ; RV64-NEXT:    ret
1946   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1947   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1948   %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)
1949   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1950   %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)
1951   ret <vscale x 4 x i64> %u
1954 define <vscale x 4 x i64> @vnmsac_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) {
1955 ; RV32-LABEL: vnmsac_vx_nxv4i64_unmasked:
1956 ; RV32:       # %bb.0:
1957 ; RV32-NEXT:    addi sp, sp, -16
1958 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1959 ; RV32-NEXT:    sw a0, 8(sp)
1960 ; RV32-NEXT:    sw a1, 12(sp)
1961 ; RV32-NEXT:    addi a0, sp, 8
1962 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1963 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1964 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, tu, ma
1965 ; RV32-NEXT:    vnmsac.vv v12, v8, v16
1966 ; RV32-NEXT:    vmv4r.v v8, v12
1967 ; RV32-NEXT:    addi sp, sp, 16
1968 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1969 ; RV32-NEXT:    ret
1971 ; RV64-LABEL: vnmsac_vx_nxv4i64_unmasked:
1972 ; RV64:       # %bb.0:
1973 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, ma
1974 ; RV64-NEXT:    vnmsac.vx v12, a0, v8
1975 ; RV64-NEXT:    vmv4r.v v8, v12
1976 ; RV64-NEXT:    ret
1977   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1978   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1979   %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)
1980   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1981   %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)
1982   ret <vscale x 4 x i64> %u
1985 define <vscale x 4 x i64> @vnmsac_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) {
1986 ; CHECK-LABEL: vnmsac_vv_nxv4i64_ta:
1987 ; CHECK:       # %bb.0:
1988 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1989 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1990 ; CHECK-NEXT:    vmv.v.v v8, v16
1991 ; CHECK-NEXT:    ret
1992   %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)
1993   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1994   %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)
1995   ret <vscale x 4 x i64> %u
1998 define <vscale x 4 x i64> @vnmsac_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) {
1999 ; RV32-LABEL: vnmsac_vx_nxv4i64_ta:
2000 ; RV32:       # %bb.0:
2001 ; RV32-NEXT:    addi sp, sp, -16
2002 ; RV32-NEXT:    .cfi_def_cfa_offset 16
2003 ; RV32-NEXT:    sw a0, 8(sp)
2004 ; RV32-NEXT:    sw a1, 12(sp)
2005 ; RV32-NEXT:    addi a0, sp, 8
2006 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
2007 ; RV32-NEXT:    vlse64.v v16, (a0), zero
2008 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, mu
2009 ; RV32-NEXT:    vnmsac.vv v12, v8, v16, v0.t
2010 ; RV32-NEXT:    vmv.v.v v8, v12
2011 ; RV32-NEXT:    addi sp, sp, 16
2012 ; RV32-NEXT:    .cfi_def_cfa_offset 0
2013 ; RV32-NEXT:    ret
2015 ; RV64-LABEL: vnmsac_vx_nxv4i64_ta:
2016 ; RV64:       # %bb.0:
2017 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, mu
2018 ; RV64-NEXT:    vnmsac.vx v12, a0, v8, v0.t
2019 ; RV64-NEXT:    vmv.v.v v8, v12
2020 ; RV64-NEXT:    ret
2021   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
2022   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
2023   %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)
2024   %y = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %c, <vscale x 4 x i64> %x, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
2025   %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)
2026   ret <vscale x 4 x i64> %u
2029 declare <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
2030 declare <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
2031 declare <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1>, <vscale x 8 x i64>, <vscale x 8 x i64>, i32)
2032 declare <vscale x 8 x i64> @llvm.vp.select.nxv8i64(<vscale x 8 x i1>, <vscale x 8 x i64>, <vscale x 8 x i64>, i32)
2034 define <vscale x 8 x i64> @vnmsac_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) {
2035 ; CHECK-LABEL: vnmsac_vv_nxv8i64:
2036 ; CHECK:       # %bb.0:
2037 ; CHECK-NEXT:    vl8re64.v v24, (a0)
2038 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, mu
2039 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
2040 ; CHECK-NEXT:    vmv8r.v v8, v24
2041 ; CHECK-NEXT:    ret
2042   %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)
2043   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2044   %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)
2045   ret <vscale x 8 x i64> %u
2048 define <vscale x 8 x i64> @vnmsac_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) {
2049 ; CHECK-LABEL: vnmsac_vv_nxv8i64_unmasked:
2050 ; CHECK:       # %bb.0:
2051 ; CHECK-NEXT:    vl8re64.v v24, (a0)
2052 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, ma
2053 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16
2054 ; CHECK-NEXT:    vmv8r.v v8, v24
2055 ; CHECK-NEXT:    ret
2056   %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)
2057   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2058   %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)
2059   ret <vscale x 8 x i64> %u
2062 define <vscale x 8 x i64> @vnmsac_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) {
2063 ; RV32-LABEL: vnmsac_vx_nxv8i64:
2064 ; RV32:       # %bb.0:
2065 ; RV32-NEXT:    addi sp, sp, -16
2066 ; RV32-NEXT:    .cfi_def_cfa_offset 16
2067 ; RV32-NEXT:    sw a0, 8(sp)
2068 ; RV32-NEXT:    sw a1, 12(sp)
2069 ; RV32-NEXT:    addi a0, sp, 8
2070 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
2071 ; RV32-NEXT:    vlse64.v v24, (a0), zero
2072 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, tu, mu
2073 ; RV32-NEXT:    vnmsac.vv v16, v8, v24, v0.t
2074 ; RV32-NEXT:    vmv8r.v v8, v16
2075 ; RV32-NEXT:    addi sp, sp, 16
2076 ; RV32-NEXT:    .cfi_def_cfa_offset 0
2077 ; RV32-NEXT:    ret
2079 ; RV64-LABEL: vnmsac_vx_nxv8i64:
2080 ; RV64:       # %bb.0:
2081 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, tu, mu
2082 ; RV64-NEXT:    vnmsac.vx v16, a0, v8, v0.t
2083 ; RV64-NEXT:    vmv8r.v v8, v16
2084 ; RV64-NEXT:    ret
2085   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
2086   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
2087   %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)
2088   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2089   %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)
2090   ret <vscale x 8 x i64> %u
2093 define <vscale x 8 x i64> @vnmsac_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) {
2094 ; RV32-LABEL: vnmsac_vx_nxv8i64_unmasked:
2095 ; RV32:       # %bb.0:
2096 ; RV32-NEXT:    addi sp, sp, -16
2097 ; RV32-NEXT:    .cfi_def_cfa_offset 16
2098 ; RV32-NEXT:    sw a0, 8(sp)
2099 ; RV32-NEXT:    sw a1, 12(sp)
2100 ; RV32-NEXT:    addi a0, sp, 8
2101 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
2102 ; RV32-NEXT:    vlse64.v v24, (a0), zero
2103 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, tu, ma
2104 ; RV32-NEXT:    vnmsac.vv v16, v8, v24
2105 ; RV32-NEXT:    vmv8r.v v8, v16
2106 ; RV32-NEXT:    addi sp, sp, 16
2107 ; RV32-NEXT:    .cfi_def_cfa_offset 0
2108 ; RV32-NEXT:    ret
2110 ; RV64-LABEL: vnmsac_vx_nxv8i64_unmasked:
2111 ; RV64:       # %bb.0:
2112 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, tu, ma
2113 ; RV64-NEXT:    vnmsac.vx v16, a0, v8
2114 ; RV64-NEXT:    vmv8r.v v8, v16
2115 ; RV64-NEXT:    ret
2116   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
2117   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
2118   %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)
2119   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2120   %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)
2121   ret <vscale x 8 x i64> %u
2124 define <vscale x 8 x i64> @vnmsac_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) {
2125 ; CHECK-LABEL: vnmsac_vv_nxv8i64_ta:
2126 ; CHECK:       # %bb.0:
2127 ; CHECK-NEXT:    vl8re64.v v24, (a0)
2128 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
2129 ; CHECK-NEXT:    vnmsac.vv v24, v8, v16, v0.t
2130 ; CHECK-NEXT:    vmv.v.v v8, v24
2131 ; CHECK-NEXT:    ret
2132   %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)
2133   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2134   %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)
2135   ret <vscale x 8 x i64> %u
2138 define <vscale x 8 x i64> @vnmsac_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) {
2139 ; RV32-LABEL: vnmsac_vx_nxv8i64_ta:
2140 ; RV32:       # %bb.0:
2141 ; RV32-NEXT:    addi sp, sp, -16
2142 ; RV32-NEXT:    .cfi_def_cfa_offset 16
2143 ; RV32-NEXT:    sw a0, 8(sp)
2144 ; RV32-NEXT:    sw a1, 12(sp)
2145 ; RV32-NEXT:    addi a0, sp, 8
2146 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
2147 ; RV32-NEXT:    vlse64.v v24, (a0), zero
2148 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, mu
2149 ; RV32-NEXT:    vnmsac.vv v16, v8, v24, v0.t
2150 ; RV32-NEXT:    vmv.v.v v8, v16
2151 ; RV32-NEXT:    addi sp, sp, 16
2152 ; RV32-NEXT:    .cfi_def_cfa_offset 0
2153 ; RV32-NEXT:    ret
2155 ; RV64-LABEL: vnmsac_vx_nxv8i64_ta:
2156 ; RV64:       # %bb.0:
2157 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
2158 ; RV64-NEXT:    vnmsac.vx v16, a0, v8, v0.t
2159 ; RV64-NEXT:    vmv.v.v v8, v16
2160 ; RV64-NEXT:    ret
2161   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
2162   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
2163   %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)
2164   %y = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %c, <vscale x 8 x i64> %x, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
2165   %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)
2166   ret <vscale x 8 x i64> %u