Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vmul-vp.ll
blobfbb97d6bf32299cd28b2ca4aa8df56a429ab5ff0
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <8 x i7> @llvm.vp.mul.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vmul_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vmul_vv_v8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
13 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
14 ; CHECK-NEXT:    ret
15   %v = call <8 x i7> @llvm.vp.mul.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
16   ret <8 x i7> %v
19 declare <2 x i8> @llvm.vp.mul.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
21 define <2 x i8> @vmul_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
22 ; CHECK-LABEL: vmul_vv_v2i8:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
25 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
26 ; CHECK-NEXT:    ret
27   %v = call <2 x i8> @llvm.vp.mul.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
28   ret <2 x i8> %v
31 define <2 x i8> @vmul_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
32 ; CHECK-LABEL: vmul_vv_v2i8_unmasked:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vmul.vv v8, v8, v9
36 ; CHECK-NEXT:    ret
37   %head = insertelement <2 x i1> poison, i1 true, i32 0
38   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
39   %v = call <2 x i8> @llvm.vp.mul.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
40   ret <2 x i8> %v
43 define <2 x i8> @vmul_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
44 ; CHECK-LABEL: vmul_vx_v2i8:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
47 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
48 ; CHECK-NEXT:    ret
49   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
50   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
51   %v = call <2 x i8> @llvm.vp.mul.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
52   ret <2 x i8> %v
55 define <2 x i8> @vmul_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
56 ; CHECK-LABEL: vmul_vx_v2i8_unmasked:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
59 ; CHECK-NEXT:    vmul.vx v8, v8, a0
60 ; CHECK-NEXT:    ret
61   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
62   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
63   %head = insertelement <2 x i1> poison, i1 true, i32 0
64   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
65   %v = call <2 x i8> @llvm.vp.mul.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
66   ret <2 x i8> %v
69 declare <4 x i8> @llvm.vp.mul.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
71 define <4 x i8> @vmul_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vmul_vv_v4i8:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
75 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
76 ; CHECK-NEXT:    ret
77   %v = call <4 x i8> @llvm.vp.mul.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
78   ret <4 x i8> %v
81 define <4 x i8> @vmul_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
82 ; CHECK-LABEL: vmul_vv_v4i8_unmasked:
83 ; CHECK:       # %bb.0:
84 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
85 ; CHECK-NEXT:    vmul.vv v8, v8, v9
86 ; CHECK-NEXT:    ret
87   %head = insertelement <4 x i1> poison, i1 true, i32 0
88   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
89   %v = call <4 x i8> @llvm.vp.mul.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
90   ret <4 x i8> %v
93 define <4 x i8> @vmul_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
94 ; CHECK-LABEL: vmul_vx_v4i8:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
97 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
98 ; CHECK-NEXT:    ret
99   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
100   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
101   %v = call <4 x i8> @llvm.vp.mul.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
102   ret <4 x i8> %v
105 define <4 x i8> @vmul_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
106 ; CHECK-LABEL: vmul_vx_v4i8_unmasked:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
109 ; CHECK-NEXT:    vmul.vx v8, v8, a0
110 ; CHECK-NEXT:    ret
111   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
112   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
113   %head = insertelement <4 x i1> poison, i1 true, i32 0
114   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
115   %v = call <4 x i8> @llvm.vp.mul.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
116   ret <4 x i8> %v
119 declare <8 x i8> @llvm.vp.mul.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
121 define <8 x i8> @vmul_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
122 ; CHECK-LABEL: vmul_vv_v8i8:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
125 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
126 ; CHECK-NEXT:    ret
127   %v = call <8 x i8> @llvm.vp.mul.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
128   ret <8 x i8> %v
131 define <8 x i8> @vmul_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
132 ; CHECK-LABEL: vmul_vv_v8i8_unmasked:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
135 ; CHECK-NEXT:    vmul.vv v8, v8, v9
136 ; CHECK-NEXT:    ret
137   %head = insertelement <8 x i1> poison, i1 true, i32 0
138   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
139   %v = call <8 x i8> @llvm.vp.mul.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
140   ret <8 x i8> %v
143 define <8 x i8> @vmul_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
144 ; CHECK-LABEL: vmul_vx_v8i8:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
147 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
148 ; CHECK-NEXT:    ret
149   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
150   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
151   %v = call <8 x i8> @llvm.vp.mul.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
152   ret <8 x i8> %v
155 define <8 x i8> @vmul_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
156 ; CHECK-LABEL: vmul_vx_v8i8_unmasked:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
159 ; CHECK-NEXT:    vmul.vx v8, v8, a0
160 ; CHECK-NEXT:    ret
161   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
162   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
163   %head = insertelement <8 x i1> poison, i1 true, i32 0
164   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
165   %v = call <8 x i8> @llvm.vp.mul.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
166   ret <8 x i8> %v
169 declare <16 x i8> @llvm.vp.mul.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
171 define <16 x i8> @vmul_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vmul_vv_v16i8:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
175 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
176 ; CHECK-NEXT:    ret
177   %v = call <16 x i8> @llvm.vp.mul.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
178   ret <16 x i8> %v
181 define <16 x i8> @vmul_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
182 ; CHECK-LABEL: vmul_vv_v16i8_unmasked:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
185 ; CHECK-NEXT:    vmul.vv v8, v8, v9
186 ; CHECK-NEXT:    ret
187   %head = insertelement <16 x i1> poison, i1 true, i32 0
188   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
189   %v = call <16 x i8> @llvm.vp.mul.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
190   ret <16 x i8> %v
193 define <16 x i8> @vmul_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
194 ; CHECK-LABEL: vmul_vx_v16i8:
195 ; CHECK:       # %bb.0:
196 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
197 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
198 ; CHECK-NEXT:    ret
199   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
200   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
201   %v = call <16 x i8> @llvm.vp.mul.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
202   ret <16 x i8> %v
205 define <16 x i8> @vmul_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
206 ; CHECK-LABEL: vmul_vx_v16i8_unmasked:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
209 ; CHECK-NEXT:    vmul.vx v8, v8, a0
210 ; CHECK-NEXT:    ret
211   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
212   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
213   %head = insertelement <16 x i1> poison, i1 true, i32 0
214   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
215   %v = call <16 x i8> @llvm.vp.mul.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
216   ret <16 x i8> %v
219 declare <2 x i16> @llvm.vp.mul.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
221 define <2 x i16> @vmul_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
222 ; CHECK-LABEL: vmul_vv_v2i16:
223 ; CHECK:       # %bb.0:
224 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
225 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
226 ; CHECK-NEXT:    ret
227   %v = call <2 x i16> @llvm.vp.mul.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
228   ret <2 x i16> %v
231 define <2 x i16> @vmul_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
232 ; CHECK-LABEL: vmul_vv_v2i16_unmasked:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
235 ; CHECK-NEXT:    vmul.vv v8, v8, v9
236 ; CHECK-NEXT:    ret
237   %head = insertelement <2 x i1> poison, i1 true, i32 0
238   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
239   %v = call <2 x i16> @llvm.vp.mul.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
240   ret <2 x i16> %v
243 define <2 x i16> @vmul_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
244 ; CHECK-LABEL: vmul_vx_v2i16:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
247 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
248 ; CHECK-NEXT:    ret
249   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
250   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
251   %v = call <2 x i16> @llvm.vp.mul.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
252   ret <2 x i16> %v
255 define <2 x i16> @vmul_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
256 ; CHECK-LABEL: vmul_vx_v2i16_unmasked:
257 ; CHECK:       # %bb.0:
258 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
259 ; CHECK-NEXT:    vmul.vx v8, v8, a0
260 ; CHECK-NEXT:    ret
261   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
262   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
263   %head = insertelement <2 x i1> poison, i1 true, i32 0
264   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
265   %v = call <2 x i16> @llvm.vp.mul.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
266   ret <2 x i16> %v
269 declare <4 x i16> @llvm.vp.mul.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
271 define <4 x i16> @vmul_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
272 ; CHECK-LABEL: vmul_vv_v4i16:
273 ; CHECK:       # %bb.0:
274 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
275 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
276 ; CHECK-NEXT:    ret
277   %v = call <4 x i16> @llvm.vp.mul.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
278   ret <4 x i16> %v
281 define <4 x i16> @vmul_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
282 ; CHECK-LABEL: vmul_vv_v4i16_unmasked:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
285 ; CHECK-NEXT:    vmul.vv v8, v8, v9
286 ; CHECK-NEXT:    ret
287   %head = insertelement <4 x i1> poison, i1 true, i32 0
288   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
289   %v = call <4 x i16> @llvm.vp.mul.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
290   ret <4 x i16> %v
293 define <4 x i16> @vmul_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vmul_vx_v4i16:
295 ; CHECK:       # %bb.0:
296 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
297 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
298 ; CHECK-NEXT:    ret
299   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
300   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
301   %v = call <4 x i16> @llvm.vp.mul.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
302   ret <4 x i16> %v
305 define <4 x i16> @vmul_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
306 ; CHECK-LABEL: vmul_vx_v4i16_unmasked:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
309 ; CHECK-NEXT:    vmul.vx v8, v8, a0
310 ; CHECK-NEXT:    ret
311   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
312   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
313   %head = insertelement <4 x i1> poison, i1 true, i32 0
314   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
315   %v = call <4 x i16> @llvm.vp.mul.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
316   ret <4 x i16> %v
319 declare <8 x i16> @llvm.vp.mul.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
321 define <8 x i16> @vmul_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
322 ; CHECK-LABEL: vmul_vv_v8i16:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
325 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
326 ; CHECK-NEXT:    ret
327   %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
328   ret <8 x i16> %v
331 define <8 x i16> @vmul_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
332 ; CHECK-LABEL: vmul_vv_v8i16_unmasked:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
335 ; CHECK-NEXT:    vmul.vv v8, v8, v9
336 ; CHECK-NEXT:    ret
337   %head = insertelement <8 x i1> poison, i1 true, i32 0
338   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
339   %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
340   ret <8 x i16> %v
343 define <8 x i16> @vmul_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vmul_vx_v8i16:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
347 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
348 ; CHECK-NEXT:    ret
349   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
350   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
351   %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
352   ret <8 x i16> %v
355 define <8 x i16> @vmul_vx_v8i16_commute(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
356 ; CHECK-LABEL: vmul_vx_v8i16_commute:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
359 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
360 ; CHECK-NEXT:    ret
361   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
362   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
363   %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %vb, <8 x i16> %va, <8 x i1> %m, i32 %evl)
364   ret <8 x i16> %v
367 define <8 x i16> @vmul_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
368 ; CHECK-LABEL: vmul_vx_v8i16_unmasked:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
371 ; CHECK-NEXT:    vmul.vx v8, v8, a0
372 ; CHECK-NEXT:    ret
373   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
374   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
375   %head = insertelement <8 x i1> poison, i1 true, i32 0
376   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
377   %v = call <8 x i16> @llvm.vp.mul.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
378   ret <8 x i16> %v
381 declare <12 x i16> @llvm.vp.mul.v12i16(<12 x i16>, <12 x i16>, <12 x i1>, i32)
383 define <12 x i16> @vmul_vv_v12i16(<12 x i16> %va, <12 x i16> %b, <12 x i1> %m, i32 zeroext %evl) {
384 ; CHECK-LABEL: vmul_vv_v12i16:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
387 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
388 ; CHECK-NEXT:    ret
389   %v = call <12 x i16> @llvm.vp.mul.v12i16(<12 x i16> %va, <12 x i16> %b, <12 x i1> %m, i32 %evl)
390   ret <12 x i16> %v
393 define <12 x i16> @vmul_vv_v12i16_unmasked(<12 x i16> %va, <12 x i16> %b, i32 zeroext %evl) {
394 ; CHECK-LABEL: vmul_vv_v12i16_unmasked:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
397 ; CHECK-NEXT:    vmul.vv v8, v8, v10
398 ; CHECK-NEXT:    ret
399   %head = insertelement <12 x i1> poison, i1 true, i32 0
400   %m = shufflevector <12 x i1> %head, <12 x i1> poison, <12 x i32> zeroinitializer
401   %v = call <12 x i16> @llvm.vp.mul.v12i16(<12 x i16> %va, <12 x i16> %b, <12 x i1> %m, i32 %evl)
402   ret <12 x i16> %v
405 define <12 x i16> @vmul_vx_v12i16(<12 x i16> %va, i16 %b, <12 x i1> %m, i32 zeroext %evl) {
406 ; CHECK-LABEL: vmul_vx_v12i16:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
409 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
410 ; CHECK-NEXT:    ret
411   %elt.head = insertelement <12 x i16> poison, i16 %b, i32 0
412   %vb = shufflevector <12 x i16> %elt.head, <12 x i16> poison, <12 x i32> zeroinitializer
413   %v = call <12 x i16> @llvm.vp.mul.v12i16(<12 x i16> %va, <12 x i16> %vb, <12 x i1> %m, i32 %evl)
414   ret <12 x i16> %v
417 define <12 x i16> @vmul_vx_v12i16_unmasked(<12 x i16> %va, i16 %b, i32 zeroext %evl) {
418 ; CHECK-LABEL: vmul_vx_v12i16_unmasked:
419 ; CHECK:       # %bb.0:
420 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
421 ; CHECK-NEXT:    vmul.vx v8, v8, a0
422 ; CHECK-NEXT:    ret
423   %elt.head = insertelement <12 x i16> poison, i16 %b, i32 0
424   %vb = shufflevector <12 x i16> %elt.head, <12 x i16> poison, <12 x i32> zeroinitializer
425   %head = insertelement <12 x i1> poison, i1 true, i32 0
426   %m = shufflevector <12 x i1> %head, <12 x i1> poison, <12 x i32> zeroinitializer
427   %v = call <12 x i16> @llvm.vp.mul.v12i16(<12 x i16> %va, <12 x i16> %vb, <12 x i1> %m, i32 %evl)
428   ret <12 x i16> %v
431 declare <16 x i16> @llvm.vp.mul.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
433 define <16 x i16> @vmul_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
434 ; CHECK-LABEL: vmul_vv_v16i16:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
437 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
438 ; CHECK-NEXT:    ret
439   %v = call <16 x i16> @llvm.vp.mul.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
440   ret <16 x i16> %v
443 define <16 x i16> @vmul_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
444 ; CHECK-LABEL: vmul_vv_v16i16_unmasked:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
447 ; CHECK-NEXT:    vmul.vv v8, v8, v10
448 ; CHECK-NEXT:    ret
449   %head = insertelement <16 x i1> poison, i1 true, i32 0
450   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
451   %v = call <16 x i16> @llvm.vp.mul.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
452   ret <16 x i16> %v
455 define <16 x i16> @vmul_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
456 ; CHECK-LABEL: vmul_vx_v16i16:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
459 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
460 ; CHECK-NEXT:    ret
461   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
462   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
463   %v = call <16 x i16> @llvm.vp.mul.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
464   ret <16 x i16> %v
467 define <16 x i16> @vmul_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
468 ; CHECK-LABEL: vmul_vx_v16i16_unmasked:
469 ; CHECK:       # %bb.0:
470 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
471 ; CHECK-NEXT:    vmul.vx v8, v8, a0
472 ; CHECK-NEXT:    ret
473   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
474   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
475   %head = insertelement <16 x i1> poison, i1 true, i32 0
476   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
477   %v = call <16 x i16> @llvm.vp.mul.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
478   ret <16 x i16> %v
481 declare <2 x i32> @llvm.vp.mul.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
483 define <2 x i32> @vmul_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
484 ; CHECK-LABEL: vmul_vv_v2i32:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
487 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
488 ; CHECK-NEXT:    ret
489   %v = call <2 x i32> @llvm.vp.mul.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
490   ret <2 x i32> %v
493 define <2 x i32> @vmul_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
494 ; CHECK-LABEL: vmul_vv_v2i32_unmasked:
495 ; CHECK:       # %bb.0:
496 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
497 ; CHECK-NEXT:    vmul.vv v8, v8, v9
498 ; CHECK-NEXT:    ret
499   %head = insertelement <2 x i1> poison, i1 true, i32 0
500   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
501   %v = call <2 x i32> @llvm.vp.mul.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
502   ret <2 x i32> %v
505 define <2 x i32> @vmul_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
506 ; CHECK-LABEL: vmul_vx_v2i32:
507 ; CHECK:       # %bb.0:
508 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
509 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
510 ; CHECK-NEXT:    ret
511   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
512   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
513   %v = call <2 x i32> @llvm.vp.mul.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
514   ret <2 x i32> %v
517 define <2 x i32> @vmul_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
518 ; CHECK-LABEL: vmul_vx_v2i32_unmasked:
519 ; CHECK:       # %bb.0:
520 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
521 ; CHECK-NEXT:    vmul.vx v8, v8, a0
522 ; CHECK-NEXT:    ret
523   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
524   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
525   %head = insertelement <2 x i1> poison, i1 true, i32 0
526   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
527   %v = call <2 x i32> @llvm.vp.mul.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
528   ret <2 x i32> %v
531 declare <4 x i32> @llvm.vp.mul.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
533 define <4 x i32> @vmul_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
534 ; CHECK-LABEL: vmul_vv_v4i32:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
537 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
538 ; CHECK-NEXT:    ret
539   %v = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
540   ret <4 x i32> %v
543 define <4 x i32> @vmul_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
544 ; CHECK-LABEL: vmul_vv_v4i32_unmasked:
545 ; CHECK:       # %bb.0:
546 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
547 ; CHECK-NEXT:    vmul.vv v8, v8, v9
548 ; CHECK-NEXT:    ret
549   %head = insertelement <4 x i1> poison, i1 true, i32 0
550   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
551   %v = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
552   ret <4 x i32> %v
555 define <4 x i32> @vmul_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
556 ; CHECK-LABEL: vmul_vx_v4i32:
557 ; CHECK:       # %bb.0:
558 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
559 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
560 ; CHECK-NEXT:    ret
561   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
562   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
563   %v = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
564   ret <4 x i32> %v
567 define <4 x i32> @vmul_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
568 ; CHECK-LABEL: vmul_vx_v4i32_unmasked:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
571 ; CHECK-NEXT:    vmul.vx v8, v8, a0
572 ; CHECK-NEXT:    ret
573   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
574   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
575   %head = insertelement <4 x i1> poison, i1 true, i32 0
576   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
577   %v = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
578   ret <4 x i32> %v
581 declare <8 x i32> @llvm.vp.mul.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
583 define <8 x i32> @vmul_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
584 ; CHECK-LABEL: vmul_vv_v8i32:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
587 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
588 ; CHECK-NEXT:    ret
589   %v = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
590   ret <8 x i32> %v
593 define <8 x i32> @vmul_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
594 ; CHECK-LABEL: vmul_vv_v8i32_unmasked:
595 ; CHECK:       # %bb.0:
596 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
597 ; CHECK-NEXT:    vmul.vv v8, v8, v10
598 ; CHECK-NEXT:    ret
599   %head = insertelement <8 x i1> poison, i1 true, i32 0
600   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
601   %v = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
602   ret <8 x i32> %v
605 define <8 x i32> @vmul_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
606 ; CHECK-LABEL: vmul_vx_v8i32:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
609 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
610 ; CHECK-NEXT:    ret
611   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
612   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
613   %v = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
614   ret <8 x i32> %v
617 define <8 x i32> @vmul_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
618 ; CHECK-LABEL: vmul_vx_v8i32_unmasked:
619 ; CHECK:       # %bb.0:
620 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
621 ; CHECK-NEXT:    vmul.vx v8, v8, a0
622 ; CHECK-NEXT:    ret
623   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
624   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
625   %head = insertelement <8 x i1> poison, i1 true, i32 0
626   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
627   %v = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
628   ret <8 x i32> %v
631 declare <16 x i32> @llvm.vp.mul.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
633 define <16 x i32> @vmul_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
634 ; CHECK-LABEL: vmul_vv_v16i32:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
637 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
638 ; CHECK-NEXT:    ret
639   %v = call <16 x i32> @llvm.vp.mul.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
640   ret <16 x i32> %v
643 define <16 x i32> @vmul_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
644 ; CHECK-LABEL: vmul_vv_v16i32_unmasked:
645 ; CHECK:       # %bb.0:
646 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
647 ; CHECK-NEXT:    vmul.vv v8, v8, v12
648 ; CHECK-NEXT:    ret
649   %head = insertelement <16 x i1> poison, i1 true, i32 0
650   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
651   %v = call <16 x i32> @llvm.vp.mul.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
652   ret <16 x i32> %v
655 define <16 x i32> @vmul_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
656 ; CHECK-LABEL: vmul_vx_v16i32:
657 ; CHECK:       # %bb.0:
658 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
659 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
660 ; CHECK-NEXT:    ret
661   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
662   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
663   %v = call <16 x i32> @llvm.vp.mul.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
664   ret <16 x i32> %v
667 define <16 x i32> @vmul_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
668 ; CHECK-LABEL: vmul_vx_v16i32_unmasked:
669 ; CHECK:       # %bb.0:
670 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
671 ; CHECK-NEXT:    vmul.vx v8, v8, a0
672 ; CHECK-NEXT:    ret
673   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
674   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
675   %head = insertelement <16 x i1> poison, i1 true, i32 0
676   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
677   %v = call <16 x i32> @llvm.vp.mul.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
678   ret <16 x i32> %v
681 declare <2 x i64> @llvm.vp.mul.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
683 define <2 x i64> @vmul_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
684 ; CHECK-LABEL: vmul_vv_v2i64:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
687 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
688 ; CHECK-NEXT:    ret
689   %v = call <2 x i64> @llvm.vp.mul.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
690   ret <2 x i64> %v
693 define <2 x i64> @vmul_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
694 ; CHECK-LABEL: vmul_vv_v2i64_unmasked:
695 ; CHECK:       # %bb.0:
696 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
697 ; CHECK-NEXT:    vmul.vv v8, v8, v9
698 ; CHECK-NEXT:    ret
699   %head = insertelement <2 x i1> poison, i1 true, i32 0
700   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
701   %v = call <2 x i64> @llvm.vp.mul.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
702   ret <2 x i64> %v
705 define <2 x i64> @vmul_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
706 ; RV32-LABEL: vmul_vx_v2i64:
707 ; RV32:       # %bb.0:
708 ; RV32-NEXT:    addi sp, sp, -16
709 ; RV32-NEXT:    .cfi_def_cfa_offset 16
710 ; RV32-NEXT:    sw a1, 12(sp)
711 ; RV32-NEXT:    sw a0, 8(sp)
712 ; RV32-NEXT:    addi a0, sp, 8
713 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
714 ; RV32-NEXT:    vlse64.v v9, (a0), zero
715 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
716 ; RV32-NEXT:    vmul.vv v8, v8, v9, v0.t
717 ; RV32-NEXT:    addi sp, sp, 16
718 ; RV32-NEXT:    ret
720 ; RV64-LABEL: vmul_vx_v2i64:
721 ; RV64:       # %bb.0:
722 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
723 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
724 ; RV64-NEXT:    ret
725   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
726   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
727   %v = call <2 x i64> @llvm.vp.mul.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
728   ret <2 x i64> %v
731 define <2 x i64> @vmul_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
732 ; RV32-LABEL: vmul_vx_v2i64_unmasked:
733 ; RV32:       # %bb.0:
734 ; RV32-NEXT:    addi sp, sp, -16
735 ; RV32-NEXT:    .cfi_def_cfa_offset 16
736 ; RV32-NEXT:    sw a1, 12(sp)
737 ; RV32-NEXT:    sw a0, 8(sp)
738 ; RV32-NEXT:    addi a0, sp, 8
739 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
740 ; RV32-NEXT:    vlse64.v v9, (a0), zero
741 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
742 ; RV32-NEXT:    vmul.vv v8, v8, v9
743 ; RV32-NEXT:    addi sp, sp, 16
744 ; RV32-NEXT:    ret
746 ; RV64-LABEL: vmul_vx_v2i64_unmasked:
747 ; RV64:       # %bb.0:
748 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
749 ; RV64-NEXT:    vmul.vx v8, v8, a0
750 ; RV64-NEXT:    ret
751   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
752   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
753   %head = insertelement <2 x i1> poison, i1 true, i32 0
754   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
755   %v = call <2 x i64> @llvm.vp.mul.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
756   ret <2 x i64> %v
759 declare <4 x i64> @llvm.vp.mul.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
761 define <4 x i64> @vmul_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
762 ; CHECK-LABEL: vmul_vv_v4i64:
763 ; CHECK:       # %bb.0:
764 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
765 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
766 ; CHECK-NEXT:    ret
767   %v = call <4 x i64> @llvm.vp.mul.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
768   ret <4 x i64> %v
771 define <4 x i64> @vmul_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
772 ; CHECK-LABEL: vmul_vv_v4i64_unmasked:
773 ; CHECK:       # %bb.0:
774 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
775 ; CHECK-NEXT:    vmul.vv v8, v8, v10
776 ; CHECK-NEXT:    ret
777   %head = insertelement <4 x i1> poison, i1 true, i32 0
778   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
779   %v = call <4 x i64> @llvm.vp.mul.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
780   ret <4 x i64> %v
783 define <4 x i64> @vmul_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
784 ; RV32-LABEL: vmul_vx_v4i64:
785 ; RV32:       # %bb.0:
786 ; RV32-NEXT:    addi sp, sp, -16
787 ; RV32-NEXT:    .cfi_def_cfa_offset 16
788 ; RV32-NEXT:    sw a1, 12(sp)
789 ; RV32-NEXT:    sw a0, 8(sp)
790 ; RV32-NEXT:    addi a0, sp, 8
791 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
792 ; RV32-NEXT:    vlse64.v v10, (a0), zero
793 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
794 ; RV32-NEXT:    vmul.vv v8, v8, v10, v0.t
795 ; RV32-NEXT:    addi sp, sp, 16
796 ; RV32-NEXT:    ret
798 ; RV64-LABEL: vmul_vx_v4i64:
799 ; RV64:       # %bb.0:
800 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
801 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
802 ; RV64-NEXT:    ret
803   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
804   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
805   %v = call <4 x i64> @llvm.vp.mul.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
806   ret <4 x i64> %v
809 define <4 x i64> @vmul_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
810 ; RV32-LABEL: vmul_vx_v4i64_unmasked:
811 ; RV32:       # %bb.0:
812 ; RV32-NEXT:    addi sp, sp, -16
813 ; RV32-NEXT:    .cfi_def_cfa_offset 16
814 ; RV32-NEXT:    sw a1, 12(sp)
815 ; RV32-NEXT:    sw a0, 8(sp)
816 ; RV32-NEXT:    addi a0, sp, 8
817 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
818 ; RV32-NEXT:    vlse64.v v10, (a0), zero
819 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
820 ; RV32-NEXT:    vmul.vv v8, v8, v10
821 ; RV32-NEXT:    addi sp, sp, 16
822 ; RV32-NEXT:    ret
824 ; RV64-LABEL: vmul_vx_v4i64_unmasked:
825 ; RV64:       # %bb.0:
826 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
827 ; RV64-NEXT:    vmul.vx v8, v8, a0
828 ; RV64-NEXT:    ret
829   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
830   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
831   %head = insertelement <4 x i1> poison, i1 true, i32 0
832   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
833   %v = call <4 x i64> @llvm.vp.mul.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
834   ret <4 x i64> %v
837 declare <8 x i64> @llvm.vp.mul.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
839 define <8 x i64> @vmul_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
840 ; CHECK-LABEL: vmul_vv_v8i64:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
843 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
844 ; CHECK-NEXT:    ret
845   %v = call <8 x i64> @llvm.vp.mul.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
846   ret <8 x i64> %v
849 define <8 x i64> @vmul_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
850 ; CHECK-LABEL: vmul_vv_v8i64_unmasked:
851 ; CHECK:       # %bb.0:
852 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
853 ; CHECK-NEXT:    vmul.vv v8, v8, v12
854 ; CHECK-NEXT:    ret
855   %head = insertelement <8 x i1> poison, i1 true, i32 0
856   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
857   %v = call <8 x i64> @llvm.vp.mul.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
858   ret <8 x i64> %v
861 define <8 x i64> @vmul_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
862 ; RV32-LABEL: vmul_vx_v8i64:
863 ; RV32:       # %bb.0:
864 ; RV32-NEXT:    addi sp, sp, -16
865 ; RV32-NEXT:    .cfi_def_cfa_offset 16
866 ; RV32-NEXT:    sw a1, 12(sp)
867 ; RV32-NEXT:    sw a0, 8(sp)
868 ; RV32-NEXT:    addi a0, sp, 8
869 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
870 ; RV32-NEXT:    vlse64.v v12, (a0), zero
871 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
872 ; RV32-NEXT:    vmul.vv v8, v8, v12, v0.t
873 ; RV32-NEXT:    addi sp, sp, 16
874 ; RV32-NEXT:    ret
876 ; RV64-LABEL: vmul_vx_v8i64:
877 ; RV64:       # %bb.0:
878 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
879 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
880 ; RV64-NEXT:    ret
881   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
882   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
883   %v = call <8 x i64> @llvm.vp.mul.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
884   ret <8 x i64> %v
887 define <8 x i64> @vmul_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
888 ; RV32-LABEL: vmul_vx_v8i64_unmasked:
889 ; RV32:       # %bb.0:
890 ; RV32-NEXT:    addi sp, sp, -16
891 ; RV32-NEXT:    .cfi_def_cfa_offset 16
892 ; RV32-NEXT:    sw a1, 12(sp)
893 ; RV32-NEXT:    sw a0, 8(sp)
894 ; RV32-NEXT:    addi a0, sp, 8
895 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
896 ; RV32-NEXT:    vlse64.v v12, (a0), zero
897 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
898 ; RV32-NEXT:    vmul.vv v8, v8, v12
899 ; RV32-NEXT:    addi sp, sp, 16
900 ; RV32-NEXT:    ret
902 ; RV64-LABEL: vmul_vx_v8i64_unmasked:
903 ; RV64:       # %bb.0:
904 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
905 ; RV64-NEXT:    vmul.vx v8, v8, a0
906 ; RV64-NEXT:    ret
907   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
908   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
909   %head = insertelement <8 x i1> poison, i1 true, i32 0
910   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
911   %v = call <8 x i64> @llvm.vp.mul.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
912   ret <8 x i64> %v
915 declare <16 x i64> @llvm.vp.mul.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
917 define <16 x i64> @vmul_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
918 ; CHECK-LABEL: vmul_vv_v16i64:
919 ; CHECK:       # %bb.0:
920 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
921 ; CHECK-NEXT:    vmul.vv v8, v8, v16, v0.t
922 ; CHECK-NEXT:    ret
923   %v = call <16 x i64> @llvm.vp.mul.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
924   ret <16 x i64> %v
927 define <16 x i64> @vmul_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
928 ; CHECK-LABEL: vmul_vv_v16i64_unmasked:
929 ; CHECK:       # %bb.0:
930 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
931 ; CHECK-NEXT:    vmul.vv v8, v8, v16
932 ; CHECK-NEXT:    ret
933   %head = insertelement <16 x i1> poison, i1 true, i32 0
934   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
935   %v = call <16 x i64> @llvm.vp.mul.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
936   ret <16 x i64> %v
939 define <16 x i64> @vmul_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
940 ; RV32-LABEL: vmul_vx_v16i64:
941 ; RV32:       # %bb.0:
942 ; RV32-NEXT:    addi sp, sp, -16
943 ; RV32-NEXT:    .cfi_def_cfa_offset 16
944 ; RV32-NEXT:    sw a1, 12(sp)
945 ; RV32-NEXT:    sw a0, 8(sp)
946 ; RV32-NEXT:    addi a0, sp, 8
947 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
948 ; RV32-NEXT:    vlse64.v v16, (a0), zero
949 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
950 ; RV32-NEXT:    vmul.vv v8, v8, v16, v0.t
951 ; RV32-NEXT:    addi sp, sp, 16
952 ; RV32-NEXT:    ret
954 ; RV64-LABEL: vmul_vx_v16i64:
955 ; RV64:       # %bb.0:
956 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
957 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
958 ; RV64-NEXT:    ret
959   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
960   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
961   %v = call <16 x i64> @llvm.vp.mul.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
962   ret <16 x i64> %v
965 define <16 x i64> @vmul_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
966 ; RV32-LABEL: vmul_vx_v16i64_unmasked:
967 ; RV32:       # %bb.0:
968 ; RV32-NEXT:    addi sp, sp, -16
969 ; RV32-NEXT:    .cfi_def_cfa_offset 16
970 ; RV32-NEXT:    sw a1, 12(sp)
971 ; RV32-NEXT:    sw a0, 8(sp)
972 ; RV32-NEXT:    addi a0, sp, 8
973 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
974 ; RV32-NEXT:    vlse64.v v16, (a0), zero
975 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
976 ; RV32-NEXT:    vmul.vv v8, v8, v16
977 ; RV32-NEXT:    addi sp, sp, 16
978 ; RV32-NEXT:    ret
980 ; RV64-LABEL: vmul_vx_v16i64_unmasked:
981 ; RV64:       # %bb.0:
982 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
983 ; RV64-NEXT:    vmul.vx v8, v8, a0
984 ; RV64-NEXT:    ret
985   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
986   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
987   %head = insertelement <16 x i1> poison, i1 true, i32 0
988   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
989   %v = call <16 x i64> @llvm.vp.mul.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
990   ret <16 x i64> %v