xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode.ll (revision 9e1ad3cff6a855fdfdc1d91323e2021726da04ea)
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
4
5define <vscale x 1 x i16> @vsext_nxv1i8_nxv1i16(<vscale x 1 x i8> %va) {
6; CHECK-LABEL: vsext_nxv1i8_nxv1i16:
7; CHECK:       # %bb.0:
8; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
9; CHECK-NEXT:    vsext.vf2 v9, v8
10; CHECK-NEXT:    vmv1r.v v8, v9
11; CHECK-NEXT:    ret
12  %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i16>
13  ret <vscale x 1 x i16> %evec
14}
15
16define <vscale x 1 x i16> @vzext_nxv1i8_nxv1i16(<vscale x 1 x i8> %va) {
17; CHECK-LABEL: vzext_nxv1i8_nxv1i16:
18; CHECK:       # %bb.0:
19; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
20; CHECK-NEXT:    vzext.vf2 v9, v8
21; CHECK-NEXT:    vmv1r.v v8, v9
22; CHECK-NEXT:    ret
23  %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i16>
24  ret <vscale x 1 x i16> %evec
25}
26
27define <vscale x 1 x i32> @vsext_nxv1i8_nxv1i32(<vscale x 1 x i8> %va) {
28; CHECK-LABEL: vsext_nxv1i8_nxv1i32:
29; CHECK:       # %bb.0:
30; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
31; CHECK-NEXT:    vsext.vf4 v9, v8
32; CHECK-NEXT:    vmv1r.v v8, v9
33; CHECK-NEXT:    ret
34  %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i32>
35  ret <vscale x 1 x i32> %evec
36}
37
38define <vscale x 1 x i32> @vzext_nxv1i8_nxv1i32(<vscale x 1 x i8> %va) {
39; CHECK-LABEL: vzext_nxv1i8_nxv1i32:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
42; CHECK-NEXT:    vzext.vf4 v9, v8
43; CHECK-NEXT:    vmv1r.v v8, v9
44; CHECK-NEXT:    ret
45  %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i32>
46  ret <vscale x 1 x i32> %evec
47}
48
49define <vscale x 1 x i64> @vsext_nxv1i8_nxv1i64(<vscale x 1 x i8> %va) {
50; CHECK-LABEL: vsext_nxv1i8_nxv1i64:
51; CHECK:       # %bb.0:
52; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
53; CHECK-NEXT:    vsext.vf8 v9, v8
54; CHECK-NEXT:    vmv.v.v v8, v9
55; CHECK-NEXT:    ret
56  %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i64>
57  ret <vscale x 1 x i64> %evec
58}
59
60define <vscale x 1 x i64> @vzext_nxv1i8_nxv1i64(<vscale x 1 x i8> %va) {
61; CHECK-LABEL: vzext_nxv1i8_nxv1i64:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
64; CHECK-NEXT:    vzext.vf8 v9, v8
65; CHECK-NEXT:    vmv.v.v v8, v9
66; CHECK-NEXT:    ret
67  %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i64>
68  ret <vscale x 1 x i64> %evec
69}
70
71define <vscale x 2 x i16> @vsext_nxv2i8_nxv2i16(<vscale x 2 x i8> %va) {
72; CHECK-LABEL: vsext_nxv2i8_nxv2i16:
73; CHECK:       # %bb.0:
74; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
75; CHECK-NEXT:    vsext.vf2 v9, v8
76; CHECK-NEXT:    vmv1r.v v8, v9
77; CHECK-NEXT:    ret
78  %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i16>
79  ret <vscale x 2 x i16> %evec
80}
81
82define <vscale x 2 x i16> @vzext_nxv2i8_nxv2i16(<vscale x 2 x i8> %va) {
83; CHECK-LABEL: vzext_nxv2i8_nxv2i16:
84; CHECK:       # %bb.0:
85; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
86; CHECK-NEXT:    vzext.vf2 v9, v8
87; CHECK-NEXT:    vmv1r.v v8, v9
88; CHECK-NEXT:    ret
89  %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i16>
90  ret <vscale x 2 x i16> %evec
91}
92
93define <vscale x 2 x i32> @vsext_nxv2i8_nxv2i32(<vscale x 2 x i8> %va) {
94; CHECK-LABEL: vsext_nxv2i8_nxv2i32:
95; CHECK:       # %bb.0:
96; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
97; CHECK-NEXT:    vsext.vf4 v9, v8
98; CHECK-NEXT:    vmv.v.v v8, v9
99; CHECK-NEXT:    ret
100  %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i32>
101  ret <vscale x 2 x i32> %evec
102}
103
104define <vscale x 2 x i32> @vzext_nxv2i8_nxv2i32(<vscale x 2 x i8> %va) {
105; CHECK-LABEL: vzext_nxv2i8_nxv2i32:
106; CHECK:       # %bb.0:
107; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
108; CHECK-NEXT:    vzext.vf4 v9, v8
109; CHECK-NEXT:    vmv.v.v v8, v9
110; CHECK-NEXT:    ret
111  %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i32>
112  ret <vscale x 2 x i32> %evec
113}
114
115define <vscale x 2 x i64> @vsext_nxv2i8_nxv2i64(<vscale x 2 x i8> %va) {
116; CHECK-LABEL: vsext_nxv2i8_nxv2i64:
117; CHECK:       # %bb.0:
118; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
119; CHECK-NEXT:    vsext.vf8 v10, v8
120; CHECK-NEXT:    vmv.v.v v8, v10
121; CHECK-NEXT:    ret
122  %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i64>
123  ret <vscale x 2 x i64> %evec
124}
125
126define <vscale x 2 x i64> @vzext_nxv2i8_nxv2i64(<vscale x 2 x i8> %va) {
127; CHECK-LABEL: vzext_nxv2i8_nxv2i64:
128; CHECK:       # %bb.0:
129; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
130; CHECK-NEXT:    vzext.vf8 v10, v8
131; CHECK-NEXT:    vmv.v.v v8, v10
132; CHECK-NEXT:    ret
133  %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i64>
134  ret <vscale x 2 x i64> %evec
135}
136
137define <vscale x 4 x i16> @vsext_nxv4i8_nxv4i16(<vscale x 4 x i8> %va) {
138; CHECK-LABEL: vsext_nxv4i8_nxv4i16:
139; CHECK:       # %bb.0:
140; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
141; CHECK-NEXT:    vsext.vf2 v9, v8
142; CHECK-NEXT:    vmv.v.v v8, v9
143; CHECK-NEXT:    ret
144  %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i16>
145  ret <vscale x 4 x i16> %evec
146}
147
148define <vscale x 4 x i16> @vzext_nxv4i8_nxv4i16(<vscale x 4 x i8> %va) {
149; CHECK-LABEL: vzext_nxv4i8_nxv4i16:
150; CHECK:       # %bb.0:
151; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
152; CHECK-NEXT:    vzext.vf2 v9, v8
153; CHECK-NEXT:    vmv.v.v v8, v9
154; CHECK-NEXT:    ret
155  %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i16>
156  ret <vscale x 4 x i16> %evec
157}
158
159define <vscale x 4 x i32> @vsext_nxv4i8_nxv4i32(<vscale x 4 x i8> %va) {
160; CHECK-LABEL: vsext_nxv4i8_nxv4i32:
161; CHECK:       # %bb.0:
162; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
163; CHECK-NEXT:    vsext.vf4 v10, v8
164; CHECK-NEXT:    vmv.v.v v8, v10
165; CHECK-NEXT:    ret
166  %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i32>
167  ret <vscale x 4 x i32> %evec
168}
169
170define <vscale x 4 x i32> @vzext_nxv4i8_nxv4i32(<vscale x 4 x i8> %va) {
171; CHECK-LABEL: vzext_nxv4i8_nxv4i32:
172; CHECK:       # %bb.0:
173; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
174; CHECK-NEXT:    vzext.vf4 v10, v8
175; CHECK-NEXT:    vmv.v.v v8, v10
176; CHECK-NEXT:    ret
177  %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i32>
178  ret <vscale x 4 x i32> %evec
179}
180
181define <vscale x 4 x i64> @vsext_nxv4i8_nxv4i64(<vscale x 4 x i8> %va) {
182; CHECK-LABEL: vsext_nxv4i8_nxv4i64:
183; CHECK:       # %bb.0:
184; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
185; CHECK-NEXT:    vsext.vf8 v12, v8
186; CHECK-NEXT:    vmv.v.v v8, v12
187; CHECK-NEXT:    ret
188  %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i64>
189  ret <vscale x 4 x i64> %evec
190}
191
192define <vscale x 4 x i64> @vzext_nxv4i8_nxv4i64(<vscale x 4 x i8> %va) {
193; CHECK-LABEL: vzext_nxv4i8_nxv4i64:
194; CHECK:       # %bb.0:
195; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
196; CHECK-NEXT:    vzext.vf8 v12, v8
197; CHECK-NEXT:    vmv.v.v v8, v12
198; CHECK-NEXT:    ret
199  %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i64>
200  ret <vscale x 4 x i64> %evec
201}
202
203define <vscale x 8 x i16> @vsext_nxv8i8_nxv8i16(<vscale x 8 x i8> %va) {
204; CHECK-LABEL: vsext_nxv8i8_nxv8i16:
205; CHECK:       # %bb.0:
206; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
207; CHECK-NEXT:    vsext.vf2 v10, v8
208; CHECK-NEXT:    vmv.v.v v8, v10
209; CHECK-NEXT:    ret
210  %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i16>
211  ret <vscale x 8 x i16> %evec
212}
213
214define <vscale x 8 x i16> @vzext_nxv8i8_nxv8i16(<vscale x 8 x i8> %va) {
215; CHECK-LABEL: vzext_nxv8i8_nxv8i16:
216; CHECK:       # %bb.0:
217; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
218; CHECK-NEXT:    vzext.vf2 v10, v8
219; CHECK-NEXT:    vmv.v.v v8, v10
220; CHECK-NEXT:    ret
221  %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i16>
222  ret <vscale x 8 x i16> %evec
223}
224
225define <vscale x 8 x i32> @vsext_nxv8i8_nxv8i32(<vscale x 8 x i8> %va) {
226; CHECK-LABEL: vsext_nxv8i8_nxv8i32:
227; CHECK:       # %bb.0:
228; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
229; CHECK-NEXT:    vsext.vf4 v12, v8
230; CHECK-NEXT:    vmv.v.v v8, v12
231; CHECK-NEXT:    ret
232  %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i32>
233  ret <vscale x 8 x i32> %evec
234}
235
236define <vscale x 8 x i32> @vzext_nxv8i8_nxv8i32(<vscale x 8 x i8> %va) {
237; CHECK-LABEL: vzext_nxv8i8_nxv8i32:
238; CHECK:       # %bb.0:
239; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
240; CHECK-NEXT:    vzext.vf4 v12, v8
241; CHECK-NEXT:    vmv.v.v v8, v12
242; CHECK-NEXT:    ret
243  %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i32>
244  ret <vscale x 8 x i32> %evec
245}
246
247define <vscale x 8 x i64> @vsext_nxv8i8_nxv8i64(<vscale x 8 x i8> %va) {
248; CHECK-LABEL: vsext_nxv8i8_nxv8i64:
249; CHECK:       # %bb.0:
250; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
251; CHECK-NEXT:    vsext.vf8 v16, v8
252; CHECK-NEXT:    vmv.v.v v8, v16
253; CHECK-NEXT:    ret
254  %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i64>
255  ret <vscale x 8 x i64> %evec
256}
257
258define <vscale x 8 x i64> @vzext_nxv8i8_nxv8i64(<vscale x 8 x i8> %va) {
259; CHECK-LABEL: vzext_nxv8i8_nxv8i64:
260; CHECK:       # %bb.0:
261; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
262; CHECK-NEXT:    vzext.vf8 v16, v8
263; CHECK-NEXT:    vmv.v.v v8, v16
264; CHECK-NEXT:    ret
265  %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i64>
266  ret <vscale x 8 x i64> %evec
267}
268
269define <vscale x 16 x i16> @vsext_nxv16i8_nxv16i16(<vscale x 16 x i8> %va) {
270; CHECK-LABEL: vsext_nxv16i8_nxv16i16:
271; CHECK:       # %bb.0:
272; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
273; CHECK-NEXT:    vsext.vf2 v12, v8
274; CHECK-NEXT:    vmv.v.v v8, v12
275; CHECK-NEXT:    ret
276  %evec = sext <vscale x 16 x i8> %va to <vscale x 16 x i16>
277  ret <vscale x 16 x i16> %evec
278}
279
280define <vscale x 16 x i16> @vzext_nxv16i8_nxv16i16(<vscale x 16 x i8> %va) {
281; CHECK-LABEL: vzext_nxv16i8_nxv16i16:
282; CHECK:       # %bb.0:
283; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
284; CHECK-NEXT:    vzext.vf2 v12, v8
285; CHECK-NEXT:    vmv.v.v v8, v12
286; CHECK-NEXT:    ret
287  %evec = zext <vscale x 16 x i8> %va to <vscale x 16 x i16>
288  ret <vscale x 16 x i16> %evec
289}
290
291define <vscale x 16 x i32> @vsext_nxv16i8_nxv16i32(<vscale x 16 x i8> %va) {
292; CHECK-LABEL: vsext_nxv16i8_nxv16i32:
293; CHECK:       # %bb.0:
294; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
295; CHECK-NEXT:    vsext.vf4 v16, v8
296; CHECK-NEXT:    vmv.v.v v8, v16
297; CHECK-NEXT:    ret
298  %evec = sext <vscale x 16 x i8> %va to <vscale x 16 x i32>
299  ret <vscale x 16 x i32> %evec
300}
301
302define <vscale x 16 x i32> @vzext_nxv16i8_nxv16i32(<vscale x 16 x i8> %va) {
303; CHECK-LABEL: vzext_nxv16i8_nxv16i32:
304; CHECK:       # %bb.0:
305; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
306; CHECK-NEXT:    vzext.vf4 v16, v8
307; CHECK-NEXT:    vmv.v.v v8, v16
308; CHECK-NEXT:    ret
309  %evec = zext <vscale x 16 x i8> %va to <vscale x 16 x i32>
310  ret <vscale x 16 x i32> %evec
311}
312
313define <vscale x 32 x i16> @vsext_nxv32i8_nxv32i16(<vscale x 32 x i8> %va) {
314; CHECK-LABEL: vsext_nxv32i8_nxv32i16:
315; CHECK:       # %bb.0:
316; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
317; CHECK-NEXT:    vsext.vf2 v16, v8
318; CHECK-NEXT:    vmv.v.v v8, v16
319; CHECK-NEXT:    ret
320  %evec = sext <vscale x 32 x i8> %va to <vscale x 32 x i16>
321  ret <vscale x 32 x i16> %evec
322}
323
324define <vscale x 32 x i16> @vzext_nxv32i8_nxv32i16(<vscale x 32 x i8> %va) {
325; CHECK-LABEL: vzext_nxv32i8_nxv32i16:
326; CHECK:       # %bb.0:
327; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
328; CHECK-NEXT:    vzext.vf2 v16, v8
329; CHECK-NEXT:    vmv.v.v v8, v16
330; CHECK-NEXT:    ret
331  %evec = zext <vscale x 32 x i8> %va to <vscale x 32 x i16>
332  ret <vscale x 32 x i16> %evec
333}
334
335define <vscale x 1 x i32> @vsext_nxv1i16_nxv1i32(<vscale x 1 x i16> %va) {
336; CHECK-LABEL: vsext_nxv1i16_nxv1i32:
337; CHECK:       # %bb.0:
338; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
339; CHECK-NEXT:    vsext.vf2 v9, v8
340; CHECK-NEXT:    vmv1r.v v8, v9
341; CHECK-NEXT:    ret
342  %evec = sext <vscale x 1 x i16> %va to <vscale x 1 x i32>
343  ret <vscale x 1 x i32> %evec
344}
345
346define <vscale x 1 x i32> @vzext_nxv1i16_nxv1i32(<vscale x 1 x i16> %va) {
347; CHECK-LABEL: vzext_nxv1i16_nxv1i32:
348; CHECK:       # %bb.0:
349; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
350; CHECK-NEXT:    vzext.vf2 v9, v8
351; CHECK-NEXT:    vmv1r.v v8, v9
352; CHECK-NEXT:    ret
353  %evec = zext <vscale x 1 x i16> %va to <vscale x 1 x i32>
354  ret <vscale x 1 x i32> %evec
355}
356
357define <vscale x 1 x i64> @vsext_nxv1i16_nxv1i64(<vscale x 1 x i16> %va) {
358; CHECK-LABEL: vsext_nxv1i16_nxv1i64:
359; CHECK:       # %bb.0:
360; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
361; CHECK-NEXT:    vsext.vf4 v9, v8
362; CHECK-NEXT:    vmv.v.v v8, v9
363; CHECK-NEXT:    ret
364  %evec = sext <vscale x 1 x i16> %va to <vscale x 1 x i64>
365  ret <vscale x 1 x i64> %evec
366}
367
368define <vscale x 1 x i64> @vzext_nxv1i16_nxv1i64(<vscale x 1 x i16> %va) {
369; CHECK-LABEL: vzext_nxv1i16_nxv1i64:
370; CHECK:       # %bb.0:
371; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
372; CHECK-NEXT:    vzext.vf4 v9, v8
373; CHECK-NEXT:    vmv.v.v v8, v9
374; CHECK-NEXT:    ret
375  %evec = zext <vscale x 1 x i16> %va to <vscale x 1 x i64>
376  ret <vscale x 1 x i64> %evec
377}
378
379define <vscale x 2 x i32> @vsext_nxv2i16_nxv2i32(<vscale x 2 x i16> %va) {
380; CHECK-LABEL: vsext_nxv2i16_nxv2i32:
381; CHECK:       # %bb.0:
382; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
383; CHECK-NEXT:    vsext.vf2 v9, v8
384; CHECK-NEXT:    vmv.v.v v8, v9
385; CHECK-NEXT:    ret
386  %evec = sext <vscale x 2 x i16> %va to <vscale x 2 x i32>
387  ret <vscale x 2 x i32> %evec
388}
389
390define <vscale x 2 x i32> @vzext_nxv2i16_nxv2i32(<vscale x 2 x i16> %va) {
391; CHECK-LABEL: vzext_nxv2i16_nxv2i32:
392; CHECK:       # %bb.0:
393; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
394; CHECK-NEXT:    vzext.vf2 v9, v8
395; CHECK-NEXT:    vmv.v.v v8, v9
396; CHECK-NEXT:    ret
397  %evec = zext <vscale x 2 x i16> %va to <vscale x 2 x i32>
398  ret <vscale x 2 x i32> %evec
399}
400
401define <vscale x 2 x i64> @vsext_nxv2i16_nxv2i64(<vscale x 2 x i16> %va) {
402; CHECK-LABEL: vsext_nxv2i16_nxv2i64:
403; CHECK:       # %bb.0:
404; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
405; CHECK-NEXT:    vsext.vf4 v10, v8
406; CHECK-NEXT:    vmv.v.v v8, v10
407; CHECK-NEXT:    ret
408  %evec = sext <vscale x 2 x i16> %va to <vscale x 2 x i64>
409  ret <vscale x 2 x i64> %evec
410}
411
412define <vscale x 2 x i64> @vzext_nxv2i16_nxv2i64(<vscale x 2 x i16> %va) {
413; CHECK-LABEL: vzext_nxv2i16_nxv2i64:
414; CHECK:       # %bb.0:
415; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
416; CHECK-NEXT:    vzext.vf4 v10, v8
417; CHECK-NEXT:    vmv.v.v v8, v10
418; CHECK-NEXT:    ret
419  %evec = zext <vscale x 2 x i16> %va to <vscale x 2 x i64>
420  ret <vscale x 2 x i64> %evec
421}
422
423define <vscale x 4 x i32> @vsext_nxv4i16_nxv4i32(<vscale x 4 x i16> %va) {
424; CHECK-LABEL: vsext_nxv4i16_nxv4i32:
425; CHECK:       # %bb.0:
426; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
427; CHECK-NEXT:    vsext.vf2 v10, v8
428; CHECK-NEXT:    vmv.v.v v8, v10
429; CHECK-NEXT:    ret
430  %evec = sext <vscale x 4 x i16> %va to <vscale x 4 x i32>
431  ret <vscale x 4 x i32> %evec
432}
433
434define <vscale x 4 x i32> @vzext_nxv4i16_nxv4i32(<vscale x 4 x i16> %va) {
435; CHECK-LABEL: vzext_nxv4i16_nxv4i32:
436; CHECK:       # %bb.0:
437; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
438; CHECK-NEXT:    vzext.vf2 v10, v8
439; CHECK-NEXT:    vmv.v.v v8, v10
440; CHECK-NEXT:    ret
441  %evec = zext <vscale x 4 x i16> %va to <vscale x 4 x i32>
442  ret <vscale x 4 x i32> %evec
443}
444
445define <vscale x 4 x i64> @vsext_nxv4i16_nxv4i64(<vscale x 4 x i16> %va) {
446; CHECK-LABEL: vsext_nxv4i16_nxv4i64:
447; CHECK:       # %bb.0:
448; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
449; CHECK-NEXT:    vsext.vf4 v12, v8
450; CHECK-NEXT:    vmv.v.v v8, v12
451; CHECK-NEXT:    ret
452  %evec = sext <vscale x 4 x i16> %va to <vscale x 4 x i64>
453  ret <vscale x 4 x i64> %evec
454}
455
456define <vscale x 4 x i64> @vzext_nxv4i16_nxv4i64(<vscale x 4 x i16> %va) {
457; CHECK-LABEL: vzext_nxv4i16_nxv4i64:
458; CHECK:       # %bb.0:
459; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
460; CHECK-NEXT:    vzext.vf4 v12, v8
461; CHECK-NEXT:    vmv.v.v v8, v12
462; CHECK-NEXT:    ret
463  %evec = zext <vscale x 4 x i16> %va to <vscale x 4 x i64>
464  ret <vscale x 4 x i64> %evec
465}
466
467define <vscale x 8 x i32> @vsext_nxv8i16_nxv8i32(<vscale x 8 x i16> %va) {
468; CHECK-LABEL: vsext_nxv8i16_nxv8i32:
469; CHECK:       # %bb.0:
470; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
471; CHECK-NEXT:    vsext.vf2 v12, v8
472; CHECK-NEXT:    vmv.v.v v8, v12
473; CHECK-NEXT:    ret
474  %evec = sext <vscale x 8 x i16> %va to <vscale x 8 x i32>
475  ret <vscale x 8 x i32> %evec
476}
477
478define <vscale x 8 x i32> @vzext_nxv8i16_nxv8i32(<vscale x 8 x i16> %va) {
479; CHECK-LABEL: vzext_nxv8i16_nxv8i32:
480; CHECK:       # %bb.0:
481; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
482; CHECK-NEXT:    vzext.vf2 v12, v8
483; CHECK-NEXT:    vmv.v.v v8, v12
484; CHECK-NEXT:    ret
485  %evec = zext <vscale x 8 x i16> %va to <vscale x 8 x i32>
486  ret <vscale x 8 x i32> %evec
487}
488
489define <vscale x 8 x i64> @vsext_nxv8i16_nxv8i64(<vscale x 8 x i16> %va) {
490; CHECK-LABEL: vsext_nxv8i16_nxv8i64:
491; CHECK:       # %bb.0:
492; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
493; CHECK-NEXT:    vsext.vf4 v16, v8
494; CHECK-NEXT:    vmv.v.v v8, v16
495; CHECK-NEXT:    ret
496  %evec = sext <vscale x 8 x i16> %va to <vscale x 8 x i64>
497  ret <vscale x 8 x i64> %evec
498}
499
500define <vscale x 8 x i64> @vzext_nxv8i16_nxv8i64(<vscale x 8 x i16> %va) {
501; CHECK-LABEL: vzext_nxv8i16_nxv8i64:
502; CHECK:       # %bb.0:
503; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
504; CHECK-NEXT:    vzext.vf4 v16, v8
505; CHECK-NEXT:    vmv.v.v v8, v16
506; CHECK-NEXT:    ret
507  %evec = zext <vscale x 8 x i16> %va to <vscale x 8 x i64>
508  ret <vscale x 8 x i64> %evec
509}
510
511define <vscale x 16 x i32> @vsext_nxv16i16_nxv16i32(<vscale x 16 x i16> %va) {
512; CHECK-LABEL: vsext_nxv16i16_nxv16i32:
513; CHECK:       # %bb.0:
514; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
515; CHECK-NEXT:    vsext.vf2 v16, v8
516; CHECK-NEXT:    vmv.v.v v8, v16
517; CHECK-NEXT:    ret
518  %evec = sext <vscale x 16 x i16> %va to <vscale x 16 x i32>
519  ret <vscale x 16 x i32> %evec
520}
521
522define <vscale x 16 x i32> @vzext_nxv16i16_nxv16i32(<vscale x 16 x i16> %va) {
523; CHECK-LABEL: vzext_nxv16i16_nxv16i32:
524; CHECK:       # %bb.0:
525; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
526; CHECK-NEXT:    vzext.vf2 v16, v8
527; CHECK-NEXT:    vmv.v.v v8, v16
528; CHECK-NEXT:    ret
529  %evec = zext <vscale x 16 x i16> %va to <vscale x 16 x i32>
530  ret <vscale x 16 x i32> %evec
531}
532
533define <vscale x 1 x i64> @vsext_nxv1i32_nxv1i64(<vscale x 1 x i32> %va) {
534; CHECK-LABEL: vsext_nxv1i32_nxv1i64:
535; CHECK:       # %bb.0:
536; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
537; CHECK-NEXT:    vsext.vf2 v9, v8
538; CHECK-NEXT:    vmv.v.v v8, v9
539; CHECK-NEXT:    ret
540  %evec = sext <vscale x 1 x i32> %va to <vscale x 1 x i64>
541  ret <vscale x 1 x i64> %evec
542}
543
544define <vscale x 1 x i64> @vzext_nxv1i32_nxv1i64(<vscale x 1 x i32> %va) {
545; CHECK-LABEL: vzext_nxv1i32_nxv1i64:
546; CHECK:       # %bb.0:
547; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
548; CHECK-NEXT:    vzext.vf2 v9, v8
549; CHECK-NEXT:    vmv.v.v v8, v9
550; CHECK-NEXT:    ret
551  %evec = zext <vscale x 1 x i32> %va to <vscale x 1 x i64>
552  ret <vscale x 1 x i64> %evec
553}
554
555define <vscale x 2 x i64> @vsext_nxv2i32_nxv2i64(<vscale x 2 x i32> %va) {
556; CHECK-LABEL: vsext_nxv2i32_nxv2i64:
557; CHECK:       # %bb.0:
558; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
559; CHECK-NEXT:    vsext.vf2 v10, v8
560; CHECK-NEXT:    vmv.v.v v8, v10
561; CHECK-NEXT:    ret
562  %evec = sext <vscale x 2 x i32> %va to <vscale x 2 x i64>
563  ret <vscale x 2 x i64> %evec
564}
565
566define <vscale x 2 x i64> @vzext_nxv2i32_nxv2i64(<vscale x 2 x i32> %va) {
567; CHECK-LABEL: vzext_nxv2i32_nxv2i64:
568; CHECK:       # %bb.0:
569; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
570; CHECK-NEXT:    vzext.vf2 v10, v8
571; CHECK-NEXT:    vmv.v.v v8, v10
572; CHECK-NEXT:    ret
573  %evec = zext <vscale x 2 x i32> %va to <vscale x 2 x i64>
574  ret <vscale x 2 x i64> %evec
575}
576
577define <vscale x 4 x i64> @vsext_nxv4i32_nxv4i64(<vscale x 4 x i32> %va) {
578; CHECK-LABEL: vsext_nxv4i32_nxv4i64:
579; CHECK:       # %bb.0:
580; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
581; CHECK-NEXT:    vsext.vf2 v12, v8
582; CHECK-NEXT:    vmv.v.v v8, v12
583; CHECK-NEXT:    ret
584  %evec = sext <vscale x 4 x i32> %va to <vscale x 4 x i64>
585  ret <vscale x 4 x i64> %evec
586}
587
588define <vscale x 4 x i64> @vzext_nxv4i32_nxv4i64(<vscale x 4 x i32> %va) {
589; CHECK-LABEL: vzext_nxv4i32_nxv4i64:
590; CHECK:       # %bb.0:
591; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
592; CHECK-NEXT:    vzext.vf2 v12, v8
593; CHECK-NEXT:    vmv.v.v v8, v12
594; CHECK-NEXT:    ret
595  %evec = zext <vscale x 4 x i32> %va to <vscale x 4 x i64>
596  ret <vscale x 4 x i64> %evec
597}
598
599define <vscale x 8 x i64> @vsext_nxv8i32_nxv8i64(<vscale x 8 x i32> %va) {
600; CHECK-LABEL: vsext_nxv8i32_nxv8i64:
601; CHECK:       # %bb.0:
602; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
603; CHECK-NEXT:    vsext.vf2 v16, v8
604; CHECK-NEXT:    vmv.v.v v8, v16
605; CHECK-NEXT:    ret
606  %evec = sext <vscale x 8 x i32> %va to <vscale x 8 x i64>
607  ret <vscale x 8 x i64> %evec
608}
609
610define <vscale x 8 x i64> @vzext_nxv8i32_nxv8i64(<vscale x 8 x i32> %va) {
611; CHECK-LABEL: vzext_nxv8i32_nxv8i64:
612; CHECK:       # %bb.0:
613; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
614; CHECK-NEXT:    vzext.vf2 v16, v8
615; CHECK-NEXT:    vmv.v.v v8, v16
616; CHECK-NEXT:    ret
617  %evec = zext <vscale x 8 x i32> %va to <vscale x 8 x i64>
618  ret <vscale x 8 x i64> %evec
619}
620