1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x half> @vfmul_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vfmul_vv_nxv1f16:
16 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
17 ; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t
20 ; ZVFHMIN-LABEL: vfmul_vv_nxv1f16:
22 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
24 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
25 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
26 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10, v0.t
27 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
28 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
30 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
31 ret <vscale x 1 x half> %v
34 define <vscale x 1 x half> @vfmul_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, i32 zeroext %evl) {
35 ; ZVFH-LABEL: vfmul_vv_nxv1f16_unmasked:
37 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
38 ; ZVFH-NEXT: vfmul.vv v8, v8, v9
41 ; ZVFHMIN-LABEL: vfmul_vv_nxv1f16_unmasked:
43 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
44 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
45 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
46 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
47 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10
48 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
49 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
51 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
52 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
53 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
54 ret <vscale x 1 x half> %v
57 define <vscale x 1 x half> @vfmul_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
58 ; ZVFH-LABEL: vfmul_vf_nxv1f16:
60 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
61 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
64 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16:
66 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
67 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
68 ; ZVFHMIN-NEXT: vfmv.v.f v9, fa5
69 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
70 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v9
71 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
72 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v10
73 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
74 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v8, v0.t
75 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
76 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
78 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
79 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
80 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
81 ret <vscale x 1 x half> %v
84 define <vscale x 1 x half> @vfmul_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {
85 ; ZVFH-LABEL: vfmul_vf_nxv1f16_unmasked:
87 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
88 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
91 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16_unmasked:
93 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
94 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
95 ; ZVFHMIN-NEXT: vfmv.v.f v9, fa5
96 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
97 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v9
98 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
99 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v10
100 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
101 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v8
102 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
103 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
105 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
106 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
107 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
108 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
109 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
110 ret <vscale x 1 x half> %v
113 declare <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
115 define <vscale x 2 x half> @vfmul_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
116 ; ZVFH-LABEL: vfmul_vv_nxv2f16:
118 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
119 ; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t
122 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16:
124 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
125 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
126 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
127 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
128 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10, v0.t
129 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
130 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
132 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
133 ret <vscale x 2 x half> %v
136 define <vscale x 2 x half> @vfmul_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, i32 zeroext %evl) {
137 ; ZVFH-LABEL: vfmul_vv_nxv2f16_unmasked:
139 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
140 ; ZVFH-NEXT: vfmul.vv v8, v8, v9
143 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16_unmasked:
145 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
146 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
147 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
148 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
149 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10
150 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
151 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
153 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
154 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
155 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
156 ret <vscale x 2 x half> %v
159 define <vscale x 2 x half> @vfmul_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
160 ; ZVFH-LABEL: vfmul_vf_nxv2f16:
162 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
163 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
166 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16:
168 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
169 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m1, ta, ma
170 ; ZVFHMIN-NEXT: vfmv.v.f v9, fa5
171 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
172 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v9
173 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
174 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v10
175 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
176 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v8, v0.t
177 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
178 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
180 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
181 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
182 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
183 ret <vscale x 2 x half> %v
186 define <vscale x 2 x half> @vfmul_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {
187 ; ZVFH-LABEL: vfmul_vf_nxv2f16_unmasked:
189 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
190 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
193 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16_unmasked:
195 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
196 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m1, ta, ma
197 ; ZVFHMIN-NEXT: vfmv.v.f v9, fa5
198 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
199 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v9
200 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
201 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v10
202 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
203 ; ZVFHMIN-NEXT: vfmul.vv v9, v9, v8
204 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
205 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
207 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
208 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
209 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
210 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
211 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
212 ret <vscale x 2 x half> %v
215 declare <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
217 define <vscale x 4 x half> @vfmul_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
218 ; ZVFH-LABEL: vfmul_vv_nxv4f16:
220 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
221 ; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t
224 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16:
226 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m1, ta, ma
227 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
228 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
229 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m2, ta, ma
230 ; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10, v0.t
231 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
232 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
234 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
235 ret <vscale x 4 x half> %v
238 define <vscale x 4 x half> @vfmul_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, i32 zeroext %evl) {
239 ; ZVFH-LABEL: vfmul_vv_nxv4f16_unmasked:
241 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
242 ; ZVFH-NEXT: vfmul.vv v8, v8, v9
245 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16_unmasked:
247 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m1, ta, ma
248 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
249 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
250 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m2, ta, ma
251 ; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10
252 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
253 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
255 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
256 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
257 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
258 ret <vscale x 4 x half> %v
261 define <vscale x 4 x half> @vfmul_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
262 ; ZVFH-LABEL: vfmul_vf_nxv4f16:
264 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
265 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
268 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16:
270 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
271 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma
272 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
273 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
274 ; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v10
275 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
276 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9
277 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m2, ta, ma
278 ; ZVFHMIN-NEXT: vfmul.vv v10, v10, v12, v0.t
279 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
280 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
282 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
283 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
284 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
285 ret <vscale x 4 x half> %v
288 define <vscale x 4 x half> @vfmul_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {
289 ; ZVFH-LABEL: vfmul_vf_nxv4f16_unmasked:
291 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
292 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
295 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16_unmasked:
297 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
298 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma
299 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
300 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
301 ; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v10
302 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
303 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9
304 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m2, ta, ma
305 ; ZVFHMIN-NEXT: vfmul.vv v10, v10, v12
306 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma
307 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
309 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
310 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
311 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
312 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
313 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
314 ret <vscale x 4 x half> %v
317 declare <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
319 define <vscale x 8 x half> @vfmul_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
320 ; ZVFH-LABEL: vfmul_vv_nxv8f16:
322 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
323 ; ZVFH-NEXT: vfmul.vv v8, v8, v10, v0.t
326 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16:
328 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
329 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
330 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
331 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m4, ta, ma
332 ; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12, v0.t
333 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
334 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
336 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
337 ret <vscale x 8 x half> %v
340 define <vscale x 8 x half> @vfmul_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, i32 zeroext %evl) {
341 ; ZVFH-LABEL: vfmul_vv_nxv8f16_unmasked:
343 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
344 ; ZVFH-NEXT: vfmul.vv v8, v8, v10
347 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16_unmasked:
349 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
350 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
351 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
352 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m4, ta, ma
353 ; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12
354 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
355 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
357 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
358 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
359 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
360 ret <vscale x 8 x half> %v
363 define <vscale x 8 x half> @vfmul_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
364 ; ZVFH-LABEL: vfmul_vf_nxv8f16:
366 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
367 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
370 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16:
372 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
373 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma
374 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
375 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
376 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
377 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
378 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
379 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m4, ta, ma
380 ; ZVFHMIN-NEXT: vfmul.vv v12, v12, v16, v0.t
381 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
382 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
384 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
385 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
386 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
387 ret <vscale x 8 x half> %v
390 define <vscale x 8 x half> @vfmul_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {
391 ; ZVFH-LABEL: vfmul_vf_nxv8f16_unmasked:
393 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
394 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
397 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16_unmasked:
399 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
400 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma
401 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
402 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
403 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
404 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
405 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
406 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m4, ta, ma
407 ; ZVFHMIN-NEXT: vfmul.vv v12, v12, v16
408 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
409 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
411 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
412 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
413 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
414 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
415 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
416 ret <vscale x 8 x half> %v
419 declare <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
421 define <vscale x 16 x half> @vfmul_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
422 ; ZVFH-LABEL: vfmul_vv_nxv16f16:
424 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
425 ; ZVFH-NEXT: vfmul.vv v8, v8, v12, v0.t
428 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16:
430 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma
431 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
432 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
433 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
434 ; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t
435 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
436 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
438 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
439 ret <vscale x 16 x half> %v
442 define <vscale x 16 x half> @vfmul_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, i32 zeroext %evl) {
443 ; ZVFH-LABEL: vfmul_vv_nxv16f16_unmasked:
445 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
446 ; ZVFH-NEXT: vfmul.vv v8, v8, v12
449 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16_unmasked:
451 ; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma
452 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
453 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
454 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
455 ; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16
456 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
457 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
459 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
460 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
461 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
462 ret <vscale x 16 x half> %v
465 define <vscale x 16 x half> @vfmul_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
466 ; ZVFH-LABEL: vfmul_vf_nxv16f16:
468 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
469 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
472 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16:
474 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
475 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
476 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
477 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
478 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16
479 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
480 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
481 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
482 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t
483 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
484 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
486 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
487 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
488 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
489 ret <vscale x 16 x half> %v
492 define <vscale x 16 x half> @vfmul_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {
493 ; ZVFH-LABEL: vfmul_vf_nxv16f16_unmasked:
495 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
496 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
499 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16_unmasked:
501 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
502 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
503 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
504 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
505 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16
506 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
507 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
508 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
509 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24
510 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
511 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
513 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
514 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
515 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
516 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
517 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
518 ret <vscale x 16 x half> %v
521 declare <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
523 define <vscale x 32 x half> @vfmul_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
524 ; ZVFH-LABEL: vfmul_vv_nxv32f16:
526 ; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma
527 ; ZVFH-NEXT: vfmul.vv v8, v8, v16, v0.t
530 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16:
532 ; ZVFHMIN-NEXT: addi sp, sp, -16
533 ; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16
534 ; ZVFHMIN-NEXT: csrr a1, vlenb
535 ; ZVFHMIN-NEXT: slli a1, a1, 3
536 ; ZVFHMIN-NEXT: sub sp, sp, a1
537 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
538 ; ZVFHMIN-NEXT: vmv1r.v v1, v0
539 ; ZVFHMIN-NEXT: csrr a2, vlenb
540 ; ZVFHMIN-NEXT: slli a1, a2, 1
541 ; ZVFHMIN-NEXT: sub a3, a0, a1
542 ; ZVFHMIN-NEXT: sltu a4, a0, a3
543 ; ZVFHMIN-NEXT: addi a4, a4, -1
544 ; ZVFHMIN-NEXT: and a3, a4, a3
545 ; ZVFHMIN-NEXT: srli a2, a2, 2
546 ; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma
547 ; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2
548 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
549 ; ZVFHMIN-NEXT: addi a2, sp, 16
550 ; ZVFHMIN-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
551 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20
552 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
553 ; ZVFHMIN-NEXT: vsetvli zero, a3, e32, m8, ta, ma
554 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t
555 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
556 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16
557 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB20_2
558 ; ZVFHMIN-NEXT: # %bb.1:
559 ; ZVFHMIN-NEXT: mv a0, a1
560 ; ZVFHMIN-NEXT: .LBB20_2:
561 ; ZVFHMIN-NEXT: addi a1, sp, 16
562 ; ZVFHMIN-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
563 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24
564 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
565 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
566 ; ZVFHMIN-NEXT: vmv1r.v v0, v1
567 ; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t
568 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
569 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
570 ; ZVFHMIN-NEXT: csrr a0, vlenb
571 ; ZVFHMIN-NEXT: slli a0, a0, 3
572 ; ZVFHMIN-NEXT: add sp, sp, a0
573 ; ZVFHMIN-NEXT: addi sp, sp, 16
575 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
576 ret <vscale x 32 x half> %v
579 define <vscale x 32 x half> @vfmul_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, i32 zeroext %evl) {
580 ; ZVFH-LABEL: vfmul_vv_nxv32f16_unmasked:
582 ; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma
583 ; ZVFH-NEXT: vfmul.vv v8, v8, v16
586 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16_unmasked:
588 ; ZVFHMIN-NEXT: addi sp, sp, -16
589 ; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16
590 ; ZVFHMIN-NEXT: csrr a1, vlenb
591 ; ZVFHMIN-NEXT: slli a1, a1, 3
592 ; ZVFHMIN-NEXT: sub sp, sp, a1
593 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
594 ; ZVFHMIN-NEXT: vsetvli a1, zero, e8, m4, ta, ma
595 ; ZVFHMIN-NEXT: vmset.m v24
596 ; ZVFHMIN-NEXT: csrr a2, vlenb
597 ; ZVFHMIN-NEXT: slli a1, a2, 1
598 ; ZVFHMIN-NEXT: sub a3, a0, a1
599 ; ZVFHMIN-NEXT: sltu a4, a0, a3
600 ; ZVFHMIN-NEXT: addi a4, a4, -1
601 ; ZVFHMIN-NEXT: and a3, a4, a3
602 ; ZVFHMIN-NEXT: srli a2, a2, 2
603 ; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma
604 ; ZVFHMIN-NEXT: vslidedown.vx v0, v24, a2
605 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
606 ; ZVFHMIN-NEXT: addi a2, sp, 16
607 ; ZVFHMIN-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
608 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20
609 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
610 ; ZVFHMIN-NEXT: vsetvli zero, a3, e32, m8, ta, ma
611 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t
612 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
613 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16
614 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB21_2
615 ; ZVFHMIN-NEXT: # %bb.1:
616 ; ZVFHMIN-NEXT: mv a0, a1
617 ; ZVFHMIN-NEXT: .LBB21_2:
618 ; ZVFHMIN-NEXT: addi a1, sp, 16
619 ; ZVFHMIN-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
620 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24
621 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
622 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
623 ; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16
624 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
625 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
626 ; ZVFHMIN-NEXT: csrr a0, vlenb
627 ; ZVFHMIN-NEXT: slli a0, a0, 3
628 ; ZVFHMIN-NEXT: add sp, sp, a0
629 ; ZVFHMIN-NEXT: addi sp, sp, 16
631 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
632 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
633 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
634 ret <vscale x 32 x half> %v
637 define <vscale x 32 x half> @vfmul_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
638 ; ZVFH-LABEL: vfmul_vf_nxv32f16:
640 ; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma
641 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t
644 ; ZVFHMIN-LABEL: vfmul_vf_nxv32f16:
646 ; ZVFHMIN-NEXT: vmv1r.v v1, v0
647 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
648 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
649 ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5
650 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
651 ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24
652 ; ZVFHMIN-NEXT: csrr a2, vlenb
653 ; ZVFHMIN-NEXT: slli a1, a2, 1
654 ; ZVFHMIN-NEXT: sub a3, a0, a1
655 ; ZVFHMIN-NEXT: sltu a4, a0, a3
656 ; ZVFHMIN-NEXT: addi a4, a4, -1
657 ; ZVFHMIN-NEXT: and a3, a4, a3
658 ; ZVFHMIN-NEXT: srli a2, a2, 2
659 ; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma
660 ; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2
661 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
662 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12
663 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v4
664 ; ZVFHMIN-NEXT: vsetvli zero, a3, e32, m8, ta, ma
665 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t
666 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
667 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16
668 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB22_2
669 ; ZVFHMIN-NEXT: # %bb.1:
670 ; ZVFHMIN-NEXT: mv a0, a1
671 ; ZVFHMIN-NEXT: .LBB22_2:
672 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
673 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
674 ; ZVFHMIN-NEXT: vmv1r.v v0, v1
675 ; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t
676 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
677 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
679 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
680 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
681 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
682 ret <vscale x 32 x half> %v
685 define <vscale x 32 x half> @vfmul_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {
686 ; ZVFH-LABEL: vfmul_vf_nxv32f16_unmasked:
688 ; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma
689 ; ZVFH-NEXT: vfmul.vf v8, v8, fa0
692 ; ZVFHMIN-LABEL: vfmul_vf_nxv32f16_unmasked:
694 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
695 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
696 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
697 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
698 ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v16
699 ; ZVFHMIN-NEXT: vsetvli a1, zero, e8, m4, ta, ma
700 ; ZVFHMIN-NEXT: vmset.m v16
701 ; ZVFHMIN-NEXT: csrr a2, vlenb
702 ; ZVFHMIN-NEXT: slli a1, a2, 1
703 ; ZVFHMIN-NEXT: sub a3, a0, a1
704 ; ZVFHMIN-NEXT: sltu a4, a0, a3
705 ; ZVFHMIN-NEXT: addi a4, a4, -1
706 ; ZVFHMIN-NEXT: and a3, a4, a3
707 ; ZVFHMIN-NEXT: srli a2, a2, 2
708 ; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma
709 ; ZVFHMIN-NEXT: vslidedown.vx v0, v16, a2
710 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
711 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
712 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4
713 ; ZVFHMIN-NEXT: vsetvli zero, a3, e32, m8, ta, ma
714 ; ZVFHMIN-NEXT: vfmul.vv v24, v24, v16, v0.t
715 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
716 ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24
717 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB23_2
718 ; ZVFHMIN-NEXT: # %bb.1:
719 ; ZVFHMIN-NEXT: mv a0, a1
720 ; ZVFHMIN-NEXT: .LBB23_2:
721 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
722 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
723 ; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16
724 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
725 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16
727 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
728 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
729 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
730 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
731 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
732 ret <vscale x 32 x half> %v
735 declare <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
737 define <vscale x 1 x float> @vfmul_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
738 ; CHECK-LABEL: vfmul_vv_nxv1f32:
740 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
741 ; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t
743 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
744 ret <vscale x 1 x float> %v
747 define <vscale x 1 x float> @vfmul_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, i32 zeroext %evl) {
748 ; CHECK-LABEL: vfmul_vv_nxv1f32_unmasked:
750 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
751 ; CHECK-NEXT: vfmul.vv v8, v8, v9
753 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
754 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
755 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
756 ret <vscale x 1 x float> %v
759 define <vscale x 1 x float> @vfmul_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
760 ; CHECK-LABEL: vfmul_vf_nxv1f32:
762 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
763 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
765 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
766 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
767 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
768 ret <vscale x 1 x float> %v
771 define <vscale x 1 x float> @vfmul_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {
772 ; CHECK-LABEL: vfmul_vf_nxv1f32_unmasked:
774 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
775 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
777 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
778 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
779 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
780 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
781 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
782 ret <vscale x 1 x float> %v
785 declare <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
787 define <vscale x 2 x float> @vfmul_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
788 ; CHECK-LABEL: vfmul_vv_nxv2f32:
790 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
791 ; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t
793 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
794 ret <vscale x 2 x float> %v
797 define <vscale x 2 x float> @vfmul_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, i32 zeroext %evl) {
798 ; CHECK-LABEL: vfmul_vv_nxv2f32_unmasked:
800 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
801 ; CHECK-NEXT: vfmul.vv v8, v8, v9
803 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
804 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
805 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
806 ret <vscale x 2 x float> %v
809 define <vscale x 2 x float> @vfmul_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
810 ; CHECK-LABEL: vfmul_vf_nxv2f32:
812 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
813 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
815 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
816 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
817 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
818 ret <vscale x 2 x float> %v
821 define <vscale x 2 x float> @vfmul_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {
822 ; CHECK-LABEL: vfmul_vf_nxv2f32_unmasked:
824 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
825 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
827 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
828 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
829 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
830 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
831 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
832 ret <vscale x 2 x float> %v
835 declare <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
837 define <vscale x 4 x float> @vfmul_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
838 ; CHECK-LABEL: vfmul_vv_nxv4f32:
840 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
841 ; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t
843 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
844 ret <vscale x 4 x float> %v
847 define <vscale x 4 x float> @vfmul_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, i32 zeroext %evl) {
848 ; CHECK-LABEL: vfmul_vv_nxv4f32_unmasked:
850 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
851 ; CHECK-NEXT: vfmul.vv v8, v8, v10
853 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
854 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
855 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
856 ret <vscale x 4 x float> %v
859 define <vscale x 4 x float> @vfmul_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
860 ; CHECK-LABEL: vfmul_vf_nxv4f32:
862 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
863 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
865 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
866 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
867 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
868 ret <vscale x 4 x float> %v
871 define <vscale x 4 x float> @vfmul_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {
872 ; CHECK-LABEL: vfmul_vf_nxv4f32_unmasked:
874 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
875 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
877 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
878 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
879 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
880 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
881 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
882 ret <vscale x 4 x float> %v
885 declare <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
887 define <vscale x 8 x float> @vfmul_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
888 ; CHECK-LABEL: vfmul_vv_nxv8f32:
890 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
891 ; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t
893 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
894 ret <vscale x 8 x float> %v
897 define <vscale x 8 x float> @vfmul_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, i32 zeroext %evl) {
898 ; CHECK-LABEL: vfmul_vv_nxv8f32_unmasked:
900 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
901 ; CHECK-NEXT: vfmul.vv v8, v8, v12
903 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
904 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
905 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
906 ret <vscale x 8 x float> %v
909 define <vscale x 8 x float> @vfmul_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
910 ; CHECK-LABEL: vfmul_vf_nxv8f32:
912 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
913 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
915 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
916 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
917 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
918 ret <vscale x 8 x float> %v
921 define <vscale x 8 x float> @vfmul_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {
922 ; CHECK-LABEL: vfmul_vf_nxv8f32_unmasked:
924 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
925 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
927 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
928 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
929 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
930 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
931 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
932 ret <vscale x 8 x float> %v
935 declare <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
937 define <vscale x 16 x float> @vfmul_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
938 ; CHECK-LABEL: vfmul_vv_nxv16f32:
940 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
941 ; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t
943 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
944 ret <vscale x 16 x float> %v
947 define <vscale x 16 x float> @vfmul_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, i32 zeroext %evl) {
948 ; CHECK-LABEL: vfmul_vv_nxv16f32_unmasked:
950 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
951 ; CHECK-NEXT: vfmul.vv v8, v8, v16
953 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
954 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
955 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
956 ret <vscale x 16 x float> %v
959 define <vscale x 16 x float> @vfmul_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
960 ; CHECK-LABEL: vfmul_vf_nxv16f32:
962 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
963 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
965 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
966 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
967 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
968 ret <vscale x 16 x float> %v
971 define <vscale x 16 x float> @vfmul_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {
972 ; CHECK-LABEL: vfmul_vf_nxv16f32_unmasked:
974 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
975 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
977 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
978 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
979 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
980 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
981 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
982 ret <vscale x 16 x float> %v
985 declare <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
987 define <vscale x 1 x double> @vfmul_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
988 ; CHECK-LABEL: vfmul_vv_nxv1f64:
990 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
991 ; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t
993 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
994 ret <vscale x 1 x double> %v
997 define <vscale x 1 x double> @vfmul_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, i32 zeroext %evl) {
998 ; CHECK-LABEL: vfmul_vv_nxv1f64_unmasked:
1000 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1001 ; CHECK-NEXT: vfmul.vv v8, v8, v9
1003 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1004 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1005 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
1006 ret <vscale x 1 x double> %v
1009 define <vscale x 1 x double> @vfmul_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1010 ; CHECK-LABEL: vfmul_vf_nxv1f64:
1012 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1013 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
1015 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1016 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1017 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
1018 ret <vscale x 1 x double> %v
1021 define <vscale x 1 x double> @vfmul_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {
1022 ; CHECK-LABEL: vfmul_vf_nxv1f64_unmasked:
1024 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1025 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
1027 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1028 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1029 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1030 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1031 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
1032 ret <vscale x 1 x double> %v
1035 declare <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
1037 define <vscale x 2 x double> @vfmul_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1038 ; CHECK-LABEL: vfmul_vv_nxv2f64:
1040 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1041 ; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t
1043 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
1044 ret <vscale x 2 x double> %v
1047 define <vscale x 2 x double> @vfmul_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vfmul_vv_nxv2f64_unmasked:
1050 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1051 ; CHECK-NEXT: vfmul.vv v8, v8, v10
1053 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1054 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1055 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
1056 ret <vscale x 2 x double> %v
1059 define <vscale x 2 x double> @vfmul_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1060 ; CHECK-LABEL: vfmul_vf_nxv2f64:
1062 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1063 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
1065 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1066 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1067 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
1068 ret <vscale x 2 x double> %v
1071 define <vscale x 2 x double> @vfmul_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {
1072 ; CHECK-LABEL: vfmul_vf_nxv2f64_unmasked:
1074 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1075 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
1077 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1078 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
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 double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
1082 ret <vscale x 2 x double> %v
1085 declare <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
1087 define <vscale x 4 x double> @vfmul_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1088 ; CHECK-LABEL: vfmul_vv_nxv4f64:
1090 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1091 ; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t
1093 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
1094 ret <vscale x 4 x double> %v
1097 define <vscale x 4 x double> @vfmul_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, i32 zeroext %evl) {
1098 ; CHECK-LABEL: vfmul_vv_nxv4f64_unmasked:
1100 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1101 ; CHECK-NEXT: vfmul.vv v8, v8, v12
1103 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1104 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1105 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
1106 ret <vscale x 4 x double> %v
1109 define <vscale x 4 x double> @vfmul_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1110 ; CHECK-LABEL: vfmul_vf_nxv4f64:
1112 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1113 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
1115 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1116 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1117 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
1118 ret <vscale x 4 x double> %v
1121 define <vscale x 4 x double> @vfmul_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {
1122 ; CHECK-LABEL: vfmul_vf_nxv4f64_unmasked:
1124 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1125 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
1127 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1128 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1129 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1130 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1131 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
1132 ret <vscale x 4 x double> %v
1135 declare <vscale x 7 x double> @llvm.vp.fmul.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32)
1137 define <vscale x 7 x double> @vfmul_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {
1138 ; CHECK-LABEL: vfmul_vv_nxv7f64:
1140 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1141 ; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t
1143 %v = call <vscale x 7 x double> @llvm.vp.fmul.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 %evl)
1144 ret <vscale x 7 x double> %v
1147 declare <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
1149 define <vscale x 8 x double> @vfmul_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1150 ; CHECK-LABEL: vfmul_vv_nxv8f64:
1152 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1153 ; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t
1155 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
1156 ret <vscale x 8 x double> %v
1159 define <vscale x 8 x double> @vfmul_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, i32 zeroext %evl) {
1160 ; CHECK-LABEL: vfmul_vv_nxv8f64_unmasked:
1162 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1163 ; CHECK-NEXT: vfmul.vv v8, v8, v16
1165 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1166 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1167 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
1168 ret <vscale x 8 x double> %v
1171 define <vscale x 8 x double> @vfmul_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1172 ; CHECK-LABEL: vfmul_vf_nxv8f64:
1174 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1175 ; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t
1177 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1178 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1179 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
1180 ret <vscale x 8 x double> %v
1183 define <vscale x 8 x double> @vfmul_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {
1184 ; CHECK-LABEL: vfmul_vf_nxv8f64_unmasked:
1186 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1187 ; CHECK-NEXT: vfmul.vf v8, v8, fa0
1189 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1190 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1191 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1192 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1193 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
1194 ret <vscale x 8 x double> %v