Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vnmsac-vp.ll
blobb8798fe6c63dcd25241063ad28a1e285b4a8c22c
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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
8 declare <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
9 declare <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1>, <2 x i8>, <2 x i8>, i32)
10 declare <2 x i8> @llvm.vp.select.nxv2i8(<2 x i1>, <2 x i8>, <2 x i8>, i32)
12 define <2 x i8> @vnmsac_vv_nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
13 ; CHECK-LABEL: vnmsac_vv_nxv2i8:
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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)
20   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
21   %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)
22   ret <2 x i8> %u
25 define <2 x i8> @vnmsac_vv_nxv2i8_unmasked(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
26 ; CHECK-LABEL: vnmsac_vv_nxv2i8_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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)
33   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
34   %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> splat (i1 -1), <2 x i8> %y, <2 x i8> %c, i32 %evl)
35   ret <2 x i8> %u
38 define <2 x i8> @vnmsac_vx_nxv2i8(<2 x i8> %a, i8 %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
39 ; CHECK-LABEL: vnmsac_vx_nxv2i8:
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 <2 x i8> poison, i8 %b, i32 0
46   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
47   %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)
48   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
49   %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)
50   ret <2 x i8> %u
53 define <2 x i8> @vnmsac_vx_nxv2i8_unmasked(<2 x i8> %a, i8 %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
54 ; CHECK-LABEL: vnmsac_vx_nxv2i8_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 <2 x i8> poison, i8 %b, i32 0
61   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
62   %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)
63   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
64   %u = call <2 x i8> @llvm.vp.merge.nxv2i8(<2 x i1> splat (i1 -1), <2 x i8> %y, <2 x i8> %c, i32 %evl)
65   ret <2 x i8> %u
68 define <2 x i8> @vnmsac_vv_nxv2i8_ta(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
69 ; CHECK-LABEL: vnmsac_vv_nxv2i8_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 <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %b, <2 x i1> splat (i1 -1), i32 %evl)
76   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
77   %u = call <2 x i8> @llvm.vp.select.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)
78   ret <2 x i8> %u
81 define <2 x i8> @vnmsac_vx_nxv2i8_ta(<2 x i8> %a, i8 %b, <2 x i8> %c,  <2 x i1> %m, i32 zeroext %evl) {
82 ; CHECK-LABEL: vnmsac_vx_nxv2i8_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 <2 x i8> poison, i8 %b, i32 0
89   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
90   %x = call <2 x i8> @llvm.vp.mul.nxv2i8(<2 x i8> %a, <2 x i8> %vb, <2 x i1> splat (i1 -1), i32 %evl)
91   %y = call <2 x i8> @llvm.vp.sub.nxv2i8(<2 x i8> %c, <2 x i8> %x, <2 x i1> splat (i1 -1), i32 %evl)
92   %u = call <2 x i8> @llvm.vp.select.nxv2i8(<2 x i1> %m, <2 x i8> %y, <2 x i8> %c, i32 %evl)
93   ret <2 x i8> %u
96 declare <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
97 declare <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
98 declare <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1>, <4 x i8>, <4 x i8>, i32)
99 declare <4 x i8> @llvm.vp.select.nxv4i8(<4 x i1>, <4 x i8>, <4 x i8>, i32)
101 define <4 x i8> @vnmsac_vv_nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
102 ; CHECK-LABEL: vnmsac_vv_nxv4i8:
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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)
109   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
110   %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)
111   ret <4 x i8> %u
114 define <4 x i8> @vnmsac_vv_nxv4i8_unmasked(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
115 ; CHECK-LABEL: vnmsac_vv_nxv4i8_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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)
122   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
123   %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> splat (i1 -1), <4 x i8> %y, <4 x i8> %c, i32 %evl)
124   ret <4 x i8> %u
127 define <4 x i8> @vnmsac_vx_nxv4i8(<4 x i8> %a, i8 %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
128 ; CHECK-LABEL: vnmsac_vx_nxv4i8:
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 <4 x i8> poison, i8 %b, i32 0
135   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
136   %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)
137   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
138   %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)
139   ret <4 x i8> %u
142 define <4 x i8> @vnmsac_vx_nxv4i8_unmasked(<4 x i8> %a, i8 %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
143 ; CHECK-LABEL: vnmsac_vx_nxv4i8_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 <4 x i8> poison, i8 %b, i32 0
150   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
151   %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)
152   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
153   %u = call <4 x i8> @llvm.vp.merge.nxv4i8(<4 x i1> splat (i1 -1), <4 x i8> %y, <4 x i8> %c, i32 %evl)
154   ret <4 x i8> %u
157 define <4 x i8> @vnmsac_vv_nxv4i8_ta(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
158 ; CHECK-LABEL: vnmsac_vv_nxv4i8_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 <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %b, <4 x i1> splat (i1 -1), i32 %evl)
165   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
166   %u = call <4 x i8> @llvm.vp.select.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)
167   ret <4 x i8> %u
170 define <4 x i8> @vnmsac_vx_nxv4i8_ta(<4 x i8> %a, i8 %b, <4 x i8> %c,  <4 x i1> %m, i32 zeroext %evl) {
171 ; CHECK-LABEL: vnmsac_vx_nxv4i8_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 <4 x i8> poison, i8 %b, i32 0
178   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
179   %x = call <4 x i8> @llvm.vp.mul.nxv4i8(<4 x i8> %a, <4 x i8> %vb, <4 x i1> splat (i1 -1), i32 %evl)
180   %y = call <4 x i8> @llvm.vp.sub.nxv4i8(<4 x i8> %c, <4 x i8> %x, <4 x i1> splat (i1 -1), i32 %evl)
181   %u = call <4 x i8> @llvm.vp.select.nxv4i8(<4 x i1> %m, <4 x i8> %y, <4 x i8> %c, i32 %evl)
182   ret <4 x i8> %u
185 declare <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
186 declare <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
187 declare <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1>, <8 x i8>, <8 x i8>, i32)
188 declare <8 x i8> @llvm.vp.select.nxv8i8(<8 x i1>, <8 x i8>, <8 x i8>, i32)
190 define <8 x i8> @vnmsac_vv_nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
191 ; CHECK-LABEL: vnmsac_vv_nxv8i8:
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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)
198   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
199   %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)
200   ret <8 x i8> %u
203 define <8 x i8> @vnmsac_vv_nxv8i8_unmasked(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
204 ; CHECK-LABEL: vnmsac_vv_nxv8i8_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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)
211   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
212   %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> splat (i1 -1), <8 x i8> %y, <8 x i8> %c, i32 %evl)
213   ret <8 x i8> %u
216 define <8 x i8> @vnmsac_vx_nxv8i8(<8 x i8> %a, i8 %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
217 ; CHECK-LABEL: vnmsac_vx_nxv8i8:
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 <8 x i8> poison, i8 %b, i32 0
224   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
225   %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)
226   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
227   %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)
228   ret <8 x i8> %u
231 define <8 x i8> @vnmsac_vx_nxv8i8_unmasked(<8 x i8> %a, i8 %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
232 ; CHECK-LABEL: vnmsac_vx_nxv8i8_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 <8 x i8> poison, i8 %b, i32 0
239   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
240   %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)
241   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
242   %u = call <8 x i8> @llvm.vp.merge.nxv8i8(<8 x i1> splat (i1 -1), <8 x i8> %y, <8 x i8> %c, i32 %evl)
243   ret <8 x i8> %u
246 define <8 x i8> @vnmsac_vv_nxv8i8_ta(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vnmsac_vv_nxv8i8_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 <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %b, <8 x i1> splat (i1 -1), i32 %evl)
254   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
255   %u = call <8 x i8> @llvm.vp.select.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)
256   ret <8 x i8> %u
259 define <8 x i8> @vnmsac_vx_nxv8i8_ta(<8 x i8> %a, i8 %b, <8 x i8> %c,  <8 x i1> %m, i32 zeroext %evl) {
260 ; CHECK-LABEL: vnmsac_vx_nxv8i8_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 <8 x i8> poison, i8 %b, i32 0
267   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
268   %x = call <8 x i8> @llvm.vp.mul.nxv8i8(<8 x i8> %a, <8 x i8> %vb, <8 x i1> splat (i1 -1), i32 %evl)
269   %y = call <8 x i8> @llvm.vp.sub.nxv8i8(<8 x i8> %c, <8 x i8> %x, <8 x i1> splat (i1 -1), i32 %evl)
270   %u = call <8 x i8> @llvm.vp.select.nxv8i8(<8 x i1> %m, <8 x i8> %y, <8 x i8> %c, i32 %evl)
271   ret <8 x i8> %u
274 declare <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
275 declare <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
276 declare <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1>, <16 x i8>, <16 x i8>, i32)
277 declare <16 x i8> @llvm.vp.select.nxv16i8(<16 x i1>, <16 x i8>, <16 x i8>, i32)
279 define <16 x i8> @vnmsac_vv_nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
280 ; CHECK-LABEL: vnmsac_vv_nxv16i8:
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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)
287   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
288   %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)
289   ret <16 x i8> %u
292 define <16 x i8> @vnmsac_vv_nxv16i8_unmasked(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
293 ; CHECK-LABEL: vnmsac_vv_nxv16i8_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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)
300   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
301   %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> splat (i1 -1), <16 x i8> %y, <16 x i8> %c, i32 %evl)
302   ret <16 x i8> %u
305 define <16 x i8> @vnmsac_vx_nxv16i8(<16 x i8> %a, i8 %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
306 ; CHECK-LABEL: vnmsac_vx_nxv16i8:
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 <16 x i8> poison, i8 %b, i32 0
313   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
314   %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)
315   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
316   %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)
317   ret <16 x i8> %u
320 define <16 x i8> @vnmsac_vx_nxv16i8_unmasked(<16 x i8> %a, i8 %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
321 ; CHECK-LABEL: vnmsac_vx_nxv16i8_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 <16 x i8> poison, i8 %b, i32 0
328   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
329   %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)
330   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
331   %u = call <16 x i8> @llvm.vp.merge.nxv16i8(<16 x i1> splat (i1 -1), <16 x i8> %y, <16 x i8> %c, i32 %evl)
332   ret <16 x i8> %u
335 define <16 x i8> @vnmsac_vv_nxv16i8_ta(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
336 ; CHECK-LABEL: vnmsac_vv_nxv16i8_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 <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %b, <16 x i1> splat (i1 -1), i32 %evl)
343   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
344   %u = call <16 x i8> @llvm.vp.select.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)
345   ret <16 x i8> %u
348 define <16 x i8> @vnmsac_vx_nxv16i8_ta(<16 x i8> %a, i8 %b, <16 x i8> %c,  <16 x i1> %m, i32 zeroext %evl) {
349 ; CHECK-LABEL: vnmsac_vx_nxv16i8_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 <16 x i8> poison, i8 %b, i32 0
356   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
357   %x = call <16 x i8> @llvm.vp.mul.nxv16i8(<16 x i8> %a, <16 x i8> %vb, <16 x i1> splat (i1 -1), i32 %evl)
358   %y = call <16 x i8> @llvm.vp.sub.nxv16i8(<16 x i8> %c, <16 x i8> %x, <16 x i1> splat (i1 -1), i32 %evl)
359   %u = call <16 x i8> @llvm.vp.select.nxv16i8(<16 x i1> %m, <16 x i8> %y, <16 x i8> %c, i32 %evl)
360   ret <16 x i8> %u
363 declare <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8>, <32 x i8>, <32 x i1>, i32)
364 declare <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8>, <32 x i8>, <32 x i1>, i32)
365 declare <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1>, <32 x i8>, <32 x i8>, i32)
366 declare <32 x i8> @llvm.vp.select.nxv32i8(<32 x i1>, <32 x i8>, <32 x i8>, i32)
368 define <32 x i8> @vnmsac_vv_nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
369 ; CHECK-LABEL: vnmsac_vv_nxv32i8:
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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)
376   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
377   %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)
378   ret <32 x i8> %u
381 define <32 x i8> @vnmsac_vv_nxv32i8_unmasked(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
382 ; CHECK-LABEL: vnmsac_vv_nxv32i8_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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)
389   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
390   %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> splat (i1 -1), <32 x i8> %y, <32 x i8> %c, i32 %evl)
391   ret <32 x i8> %u
394 define <32 x i8> @vnmsac_vx_nxv32i8(<32 x i8> %a, i8 %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
395 ; CHECK-LABEL: vnmsac_vx_nxv32i8:
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 <32 x i8> poison, i8 %b, i32 0
402   %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer
403   %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)
404   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
405   %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)
406   ret <32 x i8> %u
409 define <32 x i8> @vnmsac_vx_nxv32i8_unmasked(<32 x i8> %a, i8 %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
410 ; CHECK-LABEL: vnmsac_vx_nxv32i8_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 <32 x i8> poison, i8 %b, i32 0
417   %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer
418   %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)
419   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
420   %u = call <32 x i8> @llvm.vp.merge.nxv32i8(<32 x i1> splat (i1 -1), <32 x i8> %y, <32 x i8> %c, i32 %evl)
421   ret <32 x i8> %u
424 define <32 x i8> @vnmsac_vv_nxv32i8_ta(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
425 ; CHECK-LABEL: vnmsac_vv_nxv32i8_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 <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %b, <32 x i1> splat (i1 -1), i32 %evl)
432   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
433   %u = call <32 x i8> @llvm.vp.select.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)
434   ret <32 x i8> %u
437 define <32 x i8> @vnmsac_vx_nxv32i8_ta(<32 x i8> %a, i8 %b, <32 x i8> %c,  <32 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vnmsac_vx_nxv32i8_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 <32 x i8> poison, i8 %b, i32 0
445   %vb = shufflevector <32 x i8> %elt.head, <32 x i8> poison, <32 x i32> zeroinitializer
446   %x = call <32 x i8> @llvm.vp.mul.nxv32i8(<32 x i8> %a, <32 x i8> %vb, <32 x i1> splat (i1 -1), i32 %evl)
447   %y = call <32 x i8> @llvm.vp.sub.nxv32i8(<32 x i8> %c, <32 x i8> %x, <32 x i1> splat (i1 -1), i32 %evl)
448   %u = call <32 x i8> @llvm.vp.select.nxv32i8(<32 x i1> %m, <32 x i8> %y, <32 x i8> %c, i32 %evl)
449   ret <32 x i8> %u
452 declare <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8>, <64 x i8>, <64 x i1>, i32)
453 declare <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8>, <64 x i8>, <64 x i1>, i32)
454 declare <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1>, <64 x i8>, <64 x i8>, i32)
455 declare <64 x i8> @llvm.vp.select.nxv64i8(<64 x i1>, <64 x i8>, <64 x i8>, i32)
457 define <64 x i8> @vnmsac_vv_nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
458 ; CHECK-LABEL: vnmsac_vv_nxv64i8:
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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)
465   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
466   %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)
467   ret <64 x i8> %u
470 define <64 x i8> @vnmsac_vv_nxv64i8_unmasked(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: vnmsac_vv_nxv64i8_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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)
478   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
479   %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> splat (i1 -1), <64 x i8> %y, <64 x i8> %c, i32 %evl)
480   ret <64 x i8> %u
483 define <64 x i8> @vnmsac_vx_nxv64i8(<64 x i8> %a, i8 %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
484 ; CHECK-LABEL: vnmsac_vx_nxv64i8:
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 <64 x i8> poison, i8 %b, i32 0
491   %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer
492   %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)
493   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
494   %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)
495   ret <64 x i8> %u
498 define <64 x i8> @vnmsac_vx_nxv64i8_unmasked(<64 x i8> %a, i8 %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
499 ; CHECK-LABEL: vnmsac_vx_nxv64i8_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 <64 x i8> poison, i8 %b, i32 0
506   %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer
507   %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)
508   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
509   %u = call <64 x i8> @llvm.vp.merge.nxv64i8(<64 x i1> splat (i1 -1), <64 x i8> %y, <64 x i8> %c, i32 %evl)
510   ret <64 x i8> %u
513 define <64 x i8> @vnmsac_vv_nxv64i8_ta(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
514 ; CHECK-LABEL: vnmsac_vv_nxv64i8_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 <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %b, <64 x i1> splat (i1 -1), i32 %evl)
521   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
522   %u = call <64 x i8> @llvm.vp.select.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)
523   ret <64 x i8> %u
526 define <64 x i8> @vnmsac_vx_nxv64i8_ta(<64 x i8> %a, i8 %b, <64 x i8> %c,  <64 x i1> %m, i32 zeroext %evl) {
527 ; CHECK-LABEL: vnmsac_vx_nxv64i8_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 <64 x i8> poison, i8 %b, i32 0
534   %vb = shufflevector <64 x i8> %elt.head, <64 x i8> poison, <64 x i32> zeroinitializer
535   %x = call <64 x i8> @llvm.vp.mul.nxv64i8(<64 x i8> %a, <64 x i8> %vb, <64 x i1> splat (i1 -1), i32 %evl)
536   %y = call <64 x i8> @llvm.vp.sub.nxv64i8(<64 x i8> %c, <64 x i8> %x, <64 x i1> splat (i1 -1), i32 %evl)
537   %u = call <64 x i8> @llvm.vp.select.nxv64i8(<64 x i1> %m, <64 x i8> %y, <64 x i8> %c, i32 %evl)
538   ret <64 x i8> %u
541 declare <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
542 declare <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
543 declare <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1>, <2 x i16>, <2 x i16>, i32)
544 declare <2 x i16> @llvm.vp.select.nxv2i16(<2 x i1>, <2 x i16>, <2 x i16>, i32)
546 define <2 x i16> @vnmsac_vv_nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
547 ; CHECK-LABEL: vnmsac_vv_nxv2i16:
548 ; CHECK:       # %bb.0:
549 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
550 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
551 ; CHECK-NEXT:    vmv1r.v v8, v10
552 ; CHECK-NEXT:    ret
553   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)
554   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
555   %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)
556   ret <2 x i16> %u
559 define <2 x i16> @vnmsac_vv_nxv2i16_unmasked(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
560 ; CHECK-LABEL: vnmsac_vv_nxv2i16_unmasked:
561 ; CHECK:       # %bb.0:
562 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
563 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
564 ; CHECK-NEXT:    vmv1r.v v8, v10
565 ; CHECK-NEXT:    ret
566   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)
567   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
568   %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> splat (i1 -1), <2 x i16> %y, <2 x i16> %c, i32 %evl)
569   ret <2 x i16> %u
572 define <2 x i16> @vnmsac_vx_nxv2i16(<2 x i16> %a, i16 %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
573 ; CHECK-LABEL: vnmsac_vx_nxv2i16:
574 ; CHECK:       # %bb.0:
575 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, mu
576 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
577 ; CHECK-NEXT:    vmv1r.v v8, v9
578 ; CHECK-NEXT:    ret
579   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
580   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
581   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)
582   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
583   %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)
584   ret <2 x i16> %u
587 define <2 x i16> @vnmsac_vx_nxv2i16_unmasked(<2 x i16> %a, i16 %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
588 ; CHECK-LABEL: vnmsac_vx_nxv2i16_unmasked:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, ma
591 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
592 ; CHECK-NEXT:    vmv1r.v v8, v9
593 ; CHECK-NEXT:    ret
594   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
595   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
596   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)
597   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
598   %u = call <2 x i16> @llvm.vp.merge.nxv2i16(<2 x i1> splat (i1 -1), <2 x i16> %y, <2 x i16> %c, i32 %evl)
599   ret <2 x i16> %u
602 define <2 x i16> @vnmsac_vv_nxv2i16_ta(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
603 ; CHECK-LABEL: vnmsac_vv_nxv2i16_ta:
604 ; CHECK:       # %bb.0:
605 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
606 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
607 ; CHECK-NEXT:    vmv1r.v v8, v10
608 ; CHECK-NEXT:    ret
609   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %b, <2 x i1> splat (i1 -1), i32 %evl)
610   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
611   %u = call <2 x i16> @llvm.vp.select.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)
612   ret <2 x i16> %u
615 define <2 x i16> @vnmsac_vx_nxv2i16_ta(<2 x i16> %a, i16 %b, <2 x i16> %c,  <2 x i1> %m, i32 zeroext %evl) {
616 ; CHECK-LABEL: vnmsac_vx_nxv2i16_ta:
617 ; CHECK:       # %bb.0:
618 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
619 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
620 ; CHECK-NEXT:    vmv1r.v v8, v9
621 ; CHECK-NEXT:    ret
622   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
623   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
624   %x = call <2 x i16> @llvm.vp.mul.nxv2i16(<2 x i16> %a, <2 x i16> %vb, <2 x i1> splat (i1 -1), i32 %evl)
625   %y = call <2 x i16> @llvm.vp.sub.nxv2i16(<2 x i16> %c, <2 x i16> %x, <2 x i1> splat (i1 -1), i32 %evl)
626   %u = call <2 x i16> @llvm.vp.select.nxv2i16(<2 x i1> %m, <2 x i16> %y, <2 x i16> %c, i32 %evl)
627   ret <2 x i16> %u
630 declare <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
631 declare <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
632 declare <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1>, <4 x i16>, <4 x i16>, i32)
633 declare <4 x i16> @llvm.vp.select.nxv4i16(<4 x i1>, <4 x i16>, <4 x i16>, i32)
635 define <4 x i16> @vnmsac_vv_nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
636 ; CHECK-LABEL: vnmsac_vv_nxv4i16:
637 ; CHECK:       # %bb.0:
638 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
639 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
640 ; CHECK-NEXT:    vmv1r.v v8, v10
641 ; CHECK-NEXT:    ret
642   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)
643   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
644   %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)
645   ret <4 x i16> %u
648 define <4 x i16> @vnmsac_vv_nxv4i16_unmasked(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
649 ; CHECK-LABEL: vnmsac_vv_nxv4i16_unmasked:
650 ; CHECK:       # %bb.0:
651 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
652 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
653 ; CHECK-NEXT:    vmv1r.v v8, v10
654 ; CHECK-NEXT:    ret
655   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)
656   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
657   %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> splat (i1 -1), <4 x i16> %y, <4 x i16> %c, i32 %evl)
658   ret <4 x i16> %u
661 define <4 x i16> @vnmsac_vx_nxv4i16(<4 x i16> %a, i16 %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
662 ; CHECK-LABEL: vnmsac_vx_nxv4i16:
663 ; CHECK:       # %bb.0:
664 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, mu
665 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
666 ; CHECK-NEXT:    vmv1r.v v8, v9
667 ; CHECK-NEXT:    ret
668   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
669   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
670   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)
671   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
672   %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)
673   ret <4 x i16> %u
676 define <4 x i16> @vnmsac_vx_nxv4i16_unmasked(<4 x i16> %a, i16 %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
677 ; CHECK-LABEL: vnmsac_vx_nxv4i16_unmasked:
678 ; CHECK:       # %bb.0:
679 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, ma
680 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
681 ; CHECK-NEXT:    vmv1r.v v8, v9
682 ; CHECK-NEXT:    ret
683   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
684   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
685   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)
686   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
687   %u = call <4 x i16> @llvm.vp.merge.nxv4i16(<4 x i1> splat (i1 -1), <4 x i16> %y, <4 x i16> %c, i32 %evl)
688   ret <4 x i16> %u
691 define <4 x i16> @vnmsac_vv_nxv4i16_ta(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
692 ; CHECK-LABEL: vnmsac_vv_nxv4i16_ta:
693 ; CHECK:       # %bb.0:
694 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
695 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
696 ; CHECK-NEXT:    vmv1r.v v8, v10
697 ; CHECK-NEXT:    ret
698   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %b, <4 x i1> splat (i1 -1), i32 %evl)
699   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
700   %u = call <4 x i16> @llvm.vp.select.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)
701   ret <4 x i16> %u
704 define <4 x i16> @vnmsac_vx_nxv4i16_ta(<4 x i16> %a, i16 %b, <4 x i16> %c,  <4 x i1> %m, i32 zeroext %evl) {
705 ; CHECK-LABEL: vnmsac_vx_nxv4i16_ta:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
708 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
709 ; CHECK-NEXT:    vmv1r.v v8, v9
710 ; CHECK-NEXT:    ret
711   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
712   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
713   %x = call <4 x i16> @llvm.vp.mul.nxv4i16(<4 x i16> %a, <4 x i16> %vb, <4 x i1> splat (i1 -1), i32 %evl)
714   %y = call <4 x i16> @llvm.vp.sub.nxv4i16(<4 x i16> %c, <4 x i16> %x, <4 x i1> splat (i1 -1), i32 %evl)
715   %u = call <4 x i16> @llvm.vp.select.nxv4i16(<4 x i1> %m, <4 x i16> %y, <4 x i16> %c, i32 %evl)
716   ret <4 x i16> %u
719 declare <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
720 declare <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
721 declare <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1>, <8 x i16>, <8 x i16>, i32)
722 declare <8 x i16> @llvm.vp.select.nxv8i16(<8 x i1>, <8 x i16>, <8 x i16>, i32)
724 define <8 x i16> @vnmsac_vv_nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
725 ; CHECK-LABEL: vnmsac_vv_nxv8i16:
726 ; CHECK:       # %bb.0:
727 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
728 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
729 ; CHECK-NEXT:    vmv1r.v v8, v10
730 ; CHECK-NEXT:    ret
731   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)
732   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
733   %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)
734   ret <8 x i16> %u
737 define <8 x i16> @vnmsac_vv_nxv8i16_unmasked(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
738 ; CHECK-LABEL: vnmsac_vv_nxv8i16_unmasked:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
741 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
742 ; CHECK-NEXT:    vmv1r.v v8, v10
743 ; CHECK-NEXT:    ret
744   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)
745   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
746   %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> splat (i1 -1), <8 x i16> %y, <8 x i16> %c, i32 %evl)
747   ret <8 x i16> %u
750 define <8 x i16> @vnmsac_vx_nxv8i16(<8 x i16> %a, i16 %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
751 ; CHECK-LABEL: vnmsac_vx_nxv8i16:
752 ; CHECK:       # %bb.0:
753 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, mu
754 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
755 ; CHECK-NEXT:    vmv1r.v v8, v9
756 ; CHECK-NEXT:    ret
757   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
758   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
759   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)
760   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
761   %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)
762   ret <8 x i16> %u
765 define <8 x i16> @vnmsac_vx_nxv8i16_unmasked(<8 x i16> %a, i16 %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
766 ; CHECK-LABEL: vnmsac_vx_nxv8i16_unmasked:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, ma
769 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
770 ; CHECK-NEXT:    vmv1r.v v8, v9
771 ; CHECK-NEXT:    ret
772   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
773   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
774   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)
775   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
776   %u = call <8 x i16> @llvm.vp.merge.nxv8i16(<8 x i1> splat (i1 -1), <8 x i16> %y, <8 x i16> %c, i32 %evl)
777   ret <8 x i16> %u
780 define <8 x i16> @vnmsac_vv_nxv8i16_ta(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
781 ; CHECK-LABEL: vnmsac_vv_nxv8i16_ta:
782 ; CHECK:       # %bb.0:
783 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
784 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
785 ; CHECK-NEXT:    vmv.v.v v8, v10
786 ; CHECK-NEXT:    ret
787   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %b, <8 x i1> splat (i1 -1), i32 %evl)
788   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
789   %u = call <8 x i16> @llvm.vp.select.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)
790   ret <8 x i16> %u
793 define <8 x i16> @vnmsac_vx_nxv8i16_ta(<8 x i16> %a, i16 %b, <8 x i16> %c,  <8 x i1> %m, i32 zeroext %evl) {
794 ; CHECK-LABEL: vnmsac_vx_nxv8i16_ta:
795 ; CHECK:       # %bb.0:
796 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
797 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
798 ; CHECK-NEXT:    vmv.v.v v8, v9
799 ; CHECK-NEXT:    ret
800   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
801   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
802   %x = call <8 x i16> @llvm.vp.mul.nxv8i16(<8 x i16> %a, <8 x i16> %vb, <8 x i1> splat (i1 -1), i32 %evl)
803   %y = call <8 x i16> @llvm.vp.sub.nxv8i16(<8 x i16> %c, <8 x i16> %x, <8 x i1> splat (i1 -1), i32 %evl)
804   %u = call <8 x i16> @llvm.vp.select.nxv8i16(<8 x i1> %m, <8 x i16> %y, <8 x i16> %c, i32 %evl)
805   ret <8 x i16> %u
808 declare <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
809 declare <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
810 declare <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1>, <16 x i16>, <16 x i16>, i32)
811 declare <16 x i16> @llvm.vp.select.nxv16i16(<16 x i1>, <16 x i16>, <16 x i16>, i32)
813 define <16 x i16> @vnmsac_vv_nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
814 ; CHECK-LABEL: vnmsac_vv_nxv16i16:
815 ; CHECK:       # %bb.0:
816 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
817 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
818 ; CHECK-NEXT:    vmv2r.v v8, v12
819 ; CHECK-NEXT:    ret
820   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)
821   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
822   %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)
823   ret <16 x i16> %u
826 define <16 x i16> @vnmsac_vv_nxv16i16_unmasked(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
827 ; CHECK-LABEL: vnmsac_vv_nxv16i16_unmasked:
828 ; CHECK:       # %bb.0:
829 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
830 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
831 ; CHECK-NEXT:    vmv2r.v v8, v12
832 ; CHECK-NEXT:    ret
833   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)
834   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
835   %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> splat (i1 -1), <16 x i16> %y, <16 x i16> %c, i32 %evl)
836   ret <16 x i16> %u
839 define <16 x i16> @vnmsac_vx_nxv16i16(<16 x i16> %a, i16 %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
840 ; CHECK-LABEL: vnmsac_vx_nxv16i16:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, mu
843 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
844 ; CHECK-NEXT:    vmv2r.v v8, v10
845 ; CHECK-NEXT:    ret
846   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
847   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
848   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)
849   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
850   %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)
851   ret <16 x i16> %u
854 define <16 x i16> @vnmsac_vx_nxv16i16_unmasked(<16 x i16> %a, i16 %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
855 ; CHECK-LABEL: vnmsac_vx_nxv16i16_unmasked:
856 ; CHECK:       # %bb.0:
857 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, ma
858 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8
859 ; CHECK-NEXT:    vmv2r.v v8, v10
860 ; CHECK-NEXT:    ret
861   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
862   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
863   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)
864   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
865   %u = call <16 x i16> @llvm.vp.merge.nxv16i16(<16 x i1> splat (i1 -1), <16 x i16> %y, <16 x i16> %c, i32 %evl)
866   ret <16 x i16> %u
869 define <16 x i16> @vnmsac_vv_nxv16i16_ta(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
870 ; CHECK-LABEL: vnmsac_vv_nxv16i16_ta:
871 ; CHECK:       # %bb.0:
872 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
873 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
874 ; CHECK-NEXT:    vmv.v.v v8, v12
875 ; CHECK-NEXT:    ret
876   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %b, <16 x i1> splat (i1 -1), i32 %evl)
877   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
878   %u = call <16 x i16> @llvm.vp.select.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)
879   ret <16 x i16> %u
882 define <16 x i16> @vnmsac_vx_nxv16i16_ta(<16 x i16> %a, i16 %b, <16 x i16> %c,  <16 x i1> %m, i32 zeroext %evl) {
883 ; CHECK-LABEL: vnmsac_vx_nxv16i16_ta:
884 ; CHECK:       # %bb.0:
885 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
886 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
887 ; CHECK-NEXT:    vmv.v.v v8, v10
888 ; CHECK-NEXT:    ret
889   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
890   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
891   %x = call <16 x i16> @llvm.vp.mul.nxv16i16(<16 x i16> %a, <16 x i16> %vb, <16 x i1> splat (i1 -1), i32 %evl)
892   %y = call <16 x i16> @llvm.vp.sub.nxv16i16(<16 x i16> %c, <16 x i16> %x, <16 x i1> splat (i1 -1), i32 %evl)
893   %u = call <16 x i16> @llvm.vp.select.nxv16i16(<16 x i1> %m, <16 x i16> %y, <16 x i16> %c, i32 %evl)
894   ret <16 x i16> %u
897 declare <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16>, <32 x i16>, <32 x i1>, i32)
898 declare <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16>, <32 x i16>, <32 x i1>, i32)
899 declare <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1>, <32 x i16>, <32 x i16>, i32)
900 declare <32 x i16> @llvm.vp.select.nxv32i16(<32 x i1>, <32 x i16>, <32 x i16>, i32)
902 define <32 x i16> @vnmsac_vv_nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
903 ; CHECK-LABEL: vnmsac_vv_nxv32i16:
904 ; CHECK:       # %bb.0:
905 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
906 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
907 ; CHECK-NEXT:    vmv4r.v v8, v16
908 ; CHECK-NEXT:    ret
909   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)
910   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
911   %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)
912   ret <32 x i16> %u
915 define <32 x i16> @vnmsac_vv_nxv32i16_unmasked(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
916 ; CHECK-LABEL: vnmsac_vv_nxv32i16_unmasked:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
919 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
920 ; CHECK-NEXT:    vmv4r.v v8, v16
921 ; CHECK-NEXT:    ret
922   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)
923   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
924   %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> splat (i1 -1), <32 x i16> %y, <32 x i16> %c, i32 %evl)
925   ret <32 x i16> %u
928 define <32 x i16> @vnmsac_vx_nxv32i16(<32 x i16> %a, i16 %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
929 ; CHECK-LABEL: vnmsac_vx_nxv32i16:
930 ; CHECK:       # %bb.0:
931 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, mu
932 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
933 ; CHECK-NEXT:    vmv4r.v v8, v12
934 ; CHECK-NEXT:    ret
935   %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0
936   %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer
937   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)
938   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
939   %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)
940   ret <32 x i16> %u
943 define <32 x i16> @vnmsac_vx_nxv32i16_unmasked(<32 x i16> %a, i16 %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
944 ; CHECK-LABEL: vnmsac_vx_nxv32i16_unmasked:
945 ; CHECK:       # %bb.0:
946 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, tu, ma
947 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8
948 ; CHECK-NEXT:    vmv4r.v v8, v12
949 ; CHECK-NEXT:    ret
950   %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0
951   %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer
952   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)
953   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
954   %u = call <32 x i16> @llvm.vp.merge.nxv32i16(<32 x i1> splat (i1 -1), <32 x i16> %y, <32 x i16> %c, i32 %evl)
955   ret <32 x i16> %u
958 define <32 x i16> @vnmsac_vv_nxv32i16_ta(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
959 ; CHECK-LABEL: vnmsac_vv_nxv32i16_ta:
960 ; CHECK:       # %bb.0:
961 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
962 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
963 ; CHECK-NEXT:    vmv.v.v v8, v16
964 ; CHECK-NEXT:    ret
965   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %b, <32 x i1> splat (i1 -1), i32 %evl)
966   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
967   %u = call <32 x i16> @llvm.vp.select.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)
968   ret <32 x i16> %u
971 define <32 x i16> @vnmsac_vx_nxv32i16_ta(<32 x i16> %a, i16 %b, <32 x i16> %c,  <32 x i1> %m, i32 zeroext %evl) {
972 ; CHECK-LABEL: vnmsac_vx_nxv32i16_ta:
973 ; CHECK:       # %bb.0:
974 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
975 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
976 ; CHECK-NEXT:    vmv.v.v v8, v12
977 ; CHECK-NEXT:    ret
978   %elt.head = insertelement <32 x i16> poison, i16 %b, i32 0
979   %vb = shufflevector <32 x i16> %elt.head, <32 x i16> poison, <32 x i32> zeroinitializer
980   %x = call <32 x i16> @llvm.vp.mul.nxv32i16(<32 x i16> %a, <32 x i16> %vb, <32 x i1> splat (i1 -1), i32 %evl)
981   %y = call <32 x i16> @llvm.vp.sub.nxv32i16(<32 x i16> %c, <32 x i16> %x, <32 x i1> splat (i1 -1), i32 %evl)
982   %u = call <32 x i16> @llvm.vp.select.nxv32i16(<32 x i1> %m, <32 x i16> %y, <32 x i16> %c, i32 %evl)
983   ret <32 x i16> %u
986 declare <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
987 declare <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
988 declare <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1>, <2 x i32>, <2 x i32>, i32)
989 declare <2 x i32> @llvm.vp.select.nxv2i32(<2 x i1>, <2 x i32>, <2 x i32>, i32)
991 define <2 x i32> @vnmsac_vv_nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
992 ; CHECK-LABEL: vnmsac_vv_nxv2i32:
993 ; CHECK:       # %bb.0:
994 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
995 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
996 ; CHECK-NEXT:    vmv1r.v v8, v10
997 ; CHECK-NEXT:    ret
998   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)
999   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1000   %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)
1001   ret <2 x i32> %u
1004 define <2 x i32> @vnmsac_vv_nxv2i32_unmasked(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
1005 ; CHECK-LABEL: vnmsac_vv_nxv2i32_unmasked:
1006 ; CHECK:       # %bb.0:
1007 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
1008 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1009 ; CHECK-NEXT:    vmv1r.v v8, v10
1010 ; CHECK-NEXT:    ret
1011   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)
1012   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1013   %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> splat (i1 -1), <2 x i32> %y, <2 x i32> %c, i32 %evl)
1014   ret <2 x i32> %u
1017 define <2 x i32> @vnmsac_vx_nxv2i32(<2 x i32> %a, i32 %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
1018 ; CHECK-LABEL: vnmsac_vx_nxv2i32:
1019 ; CHECK:       # %bb.0:
1020 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, mu
1021 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1022 ; CHECK-NEXT:    vmv1r.v v8, v9
1023 ; CHECK-NEXT:    ret
1024   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
1025   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
1026   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1027   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1028   %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)
1029   ret <2 x i32> %u
1032 define <2 x i32> @vnmsac_vx_nxv2i32_unmasked(<2 x i32> %a, i32 %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
1033 ; CHECK-LABEL: vnmsac_vx_nxv2i32_unmasked:
1034 ; CHECK:       # %bb.0:
1035 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, ma
1036 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
1037 ; CHECK-NEXT:    vmv1r.v v8, v9
1038 ; CHECK-NEXT:    ret
1039   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
1040   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
1041   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1042   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1043   %u = call <2 x i32> @llvm.vp.merge.nxv2i32(<2 x i1> splat (i1 -1), <2 x i32> %y, <2 x i32> %c, i32 %evl)
1044   ret <2 x i32> %u
1047 define <2 x i32> @vnmsac_vv_nxv2i32_ta(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vnmsac_vv_nxv2i32_ta:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1051 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1052 ; CHECK-NEXT:    vmv1r.v v8, v10
1053 ; CHECK-NEXT:    ret
1054   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %b, <2 x i1> splat (i1 -1), i32 %evl)
1055   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1056   %u = call <2 x i32> @llvm.vp.select.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)
1057   ret <2 x i32> %u
1060 define <2 x i32> @vnmsac_vx_nxv2i32_ta(<2 x i32> %a, i32 %b, <2 x i32> %c,  <2 x i1> %m, i32 zeroext %evl) {
1061 ; CHECK-LABEL: vnmsac_vx_nxv2i32_ta:
1062 ; CHECK:       # %bb.0:
1063 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
1064 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1065 ; CHECK-NEXT:    vmv1r.v v8, v9
1066 ; CHECK-NEXT:    ret
1067   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
1068   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
1069   %x = call <2 x i32> @llvm.vp.mul.nxv2i32(<2 x i32> %a, <2 x i32> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1070   %y = call <2 x i32> @llvm.vp.sub.nxv2i32(<2 x i32> %c, <2 x i32> %x, <2 x i1> splat (i1 -1), i32 %evl)
1071   %u = call <2 x i32> @llvm.vp.select.nxv2i32(<2 x i1> %m, <2 x i32> %y, <2 x i32> %c, i32 %evl)
1072   ret <2 x i32> %u
1075 declare <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
1076 declare <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
1077 declare <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1>, <4 x i32>, <4 x i32>, i32)
1078 declare <4 x i32> @llvm.vp.select.nxv4i32(<4 x i1>, <4 x i32>, <4 x i32>, i32)
1080 define <4 x i32> @vnmsac_vv_nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1081 ; CHECK-LABEL: vnmsac_vv_nxv4i32:
1082 ; CHECK:       # %bb.0:
1083 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
1084 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1085 ; CHECK-NEXT:    vmv1r.v v8, v10
1086 ; CHECK-NEXT:    ret
1087   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)
1088   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1089   %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)
1090   ret <4 x i32> %u
1093 define <4 x i32> @vnmsac_vv_nxv4i32_unmasked(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1094 ; CHECK-LABEL: vnmsac_vv_nxv4i32_unmasked:
1095 ; CHECK:       # %bb.0:
1096 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
1097 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1098 ; CHECK-NEXT:    vmv1r.v v8, v10
1099 ; CHECK-NEXT:    ret
1100   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)
1101   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1102   %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> splat (i1 -1), <4 x i32> %y, <4 x i32> %c, i32 %evl)
1103   ret <4 x i32> %u
1106 define <4 x i32> @vnmsac_vx_nxv4i32(<4 x i32> %a, i32 %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1107 ; CHECK-LABEL: vnmsac_vx_nxv4i32:
1108 ; CHECK:       # %bb.0:
1109 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
1110 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1111 ; CHECK-NEXT:    vmv1r.v v8, v9
1112 ; CHECK-NEXT:    ret
1113   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
1114   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
1115   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1116   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1117   %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)
1118   ret <4 x i32> %u
1121 define <4 x i32> @vnmsac_vx_nxv4i32_unmasked(<4 x i32> %a, i32 %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1122 ; CHECK-LABEL: vnmsac_vx_nxv4i32_unmasked:
1123 ; CHECK:       # %bb.0:
1124 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, ma
1125 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8
1126 ; CHECK-NEXT:    vmv1r.v v8, v9
1127 ; CHECK-NEXT:    ret
1128   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
1129   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
1130   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1131   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1132   %u = call <4 x i32> @llvm.vp.merge.nxv4i32(<4 x i1> splat (i1 -1), <4 x i32> %y, <4 x i32> %c, i32 %evl)
1133   ret <4 x i32> %u
1136 define <4 x i32> @vnmsac_vv_nxv4i32_ta(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1137 ; CHECK-LABEL: vnmsac_vv_nxv4i32_ta:
1138 ; CHECK:       # %bb.0:
1139 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1140 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1141 ; CHECK-NEXT:    vmv.v.v v8, v10
1142 ; CHECK-NEXT:    ret
1143   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %b, <4 x i1> splat (i1 -1), i32 %evl)
1144   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1145   %u = call <4 x i32> @llvm.vp.select.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)
1146   ret <4 x i32> %u
1149 define <4 x i32> @vnmsac_vx_nxv4i32_ta(<4 x i32> %a, i32 %b, <4 x i32> %c,  <4 x i1> %m, i32 zeroext %evl) {
1150 ; CHECK-LABEL: vnmsac_vx_nxv4i32_ta:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
1153 ; CHECK-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1154 ; CHECK-NEXT:    vmv.v.v v8, v9
1155 ; CHECK-NEXT:    ret
1156   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
1157   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
1158   %x = call <4 x i32> @llvm.vp.mul.nxv4i32(<4 x i32> %a, <4 x i32> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1159   %y = call <4 x i32> @llvm.vp.sub.nxv4i32(<4 x i32> %c, <4 x i32> %x, <4 x i1> splat (i1 -1), i32 %evl)
1160   %u = call <4 x i32> @llvm.vp.select.nxv4i32(<4 x i1> %m, <4 x i32> %y, <4 x i32> %c, i32 %evl)
1161   ret <4 x i32> %u
1164 declare <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
1165 declare <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
1166 declare <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1>, <8 x i32>, <8 x i32>, i32)
1167 declare <8 x i32> @llvm.vp.select.nxv8i32(<8 x i1>, <8 x i32>, <8 x i32>, i32)
1169 define <8 x i32> @vnmsac_vv_nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1170 ; CHECK-LABEL: vnmsac_vv_nxv8i32:
1171 ; CHECK:       # %bb.0:
1172 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
1173 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1174 ; CHECK-NEXT:    vmv2r.v v8, v12
1175 ; CHECK-NEXT:    ret
1176   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)
1177   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1178   %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)
1179   ret <8 x i32> %u
1182 define <8 x i32> @vnmsac_vv_nxv8i32_unmasked(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1183 ; CHECK-LABEL: vnmsac_vv_nxv8i32_unmasked:
1184 ; CHECK:       # %bb.0:
1185 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
1186 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
1187 ; CHECK-NEXT:    vmv2r.v v8, v12
1188 ; CHECK-NEXT:    ret
1189   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)
1190   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1191   %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> splat (i1 -1), <8 x i32> %y, <8 x i32> %c, i32 %evl)
1192   ret <8 x i32> %u
1195 define <8 x i32> @vnmsac_vx_nxv8i32(<8 x i32> %a, i32 %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1196 ; CHECK-LABEL: vnmsac_vx_nxv8i32:
1197 ; CHECK:       # %bb.0:
1198 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, mu
1199 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1200 ; CHECK-NEXT:    vmv2r.v v8, v10
1201 ; CHECK-NEXT:    ret
1202   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
1203   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
1204   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1205   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1206   %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)
1207   ret <8 x i32> %u
1210 define <8 x i32> @vnmsac_vx_nxv8i32_unmasked(<8 x i32> %a, i32 %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1211 ; CHECK-LABEL: vnmsac_vx_nxv8i32_unmasked:
1212 ; CHECK:       # %bb.0:
1213 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, ma
1214 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8
1215 ; CHECK-NEXT:    vmv2r.v v8, v10
1216 ; CHECK-NEXT:    ret
1217   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
1218   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
1219   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1220   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1221   %u = call <8 x i32> @llvm.vp.merge.nxv8i32(<8 x i1> splat (i1 -1), <8 x i32> %y, <8 x i32> %c, i32 %evl)
1222   ret <8 x i32> %u
1225 define <8 x i32> @vnmsac_vv_nxv8i32_ta(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1226 ; CHECK-LABEL: vnmsac_vv_nxv8i32_ta:
1227 ; CHECK:       # %bb.0:
1228 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1229 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1230 ; CHECK-NEXT:    vmv.v.v v8, v12
1231 ; CHECK-NEXT:    ret
1232   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %b, <8 x i1> splat (i1 -1), i32 %evl)
1233   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1234   %u = call <8 x i32> @llvm.vp.select.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)
1235   ret <8 x i32> %u
1238 define <8 x i32> @vnmsac_vx_nxv8i32_ta(<8 x i32> %a, i32 %b, <8 x i32> %c,  <8 x i1> %m, i32 zeroext %evl) {
1239 ; CHECK-LABEL: vnmsac_vx_nxv8i32_ta:
1240 ; CHECK:       # %bb.0:
1241 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
1242 ; CHECK-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1243 ; CHECK-NEXT:    vmv.v.v v8, v10
1244 ; CHECK-NEXT:    ret
1245   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
1246   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
1247   %x = call <8 x i32> @llvm.vp.mul.nxv8i32(<8 x i32> %a, <8 x i32> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1248   %y = call <8 x i32> @llvm.vp.sub.nxv8i32(<8 x i32> %c, <8 x i32> %x, <8 x i1> splat (i1 -1), i32 %evl)
1249   %u = call <8 x i32> @llvm.vp.select.nxv8i32(<8 x i1> %m, <8 x i32> %y, <8 x i32> %c, i32 %evl)
1250   ret <8 x i32> %u
1253 declare <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
1254 declare <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
1255 declare <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1>, <16 x i32>, <16 x i32>, i32)
1256 declare <16 x i32> @llvm.vp.select.nxv16i32(<16 x i1>, <16 x i32>, <16 x i32>, i32)
1258 define <16 x i32> @vnmsac_vv_nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1259 ; CHECK-LABEL: vnmsac_vv_nxv16i32:
1260 ; CHECK:       # %bb.0:
1261 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1262 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1263 ; CHECK-NEXT:    vmv4r.v v8, v16
1264 ; CHECK-NEXT:    ret
1265   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)
1266   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1267   %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)
1268   ret <16 x i32> %u
1271 define <16 x i32> @vnmsac_vv_nxv16i32_unmasked(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1272 ; CHECK-LABEL: vnmsac_vv_nxv16i32_unmasked:
1273 ; CHECK:       # %bb.0:
1274 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1275 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
1276 ; CHECK-NEXT:    vmv4r.v v8, v16
1277 ; CHECK-NEXT:    ret
1278   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)
1279   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1280   %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> splat (i1 -1), <16 x i32> %y, <16 x i32> %c, i32 %evl)
1281   ret <16 x i32> %u
1284 define <16 x i32> @vnmsac_vx_nxv16i32(<16 x i32> %a, i32 %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1285 ; CHECK-LABEL: vnmsac_vx_nxv16i32:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, mu
1288 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1289 ; CHECK-NEXT:    vmv4r.v v8, v12
1290 ; CHECK-NEXT:    ret
1291   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
1292   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
1293   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)
1294   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1295   %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)
1296   ret <16 x i32> %u
1299 define <16 x i32> @vnmsac_vx_nxv16i32_unmasked(<16 x i32> %a, i32 %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1300 ; CHECK-LABEL: vnmsac_vx_nxv16i32_unmasked:
1301 ; CHECK:       # %bb.0:
1302 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, ma
1303 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8
1304 ; CHECK-NEXT:    vmv4r.v v8, v12
1305 ; CHECK-NEXT:    ret
1306   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
1307   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
1308   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)
1309   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1310   %u = call <16 x i32> @llvm.vp.merge.nxv16i32(<16 x i1> splat (i1 -1), <16 x i32> %y, <16 x i32> %c, i32 %evl)
1311   ret <16 x i32> %u
1314 define <16 x i32> @vnmsac_vv_nxv16i32_ta(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1315 ; CHECK-LABEL: vnmsac_vv_nxv16i32_ta:
1316 ; CHECK:       # %bb.0:
1317 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1318 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1319 ; CHECK-NEXT:    vmv.v.v v8, v16
1320 ; CHECK-NEXT:    ret
1321   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %b, <16 x i1> splat (i1 -1), i32 %evl)
1322   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1323   %u = call <16 x i32> @llvm.vp.select.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)
1324   ret <16 x i32> %u
1327 define <16 x i32> @vnmsac_vx_nxv16i32_ta(<16 x i32> %a, i32 %b, <16 x i32> %c,  <16 x i1> %m, i32 zeroext %evl) {
1328 ; CHECK-LABEL: vnmsac_vx_nxv16i32_ta:
1329 ; CHECK:       # %bb.0:
1330 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
1331 ; CHECK-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1332 ; CHECK-NEXT:    vmv.v.v v8, v12
1333 ; CHECK-NEXT:    ret
1334   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
1335   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
1336   %x = call <16 x i32> @llvm.vp.mul.nxv16i32(<16 x i32> %a, <16 x i32> %vb, <16 x i1> splat (i1 -1), i32 %evl)
1337   %y = call <16 x i32> @llvm.vp.sub.nxv16i32(<16 x i32> %c, <16 x i32> %x, <16 x i1> splat (i1 -1), i32 %evl)
1338   %u = call <16 x i32> @llvm.vp.select.nxv16i32(<16 x i1> %m, <16 x i32> %y, <16 x i32> %c, i32 %evl)
1339   ret <16 x i32> %u
1342 declare <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
1343 declare <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
1344 declare <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1>, <2 x i64>, <2 x i64>, i32)
1345 declare <2 x i64> @llvm.vp.select.nxv2i64(<2 x i1>, <2 x i64>, <2 x i64>, i32)
1347 define <2 x i64> @vnmsac_vv_nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1348 ; CHECK-LABEL: vnmsac_vv_nxv2i64:
1349 ; CHECK:       # %bb.0:
1350 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1351 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1352 ; CHECK-NEXT:    vmv1r.v v8, v10
1353 ; CHECK-NEXT:    ret
1354   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)
1355   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1356   %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)
1357   ret <2 x i64> %u
1360 define <2 x i64> @vnmsac_vv_nxv2i64_unmasked(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1361 ; CHECK-LABEL: vnmsac_vv_nxv2i64_unmasked:
1362 ; CHECK:       # %bb.0:
1363 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1364 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9
1365 ; CHECK-NEXT:    vmv1r.v v8, v10
1366 ; CHECK-NEXT:    ret
1367   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)
1368   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1369   %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> splat (i1 -1), <2 x i64> %y, <2 x i64> %c, i32 %evl)
1370   ret <2 x i64> %u
1373 define <2 x i64> @vnmsac_vx_nxv2i64(<2 x i64> %a, i64 %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1374 ; RV32-LABEL: vnmsac_vx_nxv2i64:
1375 ; RV32:       # %bb.0:
1376 ; RV32-NEXT:    addi sp, sp, -16
1377 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1378 ; RV32-NEXT:    sw a0, 8(sp)
1379 ; RV32-NEXT:    sw a1, 12(sp)
1380 ; RV32-NEXT:    addi a0, sp, 8
1381 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1382 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1383 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, tu, mu
1384 ; RV32-NEXT:    vnmsac.vv v9, v8, v10, v0.t
1385 ; RV32-NEXT:    vmv1r.v v8, v9
1386 ; RV32-NEXT:    addi sp, sp, 16
1387 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1388 ; RV32-NEXT:    ret
1390 ; RV64-LABEL: vnmsac_vx_nxv2i64:
1391 ; RV64:       # %bb.0:
1392 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, mu
1393 ; RV64-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1394 ; RV64-NEXT:    vmv1r.v v8, v9
1395 ; RV64-NEXT:    ret
1396   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1397   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1398   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1399   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1400   %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)
1401   ret <2 x i64> %u
1404 define <2 x i64> @vnmsac_vx_nxv2i64_unmasked(<2 x i64> %a, i64 %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1405 ; RV32-LABEL: vnmsac_vx_nxv2i64_unmasked:
1406 ; RV32:       # %bb.0:
1407 ; RV32-NEXT:    addi sp, sp, -16
1408 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1409 ; RV32-NEXT:    sw a0, 8(sp)
1410 ; RV32-NEXT:    sw a1, 12(sp)
1411 ; RV32-NEXT:    addi a0, sp, 8
1412 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1413 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1414 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, tu, ma
1415 ; RV32-NEXT:    vnmsac.vv v9, v8, v10
1416 ; RV32-NEXT:    vmv1r.v v8, v9
1417 ; RV32-NEXT:    addi sp, sp, 16
1418 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1419 ; RV32-NEXT:    ret
1421 ; RV64-LABEL: vnmsac_vx_nxv2i64_unmasked:
1422 ; RV64:       # %bb.0:
1423 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, ma
1424 ; RV64-NEXT:    vnmsac.vx v9, a0, v8
1425 ; RV64-NEXT:    vmv1r.v v8, v9
1426 ; RV64-NEXT:    ret
1427   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1428   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1429   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1430   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1431   %u = call <2 x i64> @llvm.vp.merge.nxv2i64(<2 x i1> splat (i1 -1), <2 x i64> %y, <2 x i64> %c, i32 %evl)
1432   ret <2 x i64> %u
1435 define <2 x i64> @vnmsac_vv_nxv2i64_ta(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1436 ; CHECK-LABEL: vnmsac_vv_nxv2i64_ta:
1437 ; CHECK:       # %bb.0:
1438 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1439 ; CHECK-NEXT:    vnmsac.vv v10, v8, v9, v0.t
1440 ; CHECK-NEXT:    vmv.v.v v8, v10
1441 ; CHECK-NEXT:    ret
1442   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %b, <2 x i1> splat (i1 -1), i32 %evl)
1443   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1444   %u = call <2 x i64> @llvm.vp.select.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)
1445   ret <2 x i64> %u
1448 define <2 x i64> @vnmsac_vx_nxv2i64_ta(<2 x i64> %a, i64 %b, <2 x i64> %c,  <2 x i1> %m, i32 zeroext %evl) {
1449 ; RV32-LABEL: vnmsac_vx_nxv2i64_ta:
1450 ; RV32:       # %bb.0:
1451 ; RV32-NEXT:    addi sp, sp, -16
1452 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1453 ; RV32-NEXT:    sw a0, 8(sp)
1454 ; RV32-NEXT:    sw a1, 12(sp)
1455 ; RV32-NEXT:    addi a0, sp, 8
1456 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1457 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1458 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, mu
1459 ; RV32-NEXT:    vnmsac.vv v9, v8, v10, v0.t
1460 ; RV32-NEXT:    vmv.v.v v8, v9
1461 ; RV32-NEXT:    addi sp, sp, 16
1462 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1463 ; RV32-NEXT:    ret
1465 ; RV64-LABEL: vnmsac_vx_nxv2i64_ta:
1466 ; RV64:       # %bb.0:
1467 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, mu
1468 ; RV64-NEXT:    vnmsac.vx v9, a0, v8, v0.t
1469 ; RV64-NEXT:    vmv.v.v v8, v9
1470 ; RV64-NEXT:    ret
1471   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1472   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1473   %x = call <2 x i64> @llvm.vp.mul.nxv2i64(<2 x i64> %a, <2 x i64> %vb, <2 x i1> splat (i1 -1), i32 %evl)
1474   %y = call <2 x i64> @llvm.vp.sub.nxv2i64(<2 x i64> %c, <2 x i64> %x, <2 x i1> splat (i1 -1), i32 %evl)
1475   %u = call <2 x i64> @llvm.vp.select.nxv2i64(<2 x i1> %m, <2 x i64> %y, <2 x i64> %c, i32 %evl)
1476   ret <2 x i64> %u
1479 declare <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1480 declare <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1481 declare <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1>, <4 x i64>, <4 x i64>, i32)
1482 declare <4 x i64> @llvm.vp.select.nxv4i64(<4 x i1>, <4 x i64>, <4 x i64>, i32)
1484 define <4 x i64> @vnmsac_vv_nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1485 ; CHECK-LABEL: vnmsac_vv_nxv4i64:
1486 ; CHECK:       # %bb.0:
1487 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1488 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1489 ; CHECK-NEXT:    vmv2r.v v8, v12
1490 ; CHECK-NEXT:    ret
1491   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)
1492   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1493   %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)
1494   ret <4 x i64> %u
1497 define <4 x i64> @vnmsac_vv_nxv4i64_unmasked(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1498 ; CHECK-LABEL: vnmsac_vv_nxv4i64_unmasked:
1499 ; CHECK:       # %bb.0:
1500 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1501 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10
1502 ; CHECK-NEXT:    vmv2r.v v8, v12
1503 ; CHECK-NEXT:    ret
1504   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)
1505   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1506   %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> splat (i1 -1), <4 x i64> %y, <4 x i64> %c, i32 %evl)
1507   ret <4 x i64> %u
1510 define <4 x i64> @vnmsac_vx_nxv4i64(<4 x i64> %a, i64 %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1511 ; RV32-LABEL: vnmsac_vx_nxv4i64:
1512 ; RV32:       # %bb.0:
1513 ; RV32-NEXT:    addi sp, sp, -16
1514 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1515 ; RV32-NEXT:    sw a0, 8(sp)
1516 ; RV32-NEXT:    sw a1, 12(sp)
1517 ; RV32-NEXT:    addi a0, sp, 8
1518 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1519 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1520 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, tu, mu
1521 ; RV32-NEXT:    vnmsac.vv v10, v8, v12, v0.t
1522 ; RV32-NEXT:    vmv2r.v v8, v10
1523 ; RV32-NEXT:    addi sp, sp, 16
1524 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1525 ; RV32-NEXT:    ret
1527 ; RV64-LABEL: vnmsac_vx_nxv4i64:
1528 ; RV64:       # %bb.0:
1529 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, mu
1530 ; RV64-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1531 ; RV64-NEXT:    vmv2r.v v8, v10
1532 ; RV64-NEXT:    ret
1533   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1534   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1535   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1536   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1537   %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)
1538   ret <4 x i64> %u
1541 define <4 x i64> @vnmsac_vx_nxv4i64_unmasked(<4 x i64> %a, i64 %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1542 ; RV32-LABEL: vnmsac_vx_nxv4i64_unmasked:
1543 ; RV32:       # %bb.0:
1544 ; RV32-NEXT:    addi sp, sp, -16
1545 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1546 ; RV32-NEXT:    sw a0, 8(sp)
1547 ; RV32-NEXT:    sw a1, 12(sp)
1548 ; RV32-NEXT:    addi a0, sp, 8
1549 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1550 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1551 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, tu, ma
1552 ; RV32-NEXT:    vnmsac.vv v10, v8, v12
1553 ; RV32-NEXT:    vmv2r.v v8, v10
1554 ; RV32-NEXT:    addi sp, sp, 16
1555 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1556 ; RV32-NEXT:    ret
1558 ; RV64-LABEL: vnmsac_vx_nxv4i64_unmasked:
1559 ; RV64:       # %bb.0:
1560 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, ma
1561 ; RV64-NEXT:    vnmsac.vx v10, a0, v8
1562 ; RV64-NEXT:    vmv2r.v v8, v10
1563 ; RV64-NEXT:    ret
1564   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1565   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1566   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1567   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1568   %u = call <4 x i64> @llvm.vp.merge.nxv4i64(<4 x i1> splat (i1 -1), <4 x i64> %y, <4 x i64> %c, i32 %evl)
1569   ret <4 x i64> %u
1572 define <4 x i64> @vnmsac_vv_nxv4i64_ta(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1573 ; CHECK-LABEL: vnmsac_vv_nxv4i64_ta:
1574 ; CHECK:       # %bb.0:
1575 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1576 ; CHECK-NEXT:    vnmsac.vv v12, v8, v10, v0.t
1577 ; CHECK-NEXT:    vmv.v.v v8, v12
1578 ; CHECK-NEXT:    ret
1579   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %b, <4 x i1> splat (i1 -1), i32 %evl)
1580   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1581   %u = call <4 x i64> @llvm.vp.select.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)
1582   ret <4 x i64> %u
1585 define <4 x i64> @vnmsac_vx_nxv4i64_ta(<4 x i64> %a, i64 %b, <4 x i64> %c,  <4 x i1> %m, i32 zeroext %evl) {
1586 ; RV32-LABEL: vnmsac_vx_nxv4i64_ta:
1587 ; RV32:       # %bb.0:
1588 ; RV32-NEXT:    addi sp, sp, -16
1589 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1590 ; RV32-NEXT:    sw a0, 8(sp)
1591 ; RV32-NEXT:    sw a1, 12(sp)
1592 ; RV32-NEXT:    addi a0, sp, 8
1593 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1594 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1595 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, mu
1596 ; RV32-NEXT:    vnmsac.vv v10, v8, v12, v0.t
1597 ; RV32-NEXT:    vmv.v.v v8, v10
1598 ; RV32-NEXT:    addi sp, sp, 16
1599 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1600 ; RV32-NEXT:    ret
1602 ; RV64-LABEL: vnmsac_vx_nxv4i64_ta:
1603 ; RV64:       # %bb.0:
1604 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, mu
1605 ; RV64-NEXT:    vnmsac.vx v10, a0, v8, v0.t
1606 ; RV64-NEXT:    vmv.v.v v8, v10
1607 ; RV64-NEXT:    ret
1608   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1609   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1610   %x = call <4 x i64> @llvm.vp.mul.nxv4i64(<4 x i64> %a, <4 x i64> %vb, <4 x i1> splat (i1 -1), i32 %evl)
1611   %y = call <4 x i64> @llvm.vp.sub.nxv4i64(<4 x i64> %c, <4 x i64> %x, <4 x i1> splat (i1 -1), i32 %evl)
1612   %u = call <4 x i64> @llvm.vp.select.nxv4i64(<4 x i1> %m, <4 x i64> %y, <4 x i64> %c, i32 %evl)
1613   ret <4 x i64> %u
1616 declare <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1617 declare <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1618 declare <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1>, <8 x i64>, <8 x i64>, i32)
1619 declare <8 x i64> @llvm.vp.select.nxv8i64(<8 x i1>, <8 x i64>, <8 x i64>, i32)
1621 define <8 x i64> @vnmsac_vv_nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1622 ; CHECK-LABEL: vnmsac_vv_nxv8i64:
1623 ; CHECK:       # %bb.0:
1624 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1625 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1626 ; CHECK-NEXT:    vmv4r.v v8, v16
1627 ; CHECK-NEXT:    ret
1628   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)
1629   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1630   %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)
1631   ret <8 x i64> %u
1634 define <8 x i64> @vnmsac_vv_nxv8i64_unmasked(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1635 ; CHECK-LABEL: vnmsac_vv_nxv8i64_unmasked:
1636 ; CHECK:       # %bb.0:
1637 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1638 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12
1639 ; CHECK-NEXT:    vmv4r.v v8, v16
1640 ; CHECK-NEXT:    ret
1641   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)
1642   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1643   %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> splat (i1 -1), <8 x i64> %y, <8 x i64> %c, i32 %evl)
1644   ret <8 x i64> %u
1647 define <8 x i64> @vnmsac_vx_nxv8i64(<8 x i64> %a, i64 %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1648 ; RV32-LABEL: vnmsac_vx_nxv8i64:
1649 ; RV32:       # %bb.0:
1650 ; RV32-NEXT:    addi sp, sp, -16
1651 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1652 ; RV32-NEXT:    sw a0, 8(sp)
1653 ; RV32-NEXT:    sw a1, 12(sp)
1654 ; RV32-NEXT:    addi a0, sp, 8
1655 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1656 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1657 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, tu, mu
1658 ; RV32-NEXT:    vnmsac.vv v12, v8, v16, v0.t
1659 ; RV32-NEXT:    vmv4r.v v8, v12
1660 ; RV32-NEXT:    addi sp, sp, 16
1661 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1662 ; RV32-NEXT:    ret
1664 ; RV64-LABEL: vnmsac_vx_nxv8i64:
1665 ; RV64:       # %bb.0:
1666 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, mu
1667 ; RV64-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1668 ; RV64-NEXT:    vmv4r.v v8, v12
1669 ; RV64-NEXT:    ret
1670   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1671   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1672   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1673   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1674   %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)
1675   ret <8 x i64> %u
1678 define <8 x i64> @vnmsac_vx_nxv8i64_unmasked(<8 x i64> %a, i64 %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1679 ; RV32-LABEL: vnmsac_vx_nxv8i64_unmasked:
1680 ; RV32:       # %bb.0:
1681 ; RV32-NEXT:    addi sp, sp, -16
1682 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1683 ; RV32-NEXT:    sw a0, 8(sp)
1684 ; RV32-NEXT:    sw a1, 12(sp)
1685 ; RV32-NEXT:    addi a0, sp, 8
1686 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1687 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1688 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, tu, ma
1689 ; RV32-NEXT:    vnmsac.vv v12, v8, v16
1690 ; RV32-NEXT:    vmv4r.v v8, v12
1691 ; RV32-NEXT:    addi sp, sp, 16
1692 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1693 ; RV32-NEXT:    ret
1695 ; RV64-LABEL: vnmsac_vx_nxv8i64_unmasked:
1696 ; RV64:       # %bb.0:
1697 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, ma
1698 ; RV64-NEXT:    vnmsac.vx v12, a0, v8
1699 ; RV64-NEXT:    vmv4r.v v8, v12
1700 ; RV64-NEXT:    ret
1701   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1702   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1703   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1704   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1705   %u = call <8 x i64> @llvm.vp.merge.nxv8i64(<8 x i1> splat (i1 -1), <8 x i64> %y, <8 x i64> %c, i32 %evl)
1706   ret <8 x i64> %u
1709 define <8 x i64> @vnmsac_vv_nxv8i64_ta(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1710 ; CHECK-LABEL: vnmsac_vv_nxv8i64_ta:
1711 ; CHECK:       # %bb.0:
1712 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1713 ; CHECK-NEXT:    vnmsac.vv v16, v8, v12, v0.t
1714 ; CHECK-NEXT:    vmv.v.v v8, v16
1715 ; CHECK-NEXT:    ret
1716   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %b, <8 x i1> splat (i1 -1), i32 %evl)
1717   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1718   %u = call <8 x i64> @llvm.vp.select.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)
1719   ret <8 x i64> %u
1722 define <8 x i64> @vnmsac_vx_nxv8i64_ta(<8 x i64> %a, i64 %b, <8 x i64> %c,  <8 x i1> %m, i32 zeroext %evl) {
1723 ; RV32-LABEL: vnmsac_vx_nxv8i64_ta:
1724 ; RV32:       # %bb.0:
1725 ; RV32-NEXT:    addi sp, sp, -16
1726 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1727 ; RV32-NEXT:    sw a0, 8(sp)
1728 ; RV32-NEXT:    sw a1, 12(sp)
1729 ; RV32-NEXT:    addi a0, sp, 8
1730 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1731 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1732 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, mu
1733 ; RV32-NEXT:    vnmsac.vv v12, v8, v16, v0.t
1734 ; RV32-NEXT:    vmv.v.v v8, v12
1735 ; RV32-NEXT:    addi sp, sp, 16
1736 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1737 ; RV32-NEXT:    ret
1739 ; RV64-LABEL: vnmsac_vx_nxv8i64_ta:
1740 ; RV64:       # %bb.0:
1741 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, mu
1742 ; RV64-NEXT:    vnmsac.vx v12, a0, v8, v0.t
1743 ; RV64-NEXT:    vmv.v.v v8, v12
1744 ; RV64-NEXT:    ret
1745   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1746   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1747   %x = call <8 x i64> @llvm.vp.mul.nxv8i64(<8 x i64> %a, <8 x i64> %vb, <8 x i1> splat (i1 -1), i32 %evl)
1748   %y = call <8 x i64> @llvm.vp.sub.nxv8i64(<8 x i64> %c, <8 x i64> %x, <8 x i1> splat (i1 -1), i32 %evl)
1749   %u = call <8 x i64> @llvm.vp.select.nxv8i64(<8 x i1> %m, <8 x i64> %y, <8 x i64> %c, i32 %evl)
1750   ret <8 x i64> %u