Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vwsub-sdnode.ll
bloba6a15c164343602cb716cd05766dc19dcb89e97f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
5 define <vscale x 1 x i64> @vwsub_vv_nxv1i64(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) {
6 ; CHECK-LABEL: vwsub_vv_nxv1i64:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
9 ; CHECK-NEXT:    vwsub.vv v10, v8, v9
10 ; CHECK-NEXT:    vmv1r.v v8, v10
11 ; CHECK-NEXT:    ret
12   %vc = sext <vscale x 1 x i32> %va to <vscale x 1 x i64>
13   %vd = sext <vscale x 1 x i32> %vb to <vscale x 1 x i64>
14   %ve = sub <vscale x 1 x i64> %vc, %vd
15   ret <vscale x 1 x i64> %ve
18 define <vscale x 1 x i64> @vwsubu_vv_nxv1i64(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) {
19 ; CHECK-LABEL: vwsubu_vv_nxv1i64:
20 ; CHECK:       # %bb.0:
21 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
22 ; CHECK-NEXT:    vwsubu.vv v10, v8, v9
23 ; CHECK-NEXT:    vmv1r.v v8, v10
24 ; CHECK-NEXT:    ret
25   %vc = zext <vscale x 1 x i32> %va to <vscale x 1 x i64>
26   %vd = zext <vscale x 1 x i32> %vb to <vscale x 1 x i64>
27   %ve = sub <vscale x 1 x i64> %vc, %vd
28   ret <vscale x 1 x i64> %ve
31 define <vscale x 1 x i64> @vwsub_vx_nxv1i64(<vscale x 1 x i32> %va, i32 %b) {
32 ; CHECK-LABEL: vwsub_vx_nxv1i64:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
35 ; CHECK-NEXT:    vwsub.vx v9, v8, a0
36 ; CHECK-NEXT:    vmv1r.v v8, v9
37 ; CHECK-NEXT:    ret
38   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
39   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
40   %vc = sext <vscale x 1 x i32> %va to <vscale x 1 x i64>
41   %vd = sext <vscale x 1 x i32> %splat to <vscale x 1 x i64>
42   %ve = sub <vscale x 1 x i64> %vc, %vd
43   ret <vscale x 1 x i64> %ve
46 define <vscale x 1 x i64> @vwsubu_vx_nxv1i64(<vscale x 1 x i32> %va, i32 %b) {
47 ; CHECK-LABEL: vwsubu_vx_nxv1i64:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
50 ; CHECK-NEXT:    vwsubu.vx v9, v8, a0
51 ; CHECK-NEXT:    vmv1r.v v8, v9
52 ; CHECK-NEXT:    ret
53   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
54   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
55   %vc = zext <vscale x 1 x i32> %va to <vscale x 1 x i64>
56   %vd = zext <vscale x 1 x i32> %splat to <vscale x 1 x i64>
57   %ve = sub <vscale x 1 x i64> %vc, %vd
58   ret <vscale x 1 x i64> %ve
61 define <vscale x 1 x i64> @vwsub_wv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i32> %vb) {
62 ; CHECK-LABEL: vwsub_wv_nxv1i64:
63 ; CHECK:       # %bb.0:
64 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
65 ; CHECK-NEXT:    vwsub.wv v8, v8, v9
66 ; CHECK-NEXT:    ret
67   %vc = sext <vscale x 1 x i32> %vb to <vscale x 1 x i64>
68   %vd = sub <vscale x 1 x i64> %va, %vc
69   ret <vscale x 1 x i64> %vd
72 define <vscale x 1 x i64> @vwsubu_wv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i32> %vb) {
73 ; CHECK-LABEL: vwsubu_wv_nxv1i64:
74 ; CHECK:       # %bb.0:
75 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
76 ; CHECK-NEXT:    vwsubu.wv v8, v8, v9
77 ; CHECK-NEXT:    ret
78   %vc = zext <vscale x 1 x i32> %vb to <vscale x 1 x i64>
79   %vd = sub <vscale x 1 x i64> %va, %vc
80   ret <vscale x 1 x i64> %vd
83 define <vscale x 1 x i64> @vwsub_wx_nxv1i64(<vscale x 1 x i64> %va, i32 %b) {
84 ; CHECK-LABEL: vwsub_wx_nxv1i64:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
87 ; CHECK-NEXT:    vwsub.wx v8, v8, a0
88 ; CHECK-NEXT:    ret
89   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
90   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
91   %vb = sext <vscale x 1 x i32> %splat to <vscale x 1 x i64>
92   %vc = sub <vscale x 1 x i64> %va, %vb
93   ret <vscale x 1 x i64> %vc
96 define <vscale x 1 x i64> @vwsubu_wx_nxv1i64(<vscale x 1 x i64> %va, i32 %b) {
97 ; CHECK-LABEL: vwsubu_wx_nxv1i64:
98 ; CHECK:       # %bb.0:
99 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
100 ; CHECK-NEXT:    vwsubu.wx v8, v8, a0
101 ; CHECK-NEXT:    ret
102   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
103   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
104   %vb = zext <vscale x 1 x i32> %splat to <vscale x 1 x i64>
105   %vc = sub <vscale x 1 x i64> %va, %vb
106   ret <vscale x 1 x i64> %vc
109 define <vscale x 2 x i64> @vwsub_vv_nxv2i64(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) {
110 ; CHECK-LABEL: vwsub_vv_nxv2i64:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
113 ; CHECK-NEXT:    vwsub.vv v10, v8, v9
114 ; CHECK-NEXT:    vmv2r.v v8, v10
115 ; CHECK-NEXT:    ret
116   %vc = sext <vscale x 2 x i32> %va to <vscale x 2 x i64>
117   %vd = sext <vscale x 2 x i32> %vb to <vscale x 2 x i64>
118   %ve = sub <vscale x 2 x i64> %vc, %vd
119   ret <vscale x 2 x i64> %ve
122 define <vscale x 2 x i64> @vwsubu_vv_nxv2i64(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) {
123 ; CHECK-LABEL: vwsubu_vv_nxv2i64:
124 ; CHECK:       # %bb.0:
125 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
126 ; CHECK-NEXT:    vwsubu.vv v10, v8, v9
127 ; CHECK-NEXT:    vmv2r.v v8, v10
128 ; CHECK-NEXT:    ret
129   %vc = zext <vscale x 2 x i32> %va to <vscale x 2 x i64>
130   %vd = zext <vscale x 2 x i32> %vb to <vscale x 2 x i64>
131   %ve = sub <vscale x 2 x i64> %vc, %vd
132   ret <vscale x 2 x i64> %ve
135 define <vscale x 2 x i64> @vwsub_vx_nxv2i64(<vscale x 2 x i32> %va, i32 %b) {
136 ; CHECK-LABEL: vwsub_vx_nxv2i64:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
139 ; CHECK-NEXT:    vwsub.vx v10, v8, a0
140 ; CHECK-NEXT:    vmv2r.v v8, v10
141 ; CHECK-NEXT:    ret
142   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
143   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
144   %vc = sext <vscale x 2 x i32> %va to <vscale x 2 x i64>
145   %vd = sext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
146   %ve = sub <vscale x 2 x i64> %vc, %vd
147   ret <vscale x 2 x i64> %ve
150 define <vscale x 2 x i64> @vwsubu_vx_nxv2i64(<vscale x 2 x i32> %va, i32 %b) {
151 ; CHECK-LABEL: vwsubu_vx_nxv2i64:
152 ; CHECK:       # %bb.0:
153 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
154 ; CHECK-NEXT:    vwsubu.vx v10, v8, a0
155 ; CHECK-NEXT:    vmv2r.v v8, v10
156 ; CHECK-NEXT:    ret
157   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
158   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
159   %vc = zext <vscale x 2 x i32> %va to <vscale x 2 x i64>
160   %vd = zext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
161   %ve = sub <vscale x 2 x i64> %vc, %vd
162   ret <vscale x 2 x i64> %ve
165 define <vscale x 2 x i64> @vwsub_wv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i32> %vb) {
166 ; CHECK-LABEL: vwsub_wv_nxv2i64:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
169 ; CHECK-NEXT:    vwsub.wv v8, v8, v10
170 ; CHECK-NEXT:    ret
171   %vc = sext <vscale x 2 x i32> %vb to <vscale x 2 x i64>
172   %vd = sub <vscale x 2 x i64> %va, %vc
173   ret <vscale x 2 x i64> %vd
176 define <vscale x 2 x i64> @vwsubu_wv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i32> %vb) {
177 ; CHECK-LABEL: vwsubu_wv_nxv2i64:
178 ; CHECK:       # %bb.0:
179 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
180 ; CHECK-NEXT:    vwsubu.wv v8, v8, v10
181 ; CHECK-NEXT:    ret
182   %vc = zext <vscale x 2 x i32> %vb to <vscale x 2 x i64>
183   %vd = sub <vscale x 2 x i64> %va, %vc
184   ret <vscale x 2 x i64> %vd
187 define <vscale x 2 x i64> @vwsub_wx_nxv2i64(<vscale x 2 x i64> %va, i32 %b) {
188 ; CHECK-LABEL: vwsub_wx_nxv2i64:
189 ; CHECK:       # %bb.0:
190 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
191 ; CHECK-NEXT:    vwsub.wx v8, v8, a0
192 ; CHECK-NEXT:    ret
193   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
194   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
195   %vb = sext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
196   %vc = sub <vscale x 2 x i64> %va, %vb
197   ret <vscale x 2 x i64> %vc
200 define <vscale x 2 x i64> @vwsubu_wx_nxv2i64(<vscale x 2 x i64> %va, i32 %b) {
201 ; CHECK-LABEL: vwsubu_wx_nxv2i64:
202 ; CHECK:       # %bb.0:
203 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
204 ; CHECK-NEXT:    vwsubu.wx v8, v8, a0
205 ; CHECK-NEXT:    ret
206   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
207   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
208   %vb = zext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
209   %vc = sub <vscale x 2 x i64> %va, %vb
210   ret <vscale x 2 x i64> %vc
213 define <vscale x 4 x i64> @vwsub_vv_nxv4i64(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) {
214 ; CHECK-LABEL: vwsub_vv_nxv4i64:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
217 ; CHECK-NEXT:    vwsub.vv v12, v8, v10
218 ; CHECK-NEXT:    vmv4r.v v8, v12
219 ; CHECK-NEXT:    ret
220   %vc = sext <vscale x 4 x i32> %va to <vscale x 4 x i64>
221   %vd = sext <vscale x 4 x i32> %vb to <vscale x 4 x i64>
222   %ve = sub <vscale x 4 x i64> %vc, %vd
223   ret <vscale x 4 x i64> %ve
226 define <vscale x 4 x i64> @vwsubu_vv_nxv4i64(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) {
227 ; CHECK-LABEL: vwsubu_vv_nxv4i64:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
230 ; CHECK-NEXT:    vwsubu.vv v12, v8, v10
231 ; CHECK-NEXT:    vmv4r.v v8, v12
232 ; CHECK-NEXT:    ret
233   %vc = zext <vscale x 4 x i32> %va to <vscale x 4 x i64>
234   %vd = zext <vscale x 4 x i32> %vb to <vscale x 4 x i64>
235   %ve = sub <vscale x 4 x i64> %vc, %vd
236   ret <vscale x 4 x i64> %ve
239 define <vscale x 4 x i64> @vwsub_vx_nxv4i64(<vscale x 4 x i32> %va, i32 %b) {
240 ; CHECK-LABEL: vwsub_vx_nxv4i64:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
243 ; CHECK-NEXT:    vwsub.vx v12, v8, a0
244 ; CHECK-NEXT:    vmv4r.v v8, v12
245 ; CHECK-NEXT:    ret
246   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
247   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
248   %vc = sext <vscale x 4 x i32> %va to <vscale x 4 x i64>
249   %vd = sext <vscale x 4 x i32> %splat to <vscale x 4 x i64>
250   %ve = sub <vscale x 4 x i64> %vc, %vd
251   ret <vscale x 4 x i64> %ve
254 define <vscale x 4 x i64> @vwsubu_vx_nxv4i64(<vscale x 4 x i32> %va, i32 %b) {
255 ; CHECK-LABEL: vwsubu_vx_nxv4i64:
256 ; CHECK:       # %bb.0:
257 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
258 ; CHECK-NEXT:    vwsubu.vx v12, v8, a0
259 ; CHECK-NEXT:    vmv4r.v v8, v12
260 ; CHECK-NEXT:    ret
261   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
262   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
263   %vc = zext <vscale x 4 x i32> %va to <vscale x 4 x i64>
264   %vd = zext <vscale x 4 x i32> %splat to <vscale x 4 x i64>
265   %ve = sub <vscale x 4 x i64> %vc, %vd
266   ret <vscale x 4 x i64> %ve
269 define <vscale x 4 x i64> @vwsub_wv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i32> %vb) {
270 ; CHECK-LABEL: vwsub_wv_nxv4i64:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
273 ; CHECK-NEXT:    vwsub.wv v8, v8, v12
274 ; CHECK-NEXT:    ret
275   %vc = sext <vscale x 4 x i32> %vb to <vscale x 4 x i64>
276   %vd = sub <vscale x 4 x i64> %va, %vc
277   ret <vscale x 4 x i64> %vd
280 define <vscale x 4 x i64> @vwsubu_wv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i32> %vb) {
281 ; CHECK-LABEL: vwsubu_wv_nxv4i64:
282 ; CHECK:       # %bb.0:
283 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
284 ; CHECK-NEXT:    vwsubu.wv v8, v8, v12
285 ; CHECK-NEXT:    ret
286   %vc = zext <vscale x 4 x i32> %vb to <vscale x 4 x i64>
287   %vd = sub <vscale x 4 x i64> %va, %vc
288   ret <vscale x 4 x i64> %vd
291 define <vscale x 4 x i64> @vwsub_wx_nxv4i64(<vscale x 4 x i64> %va, i32 %b) {
292 ; CHECK-LABEL: vwsub_wx_nxv4i64:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
295 ; CHECK-NEXT:    vwsub.wx v8, v8, a0
296 ; CHECK-NEXT:    ret
297   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
298   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
299   %vb = sext <vscale x 4 x i32> %splat to <vscale x 4 x i64>
300   %vc = sub <vscale x 4 x i64> %va, %vb
301   ret <vscale x 4 x i64> %vc
304 define <vscale x 4 x i64> @vwsubu_wx_nxv4i64(<vscale x 4 x i64> %va, i32 %b) {
305 ; CHECK-LABEL: vwsubu_wx_nxv4i64:
306 ; CHECK:       # %bb.0:
307 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
308 ; CHECK-NEXT:    vwsubu.wx v8, v8, a0
309 ; CHECK-NEXT:    ret
310   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
311   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
312   %vb = zext <vscale x 4 x i32> %splat to <vscale x 4 x i64>
313   %vc = sub <vscale x 4 x i64> %va, %vb
314   ret <vscale x 4 x i64> %vc
317 define <vscale x 8 x i64> @vwsub_vv_nxv8i64(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) {
318 ; CHECK-LABEL: vwsub_vv_nxv8i64:
319 ; CHECK:       # %bb.0:
320 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
321 ; CHECK-NEXT:    vwsub.vv v16, v8, v12
322 ; CHECK-NEXT:    vmv8r.v v8, v16
323 ; CHECK-NEXT:    ret
324   %vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64>
325   %vd = sext <vscale x 8 x i32> %vb to <vscale x 8 x i64>
326   %ve = sub <vscale x 8 x i64> %vc, %vd
327   ret <vscale x 8 x i64> %ve
330 define <vscale x 8 x i64> @vwsubu_vv_nxv8i64(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) {
331 ; CHECK-LABEL: vwsubu_vv_nxv8i64:
332 ; CHECK:       # %bb.0:
333 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
334 ; CHECK-NEXT:    vwsubu.vv v16, v8, v12
335 ; CHECK-NEXT:    vmv8r.v v8, v16
336 ; CHECK-NEXT:    ret
337   %vc = zext <vscale x 8 x i32> %va to <vscale x 8 x i64>
338   %vd = zext <vscale x 8 x i32> %vb to <vscale x 8 x i64>
339   %ve = sub <vscale x 8 x i64> %vc, %vd
340   ret <vscale x 8 x i64> %ve
343 define <vscale x 8 x i64> @vwsub_vx_nxv8i64(<vscale x 8 x i32> %va, i32 %b) {
344 ; CHECK-LABEL: vwsub_vx_nxv8i64:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
347 ; CHECK-NEXT:    vwsub.vx v16, v8, a0
348 ; CHECK-NEXT:    vmv8r.v v8, v16
349 ; CHECK-NEXT:    ret
350   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
351   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
352   %vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64>
353   %vd = sext <vscale x 8 x i32> %splat to <vscale x 8 x i64>
354   %ve = sub <vscale x 8 x i64> %vc, %vd
355   ret <vscale x 8 x i64> %ve
358 define <vscale x 8 x i64> @vwsubu_vx_nxv8i64(<vscale x 8 x i32> %va, i32 %b) {
359 ; CHECK-LABEL: vwsubu_vx_nxv8i64:
360 ; CHECK:       # %bb.0:
361 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
362 ; CHECK-NEXT:    vwsubu.vx v16, v8, a0
363 ; CHECK-NEXT:    vmv8r.v v8, v16
364 ; CHECK-NEXT:    ret
365   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
366   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
367   %vc = zext <vscale x 8 x i32> %va to <vscale x 8 x i64>
368   %vd = zext <vscale x 8 x i32> %splat to <vscale x 8 x i64>
369   %ve = sub <vscale x 8 x i64> %vc, %vd
370   ret <vscale x 8 x i64> %ve
373 define <vscale x 8 x i64> @vwsub_wv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i32> %vb) {
374 ; CHECK-LABEL: vwsub_wv_nxv8i64:
375 ; CHECK:       # %bb.0:
376 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
377 ; CHECK-NEXT:    vwsub.wv v8, v8, v16
378 ; CHECK-NEXT:    ret
379   %vc = sext <vscale x 8 x i32> %vb to <vscale x 8 x i64>
380   %vd = sub <vscale x 8 x i64> %va, %vc
381   ret <vscale x 8 x i64> %vd
384 define <vscale x 8 x i64> @vwsubu_wv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i32> %vb) {
385 ; CHECK-LABEL: vwsubu_wv_nxv8i64:
386 ; CHECK:       # %bb.0:
387 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
388 ; CHECK-NEXT:    vwsubu.wv v8, v8, v16
389 ; CHECK-NEXT:    ret
390   %vc = zext <vscale x 8 x i32> %vb to <vscale x 8 x i64>
391   %vd = sub <vscale x 8 x i64> %va, %vc
392   ret <vscale x 8 x i64> %vd
395 define <vscale x 8 x i64> @vwsub_wx_nxv8i64(<vscale x 8 x i64> %va, i32 %b) {
396 ; CHECK-LABEL: vwsub_wx_nxv8i64:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
399 ; CHECK-NEXT:    vwsub.wx v8, v8, a0
400 ; CHECK-NEXT:    ret
401   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
402   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
403   %vb = sext <vscale x 8 x i32> %splat to <vscale x 8 x i64>
404   %vc = sub <vscale x 8 x i64> %va, %vb
405   ret <vscale x 8 x i64> %vc
408 define <vscale x 8 x i64> @vwsubu_wx_nxv8i64(<vscale x 8 x i64> %va, i32 %b) {
409 ; CHECK-LABEL: vwsubu_wx_nxv8i64:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
412 ; CHECK-NEXT:    vwsubu.wx v8, v8, a0
413 ; CHECK-NEXT:    ret
414   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
415   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
416   %vb = zext <vscale x 8 x i32> %splat to <vscale x 8 x i64>
417   %vc = sub <vscale x 8 x i64> %va, %vb
418   ret <vscale x 8 x i64> %vc