[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsmul-rv32.ll
blobe7d8ae635f75c2f906c0562a916b095e891edd25
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs \
3 ; RUN:   < %s | FileCheck %s
4 ; RUN: not --crash llc -mtriple=riscv32  -mattr=+zve64d 2>&1 \
5 ; RUN:   < %s | FileCheck %s --check-prefixes=ZVE64D
7 ; ZVE64D: LLVM ERROR: Cannot select: intrinsic %llvm.riscv.vsmul
9 declare <vscale x 1 x i8> @llvm.riscv.vsmul.nxv1i8.nxv1i8(
10   <vscale x 1 x i8>,
11   <vscale x 1 x i8>,
12   <vscale x 1 x i8>,
13   i32, i32);
15 define <vscale x 1 x i8> @intrinsic_vsmul_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
16 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv1i8_nxv1i8_nxv1i8:
17 ; CHECK:       # %bb.0: # %entry
18 ; CHECK-NEXT:    csrwi vxrm, 0
19 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
20 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
21 ; CHECK-NEXT:    ret
22 entry:
23   %a = call <vscale x 1 x i8> @llvm.riscv.vsmul.nxv1i8.nxv1i8(
24     <vscale x 1 x i8> undef,
25     <vscale x 1 x i8> %0,
26     <vscale x 1 x i8> %1,
27     i32 0, i32 %2)
29   ret <vscale x 1 x i8> %a
32 declare <vscale x 1 x i8> @llvm.riscv.vsmul.mask.nxv1i8.nxv1i8(
33   <vscale x 1 x i8>,
34   <vscale x 1 x i8>,
35   <vscale x 1 x i8>,
36   <vscale x 1 x i1>,
37   i32, i32, i32);
39 define <vscale x 1 x i8> @intrinsic_vsmul_mask_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
40 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv1i8_nxv1i8_nxv1i8:
41 ; CHECK:       # %bb.0: # %entry
42 ; CHECK-NEXT:    csrwi vxrm, 0
43 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
44 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
45 ; CHECK-NEXT:    ret
46 entry:
47   %a = call <vscale x 1 x i8> @llvm.riscv.vsmul.mask.nxv1i8.nxv1i8(
48     <vscale x 1 x i8> %0,
49     <vscale x 1 x i8> %1,
50     <vscale x 1 x i8> %2,
51     <vscale x 1 x i1> %3,
52     i32 0, i32 %4, i32 1)
54   ret <vscale x 1 x i8> %a
57 declare <vscale x 2 x i8> @llvm.riscv.vsmul.nxv2i8.nxv2i8(
58   <vscale x 2 x i8>,
59   <vscale x 2 x i8>,
60   <vscale x 2 x i8>,
61   i32, i32);
63 define <vscale x 2 x i8> @intrinsic_vsmul_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i32 %2) nounwind {
64 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv2i8_nxv2i8_nxv2i8:
65 ; CHECK:       # %bb.0: # %entry
66 ; CHECK-NEXT:    csrwi vxrm, 0
67 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
68 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
69 ; CHECK-NEXT:    ret
70 entry:
71   %a = call <vscale x 2 x i8> @llvm.riscv.vsmul.nxv2i8.nxv2i8(
72     <vscale x 2 x i8> undef,
73     <vscale x 2 x i8> %0,
74     <vscale x 2 x i8> %1,
75     i32 0, i32 %2)
77   ret <vscale x 2 x i8> %a
80 declare <vscale x 2 x i8> @llvm.riscv.vsmul.mask.nxv2i8.nxv2i8(
81   <vscale x 2 x i8>,
82   <vscale x 2 x i8>,
83   <vscale x 2 x i8>,
84   <vscale x 2 x i1>,
85   i32, i32, i32);
87 define <vscale x 2 x i8> @intrinsic_vsmul_mask_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, <vscale x 2 x i8> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
88 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv2i8_nxv2i8_nxv2i8:
89 ; CHECK:       # %bb.0: # %entry
90 ; CHECK-NEXT:    csrwi vxrm, 0
91 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
92 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
93 ; CHECK-NEXT:    ret
94 entry:
95   %a = call <vscale x 2 x i8> @llvm.riscv.vsmul.mask.nxv2i8.nxv2i8(
96     <vscale x 2 x i8> %0,
97     <vscale x 2 x i8> %1,
98     <vscale x 2 x i8> %2,
99     <vscale x 2 x i1> %3,
100     i32 0, i32 %4, i32 1)
102   ret <vscale x 2 x i8> %a
105 declare <vscale x 4 x i8> @llvm.riscv.vsmul.nxv4i8.nxv4i8(
106   <vscale x 4 x i8>,
107   <vscale x 4 x i8>,
108   <vscale x 4 x i8>,
109   i32, i32);
111 define <vscale x 4 x i8> @intrinsic_vsmul_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i32 %2) nounwind {
112 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv4i8_nxv4i8_nxv4i8:
113 ; CHECK:       # %bb.0: # %entry
114 ; CHECK-NEXT:    csrwi vxrm, 0
115 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
116 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
117 ; CHECK-NEXT:    ret
118 entry:
119   %a = call <vscale x 4 x i8> @llvm.riscv.vsmul.nxv4i8.nxv4i8(
120     <vscale x 4 x i8> undef,
121     <vscale x 4 x i8> %0,
122     <vscale x 4 x i8> %1,
123     i32 0, i32 %2)
125   ret <vscale x 4 x i8> %a
128 declare <vscale x 4 x i8> @llvm.riscv.vsmul.mask.nxv4i8.nxv4i8(
129   <vscale x 4 x i8>,
130   <vscale x 4 x i8>,
131   <vscale x 4 x i8>,
132   <vscale x 4 x i1>,
133   i32, i32, i32);
135 define <vscale x 4 x i8> @intrinsic_vsmul_mask_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, <vscale x 4 x i8> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
136 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv4i8_nxv4i8_nxv4i8:
137 ; CHECK:       # %bb.0: # %entry
138 ; CHECK-NEXT:    csrwi vxrm, 0
139 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
140 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
141 ; CHECK-NEXT:    ret
142 entry:
143   %a = call <vscale x 4 x i8> @llvm.riscv.vsmul.mask.nxv4i8.nxv4i8(
144     <vscale x 4 x i8> %0,
145     <vscale x 4 x i8> %1,
146     <vscale x 4 x i8> %2,
147     <vscale x 4 x i1> %3,
148     i32 0, i32 %4, i32 1)
150   ret <vscale x 4 x i8> %a
153 declare <vscale x 8 x i8> @llvm.riscv.vsmul.nxv8i8.nxv8i8(
154   <vscale x 8 x i8>,
155   <vscale x 8 x i8>,
156   <vscale x 8 x i8>,
157   i32, i32);
159 define <vscale x 8 x i8> @intrinsic_vsmul_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i32 %2) nounwind {
160 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv8i8_nxv8i8_nxv8i8:
161 ; CHECK:       # %bb.0: # %entry
162 ; CHECK-NEXT:    csrwi vxrm, 0
163 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
164 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
165 ; CHECK-NEXT:    ret
166 entry:
167   %a = call <vscale x 8 x i8> @llvm.riscv.vsmul.nxv8i8.nxv8i8(
168     <vscale x 8 x i8> undef,
169     <vscale x 8 x i8> %0,
170     <vscale x 8 x i8> %1,
171     i32 0, i32 %2)
173   ret <vscale x 8 x i8> %a
176 declare <vscale x 8 x i8> @llvm.riscv.vsmul.mask.nxv8i8.nxv8i8(
177   <vscale x 8 x i8>,
178   <vscale x 8 x i8>,
179   <vscale x 8 x i8>,
180   <vscale x 8 x i1>,
181   i32, i32, i32);
183 define <vscale x 8 x i8> @intrinsic_vsmul_mask_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, <vscale x 8 x i8> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
184 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv8i8_nxv8i8_nxv8i8:
185 ; CHECK:       # %bb.0: # %entry
186 ; CHECK-NEXT:    csrwi vxrm, 0
187 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
188 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
189 ; CHECK-NEXT:    ret
190 entry:
191   %a = call <vscale x 8 x i8> @llvm.riscv.vsmul.mask.nxv8i8.nxv8i8(
192     <vscale x 8 x i8> %0,
193     <vscale x 8 x i8> %1,
194     <vscale x 8 x i8> %2,
195     <vscale x 8 x i1> %3,
196     i32 0, i32 %4, i32 1)
198   ret <vscale x 8 x i8> %a
201 declare <vscale x 16 x i8> @llvm.riscv.vsmul.nxv16i8.nxv16i8(
202   <vscale x 16 x i8>,
203   <vscale x 16 x i8>,
204   <vscale x 16 x i8>,
205   i32, i32);
207 define <vscale x 16 x i8> @intrinsic_vsmul_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i32 %2) nounwind {
208 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv16i8_nxv16i8_nxv16i8:
209 ; CHECK:       # %bb.0: # %entry
210 ; CHECK-NEXT:    csrwi vxrm, 0
211 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
212 ; CHECK-NEXT:    vsmul.vv v8, v8, v10
213 ; CHECK-NEXT:    ret
214 entry:
215   %a = call <vscale x 16 x i8> @llvm.riscv.vsmul.nxv16i8.nxv16i8(
216     <vscale x 16 x i8> undef,
217     <vscale x 16 x i8> %0,
218     <vscale x 16 x i8> %1,
219     i32 0, i32 %2)
221   ret <vscale x 16 x i8> %a
224 declare <vscale x 16 x i8> @llvm.riscv.vsmul.mask.nxv16i8.nxv16i8(
225   <vscale x 16 x i8>,
226   <vscale x 16 x i8>,
227   <vscale x 16 x i8>,
228   <vscale x 16 x i1>,
229   i32, i32, i32);
231 define <vscale x 16 x i8> @intrinsic_vsmul_mask_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
232 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv16i8_nxv16i8_nxv16i8:
233 ; CHECK:       # %bb.0: # %entry
234 ; CHECK-NEXT:    csrwi vxrm, 0
235 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
236 ; CHECK-NEXT:    vsmul.vv v8, v10, v12, v0.t
237 ; CHECK-NEXT:    ret
238 entry:
239   %a = call <vscale x 16 x i8> @llvm.riscv.vsmul.mask.nxv16i8.nxv16i8(
240     <vscale x 16 x i8> %0,
241     <vscale x 16 x i8> %1,
242     <vscale x 16 x i8> %2,
243     <vscale x 16 x i1> %3,
244     i32 0, i32 %4, i32 1)
246   ret <vscale x 16 x i8> %a
249 declare <vscale x 32 x i8> @llvm.riscv.vsmul.nxv32i8.nxv32i8(
250   <vscale x 32 x i8>,
251   <vscale x 32 x i8>,
252   <vscale x 32 x i8>,
253   i32, i32);
255 define <vscale x 32 x i8> @intrinsic_vsmul_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i32 %2) nounwind {
256 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv32i8_nxv32i8_nxv32i8:
257 ; CHECK:       # %bb.0: # %entry
258 ; CHECK-NEXT:    csrwi vxrm, 0
259 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
260 ; CHECK-NEXT:    vsmul.vv v8, v8, v12
261 ; CHECK-NEXT:    ret
262 entry:
263   %a = call <vscale x 32 x i8> @llvm.riscv.vsmul.nxv32i8.nxv32i8(
264     <vscale x 32 x i8> undef,
265     <vscale x 32 x i8> %0,
266     <vscale x 32 x i8> %1,
267     i32 0, i32 %2)
269   ret <vscale x 32 x i8> %a
272 declare <vscale x 32 x i8> @llvm.riscv.vsmul.mask.nxv32i8.nxv32i8(
273   <vscale x 32 x i8>,
274   <vscale x 32 x i8>,
275   <vscale x 32 x i8>,
276   <vscale x 32 x i1>,
277   i32, i32, i32);
279 define <vscale x 32 x i8> @intrinsic_vsmul_mask_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, <vscale x 32 x i8> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
280 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv32i8_nxv32i8_nxv32i8:
281 ; CHECK:       # %bb.0: # %entry
282 ; CHECK-NEXT:    csrwi vxrm, 0
283 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
284 ; CHECK-NEXT:    vsmul.vv v8, v12, v16, v0.t
285 ; CHECK-NEXT:    ret
286 entry:
287   %a = call <vscale x 32 x i8> @llvm.riscv.vsmul.mask.nxv32i8.nxv32i8(
288     <vscale x 32 x i8> %0,
289     <vscale x 32 x i8> %1,
290     <vscale x 32 x i8> %2,
291     <vscale x 32 x i1> %3,
292     i32 0, i32 %4, i32 1)
294   ret <vscale x 32 x i8> %a
297 declare <vscale x 64 x i8> @llvm.riscv.vsmul.nxv64i8.nxv64i8(
298   <vscale x 64 x i8>,
299   <vscale x 64 x i8>,
300   <vscale x 64 x i8>,
301   i32, i32);
303 define <vscale x 64 x i8> @intrinsic_vsmul_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i32 %2) nounwind {
304 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv64i8_nxv64i8_nxv64i8:
305 ; CHECK:       # %bb.0: # %entry
306 ; CHECK-NEXT:    csrwi vxrm, 0
307 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
308 ; CHECK-NEXT:    vsmul.vv v8, v8, v16
309 ; CHECK-NEXT:    ret
310 entry:
311   %a = call <vscale x 64 x i8> @llvm.riscv.vsmul.nxv64i8.nxv64i8(
312     <vscale x 64 x i8> undef,
313     <vscale x 64 x i8> %0,
314     <vscale x 64 x i8> %1,
315     i32 0, i32 %2)
317   ret <vscale x 64 x i8> %a
320 declare <vscale x 64 x i8> @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8(
321   <vscale x 64 x i8>,
322   <vscale x 64 x i8>,
323   <vscale x 64 x i8>,
324   <vscale x 64 x i1>,
325   i32, i32, i32);
327 define <vscale x 64 x i8> @intrinsic_vsmul_mask_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, <vscale x 64 x i8> %2, <vscale x 64 x i1> %3, i32 %4) nounwind {
328 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv64i8_nxv64i8_nxv64i8:
329 ; CHECK:       # %bb.0: # %entry
330 ; CHECK-NEXT:    vl8r.v v24, (a0)
331 ; CHECK-NEXT:    csrwi vxrm, 0
332 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
333 ; CHECK-NEXT:    vsmul.vv v8, v16, v24, v0.t
334 ; CHECK-NEXT:    ret
335 entry:
336   %a = call <vscale x 64 x i8> @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8(
337     <vscale x 64 x i8> %0,
338     <vscale x 64 x i8> %1,
339     <vscale x 64 x i8> %2,
340     <vscale x 64 x i1> %3,
341     i32 0, i32 %4, i32 1)
343   ret <vscale x 64 x i8> %a
346 declare <vscale x 1 x i16> @llvm.riscv.vsmul.nxv1i16.nxv1i16(
347   <vscale x 1 x i16>,
348   <vscale x 1 x i16>,
349   <vscale x 1 x i16>,
350   i32, i32);
352 define <vscale x 1 x i16> @intrinsic_vsmul_vv_nxv1i16_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
353 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv1i16_nxv1i16_nxv1i16:
354 ; CHECK:       # %bb.0: # %entry
355 ; CHECK-NEXT:    csrwi vxrm, 0
356 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
357 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
358 ; CHECK-NEXT:    ret
359 entry:
360   %a = call <vscale x 1 x i16> @llvm.riscv.vsmul.nxv1i16.nxv1i16(
361     <vscale x 1 x i16> undef,
362     <vscale x 1 x i16> %0,
363     <vscale x 1 x i16> %1,
364     i32 0, i32 %2)
366   ret <vscale x 1 x i16> %a
369 declare <vscale x 1 x i16> @llvm.riscv.vsmul.mask.nxv1i16.nxv1i16(
370   <vscale x 1 x i16>,
371   <vscale x 1 x i16>,
372   <vscale x 1 x i16>,
373   <vscale x 1 x i1>,
374   i32, i32, i32);
376 define <vscale x 1 x i16> @intrinsic_vsmul_mask_vv_nxv1i16_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
377 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv1i16_nxv1i16_nxv1i16:
378 ; CHECK:       # %bb.0: # %entry
379 ; CHECK-NEXT:    csrwi vxrm, 0
380 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
381 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
382 ; CHECK-NEXT:    ret
383 entry:
384   %a = call <vscale x 1 x i16> @llvm.riscv.vsmul.mask.nxv1i16.nxv1i16(
385     <vscale x 1 x i16> %0,
386     <vscale x 1 x i16> %1,
387     <vscale x 1 x i16> %2,
388     <vscale x 1 x i1> %3,
389     i32 0, i32 %4, i32 1)
391   ret <vscale x 1 x i16> %a
394 declare <vscale x 2 x i16> @llvm.riscv.vsmul.nxv2i16.nxv2i16(
395   <vscale x 2 x i16>,
396   <vscale x 2 x i16>,
397   <vscale x 2 x i16>,
398   i32, i32);
400 define <vscale x 2 x i16> @intrinsic_vsmul_vv_nxv2i16_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i32 %2) nounwind {
401 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv2i16_nxv2i16_nxv2i16:
402 ; CHECK:       # %bb.0: # %entry
403 ; CHECK-NEXT:    csrwi vxrm, 0
404 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
405 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
406 ; CHECK-NEXT:    ret
407 entry:
408   %a = call <vscale x 2 x i16> @llvm.riscv.vsmul.nxv2i16.nxv2i16(
409     <vscale x 2 x i16> undef,
410     <vscale x 2 x i16> %0,
411     <vscale x 2 x i16> %1,
412     i32 0, i32 %2)
414   ret <vscale x 2 x i16> %a
417 declare <vscale x 2 x i16> @llvm.riscv.vsmul.mask.nxv2i16.nxv2i16(
418   <vscale x 2 x i16>,
419   <vscale x 2 x i16>,
420   <vscale x 2 x i16>,
421   <vscale x 2 x i1>,
422   i32, i32, i32);
424 define <vscale x 2 x i16> @intrinsic_vsmul_mask_vv_nxv2i16_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
425 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv2i16_nxv2i16_nxv2i16:
426 ; CHECK:       # %bb.0: # %entry
427 ; CHECK-NEXT:    csrwi vxrm, 0
428 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
429 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
430 ; CHECK-NEXT:    ret
431 entry:
432   %a = call <vscale x 2 x i16> @llvm.riscv.vsmul.mask.nxv2i16.nxv2i16(
433     <vscale x 2 x i16> %0,
434     <vscale x 2 x i16> %1,
435     <vscale x 2 x i16> %2,
436     <vscale x 2 x i1> %3,
437     i32 0, i32 %4, i32 1)
439   ret <vscale x 2 x i16> %a
442 declare <vscale x 4 x i16> @llvm.riscv.vsmul.nxv4i16.nxv4i16(
443   <vscale x 4 x i16>,
444   <vscale x 4 x i16>,
445   <vscale x 4 x i16>,
446   i32, i32);
448 define <vscale x 4 x i16> @intrinsic_vsmul_vv_nxv4i16_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
449 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv4i16_nxv4i16_nxv4i16:
450 ; CHECK:       # %bb.0: # %entry
451 ; CHECK-NEXT:    csrwi vxrm, 0
452 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
453 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
454 ; CHECK-NEXT:    ret
455 entry:
456   %a = call <vscale x 4 x i16> @llvm.riscv.vsmul.nxv4i16.nxv4i16(
457     <vscale x 4 x i16> undef,
458     <vscale x 4 x i16> %0,
459     <vscale x 4 x i16> %1,
460     i32 0, i32 %2)
462   ret <vscale x 4 x i16> %a
465 declare <vscale x 4 x i16> @llvm.riscv.vsmul.mask.nxv4i16.nxv4i16(
466   <vscale x 4 x i16>,
467   <vscale x 4 x i16>,
468   <vscale x 4 x i16>,
469   <vscale x 4 x i1>,
470   i32, i32, i32);
472 define <vscale x 4 x i16> @intrinsic_vsmul_mask_vv_nxv4i16_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
473 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv4i16_nxv4i16_nxv4i16:
474 ; CHECK:       # %bb.0: # %entry
475 ; CHECK-NEXT:    csrwi vxrm, 0
476 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
477 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
478 ; CHECK-NEXT:    ret
479 entry:
480   %a = call <vscale x 4 x i16> @llvm.riscv.vsmul.mask.nxv4i16.nxv4i16(
481     <vscale x 4 x i16> %0,
482     <vscale x 4 x i16> %1,
483     <vscale x 4 x i16> %2,
484     <vscale x 4 x i1> %3,
485     i32 0, i32 %4, i32 1)
487   ret <vscale x 4 x i16> %a
490 declare <vscale x 8 x i16> @llvm.riscv.vsmul.nxv8i16.nxv8i16(
491   <vscale x 8 x i16>,
492   <vscale x 8 x i16>,
493   <vscale x 8 x i16>,
494   i32, i32);
496 define <vscale x 8 x i16> @intrinsic_vsmul_vv_nxv8i16_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
497 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv8i16_nxv8i16_nxv8i16:
498 ; CHECK:       # %bb.0: # %entry
499 ; CHECK-NEXT:    csrwi vxrm, 0
500 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
501 ; CHECK-NEXT:    vsmul.vv v8, v8, v10
502 ; CHECK-NEXT:    ret
503 entry:
504   %a = call <vscale x 8 x i16> @llvm.riscv.vsmul.nxv8i16.nxv8i16(
505     <vscale x 8 x i16> undef,
506     <vscale x 8 x i16> %0,
507     <vscale x 8 x i16> %1,
508     i32 0, i32 %2)
510   ret <vscale x 8 x i16> %a
513 declare <vscale x 8 x i16> @llvm.riscv.vsmul.mask.nxv8i16.nxv8i16(
514   <vscale x 8 x i16>,
515   <vscale x 8 x i16>,
516   <vscale x 8 x i16>,
517   <vscale x 8 x i1>,
518   i32, i32, i32);
520 define <vscale x 8 x i16> @intrinsic_vsmul_mask_vv_nxv8i16_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
521 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv8i16_nxv8i16_nxv8i16:
522 ; CHECK:       # %bb.0: # %entry
523 ; CHECK-NEXT:    csrwi vxrm, 0
524 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
525 ; CHECK-NEXT:    vsmul.vv v8, v10, v12, v0.t
526 ; CHECK-NEXT:    ret
527 entry:
528   %a = call <vscale x 8 x i16> @llvm.riscv.vsmul.mask.nxv8i16.nxv8i16(
529     <vscale x 8 x i16> %0,
530     <vscale x 8 x i16> %1,
531     <vscale x 8 x i16> %2,
532     <vscale x 8 x i1> %3,
533     i32 0, i32 %4, i32 1)
535   ret <vscale x 8 x i16> %a
538 declare <vscale x 16 x i16> @llvm.riscv.vsmul.nxv16i16.nxv16i16(
539   <vscale x 16 x i16>,
540   <vscale x 16 x i16>,
541   <vscale x 16 x i16>,
542   i32, i32);
544 define <vscale x 16 x i16> @intrinsic_vsmul_vv_nxv16i16_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
545 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv16i16_nxv16i16_nxv16i16:
546 ; CHECK:       # %bb.0: # %entry
547 ; CHECK-NEXT:    csrwi vxrm, 0
548 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
549 ; CHECK-NEXT:    vsmul.vv v8, v8, v12
550 ; CHECK-NEXT:    ret
551 entry:
552   %a = call <vscale x 16 x i16> @llvm.riscv.vsmul.nxv16i16.nxv16i16(
553     <vscale x 16 x i16> undef,
554     <vscale x 16 x i16> %0,
555     <vscale x 16 x i16> %1,
556     i32 0, i32 %2)
558   ret <vscale x 16 x i16> %a
561 declare <vscale x 16 x i16> @llvm.riscv.vsmul.mask.nxv16i16.nxv16i16(
562   <vscale x 16 x i16>,
563   <vscale x 16 x i16>,
564   <vscale x 16 x i16>,
565   <vscale x 16 x i1>,
566   i32, i32, i32);
568 define <vscale x 16 x i16> @intrinsic_vsmul_mask_vv_nxv16i16_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
569 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv16i16_nxv16i16_nxv16i16:
570 ; CHECK:       # %bb.0: # %entry
571 ; CHECK-NEXT:    csrwi vxrm, 0
572 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
573 ; CHECK-NEXT:    vsmul.vv v8, v12, v16, v0.t
574 ; CHECK-NEXT:    ret
575 entry:
576   %a = call <vscale x 16 x i16> @llvm.riscv.vsmul.mask.nxv16i16.nxv16i16(
577     <vscale x 16 x i16> %0,
578     <vscale x 16 x i16> %1,
579     <vscale x 16 x i16> %2,
580     <vscale x 16 x i1> %3,
581     i32 0, i32 %4, i32 1)
583   ret <vscale x 16 x i16> %a
586 declare <vscale x 32 x i16> @llvm.riscv.vsmul.nxv32i16.nxv32i16(
587   <vscale x 32 x i16>,
588   <vscale x 32 x i16>,
589   <vscale x 32 x i16>,
590   i32, i32);
592 define <vscale x 32 x i16> @intrinsic_vsmul_vv_nxv32i16_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i32 %2) nounwind {
593 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv32i16_nxv32i16_nxv32i16:
594 ; CHECK:       # %bb.0: # %entry
595 ; CHECK-NEXT:    csrwi vxrm, 0
596 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
597 ; CHECK-NEXT:    vsmul.vv v8, v8, v16
598 ; CHECK-NEXT:    ret
599 entry:
600   %a = call <vscale x 32 x i16> @llvm.riscv.vsmul.nxv32i16.nxv32i16(
601     <vscale x 32 x i16> undef,
602     <vscale x 32 x i16> %0,
603     <vscale x 32 x i16> %1,
604     i32 0, i32 %2)
606   ret <vscale x 32 x i16> %a
609 declare <vscale x 32 x i16> @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16(
610   <vscale x 32 x i16>,
611   <vscale x 32 x i16>,
612   <vscale x 32 x i16>,
613   <vscale x 32 x i1>,
614   i32, i32, i32);
616 define <vscale x 32 x i16> @intrinsic_vsmul_mask_vv_nxv32i16_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
617 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv32i16_nxv32i16_nxv32i16:
618 ; CHECK:       # %bb.0: # %entry
619 ; CHECK-NEXT:    vl8re16.v v24, (a0)
620 ; CHECK-NEXT:    csrwi vxrm, 0
621 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
622 ; CHECK-NEXT:    vsmul.vv v8, v16, v24, v0.t
623 ; CHECK-NEXT:    ret
624 entry:
625   %a = call <vscale x 32 x i16> @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16(
626     <vscale x 32 x i16> %0,
627     <vscale x 32 x i16> %1,
628     <vscale x 32 x i16> %2,
629     <vscale x 32 x i1> %3,
630     i32 0, i32 %4, i32 1)
632   ret <vscale x 32 x i16> %a
635 declare <vscale x 1 x i32> @llvm.riscv.vsmul.nxv1i32.nxv1i32(
636   <vscale x 1 x i32>,
637   <vscale x 1 x i32>,
638   <vscale x 1 x i32>,
639   i32, i32);
641 define <vscale x 1 x i32> @intrinsic_vsmul_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i32 %2) nounwind {
642 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv1i32_nxv1i32_nxv1i32:
643 ; CHECK:       # %bb.0: # %entry
644 ; CHECK-NEXT:    csrwi vxrm, 0
645 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
646 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
647 ; CHECK-NEXT:    ret
648 entry:
649   %a = call <vscale x 1 x i32> @llvm.riscv.vsmul.nxv1i32.nxv1i32(
650     <vscale x 1 x i32> undef,
651     <vscale x 1 x i32> %0,
652     <vscale x 1 x i32> %1,
653     i32 0, i32 %2)
655   ret <vscale x 1 x i32> %a
658 declare <vscale x 1 x i32> @llvm.riscv.vsmul.mask.nxv1i32.nxv1i32(
659   <vscale x 1 x i32>,
660   <vscale x 1 x i32>,
661   <vscale x 1 x i32>,
662   <vscale x 1 x i1>,
663   i32, i32, i32);
665 define <vscale x 1 x i32> @intrinsic_vsmul_mask_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
666 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv1i32_nxv1i32_nxv1i32:
667 ; CHECK:       # %bb.0: # %entry
668 ; CHECK-NEXT:    csrwi vxrm, 0
669 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
670 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
671 ; CHECK-NEXT:    ret
672 entry:
673   %a = call <vscale x 1 x i32> @llvm.riscv.vsmul.mask.nxv1i32.nxv1i32(
674     <vscale x 1 x i32> %0,
675     <vscale x 1 x i32> %1,
676     <vscale x 1 x i32> %2,
677     <vscale x 1 x i1> %3,
678     i32 0, i32 %4, i32 1)
680   ret <vscale x 1 x i32> %a
683 declare <vscale x 2 x i32> @llvm.riscv.vsmul.nxv2i32.nxv2i32(
684   <vscale x 2 x i32>,
685   <vscale x 2 x i32>,
686   <vscale x 2 x i32>,
687   i32, i32);
689 define <vscale x 2 x i32> @intrinsic_vsmul_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i32 %2) nounwind {
690 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv2i32_nxv2i32_nxv2i32:
691 ; CHECK:       # %bb.0: # %entry
692 ; CHECK-NEXT:    csrwi vxrm, 0
693 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
694 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
695 ; CHECK-NEXT:    ret
696 entry:
697   %a = call <vscale x 2 x i32> @llvm.riscv.vsmul.nxv2i32.nxv2i32(
698     <vscale x 2 x i32> undef,
699     <vscale x 2 x i32> %0,
700     <vscale x 2 x i32> %1,
701     i32 0, i32 %2)
703   ret <vscale x 2 x i32> %a
706 declare <vscale x 2 x i32> @llvm.riscv.vsmul.mask.nxv2i32.nxv2i32(
707   <vscale x 2 x i32>,
708   <vscale x 2 x i32>,
709   <vscale x 2 x i32>,
710   <vscale x 2 x i1>,
711   i32, i32, i32);
713 define <vscale x 2 x i32> @intrinsic_vsmul_mask_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
714 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv2i32_nxv2i32_nxv2i32:
715 ; CHECK:       # %bb.0: # %entry
716 ; CHECK-NEXT:    csrwi vxrm, 0
717 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
718 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
719 ; CHECK-NEXT:    ret
720 entry:
721   %a = call <vscale x 2 x i32> @llvm.riscv.vsmul.mask.nxv2i32.nxv2i32(
722     <vscale x 2 x i32> %0,
723     <vscale x 2 x i32> %1,
724     <vscale x 2 x i32> %2,
725     <vscale x 2 x i1> %3,
726     i32 0, i32 %4, i32 1)
728   ret <vscale x 2 x i32> %a
731 declare <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.nxv4i32(
732   <vscale x 4 x i32>,
733   <vscale x 4 x i32>,
734   <vscale x 4 x i32>,
735   i32, i32);
737 define <vscale x 4 x i32> @intrinsic_vsmul_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i32 %2) nounwind {
738 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv4i32_nxv4i32_nxv4i32:
739 ; CHECK:       # %bb.0: # %entry
740 ; CHECK-NEXT:    csrwi vxrm, 0
741 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
742 ; CHECK-NEXT:    vsmul.vv v8, v8, v10
743 ; CHECK-NEXT:    ret
744 entry:
745   %a = call <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.nxv4i32(
746     <vscale x 4 x i32> undef,
747     <vscale x 4 x i32> %0,
748     <vscale x 4 x i32> %1,
749     i32 0, i32 %2)
751   ret <vscale x 4 x i32> %a
754 declare <vscale x 4 x i32> @llvm.riscv.vsmul.mask.nxv4i32.nxv4i32(
755   <vscale x 4 x i32>,
756   <vscale x 4 x i32>,
757   <vscale x 4 x i32>,
758   <vscale x 4 x i1>,
759   i32, i32, i32);
761 define <vscale x 4 x i32> @intrinsic_vsmul_mask_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
762 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv4i32_nxv4i32_nxv4i32:
763 ; CHECK:       # %bb.0: # %entry
764 ; CHECK-NEXT:    csrwi vxrm, 0
765 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
766 ; CHECK-NEXT:    vsmul.vv v8, v10, v12, v0.t
767 ; CHECK-NEXT:    ret
768 entry:
769   %a = call <vscale x 4 x i32> @llvm.riscv.vsmul.mask.nxv4i32.nxv4i32(
770     <vscale x 4 x i32> %0,
771     <vscale x 4 x i32> %1,
772     <vscale x 4 x i32> %2,
773     <vscale x 4 x i1> %3,
774     i32 0, i32 %4, i32 1)
776   ret <vscale x 4 x i32> %a
779 declare <vscale x 8 x i32> @llvm.riscv.vsmul.nxv8i32.nxv8i32(
780   <vscale x 8 x i32>,
781   <vscale x 8 x i32>,
782   <vscale x 8 x i32>,
783   i32, i32);
785 define <vscale x 8 x i32> @intrinsic_vsmul_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i32 %2) nounwind {
786 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv8i32_nxv8i32_nxv8i32:
787 ; CHECK:       # %bb.0: # %entry
788 ; CHECK-NEXT:    csrwi vxrm, 0
789 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
790 ; CHECK-NEXT:    vsmul.vv v8, v8, v12
791 ; CHECK-NEXT:    ret
792 entry:
793   %a = call <vscale x 8 x i32> @llvm.riscv.vsmul.nxv8i32.nxv8i32(
794     <vscale x 8 x i32> undef,
795     <vscale x 8 x i32> %0,
796     <vscale x 8 x i32> %1,
797     i32 0, i32 %2)
799   ret <vscale x 8 x i32> %a
802 declare <vscale x 8 x i32> @llvm.riscv.vsmul.mask.nxv8i32.nxv8i32(
803   <vscale x 8 x i32>,
804   <vscale x 8 x i32>,
805   <vscale x 8 x i32>,
806   <vscale x 8 x i1>,
807   i32, i32, i32);
809 define <vscale x 8 x i32> @intrinsic_vsmul_mask_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
810 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv8i32_nxv8i32_nxv8i32:
811 ; CHECK:       # %bb.0: # %entry
812 ; CHECK-NEXT:    csrwi vxrm, 0
813 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
814 ; CHECK-NEXT:    vsmul.vv v8, v12, v16, v0.t
815 ; CHECK-NEXT:    ret
816 entry:
817   %a = call <vscale x 8 x i32> @llvm.riscv.vsmul.mask.nxv8i32.nxv8i32(
818     <vscale x 8 x i32> %0,
819     <vscale x 8 x i32> %1,
820     <vscale x 8 x i32> %2,
821     <vscale x 8 x i1> %3,
822     i32 0, i32 %4, i32 1)
824   ret <vscale x 8 x i32> %a
827 declare <vscale x 16 x i32> @llvm.riscv.vsmul.nxv16i32.nxv16i32(
828   <vscale x 16 x i32>,
829   <vscale x 16 x i32>,
830   <vscale x 16 x i32>,
831   i32, i32);
833 define <vscale x 16 x i32> @intrinsic_vsmul_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i32 %2) nounwind {
834 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv16i32_nxv16i32_nxv16i32:
835 ; CHECK:       # %bb.0: # %entry
836 ; CHECK-NEXT:    csrwi vxrm, 0
837 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
838 ; CHECK-NEXT:    vsmul.vv v8, v8, v16
839 ; CHECK-NEXT:    ret
840 entry:
841   %a = call <vscale x 16 x i32> @llvm.riscv.vsmul.nxv16i32.nxv16i32(
842     <vscale x 16 x i32> undef,
843     <vscale x 16 x i32> %0,
844     <vscale x 16 x i32> %1,
845     i32 0, i32 %2)
847   ret <vscale x 16 x i32> %a
850 declare <vscale x 16 x i32> @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32(
851   <vscale x 16 x i32>,
852   <vscale x 16 x i32>,
853   <vscale x 16 x i32>,
854   <vscale x 16 x i1>,
855   i32, i32, i32);
857 define <vscale x 16 x i32> @intrinsic_vsmul_mask_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, <vscale x 16 x i32> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
858 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv16i32_nxv16i32_nxv16i32:
859 ; CHECK:       # %bb.0: # %entry
860 ; CHECK-NEXT:    vl8re32.v v24, (a0)
861 ; CHECK-NEXT:    csrwi vxrm, 0
862 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
863 ; CHECK-NEXT:    vsmul.vv v8, v16, v24, v0.t
864 ; CHECK-NEXT:    ret
865 entry:
866   %a = call <vscale x 16 x i32> @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32(
867     <vscale x 16 x i32> %0,
868     <vscale x 16 x i32> %1,
869     <vscale x 16 x i32> %2,
870     <vscale x 16 x i1> %3,
871     i32 0, i32 %4, i32 1)
873   ret <vscale x 16 x i32> %a
876 declare <vscale x 1 x i64> @llvm.riscv.vsmul.nxv1i64.nxv1i64(
877   <vscale x 1 x i64>,
878   <vscale x 1 x i64>,
879   <vscale x 1 x i64>,
880   i32, i32);
882 define <vscale x 1 x i64> @intrinsic_vsmul_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i32 %2) nounwind {
883 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv1i64_nxv1i64_nxv1i64:
884 ; CHECK:       # %bb.0: # %entry
885 ; CHECK-NEXT:    csrwi vxrm, 0
886 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
887 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
888 ; CHECK-NEXT:    ret
889 entry:
890   %a = call <vscale x 1 x i64> @llvm.riscv.vsmul.nxv1i64.nxv1i64(
891     <vscale x 1 x i64> undef,
892     <vscale x 1 x i64> %0,
893     <vscale x 1 x i64> %1,
894     i32 0, i32 %2)
896   ret <vscale x 1 x i64> %a
899 declare <vscale x 1 x i64> @llvm.riscv.vsmul.mask.nxv1i64.nxv1i64(
900   <vscale x 1 x i64>,
901   <vscale x 1 x i64>,
902   <vscale x 1 x i64>,
903   <vscale x 1 x i1>,
904   i32, i32, i32);
906 define <vscale x 1 x i64> @intrinsic_vsmul_mask_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, <vscale x 1 x i64> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
907 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv1i64_nxv1i64_nxv1i64:
908 ; CHECK:       # %bb.0: # %entry
909 ; CHECK-NEXT:    csrwi vxrm, 0
910 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
911 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
912 ; CHECK-NEXT:    ret
913 entry:
914   %a = call <vscale x 1 x i64> @llvm.riscv.vsmul.mask.nxv1i64.nxv1i64(
915     <vscale x 1 x i64> %0,
916     <vscale x 1 x i64> %1,
917     <vscale x 1 x i64> %2,
918     <vscale x 1 x i1> %3,
919     i32 0, i32 %4, i32 1)
921   ret <vscale x 1 x i64> %a
924 declare <vscale x 2 x i64> @llvm.riscv.vsmul.nxv2i64.nxv2i64(
925   <vscale x 2 x i64>,
926   <vscale x 2 x i64>,
927   <vscale x 2 x i64>,
928   i32, i32);
930 define <vscale x 2 x i64> @intrinsic_vsmul_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i32 %2) nounwind {
931 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv2i64_nxv2i64_nxv2i64:
932 ; CHECK:       # %bb.0: # %entry
933 ; CHECK-NEXT:    csrwi vxrm, 0
934 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
935 ; CHECK-NEXT:    vsmul.vv v8, v8, v10
936 ; CHECK-NEXT:    ret
937 entry:
938   %a = call <vscale x 2 x i64> @llvm.riscv.vsmul.nxv2i64.nxv2i64(
939     <vscale x 2 x i64> undef,
940     <vscale x 2 x i64> %0,
941     <vscale x 2 x i64> %1,
942     i32 0, i32 %2)
944   ret <vscale x 2 x i64> %a
947 declare <vscale x 2 x i64> @llvm.riscv.vsmul.mask.nxv2i64.nxv2i64(
948   <vscale x 2 x i64>,
949   <vscale x 2 x i64>,
950   <vscale x 2 x i64>,
951   <vscale x 2 x i1>,
952   i32, i32, i32);
954 define <vscale x 2 x i64> @intrinsic_vsmul_mask_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
955 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv2i64_nxv2i64_nxv2i64:
956 ; CHECK:       # %bb.0: # %entry
957 ; CHECK-NEXT:    csrwi vxrm, 0
958 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
959 ; CHECK-NEXT:    vsmul.vv v8, v10, v12, v0.t
960 ; CHECK-NEXT:    ret
961 entry:
962   %a = call <vscale x 2 x i64> @llvm.riscv.vsmul.mask.nxv2i64.nxv2i64(
963     <vscale x 2 x i64> %0,
964     <vscale x 2 x i64> %1,
965     <vscale x 2 x i64> %2,
966     <vscale x 2 x i1> %3,
967     i32 0, i32 %4, i32 1)
969   ret <vscale x 2 x i64> %a
972 declare <vscale x 4 x i64> @llvm.riscv.vsmul.nxv4i64.nxv4i64(
973   <vscale x 4 x i64>,
974   <vscale x 4 x i64>,
975   <vscale x 4 x i64>,
976   i32, i32);
978 define <vscale x 4 x i64> @intrinsic_vsmul_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i32 %2) nounwind {
979 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv4i64_nxv4i64_nxv4i64:
980 ; CHECK:       # %bb.0: # %entry
981 ; CHECK-NEXT:    csrwi vxrm, 0
982 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
983 ; CHECK-NEXT:    vsmul.vv v8, v8, v12
984 ; CHECK-NEXT:    ret
985 entry:
986   %a = call <vscale x 4 x i64> @llvm.riscv.vsmul.nxv4i64.nxv4i64(
987     <vscale x 4 x i64> undef,
988     <vscale x 4 x i64> %0,
989     <vscale x 4 x i64> %1,
990     i32 0, i32 %2)
992   ret <vscale x 4 x i64> %a
995 declare <vscale x 4 x i64> @llvm.riscv.vsmul.mask.nxv4i64.nxv4i64(
996   <vscale x 4 x i64>,
997   <vscale x 4 x i64>,
998   <vscale x 4 x i64>,
999   <vscale x 4 x i1>,
1000   i32, i32, i32);
1002 define <vscale x 4 x i64> @intrinsic_vsmul_mask_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, <vscale x 4 x i64> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1003 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv4i64_nxv4i64_nxv4i64:
1004 ; CHECK:       # %bb.0: # %entry
1005 ; CHECK-NEXT:    csrwi vxrm, 0
1006 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1007 ; CHECK-NEXT:    vsmul.vv v8, v12, v16, v0.t
1008 ; CHECK-NEXT:    ret
1009 entry:
1010   %a = call <vscale x 4 x i64> @llvm.riscv.vsmul.mask.nxv4i64.nxv4i64(
1011     <vscale x 4 x i64> %0,
1012     <vscale x 4 x i64> %1,
1013     <vscale x 4 x i64> %2,
1014     <vscale x 4 x i1> %3,
1015     i32 0, i32 %4, i32 1)
1017   ret <vscale x 4 x i64> %a
1020 declare <vscale x 8 x i64> @llvm.riscv.vsmul.nxv8i64.nxv8i64(
1021   <vscale x 8 x i64>,
1022   <vscale x 8 x i64>,
1023   <vscale x 8 x i64>,
1024   i32, i32);
1026 define <vscale x 8 x i64> @intrinsic_vsmul_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i32 %2) nounwind {
1027 ; CHECK-LABEL: intrinsic_vsmul_vv_nxv8i64_nxv8i64_nxv8i64:
1028 ; CHECK:       # %bb.0: # %entry
1029 ; CHECK-NEXT:    csrwi vxrm, 0
1030 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1031 ; CHECK-NEXT:    vsmul.vv v8, v8, v16
1032 ; CHECK-NEXT:    ret
1033 entry:
1034   %a = call <vscale x 8 x i64> @llvm.riscv.vsmul.nxv8i64.nxv8i64(
1035     <vscale x 8 x i64> undef,
1036     <vscale x 8 x i64> %0,
1037     <vscale x 8 x i64> %1,
1038     i32 0, i32 %2)
1040   ret <vscale x 8 x i64> %a
1043 declare <vscale x 8 x i64> @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64(
1044   <vscale x 8 x i64>,
1045   <vscale x 8 x i64>,
1046   <vscale x 8 x i64>,
1047   <vscale x 8 x i1>,
1048   i32, i32, i32);
1050 define <vscale x 8 x i64> @intrinsic_vsmul_mask_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, <vscale x 8 x i64> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1051 ; CHECK-LABEL: intrinsic_vsmul_mask_vv_nxv8i64_nxv8i64_nxv8i64:
1052 ; CHECK:       # %bb.0: # %entry
1053 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1054 ; CHECK-NEXT:    csrwi vxrm, 0
1055 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
1056 ; CHECK-NEXT:    vsmul.vv v8, v16, v24, v0.t
1057 ; CHECK-NEXT:    ret
1058 entry:
1059   %a = call <vscale x 8 x i64> @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64(
1060     <vscale x 8 x i64> %0,
1061     <vscale x 8 x i64> %1,
1062     <vscale x 8 x i64> %2,
1063     <vscale x 8 x i1> %3,
1064     i32 0, i32 %4, i32 1)
1066   ret <vscale x 8 x i64> %a
1069 declare <vscale x 1 x i8> @llvm.riscv.vsmul.nxv1i8.i8(
1070   <vscale x 1 x i8>,
1071   <vscale x 1 x i8>,
1072   i8,
1073   i32, i32);
1075 define <vscale x 1 x i8> @intrinsic_vsmul_vx_nxv1i8_nxv1i8_i8(<vscale x 1 x i8> %0, i8 %1, i32 %2) nounwind {
1076 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv1i8_nxv1i8_i8:
1077 ; CHECK:       # %bb.0: # %entry
1078 ; CHECK-NEXT:    csrwi vxrm, 0
1079 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
1080 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1081 ; CHECK-NEXT:    ret
1082 entry:
1083   %a = call <vscale x 1 x i8> @llvm.riscv.vsmul.nxv1i8.i8(
1084     <vscale x 1 x i8> undef,
1085     <vscale x 1 x i8> %0,
1086     i8 %1,
1087     i32 0, i32 %2)
1089   ret <vscale x 1 x i8> %a
1092 declare <vscale x 1 x i8> @llvm.riscv.vsmul.mask.nxv1i8.i8(
1093   <vscale x 1 x i8>,
1094   <vscale x 1 x i8>,
1095   i8,
1096   <vscale x 1 x i1>,
1097   i32, i32, i32);
1099 define <vscale x 1 x i8> @intrinsic_vsmul_mask_vx_nxv1i8_nxv1i8_i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i8 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1100 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv1i8_nxv1i8_i8:
1101 ; CHECK:       # %bb.0: # %entry
1102 ; CHECK-NEXT:    csrwi vxrm, 0
1103 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu
1104 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1105 ; CHECK-NEXT:    ret
1106 entry:
1107   %a = call <vscale x 1 x i8> @llvm.riscv.vsmul.mask.nxv1i8.i8(
1108     <vscale x 1 x i8> %0,
1109     <vscale x 1 x i8> %1,
1110     i8 %2,
1111     <vscale x 1 x i1> %3,
1112     i32 0, i32 %4, i32 1)
1114   ret <vscale x 1 x i8> %a
1117 declare <vscale x 2 x i8> @llvm.riscv.vsmul.nxv2i8.i8(
1118   <vscale x 2 x i8>,
1119   <vscale x 2 x i8>,
1120   i8,
1121   i32, i32);
1123 define <vscale x 2 x i8> @intrinsic_vsmul_vx_nxv2i8_nxv2i8_i8(<vscale x 2 x i8> %0, i8 %1, i32 %2) nounwind {
1124 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv2i8_nxv2i8_i8:
1125 ; CHECK:       # %bb.0: # %entry
1126 ; CHECK-NEXT:    csrwi vxrm, 0
1127 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
1128 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1129 ; CHECK-NEXT:    ret
1130 entry:
1131   %a = call <vscale x 2 x i8> @llvm.riscv.vsmul.nxv2i8.i8(
1132     <vscale x 2 x i8> undef,
1133     <vscale x 2 x i8> %0,
1134     i8 %1,
1135     i32 0, i32 %2)
1137   ret <vscale x 2 x i8> %a
1140 declare <vscale x 2 x i8> @llvm.riscv.vsmul.mask.nxv2i8.i8(
1141   <vscale x 2 x i8>,
1142   <vscale x 2 x i8>,
1143   i8,
1144   <vscale x 2 x i1>,
1145   i32, i32, i32);
1147 define <vscale x 2 x i8> @intrinsic_vsmul_mask_vx_nxv2i8_nxv2i8_i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i8 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1148 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv2i8_nxv2i8_i8:
1149 ; CHECK:       # %bb.0: # %entry
1150 ; CHECK-NEXT:    csrwi vxrm, 0
1151 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu
1152 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1153 ; CHECK-NEXT:    ret
1154 entry:
1155   %a = call <vscale x 2 x i8> @llvm.riscv.vsmul.mask.nxv2i8.i8(
1156     <vscale x 2 x i8> %0,
1157     <vscale x 2 x i8> %1,
1158     i8 %2,
1159     <vscale x 2 x i1> %3,
1160     i32 0, i32 %4, i32 1)
1162   ret <vscale x 2 x i8> %a
1165 declare <vscale x 4 x i8> @llvm.riscv.vsmul.nxv4i8.i8(
1166   <vscale x 4 x i8>,
1167   <vscale x 4 x i8>,
1168   i8,
1169   i32, i32);
1171 define <vscale x 4 x i8> @intrinsic_vsmul_vx_nxv4i8_nxv4i8_i8(<vscale x 4 x i8> %0, i8 %1, i32 %2) nounwind {
1172 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv4i8_nxv4i8_i8:
1173 ; CHECK:       # %bb.0: # %entry
1174 ; CHECK-NEXT:    csrwi vxrm, 0
1175 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
1176 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1177 ; CHECK-NEXT:    ret
1178 entry:
1179   %a = call <vscale x 4 x i8> @llvm.riscv.vsmul.nxv4i8.i8(
1180     <vscale x 4 x i8> undef,
1181     <vscale x 4 x i8> %0,
1182     i8 %1,
1183     i32 0, i32 %2)
1185   ret <vscale x 4 x i8> %a
1188 declare <vscale x 4 x i8> @llvm.riscv.vsmul.mask.nxv4i8.i8(
1189   <vscale x 4 x i8>,
1190   <vscale x 4 x i8>,
1191   i8,
1192   <vscale x 4 x i1>,
1193   i32, i32, i32);
1195 define <vscale x 4 x i8> @intrinsic_vsmul_mask_vx_nxv4i8_nxv4i8_i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i8 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1196 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv4i8_nxv4i8_i8:
1197 ; CHECK:       # %bb.0: # %entry
1198 ; CHECK-NEXT:    csrwi vxrm, 0
1199 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu
1200 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1201 ; CHECK-NEXT:    ret
1202 entry:
1203   %a = call <vscale x 4 x i8> @llvm.riscv.vsmul.mask.nxv4i8.i8(
1204     <vscale x 4 x i8> %0,
1205     <vscale x 4 x i8> %1,
1206     i8 %2,
1207     <vscale x 4 x i1> %3,
1208     i32 0, i32 %4, i32 1)
1210   ret <vscale x 4 x i8> %a
1213 declare <vscale x 8 x i8> @llvm.riscv.vsmul.nxv8i8.i8(
1214   <vscale x 8 x i8>,
1215   <vscale x 8 x i8>,
1216   i8,
1217   i32, i32);
1219 define <vscale x 8 x i8> @intrinsic_vsmul_vx_nxv8i8_nxv8i8_i8(<vscale x 8 x i8> %0, i8 %1, i32 %2) nounwind {
1220 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv8i8_nxv8i8_i8:
1221 ; CHECK:       # %bb.0: # %entry
1222 ; CHECK-NEXT:    csrwi vxrm, 0
1223 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
1224 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1225 ; CHECK-NEXT:    ret
1226 entry:
1227   %a = call <vscale x 8 x i8> @llvm.riscv.vsmul.nxv8i8.i8(
1228     <vscale x 8 x i8> undef,
1229     <vscale x 8 x i8> %0,
1230     i8 %1,
1231     i32 0, i32 %2)
1233   ret <vscale x 8 x i8> %a
1236 declare <vscale x 8 x i8> @llvm.riscv.vsmul.mask.nxv8i8.i8(
1237   <vscale x 8 x i8>,
1238   <vscale x 8 x i8>,
1239   i8,
1240   <vscale x 8 x i1>,
1241   i32, i32, i32);
1243 define <vscale x 8 x i8> @intrinsic_vsmul_mask_vx_nxv8i8_nxv8i8_i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i8 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1244 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv8i8_nxv8i8_i8:
1245 ; CHECK:       # %bb.0: # %entry
1246 ; CHECK-NEXT:    csrwi vxrm, 0
1247 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu
1248 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1249 ; CHECK-NEXT:    ret
1250 entry:
1251   %a = call <vscale x 8 x i8> @llvm.riscv.vsmul.mask.nxv8i8.i8(
1252     <vscale x 8 x i8> %0,
1253     <vscale x 8 x i8> %1,
1254     i8 %2,
1255     <vscale x 8 x i1> %3,
1256     i32 0, i32 %4, i32 1)
1258   ret <vscale x 8 x i8> %a
1261 declare <vscale x 16 x i8> @llvm.riscv.vsmul.nxv16i8.i8(
1262   <vscale x 16 x i8>,
1263   <vscale x 16 x i8>,
1264   i8,
1265   i32, i32);
1267 define <vscale x 16 x i8> @intrinsic_vsmul_vx_nxv16i8_nxv16i8_i8(<vscale x 16 x i8> %0, i8 %1, i32 %2) nounwind {
1268 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv16i8_nxv16i8_i8:
1269 ; CHECK:       # %bb.0: # %entry
1270 ; CHECK-NEXT:    csrwi vxrm, 0
1271 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
1272 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1273 ; CHECK-NEXT:    ret
1274 entry:
1275   %a = call <vscale x 16 x i8> @llvm.riscv.vsmul.nxv16i8.i8(
1276     <vscale x 16 x i8> undef,
1277     <vscale x 16 x i8> %0,
1278     i8 %1,
1279     i32 0, i32 %2)
1281   ret <vscale x 16 x i8> %a
1284 declare <vscale x 16 x i8> @llvm.riscv.vsmul.mask.nxv16i8.i8(
1285   <vscale x 16 x i8>,
1286   <vscale x 16 x i8>,
1287   i8,
1288   <vscale x 16 x i1>,
1289   i32, i32, i32);
1291 define <vscale x 16 x i8> @intrinsic_vsmul_mask_vx_nxv16i8_nxv16i8_i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i8 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1292 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv16i8_nxv16i8_i8:
1293 ; CHECK:       # %bb.0: # %entry
1294 ; CHECK-NEXT:    csrwi vxrm, 0
1295 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu
1296 ; CHECK-NEXT:    vsmul.vx v8, v10, a0, v0.t
1297 ; CHECK-NEXT:    ret
1298 entry:
1299   %a = call <vscale x 16 x i8> @llvm.riscv.vsmul.mask.nxv16i8.i8(
1300     <vscale x 16 x i8> %0,
1301     <vscale x 16 x i8> %1,
1302     i8 %2,
1303     <vscale x 16 x i1> %3,
1304     i32 0, i32 %4, i32 1)
1306   ret <vscale x 16 x i8> %a
1309 declare <vscale x 32 x i8> @llvm.riscv.vsmul.nxv32i8.i8(
1310   <vscale x 32 x i8>,
1311   <vscale x 32 x i8>,
1312   i8,
1313   i32, i32);
1315 define <vscale x 32 x i8> @intrinsic_vsmul_vx_nxv32i8_nxv32i8_i8(<vscale x 32 x i8> %0, i8 %1, i32 %2) nounwind {
1316 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv32i8_nxv32i8_i8:
1317 ; CHECK:       # %bb.0: # %entry
1318 ; CHECK-NEXT:    csrwi vxrm, 0
1319 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
1320 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1321 ; CHECK-NEXT:    ret
1322 entry:
1323   %a = call <vscale x 32 x i8> @llvm.riscv.vsmul.nxv32i8.i8(
1324     <vscale x 32 x i8> undef,
1325     <vscale x 32 x i8> %0,
1326     i8 %1,
1327     i32 0, i32 %2)
1329   ret <vscale x 32 x i8> %a
1332 declare <vscale x 32 x i8> @llvm.riscv.vsmul.mask.nxv32i8.i8(
1333   <vscale x 32 x i8>,
1334   <vscale x 32 x i8>,
1335   i8,
1336   <vscale x 32 x i1>,
1337   i32, i32, i32);
1339 define <vscale x 32 x i8> @intrinsic_vsmul_mask_vx_nxv32i8_nxv32i8_i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i8 %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
1340 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv32i8_nxv32i8_i8:
1341 ; CHECK:       # %bb.0: # %entry
1342 ; CHECK-NEXT:    csrwi vxrm, 0
1343 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
1344 ; CHECK-NEXT:    vsmul.vx v8, v12, a0, v0.t
1345 ; CHECK-NEXT:    ret
1346 entry:
1347   %a = call <vscale x 32 x i8> @llvm.riscv.vsmul.mask.nxv32i8.i8(
1348     <vscale x 32 x i8> %0,
1349     <vscale x 32 x i8> %1,
1350     i8 %2,
1351     <vscale x 32 x i1> %3,
1352     i32 0, i32 %4, i32 1)
1354   ret <vscale x 32 x i8> %a
1357 declare <vscale x 64 x i8> @llvm.riscv.vsmul.nxv64i8.i8(
1358   <vscale x 64 x i8>,
1359   <vscale x 64 x i8>,
1360   i8,
1361   i32, i32);
1363 define <vscale x 64 x i8> @intrinsic_vsmul_vx_nxv64i8_nxv64i8_i8(<vscale x 64 x i8> %0, i8 %1, i32 %2) nounwind {
1364 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv64i8_nxv64i8_i8:
1365 ; CHECK:       # %bb.0: # %entry
1366 ; CHECK-NEXT:    csrwi vxrm, 0
1367 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
1368 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1369 ; CHECK-NEXT:    ret
1370 entry:
1371   %a = call <vscale x 64 x i8> @llvm.riscv.vsmul.nxv64i8.i8(
1372     <vscale x 64 x i8> undef,
1373     <vscale x 64 x i8> %0,
1374     i8 %1,
1375     i32 0, i32 %2)
1377   ret <vscale x 64 x i8> %a
1380 declare <vscale x 64 x i8> @llvm.riscv.vsmul.mask.nxv64i8.i8(
1381   <vscale x 64 x i8>,
1382   <vscale x 64 x i8>,
1383   i8,
1384   <vscale x 64 x i1>,
1385   i32, i32, i32);
1387 define <vscale x 64 x i8> @intrinsic_vsmul_mask_vx_nxv64i8_nxv64i8_i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i8 %2, <vscale x 64 x i1> %3, i32 %4) nounwind {
1388 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv64i8_nxv64i8_i8:
1389 ; CHECK:       # %bb.0: # %entry
1390 ; CHECK-NEXT:    csrwi vxrm, 0
1391 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
1392 ; CHECK-NEXT:    vsmul.vx v8, v16, a0, v0.t
1393 ; CHECK-NEXT:    ret
1394 entry:
1395   %a = call <vscale x 64 x i8> @llvm.riscv.vsmul.mask.nxv64i8.i8(
1396     <vscale x 64 x i8> %0,
1397     <vscale x 64 x i8> %1,
1398     i8 %2,
1399     <vscale x 64 x i1> %3,
1400     i32 0, i32 %4, i32 1)
1402   ret <vscale x 64 x i8> %a
1405 declare <vscale x 1 x i16> @llvm.riscv.vsmul.nxv1i16.i16(
1406   <vscale x 1 x i16>,
1407   <vscale x 1 x i16>,
1408   i16,
1409   i32, i32);
1411 define <vscale x 1 x i16> @intrinsic_vsmul_vx_nxv1i16_nxv1i16_i16(<vscale x 1 x i16> %0, i16 %1, i32 %2) nounwind {
1412 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv1i16_nxv1i16_i16:
1413 ; CHECK:       # %bb.0: # %entry
1414 ; CHECK-NEXT:    csrwi vxrm, 0
1415 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
1416 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1417 ; CHECK-NEXT:    ret
1418 entry:
1419   %a = call <vscale x 1 x i16> @llvm.riscv.vsmul.nxv1i16.i16(
1420     <vscale x 1 x i16> undef,
1421     <vscale x 1 x i16> %0,
1422     i16 %1,
1423     i32 0, i32 %2)
1425   ret <vscale x 1 x i16> %a
1428 declare <vscale x 1 x i16> @llvm.riscv.vsmul.mask.nxv1i16.i16(
1429   <vscale x 1 x i16>,
1430   <vscale x 1 x i16>,
1431   i16,
1432   <vscale x 1 x i1>,
1433   i32, i32, i32);
1435 define <vscale x 1 x i16> @intrinsic_vsmul_mask_vx_nxv1i16_nxv1i16_i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i16 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1436 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv1i16_nxv1i16_i16:
1437 ; CHECK:       # %bb.0: # %entry
1438 ; CHECK-NEXT:    csrwi vxrm, 0
1439 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
1440 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1441 ; CHECK-NEXT:    ret
1442 entry:
1443   %a = call <vscale x 1 x i16> @llvm.riscv.vsmul.mask.nxv1i16.i16(
1444     <vscale x 1 x i16> %0,
1445     <vscale x 1 x i16> %1,
1446     i16 %2,
1447     <vscale x 1 x i1> %3,
1448     i32 0, i32 %4, i32 1)
1450   ret <vscale x 1 x i16> %a
1453 declare <vscale x 2 x i16> @llvm.riscv.vsmul.nxv2i16.i16(
1454   <vscale x 2 x i16>,
1455   <vscale x 2 x i16>,
1456   i16,
1457   i32, i32);
1459 define <vscale x 2 x i16> @intrinsic_vsmul_vx_nxv2i16_nxv2i16_i16(<vscale x 2 x i16> %0, i16 %1, i32 %2) nounwind {
1460 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv2i16_nxv2i16_i16:
1461 ; CHECK:       # %bb.0: # %entry
1462 ; CHECK-NEXT:    csrwi vxrm, 0
1463 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
1464 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1465 ; CHECK-NEXT:    ret
1466 entry:
1467   %a = call <vscale x 2 x i16> @llvm.riscv.vsmul.nxv2i16.i16(
1468     <vscale x 2 x i16> undef,
1469     <vscale x 2 x i16> %0,
1470     i16 %1,
1471     i32 0, i32 %2)
1473   ret <vscale x 2 x i16> %a
1476 declare <vscale x 2 x i16> @llvm.riscv.vsmul.mask.nxv2i16.i16(
1477   <vscale x 2 x i16>,
1478   <vscale x 2 x i16>,
1479   i16,
1480   <vscale x 2 x i1>,
1481   i32, i32, i32);
1483 define <vscale x 2 x i16> @intrinsic_vsmul_mask_vx_nxv2i16_nxv2i16_i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i16 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1484 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv2i16_nxv2i16_i16:
1485 ; CHECK:       # %bb.0: # %entry
1486 ; CHECK-NEXT:    csrwi vxrm, 0
1487 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
1488 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1489 ; CHECK-NEXT:    ret
1490 entry:
1491   %a = call <vscale x 2 x i16> @llvm.riscv.vsmul.mask.nxv2i16.i16(
1492     <vscale x 2 x i16> %0,
1493     <vscale x 2 x i16> %1,
1494     i16 %2,
1495     <vscale x 2 x i1> %3,
1496     i32 0, i32 %4, i32 1)
1498   ret <vscale x 2 x i16> %a
1501 declare <vscale x 4 x i16> @llvm.riscv.vsmul.nxv4i16.i16(
1502   <vscale x 4 x i16>,
1503   <vscale x 4 x i16>,
1504   i16,
1505   i32, i32);
1507 define <vscale x 4 x i16> @intrinsic_vsmul_vx_nxv4i16_nxv4i16_i16(<vscale x 4 x i16> %0, i16 %1, i32 %2) nounwind {
1508 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv4i16_nxv4i16_i16:
1509 ; CHECK:       # %bb.0: # %entry
1510 ; CHECK-NEXT:    csrwi vxrm, 0
1511 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
1512 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1513 ; CHECK-NEXT:    ret
1514 entry:
1515   %a = call <vscale x 4 x i16> @llvm.riscv.vsmul.nxv4i16.i16(
1516     <vscale x 4 x i16> undef,
1517     <vscale x 4 x i16> %0,
1518     i16 %1,
1519     i32 0, i32 %2)
1521   ret <vscale x 4 x i16> %a
1524 declare <vscale x 4 x i16> @llvm.riscv.vsmul.mask.nxv4i16.i16(
1525   <vscale x 4 x i16>,
1526   <vscale x 4 x i16>,
1527   i16,
1528   <vscale x 4 x i1>,
1529   i32, i32, i32);
1531 define <vscale x 4 x i16> @intrinsic_vsmul_mask_vx_nxv4i16_nxv4i16_i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i16 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1532 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv4i16_nxv4i16_i16:
1533 ; CHECK:       # %bb.0: # %entry
1534 ; CHECK-NEXT:    csrwi vxrm, 0
1535 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
1536 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1537 ; CHECK-NEXT:    ret
1538 entry:
1539   %a = call <vscale x 4 x i16> @llvm.riscv.vsmul.mask.nxv4i16.i16(
1540     <vscale x 4 x i16> %0,
1541     <vscale x 4 x i16> %1,
1542     i16 %2,
1543     <vscale x 4 x i1> %3,
1544     i32 0, i32 %4, i32 1)
1546   ret <vscale x 4 x i16> %a
1549 declare <vscale x 8 x i16> @llvm.riscv.vsmul.nxv8i16.i16(
1550   <vscale x 8 x i16>,
1551   <vscale x 8 x i16>,
1552   i16,
1553   i32, i32);
1555 define <vscale x 8 x i16> @intrinsic_vsmul_vx_nxv8i16_nxv8i16_i16(<vscale x 8 x i16> %0, i16 %1, i32 %2) nounwind {
1556 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv8i16_nxv8i16_i16:
1557 ; CHECK:       # %bb.0: # %entry
1558 ; CHECK-NEXT:    csrwi vxrm, 0
1559 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
1560 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1561 ; CHECK-NEXT:    ret
1562 entry:
1563   %a = call <vscale x 8 x i16> @llvm.riscv.vsmul.nxv8i16.i16(
1564     <vscale x 8 x i16> undef,
1565     <vscale x 8 x i16> %0,
1566     i16 %1,
1567     i32 0, i32 %2)
1569   ret <vscale x 8 x i16> %a
1572 declare <vscale x 8 x i16> @llvm.riscv.vsmul.mask.nxv8i16.i16(
1573   <vscale x 8 x i16>,
1574   <vscale x 8 x i16>,
1575   i16,
1576   <vscale x 8 x i1>,
1577   i32, i32, i32);
1579 define <vscale x 8 x i16> @intrinsic_vsmul_mask_vx_nxv8i16_nxv8i16_i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i16 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1580 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv8i16_nxv8i16_i16:
1581 ; CHECK:       # %bb.0: # %entry
1582 ; CHECK-NEXT:    csrwi vxrm, 0
1583 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
1584 ; CHECK-NEXT:    vsmul.vx v8, v10, a0, v0.t
1585 ; CHECK-NEXT:    ret
1586 entry:
1587   %a = call <vscale x 8 x i16> @llvm.riscv.vsmul.mask.nxv8i16.i16(
1588     <vscale x 8 x i16> %0,
1589     <vscale x 8 x i16> %1,
1590     i16 %2,
1591     <vscale x 8 x i1> %3,
1592     i32 0, i32 %4, i32 1)
1594   ret <vscale x 8 x i16> %a
1597 declare <vscale x 16 x i16> @llvm.riscv.vsmul.nxv16i16.i16(
1598   <vscale x 16 x i16>,
1599   <vscale x 16 x i16>,
1600   i16,
1601   i32, i32);
1603 define <vscale x 16 x i16> @intrinsic_vsmul_vx_nxv16i16_nxv16i16_i16(<vscale x 16 x i16> %0, i16 %1, i32 %2) nounwind {
1604 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv16i16_nxv16i16_i16:
1605 ; CHECK:       # %bb.0: # %entry
1606 ; CHECK-NEXT:    csrwi vxrm, 0
1607 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
1608 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1609 ; CHECK-NEXT:    ret
1610 entry:
1611   %a = call <vscale x 16 x i16> @llvm.riscv.vsmul.nxv16i16.i16(
1612     <vscale x 16 x i16> undef,
1613     <vscale x 16 x i16> %0,
1614     i16 %1,
1615     i32 0, i32 %2)
1617   ret <vscale x 16 x i16> %a
1620 declare <vscale x 16 x i16> @llvm.riscv.vsmul.mask.nxv16i16.i16(
1621   <vscale x 16 x i16>,
1622   <vscale x 16 x i16>,
1623   i16,
1624   <vscale x 16 x i1>,
1625   i32, i32, i32);
1627 define <vscale x 16 x i16> @intrinsic_vsmul_mask_vx_nxv16i16_nxv16i16_i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i16 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1628 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv16i16_nxv16i16_i16:
1629 ; CHECK:       # %bb.0: # %entry
1630 ; CHECK-NEXT:    csrwi vxrm, 0
1631 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
1632 ; CHECK-NEXT:    vsmul.vx v8, v12, a0, v0.t
1633 ; CHECK-NEXT:    ret
1634 entry:
1635   %a = call <vscale x 16 x i16> @llvm.riscv.vsmul.mask.nxv16i16.i16(
1636     <vscale x 16 x i16> %0,
1637     <vscale x 16 x i16> %1,
1638     i16 %2,
1639     <vscale x 16 x i1> %3,
1640     i32 0, i32 %4, i32 1)
1642   ret <vscale x 16 x i16> %a
1645 declare <vscale x 32 x i16> @llvm.riscv.vsmul.nxv32i16.i16(
1646   <vscale x 32 x i16>,
1647   <vscale x 32 x i16>,
1648   i16,
1649   i32, i32);
1651 define <vscale x 32 x i16> @intrinsic_vsmul_vx_nxv32i16_nxv32i16_i16(<vscale x 32 x i16> %0, i16 %1, i32 %2) nounwind {
1652 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv32i16_nxv32i16_i16:
1653 ; CHECK:       # %bb.0: # %entry
1654 ; CHECK-NEXT:    csrwi vxrm, 0
1655 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
1656 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1657 ; CHECK-NEXT:    ret
1658 entry:
1659   %a = call <vscale x 32 x i16> @llvm.riscv.vsmul.nxv32i16.i16(
1660     <vscale x 32 x i16> undef,
1661     <vscale x 32 x i16> %0,
1662     i16 %1,
1663     i32 0, i32 %2)
1665   ret <vscale x 32 x i16> %a
1668 declare <vscale x 32 x i16> @llvm.riscv.vsmul.mask.nxv32i16.i16(
1669   <vscale x 32 x i16>,
1670   <vscale x 32 x i16>,
1671   i16,
1672   <vscale x 32 x i1>,
1673   i32, i32, i32);
1675 define <vscale x 32 x i16> @intrinsic_vsmul_mask_vx_nxv32i16_nxv32i16_i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i16 %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
1676 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv32i16_nxv32i16_i16:
1677 ; CHECK:       # %bb.0: # %entry
1678 ; CHECK-NEXT:    csrwi vxrm, 0
1679 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
1680 ; CHECK-NEXT:    vsmul.vx v8, v16, a0, v0.t
1681 ; CHECK-NEXT:    ret
1682 entry:
1683   %a = call <vscale x 32 x i16> @llvm.riscv.vsmul.mask.nxv32i16.i16(
1684     <vscale x 32 x i16> %0,
1685     <vscale x 32 x i16> %1,
1686     i16 %2,
1687     <vscale x 32 x i1> %3,
1688     i32 0, i32 %4, i32 1)
1690   ret <vscale x 32 x i16> %a
1693 declare <vscale x 1 x i32> @llvm.riscv.vsmul.nxv1i32.i32(
1694   <vscale x 1 x i32>,
1695   <vscale x 1 x i32>,
1696   i32, i32, i32);
1698 define <vscale x 1 x i32> @intrinsic_vsmul_vx_nxv1i32_nxv1i32_i32(<vscale x 1 x i32> %0, i32 %1, i32 %2) nounwind {
1699 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv1i32_nxv1i32_i32:
1700 ; CHECK:       # %bb.0: # %entry
1701 ; CHECK-NEXT:    csrwi vxrm, 0
1702 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1703 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1704 ; CHECK-NEXT:    ret
1705 entry:
1706   %a = call <vscale x 1 x i32> @llvm.riscv.vsmul.nxv1i32.i32(
1707     <vscale x 1 x i32> undef,
1708     <vscale x 1 x i32> %0,
1709     i32 %1,
1710     i32 0, i32 %2)
1712   ret <vscale x 1 x i32> %a
1715 declare <vscale x 1 x i32> @llvm.riscv.vsmul.mask.nxv1i32.i32(
1716   <vscale x 1 x i32>,
1717   <vscale x 1 x i32>,
1718   i32,
1719   <vscale x 1 x i1>,
1720   i32, i32, i32);
1722 define <vscale x 1 x i32> @intrinsic_vsmul_mask_vx_nxv1i32_nxv1i32_i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i32 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1723 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv1i32_nxv1i32_i32:
1724 ; CHECK:       # %bb.0: # %entry
1725 ; CHECK-NEXT:    csrwi vxrm, 0
1726 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
1727 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1728 ; CHECK-NEXT:    ret
1729 entry:
1730   %a = call <vscale x 1 x i32> @llvm.riscv.vsmul.mask.nxv1i32.i32(
1731     <vscale x 1 x i32> %0,
1732     <vscale x 1 x i32> %1,
1733     i32 %2,
1734     <vscale x 1 x i1> %3,
1735     i32 0, i32 %4, i32 1)
1737   ret <vscale x 1 x i32> %a
1740 declare <vscale x 2 x i32> @llvm.riscv.vsmul.nxv2i32.i32(
1741   <vscale x 2 x i32>,
1742   <vscale x 2 x i32>,
1743   i32, i32, i32);
1745 define <vscale x 2 x i32> @intrinsic_vsmul_vx_nxv2i32_nxv2i32_i32(<vscale x 2 x i32> %0, i32 %1, i32 %2) nounwind {
1746 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv2i32_nxv2i32_i32:
1747 ; CHECK:       # %bb.0: # %entry
1748 ; CHECK-NEXT:    csrwi vxrm, 0
1749 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1750 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1751 ; CHECK-NEXT:    ret
1752 entry:
1753   %a = call <vscale x 2 x i32> @llvm.riscv.vsmul.nxv2i32.i32(
1754     <vscale x 2 x i32> undef,
1755     <vscale x 2 x i32> %0,
1756     i32 %1,
1757     i32 0, i32 %2)
1759   ret <vscale x 2 x i32> %a
1762 declare <vscale x 2 x i32> @llvm.riscv.vsmul.mask.nxv2i32.i32(
1763   <vscale x 2 x i32>,
1764   <vscale x 2 x i32>,
1765   i32,
1766   <vscale x 2 x i1>,
1767   i32, i32, i32);
1769 define <vscale x 2 x i32> @intrinsic_vsmul_mask_vx_nxv2i32_nxv2i32_i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i32 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1770 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv2i32_nxv2i32_i32:
1771 ; CHECK:       # %bb.0: # %entry
1772 ; CHECK-NEXT:    csrwi vxrm, 0
1773 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
1774 ; CHECK-NEXT:    vsmul.vx v8, v9, a0, v0.t
1775 ; CHECK-NEXT:    ret
1776 entry:
1777   %a = call <vscale x 2 x i32> @llvm.riscv.vsmul.mask.nxv2i32.i32(
1778     <vscale x 2 x i32> %0,
1779     <vscale x 2 x i32> %1,
1780     i32 %2,
1781     <vscale x 2 x i1> %3,
1782     i32 0, i32 %4, i32 1)
1784   ret <vscale x 2 x i32> %a
1787 declare <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.i32(
1788   <vscale x 4 x i32>,
1789   <vscale x 4 x i32>,
1790   i32, i32, i32);
1792 define <vscale x 4 x i32> @intrinsic_vsmul_vx_nxv4i32_nxv4i32_i32(<vscale x 4 x i32> %0, i32 %1, i32 %2) nounwind {
1793 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv4i32_nxv4i32_i32:
1794 ; CHECK:       # %bb.0: # %entry
1795 ; CHECK-NEXT:    csrwi vxrm, 0
1796 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1797 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1798 ; CHECK-NEXT:    ret
1799 entry:
1800   %a = call <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.i32(
1801     <vscale x 4 x i32> undef,
1802     <vscale x 4 x i32> %0,
1803     i32 %1,
1804     i32 0, i32 %2)
1806   ret <vscale x 4 x i32> %a
1809 declare <vscale x 4 x i32> @llvm.riscv.vsmul.mask.nxv4i32.i32(
1810   <vscale x 4 x i32>,
1811   <vscale x 4 x i32>,
1812   i32,
1813   <vscale x 4 x i1>,
1814   i32, i32, i32);
1816 define <vscale x 4 x i32> @intrinsic_vsmul_mask_vx_nxv4i32_nxv4i32_i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i32 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1817 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv4i32_nxv4i32_i32:
1818 ; CHECK:       # %bb.0: # %entry
1819 ; CHECK-NEXT:    csrwi vxrm, 0
1820 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
1821 ; CHECK-NEXT:    vsmul.vx v8, v10, a0, v0.t
1822 ; CHECK-NEXT:    ret
1823 entry:
1824   %a = call <vscale x 4 x i32> @llvm.riscv.vsmul.mask.nxv4i32.i32(
1825     <vscale x 4 x i32> %0,
1826     <vscale x 4 x i32> %1,
1827     i32 %2,
1828     <vscale x 4 x i1> %3,
1829     i32 0, i32 %4, i32 1)
1831   ret <vscale x 4 x i32> %a
1834 declare <vscale x 8 x i32> @llvm.riscv.vsmul.nxv8i32.i32(
1835   <vscale x 8 x i32>,
1836   <vscale x 8 x i32>,
1837   i32, i32, i32);
1839 define <vscale x 8 x i32> @intrinsic_vsmul_vx_nxv8i32_nxv8i32_i32(<vscale x 8 x i32> %0, i32 %1, i32 %2) nounwind {
1840 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv8i32_nxv8i32_i32:
1841 ; CHECK:       # %bb.0: # %entry
1842 ; CHECK-NEXT:    csrwi vxrm, 0
1843 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1844 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1845 ; CHECK-NEXT:    ret
1846 entry:
1847   %a = call <vscale x 8 x i32> @llvm.riscv.vsmul.nxv8i32.i32(
1848     <vscale x 8 x i32> undef,
1849     <vscale x 8 x i32> %0,
1850     i32 %1,
1851     i32 0, i32 %2)
1853   ret <vscale x 8 x i32> %a
1856 declare <vscale x 8 x i32> @llvm.riscv.vsmul.mask.nxv8i32.i32(
1857   <vscale x 8 x i32>,
1858   <vscale x 8 x i32>,
1859   i32,
1860   <vscale x 8 x i1>,
1861   i32, i32, i32);
1863 define <vscale x 8 x i32> @intrinsic_vsmul_mask_vx_nxv8i32_nxv8i32_i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i32 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1864 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv8i32_nxv8i32_i32:
1865 ; CHECK:       # %bb.0: # %entry
1866 ; CHECK-NEXT:    csrwi vxrm, 0
1867 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
1868 ; CHECK-NEXT:    vsmul.vx v8, v12, a0, v0.t
1869 ; CHECK-NEXT:    ret
1870 entry:
1871   %a = call <vscale x 8 x i32> @llvm.riscv.vsmul.mask.nxv8i32.i32(
1872     <vscale x 8 x i32> %0,
1873     <vscale x 8 x i32> %1,
1874     i32 %2,
1875     <vscale x 8 x i1> %3,
1876     i32 0, i32 %4, i32 1)
1878   ret <vscale x 8 x i32> %a
1881 declare <vscale x 16 x i32> @llvm.riscv.vsmul.nxv16i32.i32(
1882   <vscale x 16 x i32>,
1883   <vscale x 16 x i32>,
1884   i32, i32, i32);
1886 define <vscale x 16 x i32> @intrinsic_vsmul_vx_nxv16i32_nxv16i32_i32(<vscale x 16 x i32> %0, i32 %1, i32 %2) nounwind {
1887 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv16i32_nxv16i32_i32:
1888 ; CHECK:       # %bb.0: # %entry
1889 ; CHECK-NEXT:    csrwi vxrm, 0
1890 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1891 ; CHECK-NEXT:    vsmul.vx v8, v8, a0
1892 ; CHECK-NEXT:    ret
1893 entry:
1894   %a = call <vscale x 16 x i32> @llvm.riscv.vsmul.nxv16i32.i32(
1895     <vscale x 16 x i32> undef,
1896     <vscale x 16 x i32> %0,
1897     i32 %1,
1898     i32 0, i32 %2)
1900   ret <vscale x 16 x i32> %a
1903 declare <vscale x 16 x i32> @llvm.riscv.vsmul.mask.nxv16i32.i32(
1904   <vscale x 16 x i32>,
1905   <vscale x 16 x i32>,
1906   i32,
1907   <vscale x 16 x i1>,
1908   i32, i32, i32);
1910 define <vscale x 16 x i32> @intrinsic_vsmul_mask_vx_nxv16i32_nxv16i32_i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i32 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1911 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv16i32_nxv16i32_i32:
1912 ; CHECK:       # %bb.0: # %entry
1913 ; CHECK-NEXT:    csrwi vxrm, 0
1914 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1915 ; CHECK-NEXT:    vsmul.vx v8, v16, a0, v0.t
1916 ; CHECK-NEXT:    ret
1917 entry:
1918   %a = call <vscale x 16 x i32> @llvm.riscv.vsmul.mask.nxv16i32.i32(
1919     <vscale x 16 x i32> %0,
1920     <vscale x 16 x i32> %1,
1921     i32 %2,
1922     <vscale x 16 x i1> %3,
1923     i32 0, i32 %4, i32 1)
1925   ret <vscale x 16 x i32> %a
1928 declare <vscale x 1 x i64> @llvm.riscv.vsmul.nxv1i64.i64(
1929   <vscale x 1 x i64>,
1930   <vscale x 1 x i64>,
1931   i64,
1932   i32, i32);
1934 define <vscale x 1 x i64> @intrinsic_vsmul_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, i64 %1, i32 %2) nounwind {
1935 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv1i64_nxv1i64_i64:
1936 ; CHECK:       # %bb.0: # %entry
1937 ; CHECK-NEXT:    addi sp, sp, -16
1938 ; CHECK-NEXT:    sw a1, 12(sp)
1939 ; CHECK-NEXT:    sw a0, 8(sp)
1940 ; CHECK-NEXT:    addi a0, sp, 8
1941 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1942 ; CHECK-NEXT:    vlse64.v v9, (a0), zero
1943 ; CHECK-NEXT:    csrwi vxrm, 0
1944 ; CHECK-NEXT:    vsmul.vv v8, v8, v9
1945 ; CHECK-NEXT:    addi sp, sp, 16
1946 ; CHECK-NEXT:    ret
1947 entry:
1948   %a = call <vscale x 1 x i64> @llvm.riscv.vsmul.nxv1i64.i64(
1949     <vscale x 1 x i64> undef,
1950     <vscale x 1 x i64> %0,
1951     i64 %1,
1952     i32 0, i32 %2)
1954   ret <vscale x 1 x i64> %a
1957 declare <vscale x 1 x i64> @llvm.riscv.vsmul.mask.nxv1i64.i64(
1958   <vscale x 1 x i64>,
1959   <vscale x 1 x i64>,
1960   i64,
1961   <vscale x 1 x i1>,
1962   i32, i32, i32);
1964 define <vscale x 1 x i64> @intrinsic_vsmul_mask_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i64 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1965 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv1i64_nxv1i64_i64:
1966 ; CHECK:       # %bb.0: # %entry
1967 ; CHECK-NEXT:    addi sp, sp, -16
1968 ; CHECK-NEXT:    sw a1, 12(sp)
1969 ; CHECK-NEXT:    sw a0, 8(sp)
1970 ; CHECK-NEXT:    addi a0, sp, 8
1971 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, mu
1972 ; CHECK-NEXT:    vlse64.v v10, (a0), zero
1973 ; CHECK-NEXT:    csrwi vxrm, 0
1974 ; CHECK-NEXT:    vsmul.vv v8, v9, v10, v0.t
1975 ; CHECK-NEXT:    addi sp, sp, 16
1976 ; CHECK-NEXT:    ret
1977 entry:
1978   %a = call <vscale x 1 x i64> @llvm.riscv.vsmul.mask.nxv1i64.i64(
1979     <vscale x 1 x i64> %0,
1980     <vscale x 1 x i64> %1,
1981     i64 %2,
1982     <vscale x 1 x i1> %3,
1983     i32 0, i32 %4, i32 1)
1985   ret <vscale x 1 x i64> %a
1988 declare <vscale x 2 x i64> @llvm.riscv.vsmul.nxv2i64.i64(
1989   <vscale x 2 x i64>,
1990   <vscale x 2 x i64>,
1991   i64,
1992   i32, i32);
1994 define <vscale x 2 x i64> @intrinsic_vsmul_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, i64 %1, i32 %2) nounwind {
1995 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv2i64_nxv2i64_i64:
1996 ; CHECK:       # %bb.0: # %entry
1997 ; CHECK-NEXT:    addi sp, sp, -16
1998 ; CHECK-NEXT:    sw a1, 12(sp)
1999 ; CHECK-NEXT:    sw a0, 8(sp)
2000 ; CHECK-NEXT:    addi a0, sp, 8
2001 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
2002 ; CHECK-NEXT:    vlse64.v v10, (a0), zero
2003 ; CHECK-NEXT:    csrwi vxrm, 0
2004 ; CHECK-NEXT:    vsmul.vv v8, v8, v10
2005 ; CHECK-NEXT:    addi sp, sp, 16
2006 ; CHECK-NEXT:    ret
2007 entry:
2008   %a = call <vscale x 2 x i64> @llvm.riscv.vsmul.nxv2i64.i64(
2009     <vscale x 2 x i64> undef,
2010     <vscale x 2 x i64> %0,
2011     i64 %1,
2012     i32 0, i32 %2)
2014   ret <vscale x 2 x i64> %a
2017 declare <vscale x 2 x i64> @llvm.riscv.vsmul.mask.nxv2i64.i64(
2018   <vscale x 2 x i64>,
2019   <vscale x 2 x i64>,
2020   i64,
2021   <vscale x 2 x i1>,
2022   i32, i32, i32);
2024 define <vscale x 2 x i64> @intrinsic_vsmul_mask_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i64 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
2025 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv2i64_nxv2i64_i64:
2026 ; CHECK:       # %bb.0: # %entry
2027 ; CHECK-NEXT:    addi sp, sp, -16
2028 ; CHECK-NEXT:    sw a1, 12(sp)
2029 ; CHECK-NEXT:    sw a0, 8(sp)
2030 ; CHECK-NEXT:    addi a0, sp, 8
2031 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, mu
2032 ; CHECK-NEXT:    vlse64.v v12, (a0), zero
2033 ; CHECK-NEXT:    csrwi vxrm, 0
2034 ; CHECK-NEXT:    vsmul.vv v8, v10, v12, v0.t
2035 ; CHECK-NEXT:    addi sp, sp, 16
2036 ; CHECK-NEXT:    ret
2037 entry:
2038   %a = call <vscale x 2 x i64> @llvm.riscv.vsmul.mask.nxv2i64.i64(
2039     <vscale x 2 x i64> %0,
2040     <vscale x 2 x i64> %1,
2041     i64 %2,
2042     <vscale x 2 x i1> %3,
2043     i32 0, i32 %4, i32 1)
2045   ret <vscale x 2 x i64> %a
2048 declare <vscale x 4 x i64> @llvm.riscv.vsmul.nxv4i64.i64(
2049   <vscale x 4 x i64>,
2050   <vscale x 4 x i64>,
2051   i64,
2052   i32, i32);
2054 define <vscale x 4 x i64> @intrinsic_vsmul_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, i64 %1, i32 %2) nounwind {
2055 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv4i64_nxv4i64_i64:
2056 ; CHECK:       # %bb.0: # %entry
2057 ; CHECK-NEXT:    addi sp, sp, -16
2058 ; CHECK-NEXT:    sw a1, 12(sp)
2059 ; CHECK-NEXT:    sw a0, 8(sp)
2060 ; CHECK-NEXT:    addi a0, sp, 8
2061 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
2062 ; CHECK-NEXT:    vlse64.v v12, (a0), zero
2063 ; CHECK-NEXT:    csrwi vxrm, 0
2064 ; CHECK-NEXT:    vsmul.vv v8, v8, v12
2065 ; CHECK-NEXT:    addi sp, sp, 16
2066 ; CHECK-NEXT:    ret
2067 entry:
2068   %a = call <vscale x 4 x i64> @llvm.riscv.vsmul.nxv4i64.i64(
2069     <vscale x 4 x i64> undef,
2070     <vscale x 4 x i64> %0,
2071     i64 %1,
2072     i32 0, i32 %2)
2074   ret <vscale x 4 x i64> %a
2077 declare <vscale x 4 x i64> @llvm.riscv.vsmul.mask.nxv4i64.i64(
2078   <vscale x 4 x i64>,
2079   <vscale x 4 x i64>,
2080   i64,
2081   <vscale x 4 x i1>,
2082   i32, i32, i32);
2084 define <vscale x 4 x i64> @intrinsic_vsmul_mask_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i64 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
2085 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv4i64_nxv4i64_i64:
2086 ; CHECK:       # %bb.0: # %entry
2087 ; CHECK-NEXT:    addi sp, sp, -16
2088 ; CHECK-NEXT:    sw a1, 12(sp)
2089 ; CHECK-NEXT:    sw a0, 8(sp)
2090 ; CHECK-NEXT:    addi a0, sp, 8
2091 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, mu
2092 ; CHECK-NEXT:    vlse64.v v16, (a0), zero
2093 ; CHECK-NEXT:    csrwi vxrm, 0
2094 ; CHECK-NEXT:    vsmul.vv v8, v12, v16, v0.t
2095 ; CHECK-NEXT:    addi sp, sp, 16
2096 ; CHECK-NEXT:    ret
2097 entry:
2098   %a = call <vscale x 4 x i64> @llvm.riscv.vsmul.mask.nxv4i64.i64(
2099     <vscale x 4 x i64> %0,
2100     <vscale x 4 x i64> %1,
2101     i64 %2,
2102     <vscale x 4 x i1> %3,
2103     i32 0, i32 %4, i32 1)
2105   ret <vscale x 4 x i64> %a
2108 declare <vscale x 8 x i64> @llvm.riscv.vsmul.nxv8i64.i64(
2109   <vscale x 8 x i64>,
2110   <vscale x 8 x i64>,
2111   i64,
2112   i32, i32);
2114 define <vscale x 8 x i64> @intrinsic_vsmul_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, i64 %1, i32 %2) nounwind {
2115 ; CHECK-LABEL: intrinsic_vsmul_vx_nxv8i64_nxv8i64_i64:
2116 ; CHECK:       # %bb.0: # %entry
2117 ; CHECK-NEXT:    addi sp, sp, -16
2118 ; CHECK-NEXT:    sw a1, 12(sp)
2119 ; CHECK-NEXT:    sw a0, 8(sp)
2120 ; CHECK-NEXT:    addi a0, sp, 8
2121 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
2122 ; CHECK-NEXT:    vlse64.v v16, (a0), zero
2123 ; CHECK-NEXT:    csrwi vxrm, 0
2124 ; CHECK-NEXT:    vsmul.vv v8, v8, v16
2125 ; CHECK-NEXT:    addi sp, sp, 16
2126 ; CHECK-NEXT:    ret
2127 entry:
2128   %a = call <vscale x 8 x i64> @llvm.riscv.vsmul.nxv8i64.i64(
2129     <vscale x 8 x i64> undef,
2130     <vscale x 8 x i64> %0,
2131     i64 %1,
2132     i32 0, i32 %2)
2134   ret <vscale x 8 x i64> %a
2137 declare <vscale x 8 x i64> @llvm.riscv.vsmul.mask.nxv8i64.i64(
2138   <vscale x 8 x i64>,
2139   <vscale x 8 x i64>,
2140   i64,
2141   <vscale x 8 x i1>,
2142   i32, i32, i32);
2144 define <vscale x 8 x i64> @intrinsic_vsmul_mask_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i64 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
2145 ; CHECK-LABEL: intrinsic_vsmul_mask_vx_nxv8i64_nxv8i64_i64:
2146 ; CHECK:       # %bb.0: # %entry
2147 ; CHECK-NEXT:    addi sp, sp, -16
2148 ; CHECK-NEXT:    sw a1, 12(sp)
2149 ; CHECK-NEXT:    sw a0, 8(sp)
2150 ; CHECK-NEXT:    addi a0, sp, 8
2151 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, mu
2152 ; CHECK-NEXT:    vlse64.v v24, (a0), zero
2153 ; CHECK-NEXT:    csrwi vxrm, 0
2154 ; CHECK-NEXT:    vsmul.vv v8, v16, v24, v0.t
2155 ; CHECK-NEXT:    addi sp, sp, 16
2156 ; CHECK-NEXT:    ret
2157 entry:
2158   %a = call <vscale x 8 x i64> @llvm.riscv.vsmul.mask.nxv8i64.i64(
2159     <vscale x 8 x i64> %0,
2160     <vscale x 8 x i64> %1,
2161     i64 %2,
2162     <vscale x 8 x i1> %3,
2163     i32 0, i32 %4, i32 1)
2165   ret <vscale x 8 x i64> %a