Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfadd-constrained-sdnode.ll
blob04ed41cd0952d1c286a71af03f456a2bbd67c93e
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 <vscale x 1 x half> @llvm.experimental.constrained.fadd.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata)
8 define <vscale x 1 x half> @vfadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) strictfp {
9 ; CHECK-LABEL: vfadd_vv_nxv1f16:
10 ; CHECK:       # %bb.0: # %entry
11 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
12 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
13 ; CHECK-NEXT:    ret
14 entry:
15   %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fadd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
16   ret <vscale x 1 x half> %vc
19 define <vscale x 1 x half> @vfadd_vf_nxv1f16(<vscale x 1 x half> %va, half %b) strictfp {
20 ; CHECK-LABEL: vfadd_vf_nxv1f16:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
23 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
24 ; CHECK-NEXT:    ret
25   %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
26   %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
27   %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fadd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
28   ret <vscale x 1 x half> %vc
31 declare <vscale x 2 x half> @llvm.experimental.constrained.fadd.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata)
32 define <vscale x 2 x half> @vfadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) strictfp {
33 ; CHECK-LABEL: vfadd_vv_nxv2f16:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
36 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
37 ; CHECK-NEXT:    ret
38 entry:
39   %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fadd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
40   ret <vscale x 2 x half> %vc
43 define <vscale x 2 x half> @vfadd_vf_nxv2f16(<vscale x 2 x half> %va, half %b) strictfp {
44 ; CHECK-LABEL: vfadd_vf_nxv2f16:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
47 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
48 ; CHECK-NEXT:    ret
49   %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
50   %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
51   %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fadd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
52   ret <vscale x 2 x half> %vc
55 declare <vscale x 4 x half> @llvm.experimental.constrained.fadd.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata)
56 define <vscale x 4 x half> @vfadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) strictfp {
57 ; CHECK-LABEL: vfadd_vv_nxv4f16:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
60 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
61 ; CHECK-NEXT:    ret
62 entry:
63   %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fadd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
64   ret <vscale x 4 x half> %vc
67 define <vscale x 4 x half> @vfadd_vf_nxv4f16(<vscale x 4 x half> %va, half %b) strictfp {
68 ; CHECK-LABEL: vfadd_vf_nxv4f16:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
71 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
72 ; CHECK-NEXT:    ret
73   %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
74   %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
75   %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fadd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
76   ret <vscale x 4 x half> %vc
79 declare <vscale x 8 x half> @llvm.experimental.constrained.fadd.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata)
80 define <vscale x 8 x half> @vfadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) strictfp {
81 ; CHECK-LABEL: vfadd_vv_nxv8f16:
82 ; CHECK:       # %bb.0: # %entry
83 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
84 ; CHECK-NEXT:    vfadd.vv v8, v8, v10
85 ; CHECK-NEXT:    ret
86 entry:
87   %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fadd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
88   ret <vscale x 8 x half> %vc
91 define <vscale x 8 x half> @vfadd_vf_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {
92 ; CHECK-LABEL: vfadd_vf_nxv8f16:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
95 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
96 ; CHECK-NEXT:    ret
97   %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
98   %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
99   %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fadd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
100   ret <vscale x 8 x half> %vc
103 declare <vscale x 16 x half> @llvm.experimental.constrained.fadd.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata)
104 define <vscale x 16 x half> @vfadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) strictfp {
105 ; CHECK-LABEL: vfadd_vv_nxv16f16:
106 ; CHECK:       # %bb.0: # %entry
107 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
108 ; CHECK-NEXT:    vfadd.vv v8, v8, v12
109 ; CHECK-NEXT:    ret
110 entry:
111   %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fadd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
112   ret <vscale x 16 x half> %vc
115 define <vscale x 16 x half> @vfadd_vf_nxv16f16(<vscale x 16 x half> %va, half %b) strictfp {
116 ; CHECK-LABEL: vfadd_vf_nxv16f16:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
119 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
120 ; CHECK-NEXT:    ret
121   %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
122   %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
123   %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fadd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
124   ret <vscale x 16 x half> %vc
127 declare <vscale x 32 x half> @llvm.experimental.constrained.fadd.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata)
128 define <vscale x 32 x half> @vfadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) strictfp {
129 ; CHECK-LABEL: vfadd_vv_nxv32f16:
130 ; CHECK:       # %bb.0: # %entry
131 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
132 ; CHECK-NEXT:    vfadd.vv v8, v8, v16
133 ; CHECK-NEXT:    ret
134 entry:
135   %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fadd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
136   ret <vscale x 32 x half> %vc
139 define <vscale x 32 x half> @vfadd_vf_nxv32f16(<vscale x 32 x half> %va, half %b) strictfp {
140 ; CHECK-LABEL: vfadd_vf_nxv32f16:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
143 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
144 ; CHECK-NEXT:    ret
145   %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
146   %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
147   %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fadd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
148   ret <vscale x 32 x half> %vc
151 declare <vscale x 1 x float> @llvm.experimental.constrained.fadd.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata)
152 define <vscale x 1 x float> @vfadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) strictfp {
153 ; CHECK-LABEL: vfadd_vv_nxv1f32:
154 ; CHECK:       # %bb.0: # %entry
155 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
156 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
157 ; CHECK-NEXT:    ret
158 entry:
159   %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fadd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
160   ret <vscale x 1 x float> %vc
163 define <vscale x 1 x float> @vfadd_vf_nxv1f32(<vscale x 1 x float> %va, float %b) strictfp {
164 ; CHECK-LABEL: vfadd_vf_nxv1f32:
165 ; CHECK:       # %bb.0:
166 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
167 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
168 ; CHECK-NEXT:    ret
169   %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
170   %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
171   %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fadd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
172   ret <vscale x 1 x float> %vc
175 declare <vscale x 2 x float> @llvm.experimental.constrained.fadd.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata)
176 define <vscale x 2 x float> @vfadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) strictfp {
177 ; CHECK-LABEL: vfadd_vv_nxv2f32:
178 ; CHECK:       # %bb.0: # %entry
179 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
180 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
181 ; CHECK-NEXT:    ret
182 entry:
183   %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fadd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
184   ret <vscale x 2 x float> %vc
187 define <vscale x 2 x float> @vfadd_vf_nxv2f32(<vscale x 2 x float> %va, float %b) strictfp {
188 ; CHECK-LABEL: vfadd_vf_nxv2f32:
189 ; CHECK:       # %bb.0:
190 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
191 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
192 ; CHECK-NEXT:    ret
193   %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
194   %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
195   %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fadd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
196   ret <vscale x 2 x float> %vc
199 declare <vscale x 4 x float> @llvm.experimental.constrained.fadd.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata)
200 define <vscale x 4 x float> @vfadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) strictfp {
201 ; CHECK-LABEL: vfadd_vv_nxv4f32:
202 ; CHECK:       # %bb.0: # %entry
203 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
204 ; CHECK-NEXT:    vfadd.vv v8, v8, v10
205 ; CHECK-NEXT:    ret
206 entry:
207   %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fadd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
208   ret <vscale x 4 x float> %vc
211 define <vscale x 4 x float> @vfadd_vf_nxv4f32(<vscale x 4 x float> %va, float %b) strictfp {
212 ; CHECK-LABEL: vfadd_vf_nxv4f32:
213 ; CHECK:       # %bb.0:
214 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
215 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
216 ; CHECK-NEXT:    ret
217   %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
218   %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
219   %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fadd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
220   ret <vscale x 4 x float> %vc
223 declare <vscale x 8 x float> @llvm.experimental.constrained.fadd.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata)
224 define <vscale x 8 x float> @vfadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) strictfp {
225 ; CHECK-LABEL: vfadd_vv_nxv8f32:
226 ; CHECK:       # %bb.0: # %entry
227 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
228 ; CHECK-NEXT:    vfadd.vv v8, v8, v12
229 ; CHECK-NEXT:    ret
230 entry:
231   %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fadd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
232   ret <vscale x 8 x float> %vc
235 define <vscale x 8 x float> @vfadd_vf_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {
236 ; CHECK-LABEL: vfadd_vf_nxv8f32:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
239 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
240 ; CHECK-NEXT:    ret
241   %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
242   %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
243   %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fadd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
244   ret <vscale x 8 x float> %vc
247 declare <vscale x 16 x float> @llvm.experimental.constrained.fadd.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata)
248 define <vscale x 16 x float> @vfadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) strictfp {
249 ; CHECK-LABEL: vfadd_vv_nxv16f32:
250 ; CHECK:       # %bb.0: # %entry
251 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
252 ; CHECK-NEXT:    vfadd.vv v8, v8, v16
253 ; CHECK-NEXT:    ret
254 entry:
255   %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fadd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
256   ret <vscale x 16 x float> %vc
259 define <vscale x 16 x float> @vfadd_vf_nxv16f32(<vscale x 16 x float> %va, float %b) strictfp {
260 ; CHECK-LABEL: vfadd_vf_nxv16f32:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
263 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
264 ; CHECK-NEXT:    ret
265   %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
266   %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
267   %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fadd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
268   ret <vscale x 16 x float> %vc
271 declare <vscale x 1 x double> @llvm.experimental.constrained.fadd.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata)
272 define <vscale x 1 x double> @vfadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) strictfp {
273 ; CHECK-LABEL: vfadd_vv_nxv1f64:
274 ; CHECK:       # %bb.0: # %entry
275 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
276 ; CHECK-NEXT:    vfadd.vv v8, v8, v9
277 ; CHECK-NEXT:    ret
278 entry:
279   %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fadd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
280   ret <vscale x 1 x double> %vc
283 define <vscale x 1 x double> @vfadd_vf_nxv1f64(<vscale x 1 x double> %va, double %b) strictfp {
284 ; CHECK-LABEL: vfadd_vf_nxv1f64:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
287 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
288 ; CHECK-NEXT:    ret
289   %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
290   %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
291   %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fadd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
292   ret <vscale x 1 x double> %vc
295 declare <vscale x 2 x double> @llvm.experimental.constrained.fadd.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata)
296 define <vscale x 2 x double> @vfadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) strictfp {
297 ; CHECK-LABEL: vfadd_vv_nxv2f64:
298 ; CHECK:       # %bb.0: # %entry
299 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
300 ; CHECK-NEXT:    vfadd.vv v8, v8, v10
301 ; CHECK-NEXT:    ret
302 entry:
303   %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fadd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
304   ret <vscale x 2 x double> %vc
307 define <vscale x 2 x double> @vfadd_vf_nxv2f64(<vscale x 2 x double> %va, double %b) strictfp {
308 ; CHECK-LABEL: vfadd_vf_nxv2f64:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
311 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
312 ; CHECK-NEXT:    ret
313   %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
314   %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
315   %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fadd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
316   ret <vscale x 2 x double> %vc
319 declare <vscale x 4 x double> @llvm.experimental.constrained.fadd.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata)
320 define <vscale x 4 x double> @vfadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) strictfp {
321 ; CHECK-LABEL: vfadd_vv_nxv4f64:
322 ; CHECK:       # %bb.0: # %entry
323 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
324 ; CHECK-NEXT:    vfadd.vv v8, v8, v12
325 ; CHECK-NEXT:    ret
326 entry:
327   %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fadd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
328   ret <vscale x 4 x double> %vc
331 define <vscale x 4 x double> @vfadd_vf_nxv4f64(<vscale x 4 x double> %va, double %b) strictfp {
332 ; CHECK-LABEL: vfadd_vf_nxv4f64:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
335 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
336 ; CHECK-NEXT:    ret
337   %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
338   %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
339   %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fadd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
340   ret <vscale x 4 x double> %vc
343 declare <vscale x 8 x double> @llvm.experimental.constrained.fadd.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata)
344 define <vscale x 8 x double> @vfadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) strictfp {
345 ; CHECK-LABEL: vfadd_vv_nxv8f64:
346 ; CHECK:       # %bb.0: # %entry
347 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
348 ; CHECK-NEXT:    vfadd.vv v8, v8, v16
349 ; CHECK-NEXT:    ret
350 entry:
351   %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fadd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
352   ret <vscale x 8 x double> %vc
355 define <vscale x 8 x double> @vfadd_vf_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {
356 ; CHECK-LABEL: vfadd_vf_nxv8f64:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
359 ; CHECK-NEXT:    vfadd.vf v8, v8, fa0
360 ; CHECK-NEXT:    ret
361   %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
362   %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
363   %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fadd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
364   ret <vscale x 8 x double> %vc