Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsub-vp.ll
blob1c12614940082f0c0e2f7e78f9439a0921e0387c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <8 x i7> @llvm.vp.sub.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vsub_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsub_vv_v8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
13 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
14 ; CHECK-NEXT:    ret
15   %v = call <8 x i7> @llvm.vp.sub.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
16   ret <8 x i7> %v
19 declare <2 x i8> @llvm.vp.sub.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
21 define <2 x i8> @vsub_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
22 ; CHECK-LABEL: vsub_vv_v2i8:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
25 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
26 ; CHECK-NEXT:    ret
27   %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
28   ret <2 x i8> %v
31 define <2 x i8> @vsub_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
32 ; CHECK-LABEL: vsub_vv_v2i8_unmasked:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vsub.vv v8, v8, v9
36 ; CHECK-NEXT:    ret
37   %head = insertelement <2 x i1> poison, i1 true, i32 0
38   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
39   %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
40   ret <2 x i8> %v
43 define <2 x i8> @vsub_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
44 ; CHECK-LABEL: vsub_vx_v2i8:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
47 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
48 ; CHECK-NEXT:    ret
49   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
50   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
51   %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
52   ret <2 x i8> %v
55 define <2 x i8> @vsub_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
56 ; CHECK-LABEL: vsub_vx_v2i8_unmasked:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
59 ; CHECK-NEXT:    vsub.vx v8, v8, a0
60 ; CHECK-NEXT:    ret
61   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
62   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
63   %head = insertelement <2 x i1> poison, i1 true, i32 0
64   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
65   %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
66   ret <2 x i8> %v
69 declare <3 x i8> @llvm.vp.sub.v3i8(<3 x i8>, <3 x i8>, <3 x i1>, i32)
71 define <3 x i8> @vsub_vv_v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vsub_vv_v3i8:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
75 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
76 ; CHECK-NEXT:    ret
77   %v = call <3 x i8> @llvm.vp.sub.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 %evl)
78   ret <3 x i8> %v
81 define <3 x i8> @vsub_vv_v3i8_unmasked(<3 x i8> %va, <3 x i8> %b, i32 zeroext %evl) {
82 ; CHECK-LABEL: vsub_vv_v3i8_unmasked:
83 ; CHECK:       # %bb.0:
84 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
85 ; CHECK-NEXT:    vsub.vv v8, v8, v9
86 ; CHECK-NEXT:    ret
87   %head = insertelement <3 x i1> poison, i1 true, i32 0
88   %m = shufflevector <3 x i1> %head, <3 x i1> poison, <3 x i32> zeroinitializer
89   %v = call <3 x i8> @llvm.vp.sub.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 %evl)
90   ret <3 x i8> %v
93 define <3 x i8> @vsub_vx_v3i8(<3 x i8> %va, i8 %b, <3 x i1> %m, i32 zeroext %evl) {
94 ; CHECK-LABEL: vsub_vx_v3i8:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
97 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
98 ; CHECK-NEXT:    ret
99   %elt.head = insertelement <3 x i8> poison, i8 %b, i32 0
100   %vb = shufflevector <3 x i8> %elt.head, <3 x i8> poison, <3 x i32> zeroinitializer
101   %v = call <3 x i8> @llvm.vp.sub.v3i8(<3 x i8> %va, <3 x i8> %vb, <3 x i1> %m, i32 %evl)
102   ret <3 x i8> %v
105 define <3 x i8> @vsub_vx_v3i8_unmasked(<3 x i8> %va, i8 %b, i32 zeroext %evl) {
106 ; CHECK-LABEL: vsub_vx_v3i8_unmasked:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
109 ; CHECK-NEXT:    vsub.vx v8, v8, a0
110 ; CHECK-NEXT:    ret
111   %elt.head = insertelement <3 x i8> poison, i8 %b, i32 0
112   %vb = shufflevector <3 x i8> %elt.head, <3 x i8> poison, <3 x i32> zeroinitializer
113   %head = insertelement <3 x i1> poison, i1 true, i32 0
114   %m = shufflevector <3 x i1> %head, <3 x i1> poison, <3 x i32> zeroinitializer
115   %v = call <3 x i8> @llvm.vp.sub.v3i8(<3 x i8> %va, <3 x i8> %vb, <3 x i1> %m, i32 %evl)
116   ret <3 x i8> %v
119 declare <4 x i8> @llvm.vp.sub.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
121 define <4 x i8> @vsub_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
122 ; CHECK-LABEL: vsub_vv_v4i8:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
125 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
126 ; CHECK-NEXT:    ret
127   %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
128   ret <4 x i8> %v
131 define <4 x i8> @vsub_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
132 ; CHECK-LABEL: vsub_vv_v4i8_unmasked:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
135 ; CHECK-NEXT:    vsub.vv v8, v8, v9
136 ; CHECK-NEXT:    ret
137   %head = insertelement <4 x i1> poison, i1 true, i32 0
138   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
139   %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
140   ret <4 x i8> %v
143 define <4 x i8> @vsub_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
144 ; CHECK-LABEL: vsub_vx_v4i8:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
147 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
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   %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
152   ret <4 x i8> %v
155 define <4 x i8> @vsub_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
156 ; CHECK-LABEL: vsub_vx_v4i8_unmasked:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
159 ; CHECK-NEXT:    vsub.vx v8, v8, a0
160 ; CHECK-NEXT:    ret
161   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
162   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
163   %head = insertelement <4 x i1> poison, i1 true, i32 0
164   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
165   %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
166   ret <4 x i8> %v
169 declare <8 x i8> @llvm.vp.sub.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
171 define <8 x i8> @vsub_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vsub_vv_v8i8:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
175 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
176 ; CHECK-NEXT:    ret
177   %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
178   ret <8 x i8> %v
181 define <8 x i8> @vsub_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
182 ; CHECK-LABEL: vsub_vv_v8i8_unmasked:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
185 ; CHECK-NEXT:    vsub.vv v8, v8, v9
186 ; CHECK-NEXT:    ret
187   %head = insertelement <8 x i1> poison, i1 true, i32 0
188   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
189   %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
190   ret <8 x i8> %v
193 define <8 x i8> @vsub_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
194 ; CHECK-LABEL: vsub_vx_v8i8:
195 ; CHECK:       # %bb.0:
196 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
197 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
198 ; CHECK-NEXT:    ret
199   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
200   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
201   %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
202   ret <8 x i8> %v
205 define <8 x i8> @vsub_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
206 ; CHECK-LABEL: vsub_vx_v8i8_unmasked:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
209 ; CHECK-NEXT:    vsub.vx v8, v8, a0
210 ; CHECK-NEXT:    ret
211   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
212   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
213   %head = insertelement <8 x i1> poison, i1 true, i32 0
214   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
215   %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
216   ret <8 x i8> %v
219 declare <16 x i8> @llvm.vp.sub.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
221 define <16 x i8> @vsub_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
222 ; CHECK-LABEL: vsub_vv_v16i8:
223 ; CHECK:       # %bb.0:
224 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
225 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
226 ; CHECK-NEXT:    ret
227   %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
228   ret <16 x i8> %v
231 define <16 x i8> @vsub_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
232 ; CHECK-LABEL: vsub_vv_v16i8_unmasked:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
235 ; CHECK-NEXT:    vsub.vv v8, v8, v9
236 ; CHECK-NEXT:    ret
237   %head = insertelement <16 x i1> poison, i1 true, i32 0
238   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
239   %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
240   ret <16 x i8> %v
243 define <16 x i8> @vsub_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
244 ; CHECK-LABEL: vsub_vx_v16i8:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
247 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
248 ; CHECK-NEXT:    ret
249   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
250   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
251   %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
252   ret <16 x i8> %v
255 define <16 x i8> @vsub_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
256 ; CHECK-LABEL: vsub_vx_v16i8_unmasked:
257 ; CHECK:       # %bb.0:
258 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
259 ; CHECK-NEXT:    vsub.vx v8, v8, a0
260 ; CHECK-NEXT:    ret
261   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
262   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
263   %head = insertelement <16 x i1> poison, i1 true, i32 0
264   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
265   %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
266   ret <16 x i8> %v
269 declare <2 x i16> @llvm.vp.sub.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
271 define <2 x i16> @vsub_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
272 ; CHECK-LABEL: vsub_vv_v2i16:
273 ; CHECK:       # %bb.0:
274 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
275 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
276 ; CHECK-NEXT:    ret
277   %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
278   ret <2 x i16> %v
281 define <2 x i16> @vsub_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
282 ; CHECK-LABEL: vsub_vv_v2i16_unmasked:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
285 ; CHECK-NEXT:    vsub.vv v8, v8, v9
286 ; CHECK-NEXT:    ret
287   %head = insertelement <2 x i1> poison, i1 true, i32 0
288   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
289   %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
290   ret <2 x i16> %v
293 define <2 x i16> @vsub_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vsub_vx_v2i16:
295 ; CHECK:       # %bb.0:
296 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
297 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
298 ; CHECK-NEXT:    ret
299   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
300   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
301   %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
302   ret <2 x i16> %v
305 define <2 x i16> @vsub_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
306 ; CHECK-LABEL: vsub_vx_v2i16_unmasked:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
309 ; CHECK-NEXT:    vsub.vx v8, v8, a0
310 ; CHECK-NEXT:    ret
311   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
312   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
313   %head = insertelement <2 x i1> poison, i1 true, i32 0
314   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
315   %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
316   ret <2 x i16> %v
319 declare <4 x i16> @llvm.vp.sub.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
321 define <4 x i16> @vsub_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
322 ; CHECK-LABEL: vsub_vv_v4i16:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
325 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
326 ; CHECK-NEXT:    ret
327   %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
328   ret <4 x i16> %v
331 define <4 x i16> @vsub_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
332 ; CHECK-LABEL: vsub_vv_v4i16_unmasked:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
335 ; CHECK-NEXT:    vsub.vv v8, v8, v9
336 ; CHECK-NEXT:    ret
337   %head = insertelement <4 x i1> poison, i1 true, i32 0
338   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
339   %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
340   ret <4 x i16> %v
343 define <4 x i16> @vsub_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vsub_vx_v4i16:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
347 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
348 ; CHECK-NEXT:    ret
349   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
350   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
351   %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
352   ret <4 x i16> %v
355 define <4 x i16> @vsub_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
356 ; CHECK-LABEL: vsub_vx_v4i16_unmasked:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
359 ; CHECK-NEXT:    vsub.vx v8, v8, a0
360 ; CHECK-NEXT:    ret
361   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
362   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
363   %head = insertelement <4 x i1> poison, i1 true, i32 0
364   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
365   %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
366   ret <4 x i16> %v
369 declare <8 x i16> @llvm.vp.sub.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
371 define <8 x i16> @vsub_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
372 ; CHECK-LABEL: vsub_vv_v8i16:
373 ; CHECK:       # %bb.0:
374 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
375 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
376 ; CHECK-NEXT:    ret
377   %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
378   ret <8 x i16> %v
381 define <8 x i16> @vsub_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
382 ; CHECK-LABEL: vsub_vv_v8i16_unmasked:
383 ; CHECK:       # %bb.0:
384 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
385 ; CHECK-NEXT:    vsub.vv v8, v8, v9
386 ; CHECK-NEXT:    ret
387   %head = insertelement <8 x i1> poison, i1 true, i32 0
388   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
389   %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
390   ret <8 x i16> %v
393 define <8 x i16> @vsub_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
394 ; CHECK-LABEL: vsub_vx_v8i16:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
397 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
398 ; CHECK-NEXT:    ret
399   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
400   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
401   %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
402   ret <8 x i16> %v
405 define <8 x i16> @vsub_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
406 ; CHECK-LABEL: vsub_vx_v8i16_unmasked:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
409 ; CHECK-NEXT:    vsub.vx v8, v8, a0
410 ; CHECK-NEXT:    ret
411   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
412   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
413   %head = insertelement <8 x i1> poison, i1 true, i32 0
414   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
415   %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
416   ret <8 x i16> %v
419 declare <16 x i16> @llvm.vp.sub.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
421 define <16 x i16> @vsub_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
422 ; CHECK-LABEL: vsub_vv_v16i16:
423 ; CHECK:       # %bb.0:
424 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
425 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
426 ; CHECK-NEXT:    ret
427   %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
428   ret <16 x i16> %v
431 define <16 x i16> @vsub_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
432 ; CHECK-LABEL: vsub_vv_v16i16_unmasked:
433 ; CHECK:       # %bb.0:
434 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
435 ; CHECK-NEXT:    vsub.vv v8, v8, v10
436 ; CHECK-NEXT:    ret
437   %head = insertelement <16 x i1> poison, i1 true, i32 0
438   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
439   %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
440   ret <16 x i16> %v
443 define <16 x i16> @vsub_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
444 ; CHECK-LABEL: vsub_vx_v16i16:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
447 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
448 ; CHECK-NEXT:    ret
449   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
450   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
451   %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
452   ret <16 x i16> %v
455 define <16 x i16> @vsub_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
456 ; CHECK-LABEL: vsub_vx_v16i16_unmasked:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
459 ; CHECK-NEXT:    vsub.vx v8, v8, a0
460 ; CHECK-NEXT:    ret
461   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
462   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
463   %head = insertelement <16 x i1> poison, i1 true, i32 0
464   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
465   %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
466   ret <16 x i16> %v
469 declare <2 x i32> @llvm.vp.sub.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
471 define <2 x i32> @vsub_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
472 ; CHECK-LABEL: vsub_vv_v2i32:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
475 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
476 ; CHECK-NEXT:    ret
477   %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
478   ret <2 x i32> %v
481 define <2 x i32> @vsub_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
482 ; CHECK-LABEL: vsub_vv_v2i32_unmasked:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
485 ; CHECK-NEXT:    vsub.vv v8, v8, v9
486 ; CHECK-NEXT:    ret
487   %head = insertelement <2 x i1> poison, i1 true, i32 0
488   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
489   %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
490   ret <2 x i32> %v
493 define <2 x i32> @vsub_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
494 ; CHECK-LABEL: vsub_vx_v2i32:
495 ; CHECK:       # %bb.0:
496 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
497 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
498 ; CHECK-NEXT:    ret
499   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
500   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
501   %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
502   ret <2 x i32> %v
505 define <2 x i32> @vsub_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
506 ; CHECK-LABEL: vsub_vx_v2i32_unmasked:
507 ; CHECK:       # %bb.0:
508 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
509 ; CHECK-NEXT:    vsub.vx v8, v8, a0
510 ; CHECK-NEXT:    ret
511   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
512   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
513   %head = insertelement <2 x i1> poison, i1 true, i32 0
514   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
515   %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
516   ret <2 x i32> %v
519 declare <4 x i32> @llvm.vp.sub.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
521 define <4 x i32> @vsub_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
522 ; CHECK-LABEL: vsub_vv_v4i32:
523 ; CHECK:       # %bb.0:
524 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
525 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
526 ; CHECK-NEXT:    ret
527   %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
528   ret <4 x i32> %v
531 define <4 x i32> @vsub_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
532 ; CHECK-LABEL: vsub_vv_v4i32_unmasked:
533 ; CHECK:       # %bb.0:
534 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
535 ; CHECK-NEXT:    vsub.vv v8, v8, v9
536 ; CHECK-NEXT:    ret
537   %head = insertelement <4 x i1> poison, i1 true, i32 0
538   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
539   %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
540   ret <4 x i32> %v
543 define <4 x i32> @vsub_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
544 ; CHECK-LABEL: vsub_vx_v4i32:
545 ; CHECK:       # %bb.0:
546 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
547 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
548 ; CHECK-NEXT:    ret
549   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
550   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
551   %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
552   ret <4 x i32> %v
555 define <4 x i32> @vsub_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
556 ; CHECK-LABEL: vsub_vx_v4i32_unmasked:
557 ; CHECK:       # %bb.0:
558 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
559 ; CHECK-NEXT:    vsub.vx v8, v8, a0
560 ; CHECK-NEXT:    ret
561   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
562   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
563   %head = insertelement <4 x i1> poison, i1 true, i32 0
564   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
565   %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
566   ret <4 x i32> %v
569 declare <8 x i32> @llvm.vp.sub.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
571 define <8 x i32> @vsub_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
572 ; CHECK-LABEL: vsub_vv_v8i32:
573 ; CHECK:       # %bb.0:
574 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
575 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
576 ; CHECK-NEXT:    ret
577   %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
578   ret <8 x i32> %v
581 define <8 x i32> @vsub_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
582 ; CHECK-LABEL: vsub_vv_v8i32_unmasked:
583 ; CHECK:       # %bb.0:
584 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
585 ; CHECK-NEXT:    vsub.vv v8, v8, v10
586 ; CHECK-NEXT:    ret
587   %head = insertelement <8 x i1> poison, i1 true, i32 0
588   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
589   %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
590   ret <8 x i32> %v
593 define <8 x i32> @vsub_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
594 ; CHECK-LABEL: vsub_vx_v8i32:
595 ; CHECK:       # %bb.0:
596 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
597 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
598 ; CHECK-NEXT:    ret
599   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
600   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
601   %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
602   ret <8 x i32> %v
605 define <8 x i32> @vsub_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
606 ; CHECK-LABEL: vsub_vx_v8i32_unmasked:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
609 ; CHECK-NEXT:    vsub.vx v8, v8, a0
610 ; CHECK-NEXT:    ret
611   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
612   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
613   %head = insertelement <8 x i1> poison, i1 true, i32 0
614   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
615   %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
616   ret <8 x i32> %v
619 declare <16 x i32> @llvm.vp.sub.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
621 define <16 x i32> @vsub_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
622 ; CHECK-LABEL: vsub_vv_v16i32:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
625 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
626 ; CHECK-NEXT:    ret
627   %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
628   ret <16 x i32> %v
631 define <16 x i32> @vsub_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
632 ; CHECK-LABEL: vsub_vv_v16i32_unmasked:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
635 ; CHECK-NEXT:    vsub.vv v8, v8, v12
636 ; CHECK-NEXT:    ret
637   %head = insertelement <16 x i1> poison, i1 true, i32 0
638   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
639   %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
640   ret <16 x i32> %v
643 define <16 x i32> @vsub_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
644 ; CHECK-LABEL: vsub_vx_v16i32:
645 ; CHECK:       # %bb.0:
646 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
647 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
648 ; CHECK-NEXT:    ret
649   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
650   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
651   %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
652   ret <16 x i32> %v
655 define <16 x i32> @vsub_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
656 ; CHECK-LABEL: vsub_vx_v16i32_unmasked:
657 ; CHECK:       # %bb.0:
658 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
659 ; CHECK-NEXT:    vsub.vx v8, v8, a0
660 ; CHECK-NEXT:    ret
661   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
662   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
663   %head = insertelement <16 x i1> poison, i1 true, i32 0
664   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
665   %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
666   ret <16 x i32> %v
669 declare <2 x i64> @llvm.vp.sub.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
671 define <2 x i64> @vsub_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
672 ; CHECK-LABEL: vsub_vv_v2i64:
673 ; CHECK:       # %bb.0:
674 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
675 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
676 ; CHECK-NEXT:    ret
677   %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
678   ret <2 x i64> %v
681 define <2 x i64> @vsub_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
682 ; CHECK-LABEL: vsub_vv_v2i64_unmasked:
683 ; CHECK:       # %bb.0:
684 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
685 ; CHECK-NEXT:    vsub.vv v8, v8, v9
686 ; CHECK-NEXT:    ret
687   %head = insertelement <2 x i1> poison, i1 true, i32 0
688   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
689   %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
690   ret <2 x i64> %v
693 define <2 x i64> @vsub_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
694 ; RV32-LABEL: vsub_vx_v2i64:
695 ; RV32:       # %bb.0:
696 ; RV32-NEXT:    addi sp, sp, -16
697 ; RV32-NEXT:    .cfi_def_cfa_offset 16
698 ; RV32-NEXT:    sw a1, 12(sp)
699 ; RV32-NEXT:    sw a0, 8(sp)
700 ; RV32-NEXT:    addi a0, sp, 8
701 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
702 ; RV32-NEXT:    vlse64.v v9, (a0), zero
703 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
704 ; RV32-NEXT:    vsub.vv v8, v8, v9, v0.t
705 ; RV32-NEXT:    addi sp, sp, 16
706 ; RV32-NEXT:    ret
708 ; RV64-LABEL: vsub_vx_v2i64:
709 ; RV64:       # %bb.0:
710 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
711 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
712 ; RV64-NEXT:    ret
713   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
714   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
715   %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
716   ret <2 x i64> %v
719 define <2 x i64> @vsub_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
720 ; RV32-LABEL: vsub_vx_v2i64_unmasked:
721 ; RV32:       # %bb.0:
722 ; RV32-NEXT:    addi sp, sp, -16
723 ; RV32-NEXT:    .cfi_def_cfa_offset 16
724 ; RV32-NEXT:    sw a1, 12(sp)
725 ; RV32-NEXT:    sw a0, 8(sp)
726 ; RV32-NEXT:    addi a0, sp, 8
727 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
728 ; RV32-NEXT:    vlse64.v v9, (a0), zero
729 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
730 ; RV32-NEXT:    vsub.vv v8, v8, v9
731 ; RV32-NEXT:    addi sp, sp, 16
732 ; RV32-NEXT:    ret
734 ; RV64-LABEL: vsub_vx_v2i64_unmasked:
735 ; RV64:       # %bb.0:
736 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
737 ; RV64-NEXT:    vsub.vx v8, v8, a0
738 ; RV64-NEXT:    ret
739   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
740   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
741   %head = insertelement <2 x i1> poison, i1 true, i32 0
742   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
743   %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
744   ret <2 x i64> %v
747 declare <4 x i64> @llvm.vp.sub.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
749 define <4 x i64> @vsub_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
750 ; CHECK-LABEL: vsub_vv_v4i64:
751 ; CHECK:       # %bb.0:
752 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
753 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
754 ; CHECK-NEXT:    ret
755   %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
756   ret <4 x i64> %v
759 define <4 x i64> @vsub_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
760 ; CHECK-LABEL: vsub_vv_v4i64_unmasked:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
763 ; CHECK-NEXT:    vsub.vv v8, v8, v10
764 ; CHECK-NEXT:    ret
765   %head = insertelement <4 x i1> poison, i1 true, i32 0
766   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
767   %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
768   ret <4 x i64> %v
771 define <4 x i64> @vsub_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
772 ; RV32-LABEL: vsub_vx_v4i64:
773 ; RV32:       # %bb.0:
774 ; RV32-NEXT:    addi sp, sp, -16
775 ; RV32-NEXT:    .cfi_def_cfa_offset 16
776 ; RV32-NEXT:    sw a1, 12(sp)
777 ; RV32-NEXT:    sw a0, 8(sp)
778 ; RV32-NEXT:    addi a0, sp, 8
779 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
780 ; RV32-NEXT:    vlse64.v v10, (a0), zero
781 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
782 ; RV32-NEXT:    vsub.vv v8, v8, v10, v0.t
783 ; RV32-NEXT:    addi sp, sp, 16
784 ; RV32-NEXT:    ret
786 ; RV64-LABEL: vsub_vx_v4i64:
787 ; RV64:       # %bb.0:
788 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
789 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
790 ; RV64-NEXT:    ret
791   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
792   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
793   %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
794   ret <4 x i64> %v
797 define <4 x i64> @vsub_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
798 ; RV32-LABEL: vsub_vx_v4i64_unmasked:
799 ; RV32:       # %bb.0:
800 ; RV32-NEXT:    addi sp, sp, -16
801 ; RV32-NEXT:    .cfi_def_cfa_offset 16
802 ; RV32-NEXT:    sw a1, 12(sp)
803 ; RV32-NEXT:    sw a0, 8(sp)
804 ; RV32-NEXT:    addi a0, sp, 8
805 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
806 ; RV32-NEXT:    vlse64.v v10, (a0), zero
807 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
808 ; RV32-NEXT:    vsub.vv v8, v8, v10
809 ; RV32-NEXT:    addi sp, sp, 16
810 ; RV32-NEXT:    ret
812 ; RV64-LABEL: vsub_vx_v4i64_unmasked:
813 ; RV64:       # %bb.0:
814 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
815 ; RV64-NEXT:    vsub.vx v8, v8, a0
816 ; RV64-NEXT:    ret
817   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
818   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
819   %head = insertelement <4 x i1> poison, i1 true, i32 0
820   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
821   %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
822   ret <4 x i64> %v
825 declare <8 x i64> @llvm.vp.sub.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
827 define <8 x i64> @vsub_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
828 ; CHECK-LABEL: vsub_vv_v8i64:
829 ; CHECK:       # %bb.0:
830 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
831 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
832 ; CHECK-NEXT:    ret
833   %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
834   ret <8 x i64> %v
837 define <8 x i64> @vsub_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
838 ; CHECK-LABEL: vsub_vv_v8i64_unmasked:
839 ; CHECK:       # %bb.0:
840 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
841 ; CHECK-NEXT:    vsub.vv v8, v8, v12
842 ; CHECK-NEXT:    ret
843   %head = insertelement <8 x i1> poison, i1 true, i32 0
844   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
845   %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
846   ret <8 x i64> %v
849 define <8 x i64> @vsub_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
850 ; RV32-LABEL: vsub_vx_v8i64:
851 ; RV32:       # %bb.0:
852 ; RV32-NEXT:    addi sp, sp, -16
853 ; RV32-NEXT:    .cfi_def_cfa_offset 16
854 ; RV32-NEXT:    sw a1, 12(sp)
855 ; RV32-NEXT:    sw a0, 8(sp)
856 ; RV32-NEXT:    addi a0, sp, 8
857 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
858 ; RV32-NEXT:    vlse64.v v12, (a0), zero
859 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
860 ; RV32-NEXT:    vsub.vv v8, v8, v12, v0.t
861 ; RV32-NEXT:    addi sp, sp, 16
862 ; RV32-NEXT:    ret
864 ; RV64-LABEL: vsub_vx_v8i64:
865 ; RV64:       # %bb.0:
866 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
867 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
868 ; RV64-NEXT:    ret
869   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
870   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
871   %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
872   ret <8 x i64> %v
875 define <8 x i64> @vsub_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
876 ; RV32-LABEL: vsub_vx_v8i64_unmasked:
877 ; RV32:       # %bb.0:
878 ; RV32-NEXT:    addi sp, sp, -16
879 ; RV32-NEXT:    .cfi_def_cfa_offset 16
880 ; RV32-NEXT:    sw a1, 12(sp)
881 ; RV32-NEXT:    sw a0, 8(sp)
882 ; RV32-NEXT:    addi a0, sp, 8
883 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
884 ; RV32-NEXT:    vlse64.v v12, (a0), zero
885 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
886 ; RV32-NEXT:    vsub.vv v8, v8, v12
887 ; RV32-NEXT:    addi sp, sp, 16
888 ; RV32-NEXT:    ret
890 ; RV64-LABEL: vsub_vx_v8i64_unmasked:
891 ; RV64:       # %bb.0:
892 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
893 ; RV64-NEXT:    vsub.vx v8, v8, a0
894 ; RV64-NEXT:    ret
895   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
896   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
897   %head = insertelement <8 x i1> poison, i1 true, i32 0
898   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
899   %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
900   ret <8 x i64> %v
903 declare <16 x i64> @llvm.vp.sub.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
905 define <16 x i64> @vsub_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
906 ; CHECK-LABEL: vsub_vv_v16i64:
907 ; CHECK:       # %bb.0:
908 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
909 ; CHECK-NEXT:    vsub.vv v8, v8, v16, v0.t
910 ; CHECK-NEXT:    ret
911   %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
912   ret <16 x i64> %v
915 define <16 x i64> @vsub_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
916 ; CHECK-LABEL: vsub_vv_v16i64_unmasked:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
919 ; CHECK-NEXT:    vsub.vv v8, v8, v16
920 ; CHECK-NEXT:    ret
921   %head = insertelement <16 x i1> poison, i1 true, i32 0
922   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
923   %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
924   ret <16 x i64> %v
927 define <16 x i64> @vsub_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
928 ; RV32-LABEL: vsub_vx_v16i64:
929 ; RV32:       # %bb.0:
930 ; RV32-NEXT:    addi sp, sp, -16
931 ; RV32-NEXT:    .cfi_def_cfa_offset 16
932 ; RV32-NEXT:    sw a1, 12(sp)
933 ; RV32-NEXT:    sw a0, 8(sp)
934 ; RV32-NEXT:    addi a0, sp, 8
935 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
936 ; RV32-NEXT:    vlse64.v v16, (a0), zero
937 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
938 ; RV32-NEXT:    vsub.vv v8, v8, v16, v0.t
939 ; RV32-NEXT:    addi sp, sp, 16
940 ; RV32-NEXT:    ret
942 ; RV64-LABEL: vsub_vx_v16i64:
943 ; RV64:       # %bb.0:
944 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
945 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
946 ; RV64-NEXT:    ret
947   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
948   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
949   %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
950   ret <16 x i64> %v
953 define <16 x i64> @vsub_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
954 ; RV32-LABEL: vsub_vx_v16i64_unmasked:
955 ; RV32:       # %bb.0:
956 ; RV32-NEXT:    addi sp, sp, -16
957 ; RV32-NEXT:    .cfi_def_cfa_offset 16
958 ; RV32-NEXT:    sw a1, 12(sp)
959 ; RV32-NEXT:    sw a0, 8(sp)
960 ; RV32-NEXT:    addi a0, sp, 8
961 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
962 ; RV32-NEXT:    vlse64.v v16, (a0), zero
963 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
964 ; RV32-NEXT:    vsub.vv v8, v8, v16
965 ; RV32-NEXT:    addi sp, sp, 16
966 ; RV32-NEXT:    ret
968 ; RV64-LABEL: vsub_vx_v16i64_unmasked:
969 ; RV64:       # %bb.0:
970 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
971 ; RV64-NEXT:    vsub.vx v8, v8, a0
972 ; RV64-NEXT:    ret
973   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
974   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
975   %head = insertelement <16 x i1> poison, i1 true, i32 0
976   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
977   %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
978   ret <16 x i64> %v