[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfmul-constrained-sdnode.ll
blobd5e96c88f9388771f31a919d49aaf8df33bb9b2f
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
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
7 declare <1 x half> @llvm.experimental.constrained.fmul.v1f16(<1 x half>, <1 x half>, metadata, metadata)
8 define <1 x half> @vfmul_vv_v1f16(<1 x half> %va, <1 x half> %vb) strictfp {
9 ; CHECK-LABEL: vfmul_vv_v1f16:
10 ; CHECK:       # %bb.0: # %entry
11 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
12 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
13 ; CHECK-NEXT:    ret
14 entry:
15   %vc = call <1 x half> @llvm.experimental.constrained.fmul.v1f16(<1 x half> %va, <1 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
16   ret <1 x half> %vc
19 define <1 x half> @vfmul_vf_v1f16(<1 x half> %va, half %b) strictfp {
20 ; CHECK-LABEL: vfmul_vf_v1f16:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
23 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
24 ; CHECK-NEXT:    ret
25   %head = insertelement <1 x half> poison, half %b, i32 0
26   %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer
27   %vc = call <1 x half> @llvm.experimental.constrained.fmul.v1f16(<1 x half> %va, <1 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
28   ret <1 x half> %vc
31 declare <2 x half> @llvm.experimental.constrained.fmul.v2f16(<2 x half>, <2 x half>, metadata, metadata)
32 define <2 x half> @vfmul_vv_v2f16(<2 x half> %va, <2 x half> %vb) strictfp {
33 ; CHECK-LABEL: vfmul_vv_v2f16:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
36 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
37 ; CHECK-NEXT:    ret
38 entry:
39   %vc = call <2 x half> @llvm.experimental.constrained.fmul.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
40   ret <2 x half> %vc
43 define <2 x half> @vfmul_vf_v2f16(<2 x half> %va, half %b) strictfp {
44 ; CHECK-LABEL: vfmul_vf_v2f16:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
47 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
48 ; CHECK-NEXT:    ret
49   %head = insertelement <2 x half> poison, half %b, i32 0
50   %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
51   %vc = call <2 x half> @llvm.experimental.constrained.fmul.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
52   ret <2 x half> %vc
55 declare <4 x half> @llvm.experimental.constrained.fmul.v4f16(<4 x half>, <4 x half>, metadata, metadata)
56 define <4 x half> @vfmul_vv_v4f16(<4 x half> %va, <4 x half> %vb) strictfp {
57 ; CHECK-LABEL: vfmul_vv_v4f16:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
60 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
61 ; CHECK-NEXT:    ret
62 entry:
63   %vc = call <4 x half> @llvm.experimental.constrained.fmul.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
64   ret <4 x half> %vc
67 define <4 x half> @vfmul_vf_v4f16(<4 x half> %va, half %b) strictfp {
68 ; CHECK-LABEL: vfmul_vf_v4f16:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
71 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
72 ; CHECK-NEXT:    ret
73   %head = insertelement <4 x half> poison, half %b, i32 0
74   %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
75   %vc = call <4 x half> @llvm.experimental.constrained.fmul.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
76   ret <4 x half> %vc
79 declare <8 x half> @llvm.experimental.constrained.fmul.v8f16(<8 x half>, <8 x half>, metadata, metadata)
80 define <8 x half> @vfmul_vv_v8f16(<8 x half> %va, <8 x half> %vb) strictfp {
81 ; CHECK-LABEL: vfmul_vv_v8f16:
82 ; CHECK:       # %bb.0: # %entry
83 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
84 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
85 ; CHECK-NEXT:    ret
86 entry:
87   %vc = call <8 x half> @llvm.experimental.constrained.fmul.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
88   ret <8 x half> %vc
91 define <8 x half> @vfmul_vf_v8f16(<8 x half> %va, half %b) strictfp {
92 ; CHECK-LABEL: vfmul_vf_v8f16:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
95 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
96 ; CHECK-NEXT:    ret
97   %head = insertelement <8 x half> poison, half %b, i32 0
98   %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
99   %vc = call <8 x half> @llvm.experimental.constrained.fmul.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
100   ret <8 x half> %vc
103 declare <16 x half> @llvm.experimental.constrained.fmul.v16f16(<16 x half>, <16 x half>, metadata, metadata)
104 define <16 x half> @vfmul_vv_v16f16(<16 x half> %va, <16 x half> %vb) strictfp {
105 ; CHECK-LABEL: vfmul_vv_v16f16:
106 ; CHECK:       # %bb.0: # %entry
107 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
108 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
109 ; CHECK-NEXT:    ret
110 entry:
111   %vc = call <16 x half> @llvm.experimental.constrained.fmul.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
112   ret <16 x half> %vc
115 define <16 x half> @vfmul_vf_v16f16(<16 x half> %va, half %b) strictfp {
116 ; CHECK-LABEL: vfmul_vf_v16f16:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
119 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
120 ; CHECK-NEXT:    ret
121   %head = insertelement <16 x half> poison, half %b, i32 0
122   %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
123   %vc = call <16 x half> @llvm.experimental.constrained.fmul.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
124   ret <16 x half> %vc
127 declare <32 x half> @llvm.experimental.constrained.fmul.v32f16(<32 x half>, <32 x half>, metadata, metadata)
128 define <32 x half> @vfmul_vv_v32f16(<32 x half> %va, <32 x half> %vb) strictfp {
129 ; CHECK-LABEL: vfmul_vv_v32f16:
130 ; CHECK:       # %bb.0: # %entry
131 ; CHECK-NEXT:    li a0, 32
132 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
133 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
134 ; CHECK-NEXT:    ret
135 entry:
136   %vc = call <32 x half> @llvm.experimental.constrained.fmul.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
137   ret <32 x half> %vc
140 define <32 x half> @vfmul_vf_v32f16(<32 x half> %va, half %b) strictfp {
141 ; CHECK-LABEL: vfmul_vf_v32f16:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    li a0, 32
144 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
145 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
146 ; CHECK-NEXT:    ret
147   %head = insertelement <32 x half> poison, half %b, i32 0
148   %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer
149   %vc = call <32 x half> @llvm.experimental.constrained.fmul.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
150   ret <32 x half> %vc
153 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
154 define <1 x float> @vfmul_vv_v1f32(<1 x float> %va, <1 x float> %vb) strictfp {
155 ; CHECK-LABEL: vfmul_vv_v1f32:
156 ; CHECK:       # %bb.0: # %entry
157 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
158 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
159 ; CHECK-NEXT:    ret
160 entry:
161   %vc = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float> %va, <1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
162   ret <1 x float> %vc
165 define <1 x float> @vfmul_vf_v1f32(<1 x float> %va, float %b) strictfp {
166 ; CHECK-LABEL: vfmul_vf_v1f32:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
169 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
170 ; CHECK-NEXT:    ret
171   %head = insertelement <1 x float> poison, float %b, i32 0
172   %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer
173   %vc = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float> %va, <1 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
174   ret <1 x float> %vc
177 declare <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float>, <2 x float>, metadata, metadata)
178 define <2 x float> @vfmul_vv_v2f32(<2 x float> %va, <2 x float> %vb) strictfp {
179 ; CHECK-LABEL: vfmul_vv_v2f32:
180 ; CHECK:       # %bb.0: # %entry
181 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
182 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
183 ; CHECK-NEXT:    ret
184 entry:
185   %vc = call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
186   ret <2 x float> %vc
189 define <2 x float> @vfmul_vf_v2f32(<2 x float> %va, float %b) strictfp {
190 ; CHECK-LABEL: vfmul_vf_v2f32:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
193 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
194 ; CHECK-NEXT:    ret
195   %head = insertelement <2 x float> poison, float %b, i32 0
196   %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
197   %vc = call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
198   ret <2 x float> %vc
201 declare <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float>, <4 x float>, metadata, metadata)
202 define <4 x float> @vfmul_vv_v4f32(<4 x float> %va, <4 x float> %vb) strictfp {
203 ; CHECK-LABEL: vfmul_vv_v4f32:
204 ; CHECK:       # %bb.0: # %entry
205 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
206 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
207 ; CHECK-NEXT:    ret
208 entry:
209   %vc = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
210   ret <4 x float> %vc
213 define <4 x float> @vfmul_vf_v4f32(<4 x float> %va, float %b) strictfp {
214 ; CHECK-LABEL: vfmul_vf_v4f32:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
217 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
218 ; CHECK-NEXT:    ret
219   %head = insertelement <4 x float> poison, float %b, i32 0
220   %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
221   %vc = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
222   ret <4 x float> %vc
225 declare <8 x float> @llvm.experimental.constrained.fmul.v8f32(<8 x float>, <8 x float>, metadata, metadata)
226 define <8 x float> @vfmul_vv_v8f32(<8 x float> %va, <8 x float> %vb) strictfp {
227 ; CHECK-LABEL: vfmul_vv_v8f32:
228 ; CHECK:       # %bb.0: # %entry
229 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
230 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
231 ; CHECK-NEXT:    ret
232 entry:
233   %vc = call <8 x float> @llvm.experimental.constrained.fmul.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
234   ret <8 x float> %vc
237 define <8 x float> @vfmul_vf_v8f32(<8 x float> %va, float %b) strictfp {
238 ; CHECK-LABEL: vfmul_vf_v8f32:
239 ; CHECK:       # %bb.0:
240 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
241 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
242 ; CHECK-NEXT:    ret
243   %head = insertelement <8 x float> poison, float %b, i32 0
244   %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
245   %vc = call <8 x float> @llvm.experimental.constrained.fmul.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
246   ret <8 x float> %vc
249 declare <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float>, <16 x float>, metadata, metadata)
250 define <16 x float> @vfmul_vv_v16f32(<16 x float> %va, <16 x float> %vb) strictfp {
251 ; CHECK-LABEL: vfmul_vv_v16f32:
252 ; CHECK:       # %bb.0: # %entry
253 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
254 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
255 ; CHECK-NEXT:    ret
256 entry:
257   %vc = call <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
258   ret <16 x float> %vc
261 define <16 x float> @vfmul_vf_v16f32(<16 x float> %va, float %b) strictfp {
262 ; CHECK-LABEL: vfmul_vf_v16f32:
263 ; CHECK:       # %bb.0:
264 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
265 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
266 ; CHECK-NEXT:    ret
267   %head = insertelement <16 x float> poison, float %b, i32 0
268   %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
269   %vc = call <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
270   ret <16 x float> %vc
273 declare <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double>, <1 x double>, metadata, metadata)
274 define <1 x double> @vfmul_vv_v1f64(<1 x double> %va, <1 x double> %vb) strictfp {
275 ; CHECK-LABEL: vfmul_vv_v1f64:
276 ; CHECK:       # %bb.0: # %entry
277 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
278 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
279 ; CHECK-NEXT:    ret
280 entry:
281   %vc = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> %va, <1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
282   ret <1 x double> %vc
285 define <1 x double> @vfmul_vf_v1f64(<1 x double> %va, double %b) strictfp {
286 ; CHECK-LABEL: vfmul_vf_v1f64:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
289 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
290 ; CHECK-NEXT:    ret
291   %head = insertelement <1 x double> poison, double %b, i32 0
292   %splat = shufflevector <1 x double> %head, <1 x double> poison, <1 x i32> zeroinitializer
293   %vc = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> %va, <1 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
294   ret <1 x double> %vc
297 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
298 define <2 x double> @vfmul_vv_v2f64(<2 x double> %va, <2 x double> %vb) strictfp {
299 ; CHECK-LABEL: vfmul_vv_v2f64:
300 ; CHECK:       # %bb.0: # %entry
301 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
302 ; CHECK-NEXT:    vfmul.vv v8, v8, v9
303 ; CHECK-NEXT:    ret
304 entry:
305   %vc = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
306   ret <2 x double> %vc
309 define <2 x double> @vfmul_vf_v2f64(<2 x double> %va, double %b) strictfp {
310 ; CHECK-LABEL: vfmul_vf_v2f64:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
313 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
314 ; CHECK-NEXT:    ret
315   %head = insertelement <2 x double> poison, double %b, i32 0
316   %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
317   %vc = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
318   ret <2 x double> %vc
321 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
322 define <4 x double> @vfmul_vv_v4f64(<4 x double> %va, <4 x double> %vb) strictfp {
323 ; CHECK-LABEL: vfmul_vv_v4f64:
324 ; CHECK:       # %bb.0: # %entry
325 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
326 ; CHECK-NEXT:    vfmul.vv v8, v8, v10
327 ; CHECK-NEXT:    ret
328 entry:
329   %vc = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
330   ret <4 x double> %vc
333 define <4 x double> @vfmul_vf_v4f64(<4 x double> %va, double %b) strictfp {
334 ; CHECK-LABEL: vfmul_vf_v4f64:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
337 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
338 ; CHECK-NEXT:    ret
339   %head = insertelement <4 x double> poison, double %b, i32 0
340   %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
341   %vc = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
342   ret <4 x double> %vc
345 declare <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double>, <8 x double>, metadata, metadata)
346 define <8 x double> @vfmul_vv_v8f64(<8 x double> %va, <8 x double> %vb) strictfp {
347 ; CHECK-LABEL: vfmul_vv_v8f64:
348 ; CHECK:       # %bb.0: # %entry
349 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
350 ; CHECK-NEXT:    vfmul.vv v8, v8, v12
351 ; CHECK-NEXT:    ret
352 entry:
353   %vc = call <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
354   ret <8 x double> %vc
357 define <8 x double> @vfmul_vf_v8f64(<8 x double> %va, double %b) strictfp {
358 ; CHECK-LABEL: vfmul_vf_v8f64:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
361 ; CHECK-NEXT:    vfmul.vf v8, v8, fa0
362 ; CHECK-NEXT:    ret
363   %head = insertelement <8 x double> poison, double %b, i32 0
364   %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
365   %vc = call <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
366   ret <8 x double> %vc