Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vmul-vp.ll
blob30ff90d8aa4817e12b9f528f74d8ecd347264499
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 <vscale x 8 x i7> @llvm.vp.mul.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vmul_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vmul_vx_nxv8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
13 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
14 ; CHECK-NEXT:    ret
15   %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
16   %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
17   %v = call <vscale x 8 x i7> @llvm.vp.mul.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
18   ret <vscale x 8 x i7> %v
21 declare <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
23 define <vscale x 1 x i8> @vmul_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vmul_vv_nxv1i8:
25 ; CHECK:       # %bb.0:
26 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
27 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
28 ; CHECK-NEXT:    ret
29   %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
30   ret <vscale x 1 x i8> %v
33 define <vscale x 1 x i8> @vmul_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
34 ; CHECK-LABEL: vmul_vv_nxv1i8_unmasked:
35 ; CHECK:       # %bb.0:
36 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
37 ; CHECK-NEXT:    vmul.vv v8, v8, v9
38 ; CHECK-NEXT:    ret
39   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
40   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
41   %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
42   ret <vscale x 1 x i8> %v
45 define <vscale x 1 x i8> @vmul_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
46 ; CHECK-LABEL: vmul_vx_nxv1i8:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
49 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
50 ; CHECK-NEXT:    ret
51   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
52   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
53   %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
54   ret <vscale x 1 x i8> %v
57 define <vscale x 1 x i8> @vmul_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
58 ; CHECK-LABEL: vmul_vx_nxv1i8_unmasked:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
61 ; CHECK-NEXT:    vmul.vx v8, v8, a0
62 ; CHECK-NEXT:    ret
63   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
64   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
65   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
66   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
67   %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
68   ret <vscale x 1 x i8> %v
71 declare <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
73 define <vscale x 2 x i8> @vmul_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vmul_vv_nxv2i8:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
77 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
78 ; CHECK-NEXT:    ret
79   %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
80   ret <vscale x 2 x i8> %v
83 define <vscale x 2 x i8> @vmul_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
84 ; CHECK-LABEL: vmul_vv_nxv2i8_unmasked:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
87 ; CHECK-NEXT:    vmul.vv v8, v8, v9
88 ; CHECK-NEXT:    ret
89   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
90   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
91   %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
92   ret <vscale x 2 x i8> %v
95 define <vscale x 2 x i8> @vmul_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
96 ; CHECK-LABEL: vmul_vx_nxv2i8:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
99 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
100 ; CHECK-NEXT:    ret
101   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
102   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
103   %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
104   ret <vscale x 2 x i8> %v
107 define <vscale x 2 x i8> @vmul_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
108 ; CHECK-LABEL: vmul_vx_nxv2i8_unmasked:
109 ; CHECK:       # %bb.0:
110 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
111 ; CHECK-NEXT:    vmul.vx v8, v8, a0
112 ; CHECK-NEXT:    ret
113   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
114   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
115   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
116   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
117   %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
118   ret <vscale x 2 x i8> %v
121 declare <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
123 define <vscale x 4 x i8> @vmul_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
124 ; CHECK-LABEL: vmul_vv_nxv4i8:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
127 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
128 ; CHECK-NEXT:    ret
129   %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
130   ret <vscale x 4 x i8> %v
133 define <vscale x 4 x i8> @vmul_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
134 ; CHECK-LABEL: vmul_vv_nxv4i8_unmasked:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
137 ; CHECK-NEXT:    vmul.vv v8, v8, v9
138 ; CHECK-NEXT:    ret
139   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
140   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
141   %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
142   ret <vscale x 4 x i8> %v
145 define <vscale x 4 x i8> @vmul_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
146 ; CHECK-LABEL: vmul_vx_nxv4i8:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
149 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
150 ; CHECK-NEXT:    ret
151   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
152   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
153   %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
154   ret <vscale x 4 x i8> %v
157 define <vscale x 4 x i8> @vmul_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
158 ; CHECK-LABEL: vmul_vx_nxv4i8_unmasked:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
161 ; CHECK-NEXT:    vmul.vx v8, v8, a0
162 ; CHECK-NEXT:    ret
163   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
164   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
165   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
166   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
167   %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
168   ret <vscale x 4 x i8> %v
171 declare <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
173 define <vscale x 8 x i8> @vmul_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
174 ; CHECK-LABEL: vmul_vv_nxv8i8:
175 ; CHECK:       # %bb.0:
176 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
177 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
178 ; CHECK-NEXT:    ret
179   %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
180   ret <vscale x 8 x i8> %v
183 define <vscale x 8 x i8> @vmul_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
184 ; CHECK-LABEL: vmul_vv_nxv8i8_unmasked:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
187 ; CHECK-NEXT:    vmul.vv v8, v8, v9
188 ; CHECK-NEXT:    ret
189   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
190   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
191   %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
192   ret <vscale x 8 x i8> %v
195 define <vscale x 8 x i8> @vmul_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
196 ; CHECK-LABEL: vmul_vx_nxv8i8:
197 ; CHECK:       # %bb.0:
198 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
199 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
200 ; CHECK-NEXT:    ret
201   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
202   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
203   %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
204   ret <vscale x 8 x i8> %v
207 define <vscale x 8 x i8> @vmul_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
208 ; CHECK-LABEL: vmul_vx_nxv8i8_unmasked:
209 ; CHECK:       # %bb.0:
210 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
211 ; CHECK-NEXT:    vmul.vx v8, v8, a0
212 ; CHECK-NEXT:    ret
213   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
214   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
215   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
216   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
217   %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
218   ret <vscale x 8 x i8> %v
221 declare <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
223 define <vscale x 16 x i8> @vmul_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
224 ; CHECK-LABEL: vmul_vv_nxv16i8:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
227 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
228 ; CHECK-NEXT:    ret
229   %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
230   ret <vscale x 16 x i8> %v
233 define <vscale x 16 x i8> @vmul_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
234 ; CHECK-LABEL: vmul_vv_nxv16i8_unmasked:
235 ; CHECK:       # %bb.0:
236 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
237 ; CHECK-NEXT:    vmul.vv v8, v8, v10
238 ; CHECK-NEXT:    ret
239   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
240   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
241   %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
242   ret <vscale x 16 x i8> %v
245 define <vscale x 16 x i8> @vmul_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
246 ; CHECK-LABEL: vmul_vx_nxv16i8:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
249 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
250 ; CHECK-NEXT:    ret
251   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
252   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
253   %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
254   ret <vscale x 16 x i8> %v
257 define <vscale x 16 x i8> @vmul_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
258 ; CHECK-LABEL: vmul_vx_nxv16i8_unmasked:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
261 ; CHECK-NEXT:    vmul.vx v8, v8, a0
262 ; CHECK-NEXT:    ret
263   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
264   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
265   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
266   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
267   %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
268   ret <vscale x 16 x i8> %v
271 declare <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
273 define <vscale x 32 x i8> @vmul_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
274 ; CHECK-LABEL: vmul_vv_nxv32i8:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
277 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
278 ; CHECK-NEXT:    ret
279   %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
280   ret <vscale x 32 x i8> %v
283 define <vscale x 32 x i8> @vmul_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
284 ; CHECK-LABEL: vmul_vv_nxv32i8_unmasked:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
287 ; CHECK-NEXT:    vmul.vv v8, v8, v12
288 ; CHECK-NEXT:    ret
289   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
290   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
291   %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
292   ret <vscale x 32 x i8> %v
295 define <vscale x 32 x i8> @vmul_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: vmul_vx_nxv32i8:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
299 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
300 ; CHECK-NEXT:    ret
301   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
302   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
303   %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
304   ret <vscale x 32 x i8> %v
307 define <vscale x 32 x i8> @vmul_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
308 ; CHECK-LABEL: vmul_vx_nxv32i8_unmasked:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
311 ; CHECK-NEXT:    vmul.vx v8, v8, a0
312 ; CHECK-NEXT:    ret
313   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
314   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
315   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
316   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
317   %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
318   ret <vscale x 32 x i8> %v
321 declare <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
323 define <vscale x 64 x i8> @vmul_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
324 ; CHECK-LABEL: vmul_vv_nxv64i8:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
327 ; CHECK-NEXT:    vmul.vv v8, v8, v16, v0.t
328 ; CHECK-NEXT:    ret
329   %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
330   ret <vscale x 64 x i8> %v
333 define <vscale x 64 x i8> @vmul_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
334 ; CHECK-LABEL: vmul_vv_nxv64i8_unmasked:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
337 ; CHECK-NEXT:    vmul.vv v8, v8, v16
338 ; CHECK-NEXT:    ret
339   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
340   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
341   %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
342   ret <vscale x 64 x i8> %v
345 define <vscale x 64 x i8> @vmul_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
346 ; CHECK-LABEL: vmul_vx_nxv64i8:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
349 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
350 ; CHECK-NEXT:    ret
351   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
352   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
353   %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
354   ret <vscale x 64 x i8> %v
357 define <vscale x 64 x i8> @vmul_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
358 ; CHECK-LABEL: vmul_vx_nxv64i8_unmasked:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
361 ; CHECK-NEXT:    vmul.vx v8, v8, a0
362 ; CHECK-NEXT:    ret
363   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
364   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
365   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
366   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
367   %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
368   ret <vscale x 64 x i8> %v
371 declare <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
373 define <vscale x 1 x i16> @vmul_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
374 ; CHECK-LABEL: vmul_vv_nxv1i16:
375 ; CHECK:       # %bb.0:
376 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
377 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
378 ; CHECK-NEXT:    ret
379   %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
380   ret <vscale x 1 x i16> %v
383 define <vscale x 1 x i16> @vmul_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
384 ; CHECK-LABEL: vmul_vv_nxv1i16_unmasked:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
387 ; CHECK-NEXT:    vmul.vv v8, v8, v9
388 ; CHECK-NEXT:    ret
389   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
390   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
391   %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
392   ret <vscale x 1 x i16> %v
395 define <vscale x 1 x i16> @vmul_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
396 ; CHECK-LABEL: vmul_vx_nxv1i16:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
399 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
400 ; CHECK-NEXT:    ret
401   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
402   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
403   %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
404   ret <vscale x 1 x i16> %v
407 define <vscale x 1 x i16> @vmul_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
408 ; CHECK-LABEL: vmul_vx_nxv1i16_unmasked:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
411 ; CHECK-NEXT:    vmul.vx v8, v8, a0
412 ; CHECK-NEXT:    ret
413   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
414   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
415   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
416   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
417   %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
418   ret <vscale x 1 x i16> %v
421 declare <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
423 define <vscale x 2 x i16> @vmul_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vmul_vv_nxv2i16:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
427 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
428 ; CHECK-NEXT:    ret
429   %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
430   ret <vscale x 2 x i16> %v
433 define <vscale x 2 x i16> @vmul_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
434 ; CHECK-LABEL: vmul_vv_nxv2i16_unmasked:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
437 ; CHECK-NEXT:    vmul.vv v8, v8, v9
438 ; CHECK-NEXT:    ret
439   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
440   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
441   %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
442   ret <vscale x 2 x i16> %v
445 define <vscale x 2 x i16> @vmul_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
446 ; CHECK-LABEL: vmul_vx_nxv2i16:
447 ; CHECK:       # %bb.0:
448 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
449 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
450 ; CHECK-NEXT:    ret
451   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
452   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
453   %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
454   ret <vscale x 2 x i16> %v
457 define <vscale x 2 x i16> @vmul_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
458 ; CHECK-LABEL: vmul_vx_nxv2i16_unmasked:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
461 ; CHECK-NEXT:    vmul.vx v8, v8, a0
462 ; CHECK-NEXT:    ret
463   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
464   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
465   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
466   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
467   %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
468   ret <vscale x 2 x i16> %v
471 declare <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
473 define <vscale x 4 x i16> @vmul_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
474 ; CHECK-LABEL: vmul_vv_nxv4i16:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
477 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
478 ; CHECK-NEXT:    ret
479   %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
480   ret <vscale x 4 x i16> %v
483 define <vscale x 4 x i16> @vmul_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
484 ; CHECK-LABEL: vmul_vv_nxv4i16_unmasked:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
487 ; CHECK-NEXT:    vmul.vv v8, v8, v9
488 ; CHECK-NEXT:    ret
489   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
490   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
491   %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
492   ret <vscale x 4 x i16> %v
495 define <vscale x 4 x i16> @vmul_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
496 ; CHECK-LABEL: vmul_vx_nxv4i16:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
499 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
500 ; CHECK-NEXT:    ret
501   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
502   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
503   %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
504   ret <vscale x 4 x i16> %v
507 define <vscale x 4 x i16> @vmul_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
508 ; CHECK-LABEL: vmul_vx_nxv4i16_unmasked:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
511 ; CHECK-NEXT:    vmul.vx v8, v8, a0
512 ; CHECK-NEXT:    ret
513   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
514   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
515   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
516   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
517   %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
518   ret <vscale x 4 x i16> %v
521 declare <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
523 define <vscale x 8 x i16> @vmul_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
524 ; CHECK-LABEL: vmul_vv_nxv8i16:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
527 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
528 ; CHECK-NEXT:    ret
529   %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
530   ret <vscale x 8 x i16> %v
533 define <vscale x 8 x i16> @vmul_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
534 ; CHECK-LABEL: vmul_vv_nxv8i16_unmasked:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
537 ; CHECK-NEXT:    vmul.vv v8, v8, v10
538 ; CHECK-NEXT:    ret
539   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
540   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
541   %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
542   ret <vscale x 8 x i16> %v
545 define <vscale x 8 x i16> @vmul_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
546 ; CHECK-LABEL: vmul_vx_nxv8i16:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
549 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
550 ; CHECK-NEXT:    ret
551   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
552   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
553   %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
554   ret <vscale x 8 x i16> %v
557 define <vscale x 8 x i16> @vmul_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
558 ; CHECK-LABEL: vmul_vx_nxv8i16_unmasked:
559 ; CHECK:       # %bb.0:
560 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
561 ; CHECK-NEXT:    vmul.vx v8, v8, a0
562 ; CHECK-NEXT:    ret
563   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
564   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
565   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
566   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
567   %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
568   ret <vscale x 8 x i16> %v
571 declare <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
573 define <vscale x 16 x i16> @vmul_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
574 ; CHECK-LABEL: vmul_vv_nxv16i16:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
577 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
578 ; CHECK-NEXT:    ret
579   %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
580   ret <vscale x 16 x i16> %v
583 define <vscale x 16 x i16> @vmul_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
584 ; CHECK-LABEL: vmul_vv_nxv16i16_unmasked:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
587 ; CHECK-NEXT:    vmul.vv v8, v8, v12
588 ; CHECK-NEXT:    ret
589   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
590   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
591   %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
592   ret <vscale x 16 x i16> %v
595 define <vscale x 16 x i16> @vmul_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
596 ; CHECK-LABEL: vmul_vx_nxv16i16:
597 ; CHECK:       # %bb.0:
598 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
599 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
600 ; CHECK-NEXT:    ret
601   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
602   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
603   %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
604   ret <vscale x 16 x i16> %v
607 define <vscale x 16 x i16> @vmul_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
608 ; CHECK-LABEL: vmul_vx_nxv16i16_unmasked:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
611 ; CHECK-NEXT:    vmul.vx v8, v8, a0
612 ; CHECK-NEXT:    ret
613   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
614   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
615   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
616   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
617   %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
618   ret <vscale x 16 x i16> %v
621 declare <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
623 define <vscale x 32 x i16> @vmul_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
624 ; CHECK-LABEL: vmul_vv_nxv32i16:
625 ; CHECK:       # %bb.0:
626 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
627 ; CHECK-NEXT:    vmul.vv v8, v8, v16, v0.t
628 ; CHECK-NEXT:    ret
629   %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
630   ret <vscale x 32 x i16> %v
633 define <vscale x 32 x i16> @vmul_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
634 ; CHECK-LABEL: vmul_vv_nxv32i16_unmasked:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
637 ; CHECK-NEXT:    vmul.vv v8, v8, v16
638 ; CHECK-NEXT:    ret
639   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
640   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
641   %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
642   ret <vscale x 32 x i16> %v
645 define <vscale x 32 x i16> @vmul_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
646 ; CHECK-LABEL: vmul_vx_nxv32i16:
647 ; CHECK:       # %bb.0:
648 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
649 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
650 ; CHECK-NEXT:    ret
651   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
652   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
653   %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
654   ret <vscale x 32 x i16> %v
657 define <vscale x 32 x i16> @vmul_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
658 ; CHECK-LABEL: vmul_vx_nxv32i16_unmasked:
659 ; CHECK:       # %bb.0:
660 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
661 ; CHECK-NEXT:    vmul.vx v8, v8, a0
662 ; CHECK-NEXT:    ret
663   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
664   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
665   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
666   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
667   %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
668   ret <vscale x 32 x i16> %v
671 declare <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
673 define <vscale x 1 x i32> @vmul_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
674 ; CHECK-LABEL: vmul_vv_nxv1i32:
675 ; CHECK:       # %bb.0:
676 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
677 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
678 ; CHECK-NEXT:    ret
679   %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
680   ret <vscale x 1 x i32> %v
683 define <vscale x 1 x i32> @vmul_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
684 ; CHECK-LABEL: vmul_vv_nxv1i32_unmasked:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
687 ; CHECK-NEXT:    vmul.vv v8, v8, v9
688 ; CHECK-NEXT:    ret
689   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
690   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
691   %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
692   ret <vscale x 1 x i32> %v
695 define <vscale x 1 x i32> @vmul_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
696 ; CHECK-LABEL: vmul_vx_nxv1i32:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
699 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
700 ; CHECK-NEXT:    ret
701   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
702   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
703   %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
704   ret <vscale x 1 x i32> %v
707 define <vscale x 1 x i32> @vmul_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
708 ; CHECK-LABEL: vmul_vx_nxv1i32_unmasked:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
711 ; CHECK-NEXT:    vmul.vx v8, v8, a0
712 ; CHECK-NEXT:    ret
713   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
714   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
715   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
716   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
717   %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
718   ret <vscale x 1 x i32> %v
721 declare <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
723 define <vscale x 2 x i32> @vmul_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
724 ; CHECK-LABEL: vmul_vv_nxv2i32:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
727 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
728 ; CHECK-NEXT:    ret
729   %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
730   ret <vscale x 2 x i32> %v
733 define <vscale x 2 x i32> @vmul_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
734 ; CHECK-LABEL: vmul_vv_nxv2i32_unmasked:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
737 ; CHECK-NEXT:    vmul.vv v8, v8, v9
738 ; CHECK-NEXT:    ret
739   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
740   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
741   %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
742   ret <vscale x 2 x i32> %v
745 define <vscale x 2 x i32> @vmul_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
746 ; CHECK-LABEL: vmul_vx_nxv2i32:
747 ; CHECK:       # %bb.0:
748 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
749 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
750 ; CHECK-NEXT:    ret
751   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
752   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
753   %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
754   ret <vscale x 2 x i32> %v
757 define <vscale x 2 x i32> @vmul_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
758 ; CHECK-LABEL: vmul_vx_nxv2i32_unmasked:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
761 ; CHECK-NEXT:    vmul.vx v8, v8, a0
762 ; CHECK-NEXT:    ret
763   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
764   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
765   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
766   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
767   %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
768   ret <vscale x 2 x i32> %v
771 declare <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
773 define <vscale x 4 x i32> @vmul_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
774 ; CHECK-LABEL: vmul_vv_nxv4i32:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
777 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
778 ; CHECK-NEXT:    ret
779   %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
780   ret <vscale x 4 x i32> %v
783 define <vscale x 4 x i32> @vmul_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
784 ; CHECK-LABEL: vmul_vv_nxv4i32_unmasked:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
787 ; CHECK-NEXT:    vmul.vv v8, v8, v10
788 ; CHECK-NEXT:    ret
789   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
790   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
791   %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
792   ret <vscale x 4 x i32> %v
795 define <vscale x 4 x i32> @vmul_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
796 ; CHECK-LABEL: vmul_vx_nxv4i32:
797 ; CHECK:       # %bb.0:
798 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
799 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
800 ; CHECK-NEXT:    ret
801   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
802   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
803   %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
804   ret <vscale x 4 x i32> %v
807 define <vscale x 4 x i32> @vmul_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
808 ; CHECK-LABEL: vmul_vx_nxv4i32_unmasked:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
811 ; CHECK-NEXT:    vmul.vx v8, v8, a0
812 ; CHECK-NEXT:    ret
813   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
814   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
815   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
816   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
817   %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
818   ret <vscale x 4 x i32> %v
821 declare <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32>, <vscale x 7 x i32>, <vscale x 7 x i1>, i32)
823 define <vscale x 7 x i32> @vmul_vv_nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {
824 ; CHECK-LABEL: vmul_vv_nxv7i32:
825 ; CHECK:       # %bb.0:
826 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
827 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
828 ; CHECK-NEXT:    ret
829   %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> %m, i32 %evl)
830   ret <vscale x 7 x i32> %v
833 define <vscale x 7 x i32> @vmul_vv_nxv7i32_unmasked(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, i32 zeroext %evl) {
834 ; CHECK-LABEL: vmul_vv_nxv7i32_unmasked:
835 ; CHECK:       # %bb.0:
836 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
837 ; CHECK-NEXT:    vmul.vv v8, v8, v12
838 ; CHECK-NEXT:    ret
839   %head = insertelement <vscale x 7 x i1> poison, i1 true, i32 0
840   %m = shufflevector <vscale x 7 x i1> %head, <vscale x 7 x i1> poison, <vscale x 7 x i32> zeroinitializer
841   %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> %m, i32 %evl)
842   ret <vscale x 7 x i32> %v
845 define <vscale x 7 x i32> @vmul_vx_nxv7i32(<vscale x 7 x i32> %va, i32 %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {
846 ; CHECK-LABEL: vmul_vx_nxv7i32:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
849 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
850 ; CHECK-NEXT:    ret
851   %elt.head = insertelement <vscale x 7 x i32> poison, i32 %b, i32 0
852   %vb = shufflevector <vscale x 7 x i32> %elt.head, <vscale x 7 x i32> poison, <vscale x 7 x i32> zeroinitializer
853   %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %vb, <vscale x 7 x i1> %m, i32 %evl)
854   ret <vscale x 7 x i32> %v
857 define <vscale x 7 x i32> @vmul_vx_nxv7i32_unmasked(<vscale x 7 x i32> %va, i32 %b, i32 zeroext %evl) {
858 ; CHECK-LABEL: vmul_vx_nxv7i32_unmasked:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
861 ; CHECK-NEXT:    vmul.vx v8, v8, a0
862 ; CHECK-NEXT:    ret
863   %elt.head = insertelement <vscale x 7 x i32> poison, i32 %b, i32 0
864   %vb = shufflevector <vscale x 7 x i32> %elt.head, <vscale x 7 x i32> poison, <vscale x 7 x i32> zeroinitializer
865   %head = insertelement <vscale x 7 x i1> poison, i1 true, i32 0
866   %m = shufflevector <vscale x 7 x i1> %head, <vscale x 7 x i1> poison, <vscale x 7 x i32> zeroinitializer
867   %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %vb, <vscale x 7 x i1> %m, i32 %evl)
868   ret <vscale x 7 x i32> %v
871 declare <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
873 define <vscale x 8 x i32> @vmul_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
874 ; CHECK-LABEL: vmul_vv_nxv8i32:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
877 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
878 ; CHECK-NEXT:    ret
879   %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
880   ret <vscale x 8 x i32> %v
883 define <vscale x 8 x i32> @vmul_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
884 ; CHECK-LABEL: vmul_vv_nxv8i32_unmasked:
885 ; CHECK:       # %bb.0:
886 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
887 ; CHECK-NEXT:    vmul.vv v8, v8, v12
888 ; CHECK-NEXT:    ret
889   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
890   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
891   %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
892   ret <vscale x 8 x i32> %v
895 define <vscale x 8 x i32> @vmul_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
896 ; CHECK-LABEL: vmul_vx_nxv8i32:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
899 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
900 ; CHECK-NEXT:    ret
901   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
902   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
903   %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
904   ret <vscale x 8 x i32> %v
907 define <vscale x 8 x i32> @vmul_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
908 ; CHECK-LABEL: vmul_vx_nxv8i32_unmasked:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
911 ; CHECK-NEXT:    vmul.vx v8, v8, a0
912 ; CHECK-NEXT:    ret
913   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
914   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
915   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
916   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
917   %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
918   ret <vscale x 8 x i32> %v
921 declare <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
923 define <vscale x 16 x i32> @vmul_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
924 ; CHECK-LABEL: vmul_vv_nxv16i32:
925 ; CHECK:       # %bb.0:
926 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
927 ; CHECK-NEXT:    vmul.vv v8, v8, v16, v0.t
928 ; CHECK-NEXT:    ret
929   %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
930   ret <vscale x 16 x i32> %v
933 define <vscale x 16 x i32> @vmul_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
934 ; CHECK-LABEL: vmul_vv_nxv16i32_unmasked:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
937 ; CHECK-NEXT:    vmul.vv v8, v8, v16
938 ; CHECK-NEXT:    ret
939   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
940   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
941   %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
942   ret <vscale x 16 x i32> %v
945 define <vscale x 16 x i32> @vmul_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
946 ; CHECK-LABEL: vmul_vx_nxv16i32:
947 ; CHECK:       # %bb.0:
948 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
949 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
950 ; CHECK-NEXT:    ret
951   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
952   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
953   %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
954   ret <vscale x 16 x i32> %v
957 define <vscale x 16 x i32> @vmul_vx_nxv16i32_commute(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
958 ; CHECK-LABEL: vmul_vx_nxv16i32_commute:
959 ; CHECK:       # %bb.0:
960 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
961 ; CHECK-NEXT:    vmul.vx v8, v8, a0, v0.t
962 ; CHECK-NEXT:    ret
963   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
964   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
965   %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %vb, <vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 %evl)
966   ret <vscale x 16 x i32> %v
969 define <vscale x 16 x i32> @vmul_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
970 ; CHECK-LABEL: vmul_vx_nxv16i32_unmasked:
971 ; CHECK:       # %bb.0:
972 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
973 ; CHECK-NEXT:    vmul.vx v8, v8, a0
974 ; CHECK-NEXT:    ret
975   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
976   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
977   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
978   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
979   %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
980   ret <vscale x 16 x i32> %v
983 declare <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
985 define <vscale x 1 x i64> @vmul_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
986 ; CHECK-LABEL: vmul_vv_nxv1i64:
987 ; CHECK:       # %bb.0:
988 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
989 ; CHECK-NEXT:    vmul.vv v8, v8, v9, v0.t
990 ; CHECK-NEXT:    ret
991   %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
992   ret <vscale x 1 x i64> %v
995 define <vscale x 1 x i64> @vmul_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
996 ; CHECK-LABEL: vmul_vv_nxv1i64_unmasked:
997 ; CHECK:       # %bb.0:
998 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
999 ; CHECK-NEXT:    vmul.vv v8, v8, v9
1000 ; CHECK-NEXT:    ret
1001   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1002   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1003   %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1004   ret <vscale x 1 x i64> %v
1007 define <vscale x 1 x i64> @vmul_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1008 ; RV32-LABEL: vmul_vx_nxv1i64:
1009 ; RV32:       # %bb.0:
1010 ; RV32-NEXT:    addi sp, sp, -16
1011 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1012 ; RV32-NEXT:    sw a1, 12(sp)
1013 ; RV32-NEXT:    sw a0, 8(sp)
1014 ; RV32-NEXT:    addi a0, sp, 8
1015 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1016 ; RV32-NEXT:    vlse64.v v9, (a0), zero
1017 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1018 ; RV32-NEXT:    vmul.vv v8, v8, v9, v0.t
1019 ; RV32-NEXT:    addi sp, sp, 16
1020 ; RV32-NEXT:    ret
1022 ; RV64-LABEL: vmul_vx_nxv1i64:
1023 ; RV64:       # %bb.0:
1024 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1025 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
1026 ; RV64-NEXT:    ret
1027   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1028   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1029   %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1030   ret <vscale x 1 x i64> %v
1033 define <vscale x 1 x i64> @vmul_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1034 ; RV32-LABEL: vmul_vx_nxv1i64_unmasked:
1035 ; RV32:       # %bb.0:
1036 ; RV32-NEXT:    addi sp, sp, -16
1037 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1038 ; RV32-NEXT:    sw a1, 12(sp)
1039 ; RV32-NEXT:    sw a0, 8(sp)
1040 ; RV32-NEXT:    addi a0, sp, 8
1041 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1042 ; RV32-NEXT:    vlse64.v v9, (a0), zero
1043 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1044 ; RV32-NEXT:    vmul.vv v8, v8, v9
1045 ; RV32-NEXT:    addi sp, sp, 16
1046 ; RV32-NEXT:    ret
1048 ; RV64-LABEL: vmul_vx_nxv1i64_unmasked:
1049 ; RV64:       # %bb.0:
1050 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1051 ; RV64-NEXT:    vmul.vx v8, v8, a0
1052 ; RV64-NEXT:    ret
1053   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1054   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1055   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1056   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1057   %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1058   ret <vscale x 1 x i64> %v
1061 declare <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1063 define <vscale x 2 x i64> @vmul_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1064 ; CHECK-LABEL: vmul_vv_nxv2i64:
1065 ; CHECK:       # %bb.0:
1066 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1067 ; CHECK-NEXT:    vmul.vv v8, v8, v10, v0.t
1068 ; CHECK-NEXT:    ret
1069   %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1070   ret <vscale x 2 x i64> %v
1073 define <vscale x 2 x i64> @vmul_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1074 ; CHECK-LABEL: vmul_vv_nxv2i64_unmasked:
1075 ; CHECK:       # %bb.0:
1076 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1077 ; CHECK-NEXT:    vmul.vv v8, v8, v10
1078 ; CHECK-NEXT:    ret
1079   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1080   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1081   %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1082   ret <vscale x 2 x i64> %v
1085 define <vscale x 2 x i64> @vmul_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1086 ; RV32-LABEL: vmul_vx_nxv2i64:
1087 ; RV32:       # %bb.0:
1088 ; RV32-NEXT:    addi sp, sp, -16
1089 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1090 ; RV32-NEXT:    sw a1, 12(sp)
1091 ; RV32-NEXT:    sw a0, 8(sp)
1092 ; RV32-NEXT:    addi a0, sp, 8
1093 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1094 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1095 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1096 ; RV32-NEXT:    vmul.vv v8, v8, v10, v0.t
1097 ; RV32-NEXT:    addi sp, sp, 16
1098 ; RV32-NEXT:    ret
1100 ; RV64-LABEL: vmul_vx_nxv2i64:
1101 ; RV64:       # %bb.0:
1102 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1103 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
1104 ; RV64-NEXT:    ret
1105   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1106   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1107   %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1108   ret <vscale x 2 x i64> %v
1111 define <vscale x 2 x i64> @vmul_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1112 ; RV32-LABEL: vmul_vx_nxv2i64_unmasked:
1113 ; RV32:       # %bb.0:
1114 ; RV32-NEXT:    addi sp, sp, -16
1115 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1116 ; RV32-NEXT:    sw a1, 12(sp)
1117 ; RV32-NEXT:    sw a0, 8(sp)
1118 ; RV32-NEXT:    addi a0, sp, 8
1119 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1120 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1121 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1122 ; RV32-NEXT:    vmul.vv v8, v8, v10
1123 ; RV32-NEXT:    addi sp, sp, 16
1124 ; RV32-NEXT:    ret
1126 ; RV64-LABEL: vmul_vx_nxv2i64_unmasked:
1127 ; RV64:       # %bb.0:
1128 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1129 ; RV64-NEXT:    vmul.vx v8, v8, a0
1130 ; RV64-NEXT:    ret
1131   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1132   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1133   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1134   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1135   %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1136   ret <vscale x 2 x i64> %v
1139 declare <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1141 define <vscale x 4 x i64> @vmul_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1142 ; CHECK-LABEL: vmul_vv_nxv4i64:
1143 ; CHECK:       # %bb.0:
1144 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1145 ; CHECK-NEXT:    vmul.vv v8, v8, v12, v0.t
1146 ; CHECK-NEXT:    ret
1147   %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1148   ret <vscale x 4 x i64> %v
1151 define <vscale x 4 x i64> @vmul_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1152 ; CHECK-LABEL: vmul_vv_nxv4i64_unmasked:
1153 ; CHECK:       # %bb.0:
1154 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1155 ; CHECK-NEXT:    vmul.vv v8, v8, v12
1156 ; CHECK-NEXT:    ret
1157   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1158   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1159   %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1160   ret <vscale x 4 x i64> %v
1163 define <vscale x 4 x i64> @vmul_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1164 ; RV32-LABEL: vmul_vx_nxv4i64:
1165 ; RV32:       # %bb.0:
1166 ; RV32-NEXT:    addi sp, sp, -16
1167 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1168 ; RV32-NEXT:    sw a1, 12(sp)
1169 ; RV32-NEXT:    sw a0, 8(sp)
1170 ; RV32-NEXT:    addi a0, sp, 8
1171 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1172 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1173 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1174 ; RV32-NEXT:    vmul.vv v8, v8, v12, v0.t
1175 ; RV32-NEXT:    addi sp, sp, 16
1176 ; RV32-NEXT:    ret
1178 ; RV64-LABEL: vmul_vx_nxv4i64:
1179 ; RV64:       # %bb.0:
1180 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1181 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
1182 ; RV64-NEXT:    ret
1183   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1184   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1185   %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1186   ret <vscale x 4 x i64> %v
1189 define <vscale x 4 x i64> @vmul_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1190 ; RV32-LABEL: vmul_vx_nxv4i64_unmasked:
1191 ; RV32:       # %bb.0:
1192 ; RV32-NEXT:    addi sp, sp, -16
1193 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1194 ; RV32-NEXT:    sw a1, 12(sp)
1195 ; RV32-NEXT:    sw a0, 8(sp)
1196 ; RV32-NEXT:    addi a0, sp, 8
1197 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1198 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1199 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1200 ; RV32-NEXT:    vmul.vv v8, v8, v12
1201 ; RV32-NEXT:    addi sp, sp, 16
1202 ; RV32-NEXT:    ret
1204 ; RV64-LABEL: vmul_vx_nxv4i64_unmasked:
1205 ; RV64:       # %bb.0:
1206 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1207 ; RV64-NEXT:    vmul.vx v8, v8, a0
1208 ; RV64-NEXT:    ret
1209   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1210   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1211   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1212   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1213   %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1214   ret <vscale x 4 x i64> %v
1217 declare <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1219 define <vscale x 8 x i64> @vmul_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1220 ; CHECK-LABEL: vmul_vv_nxv8i64:
1221 ; CHECK:       # %bb.0:
1222 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1223 ; CHECK-NEXT:    vmul.vv v8, v8, v16, v0.t
1224 ; CHECK-NEXT:    ret
1225   %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1226   ret <vscale x 8 x i64> %v
1229 define <vscale x 8 x i64> @vmul_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1230 ; CHECK-LABEL: vmul_vv_nxv8i64_unmasked:
1231 ; CHECK:       # %bb.0:
1232 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1233 ; CHECK-NEXT:    vmul.vv v8, v8, v16
1234 ; CHECK-NEXT:    ret
1235   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1236   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1237   %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1238   ret <vscale x 8 x i64> %v
1241 define <vscale x 8 x i64> @vmul_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1242 ; RV32-LABEL: vmul_vx_nxv8i64:
1243 ; RV32:       # %bb.0:
1244 ; RV32-NEXT:    addi sp, sp, -16
1245 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1246 ; RV32-NEXT:    sw a1, 12(sp)
1247 ; RV32-NEXT:    sw a0, 8(sp)
1248 ; RV32-NEXT:    addi a0, sp, 8
1249 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1250 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1251 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1252 ; RV32-NEXT:    vmul.vv v8, v8, v16, v0.t
1253 ; RV32-NEXT:    addi sp, sp, 16
1254 ; RV32-NEXT:    ret
1256 ; RV64-LABEL: vmul_vx_nxv8i64:
1257 ; RV64:       # %bb.0:
1258 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1259 ; RV64-NEXT:    vmul.vx v8, v8, a0, v0.t
1260 ; RV64-NEXT:    ret
1261   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1262   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1263   %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1264   ret <vscale x 8 x i64> %v
1267 define <vscale x 8 x i64> @vmul_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1268 ; RV32-LABEL: vmul_vx_nxv8i64_unmasked:
1269 ; RV32:       # %bb.0:
1270 ; RV32-NEXT:    addi sp, sp, -16
1271 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1272 ; RV32-NEXT:    sw a1, 12(sp)
1273 ; RV32-NEXT:    sw a0, 8(sp)
1274 ; RV32-NEXT:    addi a0, sp, 8
1275 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1276 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1277 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1278 ; RV32-NEXT:    vmul.vv v8, v8, v16
1279 ; RV32-NEXT:    addi sp, sp, 16
1280 ; RV32-NEXT:    ret
1282 ; RV64-LABEL: vmul_vx_nxv8i64_unmasked:
1283 ; RV64:       # %bb.0:
1284 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1285 ; RV64-NEXT:    vmul.vx v8, v8, a0
1286 ; RV64-NEXT:    ret
1287   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1288   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1289   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1290   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1291   %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1292   ret <vscale x 8 x i64> %v