Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfmul-vp.ll
blob46b14153447cf79c9d6c93b9ad9cc4c1ad2f1689
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:
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 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
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 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
50 ; ZVFHMIN-NEXT:    ret
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:
59 ; ZVFH:       # %bb.0:
60 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
61 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
62 ; ZVFH-NEXT:    ret
64 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16:
65 ; ZVFHMIN:       # %bb.0:
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
77 ; ZVFHMIN-NEXT:    ret
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:
86 ; ZVFH:       # %bb.0:
87 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
88 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
89 ; ZVFH-NEXT:    ret
91 ; ZVFHMIN-LABEL: vfmul_vf_nxv1f16_unmasked:
92 ; ZVFHMIN:       # %bb.0:
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
104 ; ZVFHMIN-NEXT:    ret
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:
117 ; ZVFH:       # %bb.0:
118 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
119 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9, v0.t
120 ; ZVFH-NEXT:    ret
122 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16:
123 ; ZVFHMIN:       # %bb.0:
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
131 ; ZVFHMIN-NEXT:    ret
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:
138 ; ZVFH:       # %bb.0:
139 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
140 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9
141 ; ZVFH-NEXT:    ret
143 ; ZVFHMIN-LABEL: vfmul_vv_nxv2f16_unmasked:
144 ; ZVFHMIN:       # %bb.0:
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
152 ; ZVFHMIN-NEXT:    ret
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:
161 ; ZVFH:       # %bb.0:
162 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
163 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
164 ; ZVFH-NEXT:    ret
166 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16:
167 ; ZVFHMIN:       # %bb.0:
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
179 ; ZVFHMIN-NEXT:    ret
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:
188 ; ZVFH:       # %bb.0:
189 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
190 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
191 ; ZVFH-NEXT:    ret
193 ; ZVFHMIN-LABEL: vfmul_vf_nxv2f16_unmasked:
194 ; ZVFHMIN:       # %bb.0:
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
206 ; ZVFHMIN-NEXT:    ret
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:
219 ; ZVFH:       # %bb.0:
220 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
221 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9, v0.t
222 ; ZVFH-NEXT:    ret
224 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16:
225 ; ZVFHMIN:       # %bb.0:
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
233 ; ZVFHMIN-NEXT:    ret
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:
240 ; ZVFH:       # %bb.0:
241 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
242 ; ZVFH-NEXT:    vfmul.vv v8, v8, v9
243 ; ZVFH-NEXT:    ret
245 ; ZVFHMIN-LABEL: vfmul_vv_nxv4f16_unmasked:
246 ; ZVFHMIN:       # %bb.0:
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
254 ; ZVFHMIN-NEXT:    ret
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:
263 ; ZVFH:       # %bb.0:
264 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
265 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
266 ; ZVFH-NEXT:    ret
268 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16:
269 ; ZVFHMIN:       # %bb.0:
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
281 ; ZVFHMIN-NEXT:    ret
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:
290 ; ZVFH:       # %bb.0:
291 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
292 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
293 ; ZVFH-NEXT:    ret
295 ; ZVFHMIN-LABEL: vfmul_vf_nxv4f16_unmasked:
296 ; ZVFHMIN:       # %bb.0:
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
308 ; ZVFHMIN-NEXT:    ret
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:
321 ; ZVFH:       # %bb.0:
322 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
323 ; ZVFH-NEXT:    vfmul.vv v8, v8, v10, v0.t
324 ; ZVFH-NEXT:    ret
326 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16:
327 ; ZVFHMIN:       # %bb.0:
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
335 ; ZVFHMIN-NEXT:    ret
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:
342 ; ZVFH:       # %bb.0:
343 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
344 ; ZVFH-NEXT:    vfmul.vv v8, v8, v10
345 ; ZVFH-NEXT:    ret
347 ; ZVFHMIN-LABEL: vfmul_vv_nxv8f16_unmasked:
348 ; ZVFHMIN:       # %bb.0:
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
356 ; ZVFHMIN-NEXT:    ret
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:
365 ; ZVFH:       # %bb.0:
366 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
367 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
368 ; ZVFH-NEXT:    ret
370 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16:
371 ; ZVFHMIN:       # %bb.0:
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
383 ; ZVFHMIN-NEXT:    ret
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:
392 ; ZVFH:       # %bb.0:
393 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
394 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
395 ; ZVFH-NEXT:    ret
397 ; ZVFHMIN-LABEL: vfmul_vf_nxv8f16_unmasked:
398 ; ZVFHMIN:       # %bb.0:
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
410 ; ZVFHMIN-NEXT:    ret
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:
423 ; ZVFH:       # %bb.0:
424 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
425 ; ZVFH-NEXT:    vfmul.vv v8, v8, v12, v0.t
426 ; ZVFH-NEXT:    ret
428 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16:
429 ; ZVFHMIN:       # %bb.0:
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
437 ; ZVFHMIN-NEXT:    ret
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:
444 ; ZVFH:       # %bb.0:
445 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
446 ; ZVFH-NEXT:    vfmul.vv v8, v8, v12
447 ; ZVFH-NEXT:    ret
449 ; ZVFHMIN-LABEL: vfmul_vv_nxv16f16_unmasked:
450 ; ZVFHMIN:       # %bb.0:
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
458 ; ZVFHMIN-NEXT:    ret
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:
467 ; ZVFH:       # %bb.0:
468 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
469 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0, v0.t
470 ; ZVFH-NEXT:    ret
472 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16:
473 ; ZVFHMIN:       # %bb.0:
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
485 ; ZVFHMIN-NEXT:    ret
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:
494 ; ZVFH:       # %bb.0:
495 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
496 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
497 ; ZVFH-NEXT:    ret
499 ; ZVFHMIN-LABEL: vfmul_vf_nxv16f16_unmasked:
500 ; ZVFHMIN:       # %bb.0:
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
512 ; ZVFHMIN-NEXT:    ret
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:
525 ; ZVFH:       # %bb.0:
526 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
527 ; ZVFH-NEXT:    vfmul.vv v8, v8, v16, v0.t
528 ; ZVFH-NEXT:    ret
530 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16:
531 ; ZVFHMIN:       # %bb.0:
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
574 ; ZVFHMIN-NEXT:    ret
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:
581 ; ZVFH:       # %bb.0:
582 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
583 ; ZVFH-NEXT:    vfmul.vv v8, v8, v16
584 ; ZVFH-NEXT:    ret
586 ; ZVFHMIN-LABEL: vfmul_vv_nxv32f16_unmasked:
587 ; ZVFHMIN:       # %bb.0:
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
630 ; ZVFHMIN-NEXT:    ret
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:
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:    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
678 ; ZVFHMIN-NEXT:    ret
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:
687 ; ZVFH:       # %bb.0:
688 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
689 ; ZVFH-NEXT:    vfmul.vf v8, v8, fa0
690 ; ZVFH-NEXT:    ret
692 ; ZVFHMIN-LABEL: vfmul_vf_nxv32f16_unmasked:
693 ; ZVFHMIN:       # %bb.0:
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
726 ; ZVFHMIN-NEXT:    ret
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:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
741 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
742 ; CHECK-NEXT:    ret
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:
749 ; CHECK:       # %bb.0:
750 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
751 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
752 ; CHECK-NEXT:    ret
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:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
763 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
764 ; CHECK-NEXT:    ret
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:
773 ; CHECK:       # %bb.0:
774 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
775 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
776 ; CHECK-NEXT:    ret
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:
789 ; CHECK:       # %bb.0:
790 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
791 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
792 ; CHECK-NEXT:    ret
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:
799 ; CHECK:       # %bb.0:
800 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
801 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
802 ; CHECK-NEXT:    ret
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:
811 ; CHECK:       # %bb.0:
812 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
813 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
814 ; CHECK-NEXT:    ret
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:
823 ; CHECK:       # %bb.0:
824 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
825 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
826 ; CHECK-NEXT:    ret
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:
839 ; CHECK:       # %bb.0:
840 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
841 ; CHECK-NEXT:    vfmul.vv v8, v8, v10, v0.t
842 ; CHECK-NEXT:    ret
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:
849 ; CHECK:       # %bb.0:
850 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
851 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
852 ; CHECK-NEXT:    ret
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:
861 ; CHECK:       # %bb.0:
862 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
863 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
864 ; CHECK-NEXT:    ret
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:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
875 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
876 ; CHECK-NEXT:    ret
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:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
891 ; CHECK-NEXT:    vfmul.vv v8, v8, v12, v0.t
892 ; CHECK-NEXT:    ret
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:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
901 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
902 ; CHECK-NEXT:    ret
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:
911 ; CHECK:       # %bb.0:
912 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
913 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
914 ; CHECK-NEXT:    ret
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:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
925 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
926 ; CHECK-NEXT:    ret
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:
939 ; CHECK:       # %bb.0:
940 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
941 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
942 ; CHECK-NEXT:    ret
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:
949 ; CHECK:       # %bb.0:
950 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
951 ; CHECK-NEXT:    vfmul.vv v8, v8, v16
952 ; CHECK-NEXT:    ret
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:
961 ; CHECK:       # %bb.0:
962 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
963 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
964 ; CHECK-NEXT:    ret
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:
973 ; CHECK:       # %bb.0:
974 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
975 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
976 ; CHECK-NEXT:    ret
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:
989 ; CHECK:       # %bb.0:
990 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
991 ; CHECK-NEXT:    vfmul.vv v8, v8, v9, v0.t
992 ; CHECK-NEXT:    ret
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:
999 ; CHECK:       # %bb.0:
1000 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1001 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
1002 ; CHECK-NEXT:    ret
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:
1011 ; CHECK:       # %bb.0:
1012 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1013 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1014 ; CHECK-NEXT:    ret
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:
1023 ; CHECK:       # %bb.0:
1024 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1025 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1026 ; CHECK-NEXT:    ret
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:
1039 ; CHECK:       # %bb.0:
1040 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1041 ; CHECK-NEXT:    vfmul.vv v8, v8, v10, v0.t
1042 ; CHECK-NEXT:    ret
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:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1051 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
1052 ; CHECK-NEXT:    ret
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:
1061 ; CHECK:       # %bb.0:
1062 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1063 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1064 ; CHECK-NEXT:    ret
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:
1073 ; CHECK:       # %bb.0:
1074 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1075 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1076 ; CHECK-NEXT:    ret
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:
1089 ; CHECK:       # %bb.0:
1090 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1091 ; CHECK-NEXT:    vfmul.vv v8, v8, v12, v0.t
1092 ; CHECK-NEXT:    ret
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:
1099 ; CHECK:       # %bb.0:
1100 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1101 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
1102 ; CHECK-NEXT:    ret
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:
1111 ; CHECK:       # %bb.0:
1112 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1113 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1114 ; CHECK-NEXT:    ret
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:
1123 ; CHECK:       # %bb.0:
1124 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1125 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1126 ; CHECK-NEXT:    ret
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:
1139 ; CHECK:       # %bb.0:
1140 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1141 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
1142 ; CHECK-NEXT:    ret
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:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1153 ; CHECK-NEXT:    vfmul.vv v8, v8, v16, v0.t
1154 ; CHECK-NEXT:    ret
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:
1161 ; CHECK:       # %bb.0:
1162 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1163 ; CHECK-NEXT:    vfmul.vv v8, v8, v16
1164 ; CHECK-NEXT:    ret
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:
1173 ; CHECK:       # %bb.0:
1174 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1175 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t
1176 ; CHECK-NEXT:    ret
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:
1185 ; CHECK:       # %bb.0:
1186 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1187 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
1188 ; CHECK-NEXT:    ret
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