[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfmul-vp.ll
blobc1617cd36521687e2c1e5b0f8211927b1b858900
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+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:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
17 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9, v0.t
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: vfmul_vv_nxv1f16:
21 ; ZVFHMIN:       # %bb.0:
22 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
24 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
25 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
26 ; ZVFHMIN-NEXT:    vfmul.vv v9, v9, v10, v0.t
27 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
28 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
29 ; ZVFHMIN-NEXT:    ret
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:
36 ; ZVFH:       # %bb.0:
37 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
38 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9
39 ; ZVFH-NEXT:    ret
41 ; ZVFHMIN-LABEL: vfmul_vv_nxv1f16_unmasked:
42 ; ZVFHMIN:       # %bb.0:
43 ; ZVFHMIN-NEXT:    vsetvli zero, a0, 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, zero, e32, mf2, ta, ma
47 ; ZVFHMIN-NEXT:    vfmul.vv v9, v9, v10
48 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
49 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
50 ; ZVFHMIN-NEXT:    ret
51   %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> splat (i1 true), i32 %evl)
52   ret <vscale x 1 x half> %v
55 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) {
56 ; ZVFH-LABEL: vfmul_vf_nxv1f16:
57 ; ZVFH:       # %bb.0:
58 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
59 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
60 ; ZVFH-NEXT:    ret
62 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16:
63 ; ZVFHMIN:       # %bb.0:
64 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
65 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
66 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
67 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
68 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
69 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
70 ; ZVFHMIN-NEXT:    vfmul.vv v9, v10, v8, v0.t
71 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
72 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
73 ; ZVFHMIN-NEXT:    ret
74   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
75   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
76   %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)
77   ret <vscale x 1 x half> %v
80 define <vscale x 1 x half> @vfmul_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {
81 ; ZVFH-LABEL: vfmul_vf_nxv1f16_unmasked:
82 ; ZVFH:       # %bb.0:
83 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
84 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
85 ; ZVFH-NEXT:    ret
87 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16_unmasked:
88 ; ZVFHMIN:       # %bb.0:
89 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
90 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
91 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
92 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
93 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
94 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
95 ; ZVFHMIN-NEXT:    vfmul.vv v9, v10, v8
96 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
97 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
98 ; ZVFHMIN-NEXT:    ret
99   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
100   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
101   %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> splat (i1 true), i32 %evl)
102   ret <vscale x 1 x half> %v
105 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)
107 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) {
108 ; ZVFH-LABEL: vfmul_vv_nxv2f16:
109 ; ZVFH:       # %bb.0:
110 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
111 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9, v0.t
112 ; ZVFH-NEXT:    ret
114 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16:
115 ; ZVFHMIN:       # %bb.0:
116 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
117 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
118 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
119 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
120 ; ZVFHMIN-NEXT:    vfmul.vv v9, v9, v10, v0.t
121 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
122 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
123 ; ZVFHMIN-NEXT:    ret
124   %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)
125   ret <vscale x 2 x half> %v
128 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) {
129 ; ZVFH-LABEL: vfmul_vv_nxv2f16_unmasked:
130 ; ZVFH:       # %bb.0:
131 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
132 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9
133 ; ZVFH-NEXT:    ret
135 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16_unmasked:
136 ; ZVFHMIN:       # %bb.0:
137 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
138 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
139 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
140 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
141 ; ZVFHMIN-NEXT:    vfmul.vv v9, v9, v10
142 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
143 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
144 ; ZVFHMIN-NEXT:    ret
145   %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> splat (i1 true), i32 %evl)
146   ret <vscale x 2 x half> %v
149 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) {
150 ; ZVFH-LABEL: vfmul_vf_nxv2f16:
151 ; ZVFH:       # %bb.0:
152 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
153 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
154 ; ZVFH-NEXT:    ret
156 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16:
157 ; ZVFHMIN:       # %bb.0:
158 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
159 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
160 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
161 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
162 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
163 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
164 ; ZVFHMIN-NEXT:    vfmul.vv v9, v10, v8, v0.t
165 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
166 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
167 ; ZVFHMIN-NEXT:    ret
168   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
169   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
170   %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)
171   ret <vscale x 2 x half> %v
174 define <vscale x 2 x half> @vfmul_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {
175 ; ZVFH-LABEL: vfmul_vf_nxv2f16_unmasked:
176 ; ZVFH:       # %bb.0:
177 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
178 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
179 ; ZVFH-NEXT:    ret
181 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16_unmasked:
182 ; ZVFHMIN:       # %bb.0:
183 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
184 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
185 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
186 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
187 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
188 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
189 ; ZVFHMIN-NEXT:    vfmul.vv v9, v10, v8
190 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
191 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
192 ; ZVFHMIN-NEXT:    ret
193   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
194   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
195   %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> splat (i1 true), i32 %evl)
196   ret <vscale x 2 x half> %v
199 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)
201 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) {
202 ; ZVFH-LABEL: vfmul_vv_nxv4f16:
203 ; ZVFH:       # %bb.0:
204 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
205 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9, v0.t
206 ; ZVFH-NEXT:    ret
208 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16:
209 ; ZVFHMIN:       # %bb.0:
210 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
211 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
212 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
213 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
214 ; ZVFHMIN-NEXT:    vfmul.vv v10, v12, v10, v0.t
215 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
216 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
217 ; ZVFHMIN-NEXT:    ret
218   %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)
219   ret <vscale x 4 x half> %v
222 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) {
223 ; ZVFH-LABEL: vfmul_vv_nxv4f16_unmasked:
224 ; ZVFH:       # %bb.0:
225 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
226 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9
227 ; ZVFH-NEXT:    ret
229 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16_unmasked:
230 ; ZVFHMIN:       # %bb.0:
231 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
232 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
233 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
234 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
235 ; ZVFHMIN-NEXT:    vfmul.vv v10, v12, v10
236 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
237 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
238 ; ZVFHMIN-NEXT:    ret
239   %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> splat (i1 true), i32 %evl)
240   ret <vscale x 4 x half> %v
243 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) {
244 ; ZVFH-LABEL: vfmul_vf_nxv4f16:
245 ; ZVFH:       # %bb.0:
246 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
247 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
248 ; ZVFH-NEXT:    ret
250 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16:
251 ; ZVFHMIN:       # %bb.0:
252 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
253 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
254 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
255 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
256 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
257 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
258 ; ZVFHMIN-NEXT:    vfmul.vv v10, v10, v12, v0.t
259 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
260 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
261 ; ZVFHMIN-NEXT:    ret
262   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
263   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
264   %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)
265   ret <vscale x 4 x half> %v
268 define <vscale x 4 x half> @vfmul_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {
269 ; ZVFH-LABEL: vfmul_vf_nxv4f16_unmasked:
270 ; ZVFH:       # %bb.0:
271 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
272 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
273 ; ZVFH-NEXT:    ret
275 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16_unmasked:
276 ; ZVFHMIN:       # %bb.0:
277 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
278 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
279 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
280 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
281 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
282 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
283 ; ZVFHMIN-NEXT:    vfmul.vv v10, v10, v12
284 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
285 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
286 ; ZVFHMIN-NEXT:    ret
287   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
288   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
289   %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> splat (i1 true), i32 %evl)
290   ret <vscale x 4 x half> %v
293 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)
295 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) {
296 ; ZVFH-LABEL: vfmul_vv_nxv8f16:
297 ; ZVFH:       # %bb.0:
298 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
299 ; ZVFH-NEXT:    vfmul.vv v8, v8, v10, v0.t
300 ; ZVFH-NEXT:    ret
302 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16:
303 ; ZVFHMIN:       # %bb.0:
304 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
305 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
306 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
307 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
308 ; ZVFHMIN-NEXT:    vfmul.vv v12, v16, v12, v0.t
309 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
310 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
311 ; ZVFHMIN-NEXT:    ret
312   %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)
313   ret <vscale x 8 x half> %v
316 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) {
317 ; ZVFH-LABEL: vfmul_vv_nxv8f16_unmasked:
318 ; ZVFH:       # %bb.0:
319 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
320 ; ZVFH-NEXT:    vfmul.vv v8, v8, v10
321 ; ZVFH-NEXT:    ret
323 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16_unmasked:
324 ; ZVFHMIN:       # %bb.0:
325 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
326 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
327 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
328 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
329 ; ZVFHMIN-NEXT:    vfmul.vv v12, v16, v12
330 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
331 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
332 ; ZVFHMIN-NEXT:    ret
333   %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> splat (i1 true), i32 %evl)
334   ret <vscale x 8 x half> %v
337 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) {
338 ; ZVFH-LABEL: vfmul_vf_nxv8f16:
339 ; ZVFH:       # %bb.0:
340 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
341 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
342 ; ZVFH-NEXT:    ret
344 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16:
345 ; ZVFHMIN:       # %bb.0:
346 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
347 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
348 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
349 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
350 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
351 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
352 ; ZVFHMIN-NEXT:    vfmul.vv v12, v12, v16, v0.t
353 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
354 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
355 ; ZVFHMIN-NEXT:    ret
356   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
357   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
358   %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)
359   ret <vscale x 8 x half> %v
362 define <vscale x 8 x half> @vfmul_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {
363 ; ZVFH-LABEL: vfmul_vf_nxv8f16_unmasked:
364 ; ZVFH:       # %bb.0:
365 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
366 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
367 ; ZVFH-NEXT:    ret
369 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16_unmasked:
370 ; ZVFHMIN:       # %bb.0:
371 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
372 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
373 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
374 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
375 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
376 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
377 ; ZVFHMIN-NEXT:    vfmul.vv v12, v12, v16
378 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
379 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
380 ; ZVFHMIN-NEXT:    ret
381   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
382   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
383   %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> splat (i1 true), i32 %evl)
384   ret <vscale x 8 x half> %v
387 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)
389 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) {
390 ; ZVFH-LABEL: vfmul_vv_nxv16f16:
391 ; ZVFH:       # %bb.0:
392 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
393 ; ZVFH-NEXT:    vfmul.vv v8, v8, v12, v0.t
394 ; ZVFH-NEXT:    ret
396 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16:
397 ; ZVFHMIN:       # %bb.0:
398 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
399 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
400 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
401 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
402 ; ZVFHMIN-NEXT:    vfmul.vv v16, v24, v16, v0.t
403 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
404 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
405 ; ZVFHMIN-NEXT:    ret
406   %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)
407   ret <vscale x 16 x half> %v
410 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) {
411 ; ZVFH-LABEL: vfmul_vv_nxv16f16_unmasked:
412 ; ZVFH:       # %bb.0:
413 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
414 ; ZVFH-NEXT:    vfmul.vv v8, v8, v12
415 ; ZVFH-NEXT:    ret
417 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16_unmasked:
418 ; ZVFHMIN:       # %bb.0:
419 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
420 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
421 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
422 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
423 ; ZVFHMIN-NEXT:    vfmul.vv v16, v24, v16
424 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
425 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
426 ; ZVFHMIN-NEXT:    ret
427   %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> splat (i1 true), i32 %evl)
428   ret <vscale x 16 x half> %v
431 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) {
432 ; ZVFH-LABEL: vfmul_vf_nxv16f16:
433 ; ZVFH:       # %bb.0:
434 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
435 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
436 ; ZVFH-NEXT:    ret
438 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16:
439 ; ZVFHMIN:       # %bb.0:
440 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
441 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
442 ; ZVFHMIN-NEXT:    vmv.v.x v12, a1
443 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
444 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
445 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
446 ; ZVFHMIN-NEXT:    vfmul.vv v16, v16, v24, v0.t
447 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
448 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
449 ; ZVFHMIN-NEXT:    ret
450   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
451   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
452   %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)
453   ret <vscale x 16 x half> %v
456 define <vscale x 16 x half> @vfmul_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {
457 ; ZVFH-LABEL: vfmul_vf_nxv16f16_unmasked:
458 ; ZVFH:       # %bb.0:
459 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
460 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
461 ; ZVFH-NEXT:    ret
463 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16_unmasked:
464 ; ZVFHMIN:       # %bb.0:
465 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
466 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
467 ; ZVFHMIN-NEXT:    vmv.v.x v12, a1
468 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
469 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
470 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
471 ; ZVFHMIN-NEXT:    vfmul.vv v16, v16, v24
472 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
473 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
474 ; ZVFHMIN-NEXT:    ret
475   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
476   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
477   %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> splat (i1 true), i32 %evl)
478   ret <vscale x 16 x half> %v
481 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)
483 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) {
484 ; ZVFH-LABEL: vfmul_vv_nxv32f16:
485 ; ZVFH:       # %bb.0:
486 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
487 ; ZVFH-NEXT:    vfmul.vv v8, v8, v16, v0.t
488 ; ZVFH-NEXT:    ret
490 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16:
491 ; ZVFHMIN:       # %bb.0:
492 ; ZVFHMIN-NEXT:    addi sp, sp, -16
493 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
494 ; ZVFHMIN-NEXT:    csrr a1, vlenb
495 ; ZVFHMIN-NEXT:    slli a1, a1, 3
496 ; ZVFHMIN-NEXT:    mv a2, a1
497 ; ZVFHMIN-NEXT:    slli a1, a1, 1
498 ; ZVFHMIN-NEXT:    add a1, a1, a2
499 ; ZVFHMIN-NEXT:    sub sp, sp, a1
500 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
501 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
502 ; ZVFHMIN-NEXT:    vmv1r.v v7, v0
503 ; ZVFHMIN-NEXT:    csrr a1, vlenb
504 ; ZVFHMIN-NEXT:    slli a1, a1, 4
505 ; ZVFHMIN-NEXT:    add a1, sp, a1
506 ; ZVFHMIN-NEXT:    addi a1, a1, 16
507 ; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
508 ; ZVFHMIN-NEXT:    csrr a2, vlenb
509 ; ZVFHMIN-NEXT:    slli a1, a2, 1
510 ; ZVFHMIN-NEXT:    srli a2, a2, 2
511 ; ZVFHMIN-NEXT:    sub a3, a0, a1
512 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
513 ; ZVFHMIN-NEXT:    sltu a2, a0, a3
514 ; ZVFHMIN-NEXT:    addi a2, a2, -1
515 ; ZVFHMIN-NEXT:    and a2, a2, a3
516 ; ZVFHMIN-NEXT:    vmv4r.v v8, v16
517 ; ZVFHMIN-NEXT:    csrr a3, vlenb
518 ; ZVFHMIN-NEXT:    slli a3, a3, 3
519 ; ZVFHMIN-NEXT:    add a3, sp, a3
520 ; ZVFHMIN-NEXT:    addi a3, a3, 16
521 ; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
522 ; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
523 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
524 ; ZVFHMIN-NEXT:    addi a2, sp, 16
525 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
526 ; ZVFHMIN-NEXT:    csrr a2, vlenb
527 ; ZVFHMIN-NEXT:    slli a2, a2, 4
528 ; ZVFHMIN-NEXT:    add a2, sp, a2
529 ; ZVFHMIN-NEXT:    addi a2, a2, 16
530 ; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
531 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
532 ; ZVFHMIN-NEXT:    addi a2, sp, 16
533 ; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
534 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
535 ; ZVFHMIN-NEXT:    vfmul.vv v16, v8, v16, v0.t
536 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
537 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
538 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB20_2
539 ; ZVFHMIN-NEXT:  # %bb.1:
540 ; ZVFHMIN-NEXT:    mv a0, a1
541 ; ZVFHMIN-NEXT:  .LBB20_2:
542 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
543 ; ZVFHMIN-NEXT:    csrr a1, vlenb
544 ; ZVFHMIN-NEXT:    slli a1, a1, 3
545 ; ZVFHMIN-NEXT:    add a1, sp, a1
546 ; ZVFHMIN-NEXT:    addi a1, a1, 16
547 ; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
548 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
549 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
550 ; ZVFHMIN-NEXT:    addi a0, sp, 16
551 ; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
552 ; ZVFHMIN-NEXT:    csrr a0, vlenb
553 ; ZVFHMIN-NEXT:    slli a0, a0, 4
554 ; ZVFHMIN-NEXT:    add a0, sp, a0
555 ; ZVFHMIN-NEXT:    addi a0, a0, 16
556 ; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
557 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
558 ; ZVFHMIN-NEXT:    addi a0, sp, 16
559 ; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
560 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
561 ; ZVFHMIN-NEXT:    vfmul.vv v16, v24, v16, v0.t
562 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
563 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
564 ; ZVFHMIN-NEXT:    csrr a0, vlenb
565 ; ZVFHMIN-NEXT:    slli a0, a0, 3
566 ; ZVFHMIN-NEXT:    mv a1, a0
567 ; ZVFHMIN-NEXT:    slli a0, a0, 1
568 ; ZVFHMIN-NEXT:    add a0, a0, a1
569 ; ZVFHMIN-NEXT:    add sp, sp, a0
570 ; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
571 ; ZVFHMIN-NEXT:    addi sp, sp, 16
572 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
573 ; ZVFHMIN-NEXT:    ret
574   %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)
575   ret <vscale x 32 x half> %v
578 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) {
579 ; ZVFH-LABEL: vfmul_vv_nxv32f16_unmasked:
580 ; ZVFH:       # %bb.0:
581 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
582 ; ZVFH-NEXT:    vfmul.vv v8, v8, v16
583 ; ZVFH-NEXT:    ret
585 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16_unmasked:
586 ; ZVFHMIN:       # %bb.0:
587 ; ZVFHMIN-NEXT:    addi sp, sp, -16
588 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
589 ; ZVFHMIN-NEXT:    csrr a1, vlenb
590 ; ZVFHMIN-NEXT:    slli a1, a1, 3
591 ; ZVFHMIN-NEXT:    sub sp, sp, a1
592 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
593 ; ZVFHMIN-NEXT:    csrr a2, vlenb
594 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
595 ; ZVFHMIN-NEXT:    vmset.m v24
596 ; ZVFHMIN-NEXT:    slli a1, a2, 1
597 ; ZVFHMIN-NEXT:    srli a2, a2, 2
598 ; ZVFHMIN-NEXT:    sub a3, a0, a1
599 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
600 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
601 ; ZVFHMIN-NEXT:    sltu a2, a0, a3
602 ; ZVFHMIN-NEXT:    addi a2, a2, -1
603 ; ZVFHMIN-NEXT:    and a2, a2, a3
604 ; ZVFHMIN-NEXT:    addi a3, sp, 16
605 ; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
606 ; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
607 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
608 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
609 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
610 ; ZVFHMIN-NEXT:    vfmul.vv v16, v16, v24, v0.t
611 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
612 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
613 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB21_2
614 ; ZVFHMIN-NEXT:  # %bb.1:
615 ; ZVFHMIN-NEXT:    mv a0, a1
616 ; ZVFHMIN-NEXT:  .LBB21_2:
617 ; ZVFHMIN-NEXT:    addi a1, sp, 16
618 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
619 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
620 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
621 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
622 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
623 ; ZVFHMIN-NEXT:    vfmul.vv v16, v24, v16
624 ; ZVFHMIN-NEXT:    vsetvli zero, 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:    .cfi_def_cfa sp, 16
630 ; ZVFHMIN-NEXT:    addi sp, sp, 16
631 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
632 ; ZVFHMIN-NEXT:    ret
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> splat (i1 true), 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:
639 ; ZVFH:       # %bb.0:
640 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
641 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
642 ; ZVFH-NEXT:    ret
644 ; ZVFHMIN-LABEL: vfmul_vf_nxv32f16:
645 ; ZVFHMIN:       # %bb.0:
646 ; ZVFHMIN-NEXT:    addi sp, sp, -16
647 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
648 ; ZVFHMIN-NEXT:    csrr a1, vlenb
649 ; ZVFHMIN-NEXT:    slli a1, a1, 3
650 ; ZVFHMIN-NEXT:    mv a2, a1
651 ; ZVFHMIN-NEXT:    slli a1, a1, 1
652 ; ZVFHMIN-NEXT:    add a1, a1, a2
653 ; ZVFHMIN-NEXT:    sub sp, sp, a1
654 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
655 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
656 ; ZVFHMIN-NEXT:    vmv1r.v v7, v0
657 ; ZVFHMIN-NEXT:    vmv8r.v v16, v8
658 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
659 ; ZVFHMIN-NEXT:    csrr a2, vlenb
660 ; ZVFHMIN-NEXT:    vmv.v.x v8, a1
661 ; ZVFHMIN-NEXT:    slli a1, a2, 1
662 ; ZVFHMIN-NEXT:    srli a2, a2, 2
663 ; ZVFHMIN-NEXT:    sub a3, a0, a1
664 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
665 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
666 ; ZVFHMIN-NEXT:    sltu a2, a0, a3
667 ; ZVFHMIN-NEXT:    addi a2, a2, -1
668 ; ZVFHMIN-NEXT:    and a2, a2, a3
669 ; ZVFHMIN-NEXT:    csrr a3, vlenb
670 ; ZVFHMIN-NEXT:    slli a3, a3, 3
671 ; ZVFHMIN-NEXT:    add a3, sp, a3
672 ; ZVFHMIN-NEXT:    addi a3, a3, 16
673 ; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
674 ; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
675 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
676 ; ZVFHMIN-NEXT:    vmv4r.v v8, v16
677 ; ZVFHMIN-NEXT:    csrr a2, vlenb
678 ; ZVFHMIN-NEXT:    slli a2, a2, 4
679 ; ZVFHMIN-NEXT:    add a2, sp, a2
680 ; ZVFHMIN-NEXT:    addi a2, a2, 16
681 ; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
682 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
683 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
684 ; ZVFHMIN-NEXT:    vfmul.vv v24, v8, v24, v0.t
685 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
686 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
687 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB22_2
688 ; ZVFHMIN-NEXT:  # %bb.1:
689 ; ZVFHMIN-NEXT:    mv a0, a1
690 ; ZVFHMIN-NEXT:  .LBB22_2:
691 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
692 ; ZVFHMIN-NEXT:    csrr a1, vlenb
693 ; ZVFHMIN-NEXT:    slli a1, a1, 4
694 ; ZVFHMIN-NEXT:    add a1, sp, a1
695 ; ZVFHMIN-NEXT:    addi a1, a1, 16
696 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
697 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
698 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
699 ; ZVFHMIN-NEXT:    addi a0, sp, 16
700 ; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
701 ; ZVFHMIN-NEXT:    csrr a0, vlenb
702 ; ZVFHMIN-NEXT:    slli a0, a0, 3
703 ; ZVFHMIN-NEXT:    add a0, sp, a0
704 ; ZVFHMIN-NEXT:    addi a0, a0, 16
705 ; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
706 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
707 ; ZVFHMIN-NEXT:    vmv8r.v v24, v16
708 ; ZVFHMIN-NEXT:    addi a0, sp, 16
709 ; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
710 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
711 ; ZVFHMIN-NEXT:    vfmul.vv v24, v16, v24, v0.t
712 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
713 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
714 ; ZVFHMIN-NEXT:    csrr a0, vlenb
715 ; ZVFHMIN-NEXT:    slli a0, a0, 3
716 ; ZVFHMIN-NEXT:    mv a1, a0
717 ; ZVFHMIN-NEXT:    slli a0, a0, 1
718 ; ZVFHMIN-NEXT:    add a0, a0, a1
719 ; ZVFHMIN-NEXT:    add sp, sp, a0
720 ; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
721 ; ZVFHMIN-NEXT:    addi sp, sp, 16
722 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
723 ; ZVFHMIN-NEXT:    ret
724   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
725   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
726   %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)
727   ret <vscale x 32 x half> %v
730 define <vscale x 32 x half> @vfmul_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {
731 ; ZVFH-LABEL: vfmul_vf_nxv32f16_unmasked:
732 ; ZVFH:       # %bb.0:
733 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
734 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
735 ; ZVFH-NEXT:    ret
737 ; ZVFHMIN-LABEL: vfmul_vf_nxv32f16_unmasked:
738 ; ZVFHMIN:       # %bb.0:
739 ; ZVFHMIN-NEXT:    addi sp, sp, -16
740 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
741 ; ZVFHMIN-NEXT:    csrr a1, vlenb
742 ; ZVFHMIN-NEXT:    slli a1, a1, 3
743 ; ZVFHMIN-NEXT:    sub sp, sp, a1
744 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
745 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
746 ; ZVFHMIN-NEXT:    csrr a2, vlenb
747 ; ZVFHMIN-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
748 ; ZVFHMIN-NEXT:    vmset.m v24
749 ; ZVFHMIN-NEXT:    vmv.v.x v16, a1
750 ; ZVFHMIN-NEXT:    slli a1, a2, 1
751 ; ZVFHMIN-NEXT:    srli a2, a2, 2
752 ; ZVFHMIN-NEXT:    sub a3, a0, a1
753 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
754 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
755 ; ZVFHMIN-NEXT:    sltu a2, a0, a3
756 ; ZVFHMIN-NEXT:    addi a2, a2, -1
757 ; ZVFHMIN-NEXT:    and a2, a2, a3
758 ; ZVFHMIN-NEXT:    addi a3, sp, 16
759 ; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
760 ; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
761 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
762 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
763 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
764 ; ZVFHMIN-NEXT:    vfmul.vv v16, v16, v24, v0.t
765 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
766 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
767 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB23_2
768 ; ZVFHMIN-NEXT:  # %bb.1:
769 ; ZVFHMIN-NEXT:    mv a0, a1
770 ; ZVFHMIN-NEXT:  .LBB23_2:
771 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
772 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
773 ; ZVFHMIN-NEXT:    addi a0, sp, 16
774 ; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
775 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
776 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
777 ; ZVFHMIN-NEXT:    vfmul.vv v16, v16, v24
778 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
779 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
780 ; ZVFHMIN-NEXT:    csrr a0, vlenb
781 ; ZVFHMIN-NEXT:    slli a0, a0, 3
782 ; ZVFHMIN-NEXT:    add sp, sp, a0
783 ; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
784 ; ZVFHMIN-NEXT:    addi sp, sp, 16
785 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
786 ; ZVFHMIN-NEXT:    ret
787   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
788   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
789   %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> splat (i1 true), i32 %evl)
790   ret <vscale x 32 x half> %v
793 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)
795 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) {
796 ; CHECK-LABEL: vfmul_vv_nxv1f32:
797 ; CHECK:       # %bb.0:
798 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
799 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
800 ; CHECK-NEXT:    ret
801   %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)
802   ret <vscale x 1 x float> %v
805 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) {
806 ; CHECK-LABEL: vfmul_vv_nxv1f32_unmasked:
807 ; CHECK:       # %bb.0:
808 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
809 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
810 ; CHECK-NEXT:    ret
811   %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> splat (i1 true), i32 %evl)
812   ret <vscale x 1 x float> %v
815 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) {
816 ; CHECK-LABEL: vfmul_vf_nxv1f32:
817 ; CHECK:       # %bb.0:
818 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
819 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
820 ; CHECK-NEXT:    ret
821   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
822   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
823   %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)
824   ret <vscale x 1 x float> %v
827 define <vscale x 1 x float> @vfmul_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {
828 ; CHECK-LABEL: vfmul_vf_nxv1f32_unmasked:
829 ; CHECK:       # %bb.0:
830 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
831 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
832 ; CHECK-NEXT:    ret
833   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
834   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
835   %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> splat (i1 true), i32 %evl)
836   ret <vscale x 1 x float> %v
839 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)
841 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) {
842 ; CHECK-LABEL: vfmul_vv_nxv2f32:
843 ; CHECK:       # %bb.0:
844 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
845 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
846 ; CHECK-NEXT:    ret
847   %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)
848   ret <vscale x 2 x float> %v
851 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) {
852 ; CHECK-LABEL: vfmul_vv_nxv2f32_unmasked:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
855 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
856 ; CHECK-NEXT:    ret
857   %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> splat (i1 true), i32 %evl)
858   ret <vscale x 2 x float> %v
861 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) {
862 ; CHECK-LABEL: vfmul_vf_nxv2f32:
863 ; CHECK:       # %bb.0:
864 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
865 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
866 ; CHECK-NEXT:    ret
867   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
868   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
869   %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)
870   ret <vscale x 2 x float> %v
873 define <vscale x 2 x float> @vfmul_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {
874 ; CHECK-LABEL: vfmul_vf_nxv2f32_unmasked:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
877 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
878 ; CHECK-NEXT:    ret
879   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
880   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
881   %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> splat (i1 true), i32 %evl)
882   ret <vscale x 2 x float> %v
885 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)
887 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) {
888 ; CHECK-LABEL: vfmul_vv_nxv4f32:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
891 ; CHECK-NEXT:    vfmul.vv v8, v8, v10, v0.t
892 ; CHECK-NEXT:    ret
893   %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)
894   ret <vscale x 4 x float> %v
897 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) {
898 ; CHECK-LABEL: vfmul_vv_nxv4f32_unmasked:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
901 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
902 ; CHECK-NEXT:    ret
903   %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> splat (i1 true), i32 %evl)
904   ret <vscale x 4 x float> %v
907 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) {
908 ; CHECK-LABEL: vfmul_vf_nxv4f32:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
911 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
912 ; CHECK-NEXT:    ret
913   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
914   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
915   %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)
916   ret <vscale x 4 x float> %v
919 define <vscale x 4 x float> @vfmul_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {
920 ; CHECK-LABEL: vfmul_vf_nxv4f32_unmasked:
921 ; CHECK:       # %bb.0:
922 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
923 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
924 ; CHECK-NEXT:    ret
925   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
926   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
927   %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> splat (i1 true), i32 %evl)
928   ret <vscale x 4 x float> %v
931 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)
933 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) {
934 ; CHECK-LABEL: vfmul_vv_nxv8f32:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
937 ; CHECK-NEXT:    vfmul.vv v8, v8, v12, v0.t
938 ; CHECK-NEXT:    ret
939   %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)
940   ret <vscale x 8 x float> %v
943 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) {
944 ; CHECK-LABEL: vfmul_vv_nxv8f32_unmasked:
945 ; CHECK:       # %bb.0:
946 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
947 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
948 ; CHECK-NEXT:    ret
949   %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> splat (i1 true), i32 %evl)
950   ret <vscale x 8 x float> %v
953 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) {
954 ; CHECK-LABEL: vfmul_vf_nxv8f32:
955 ; CHECK:       # %bb.0:
956 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
957 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
958 ; CHECK-NEXT:    ret
959   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
960   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
961   %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)
962   ret <vscale x 8 x float> %v
965 define <vscale x 8 x float> @vfmul_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {
966 ; CHECK-LABEL: vfmul_vf_nxv8f32_unmasked:
967 ; CHECK:       # %bb.0:
968 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
969 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
970 ; CHECK-NEXT:    ret
971   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
972   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
973   %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> splat (i1 true), i32 %evl)
974   ret <vscale x 8 x float> %v
977 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)
979 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) {
980 ; CHECK-LABEL: vfmul_vv_nxv16f32:
981 ; CHECK:       # %bb.0:
982 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
983 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
984 ; CHECK-NEXT:    ret
985   %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)
986   ret <vscale x 16 x float> %v
989 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) {
990 ; CHECK-LABEL: vfmul_vv_nxv16f32_unmasked:
991 ; CHECK:       # %bb.0:
992 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
993 ; CHECK-NEXT:    vfmul.vv v8, v8, v16
994 ; CHECK-NEXT:    ret
995   %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> splat (i1 true), i32 %evl)
996   ret <vscale x 16 x float> %v
999 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) {
1000 ; CHECK-LABEL: vfmul_vf_nxv16f32:
1001 ; CHECK:       # %bb.0:
1002 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1003 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1004 ; CHECK-NEXT:    ret
1005   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1006   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1007   %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)
1008   ret <vscale x 16 x float> %v
1011 define <vscale x 16 x float> @vfmul_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {
1012 ; CHECK-LABEL: vfmul_vf_nxv16f32_unmasked:
1013 ; CHECK:       # %bb.0:
1014 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1015 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1016 ; CHECK-NEXT:    ret
1017   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1018   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1019   %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> splat (i1 true), i32 %evl)
1020   ret <vscale x 16 x float> %v
1023 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)
1025 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) {
1026 ; CHECK-LABEL: vfmul_vv_nxv1f64:
1027 ; CHECK:       # %bb.0:
1028 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1029 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
1030 ; CHECK-NEXT:    ret
1031   %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)
1032   ret <vscale x 1 x double> %v
1035 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) {
1036 ; CHECK-LABEL: vfmul_vv_nxv1f64_unmasked:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1039 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
1040 ; CHECK-NEXT:    ret
1041   %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> splat (i1 true), i32 %evl)
1042   ret <vscale x 1 x double> %v
1045 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) {
1046 ; CHECK-LABEL: vfmul_vf_nxv1f64:
1047 ; CHECK:       # %bb.0:
1048 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1049 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1050 ; CHECK-NEXT:    ret
1051   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1052   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1053   %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)
1054   ret <vscale x 1 x double> %v
1057 define <vscale x 1 x double> @vfmul_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {
1058 ; CHECK-LABEL: vfmul_vf_nxv1f64_unmasked:
1059 ; CHECK:       # %bb.0:
1060 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1061 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1062 ; CHECK-NEXT:    ret
1063   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1064   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1065   %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> splat (i1 true), i32 %evl)
1066   ret <vscale x 1 x double> %v
1069 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)
1071 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) {
1072 ; CHECK-LABEL: vfmul_vv_nxv2f64:
1073 ; CHECK:       # %bb.0:
1074 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1075 ; CHECK-NEXT:    vfmul.vv v8, v8, v10, v0.t
1076 ; CHECK-NEXT:    ret
1077   %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)
1078   ret <vscale x 2 x double> %v
1081 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) {
1082 ; CHECK-LABEL: vfmul_vv_nxv2f64_unmasked:
1083 ; CHECK:       # %bb.0:
1084 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1085 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
1086 ; CHECK-NEXT:    ret
1087   %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> splat (i1 true), i32 %evl)
1088   ret <vscale x 2 x double> %v
1091 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) {
1092 ; CHECK-LABEL: vfmul_vf_nxv2f64:
1093 ; CHECK:       # %bb.0:
1094 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1095 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1096 ; CHECK-NEXT:    ret
1097   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1098   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1099   %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)
1100   ret <vscale x 2 x double> %v
1103 define <vscale x 2 x double> @vfmul_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {
1104 ; CHECK-LABEL: vfmul_vf_nxv2f64_unmasked:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1107 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1108 ; CHECK-NEXT:    ret
1109   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1110   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1111   %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> splat (i1 true), i32 %evl)
1112   ret <vscale x 2 x double> %v
1115 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)
1117 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) {
1118 ; CHECK-LABEL: vfmul_vv_nxv4f64:
1119 ; CHECK:       # %bb.0:
1120 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1121 ; CHECK-NEXT:    vfmul.vv v8, v8, v12, v0.t
1122 ; CHECK-NEXT:    ret
1123   %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)
1124   ret <vscale x 4 x double> %v
1127 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) {
1128 ; CHECK-LABEL: vfmul_vv_nxv4f64_unmasked:
1129 ; CHECK:       # %bb.0:
1130 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1131 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
1132 ; CHECK-NEXT:    ret
1133   %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> splat (i1 true), i32 %evl)
1134   ret <vscale x 4 x double> %v
1137 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) {
1138 ; CHECK-LABEL: vfmul_vf_nxv4f64:
1139 ; CHECK:       # %bb.0:
1140 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1141 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1142 ; CHECK-NEXT:    ret
1143   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1144   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1145   %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)
1146   ret <vscale x 4 x double> %v
1149 define <vscale x 4 x double> @vfmul_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {
1150 ; CHECK-LABEL: vfmul_vf_nxv4f64_unmasked:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1153 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1154 ; CHECK-NEXT:    ret
1155   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1156   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1157   %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> splat (i1 true), i32 %evl)
1158   ret <vscale x 4 x double> %v
1161 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)
1163 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) {
1164 ; CHECK-LABEL: vfmul_vv_nxv7f64:
1165 ; CHECK:       # %bb.0:
1166 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1167 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
1168 ; CHECK-NEXT:    ret
1169   %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)
1170   ret <vscale x 7 x double> %v
1173 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)
1175 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) {
1176 ; CHECK-LABEL: vfmul_vv_nxv8f64:
1177 ; CHECK:       # %bb.0:
1178 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1179 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
1180 ; CHECK-NEXT:    ret
1181   %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)
1182   ret <vscale x 8 x double> %v
1185 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) {
1186 ; CHECK-LABEL: vfmul_vv_nxv8f64_unmasked:
1187 ; CHECK:       # %bb.0:
1188 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1189 ; CHECK-NEXT:    vfmul.vv v8, v8, v16
1190 ; CHECK-NEXT:    ret
1191   %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> splat (i1 true), i32 %evl)
1192   ret <vscale x 8 x double> %v
1195 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) {
1196 ; CHECK-LABEL: vfmul_vf_nxv8f64:
1197 ; CHECK:       # %bb.0:
1198 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1199 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1200 ; CHECK-NEXT:    ret
1201   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1202   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1203   %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)
1204   ret <vscale x 8 x double> %v
1207 define <vscale x 8 x double> @vfmul_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {
1208 ; CHECK-LABEL: vfmul_vf_nxv8f64_unmasked:
1209 ; CHECK:       # %bb.0:
1210 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1211 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1212 ; CHECK-NEXT:    ret
1213   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1214   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1215   %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> splat (i1 true), i32 %evl)
1216   ret <vscale x 8 x double> %v