xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmul-constrained-sdnode.ll (revision 1cb599835ccf7ee8b2d1d5a7f3107e19a26fc6f5)
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
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7declare <1 x half> @llvm.experimental.constrained.fmul.v1f16(<1 x half>, <1 x half>, metadata, metadata)
8define <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
14entry:
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
17}
18
19define <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
29}
30
31declare <2 x half> @llvm.experimental.constrained.fmul.v2f16(<2 x half>, <2 x half>, metadata, metadata)
32define <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
38entry:
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
41}
42
43define <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
53}
54
55declare <4 x half> @llvm.experimental.constrained.fmul.v4f16(<4 x half>, <4 x half>, metadata, metadata)
56define <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
62entry:
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
65}
66
67define <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
77}
78
79declare <8 x half> @llvm.experimental.constrained.fmul.v8f16(<8 x half>, <8 x half>, metadata, metadata)
80define <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
86entry:
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
89}
90
91define <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
101}
102
103declare <16 x half> @llvm.experimental.constrained.fmul.v16f16(<16 x half>, <16 x half>, metadata, metadata)
104define <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
110entry:
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
113}
114
115define <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
125}
126
127declare <32 x half> @llvm.experimental.constrained.fmul.v32f16(<32 x half>, <32 x half>, metadata, metadata)
128define <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
135entry:
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
138}
139
140define <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
151}
152
153declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
154define <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
160entry:
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
163}
164
165define <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
175}
176
177declare <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float>, <2 x float>, metadata, metadata)
178define <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
184entry:
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
187}
188
189define <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
199}
200
201declare <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float>, <4 x float>, metadata, metadata)
202define <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
208entry:
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
211}
212
213define <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
223}
224
225declare <8 x float> @llvm.experimental.constrained.fmul.v8f32(<8 x float>, <8 x float>, metadata, metadata)
226define <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
232entry:
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
235}
236
237define <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
247}
248
249declare <16 x float> @llvm.experimental.constrained.fmul.v16f32(<16 x float>, <16 x float>, metadata, metadata)
250define <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
256entry:
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
259}
260
261define <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
271}
272
273declare <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double>, <1 x double>, metadata, metadata)
274define <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
280entry:
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
283}
284
285define <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
295}
296
297declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
298define <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
304entry:
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
307}
308
309define <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
319}
320
321declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
322define <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
328entry:
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
331}
332
333define <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
343}
344
345declare <8 x double> @llvm.experimental.constrained.fmul.v8f64(<8 x double>, <8 x double>, metadata, metadata)
346define <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
352entry:
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
355}
356
357define <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
367}
368