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.fdiv.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, metadata, metadata)
8 define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) strictfp {
9 ; CHECK-LABEL: vfdiv_vv_nxv1f16:
10 ; CHECK: # %bb.0: # %entry
11 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
12 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
15 %vc = call <vscale x 1 x half> @llvm.experimental.constrained.fdiv.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> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b) strictfp {
20 ; CHECK-LABEL: vfdiv_vf_nxv1f16:
22 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
23 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
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.fdiv.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.fdiv.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, metadata, metadata)
32 define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) strictfp {
33 ; CHECK-LABEL: vfdiv_vv_nxv2f16:
34 ; CHECK: # %bb.0: # %entry
35 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
36 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
39 %vc = call <vscale x 2 x half> @llvm.experimental.constrained.fdiv.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> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b) strictfp {
44 ; CHECK-LABEL: vfdiv_vf_nxv2f16:
46 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
47 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
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.fdiv.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.fdiv.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, metadata, metadata)
56 define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) strictfp {
57 ; CHECK-LABEL: vfdiv_vv_nxv4f16:
58 ; CHECK: # %bb.0: # %entry
59 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
60 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
63 %vc = call <vscale x 4 x half> @llvm.experimental.constrained.fdiv.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> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b) strictfp {
68 ; CHECK-LABEL: vfdiv_vf_nxv4f16:
70 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
71 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
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.fdiv.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.fdiv.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, metadata, metadata)
80 define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) strictfp {
81 ; CHECK-LABEL: vfdiv_vv_nxv8f16:
82 ; CHECK: # %bb.0: # %entry
83 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
84 ; CHECK-NEXT: vfdiv.vv v8, v8, v10
87 %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fdiv.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> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {
92 ; CHECK-LABEL: vfdiv_vf_nxv8f16:
94 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
95 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
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.fdiv.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 define <vscale x 8 x half> @vfdiv_fv_nxv8f16(<vscale x 8 x half> %va, half %b) strictfp {
104 ; CHECK-LABEL: vfdiv_fv_nxv8f16:
106 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
107 ; CHECK-NEXT: vfrdiv.vf v8, v8, fa0
109 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
110 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
111 %vc = call <vscale x 8 x half> @llvm.experimental.constrained.fdiv.nxv8f16(<vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")
112 ret <vscale x 8 x half> %vc
115 declare <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, metadata, metadata)
116 define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) strictfp {
117 ; CHECK-LABEL: vfdiv_vv_nxv16f16:
118 ; CHECK: # %bb.0: # %entry
119 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
120 ; CHECK-NEXT: vfdiv.vv v8, v8, v12
123 %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
124 ret <vscale x 16 x half> %vc
127 define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b) strictfp {
128 ; CHECK-LABEL: vfdiv_vf_nxv16f16:
130 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
131 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
133 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
134 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
135 %vc = call <vscale x 16 x half> @llvm.experimental.constrained.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
136 ret <vscale x 16 x half> %vc
139 declare <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, metadata, metadata)
140 define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) strictfp {
141 ; CHECK-LABEL: vfdiv_vv_nxv32f16:
142 ; CHECK: # %bb.0: # %entry
143 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
144 ; CHECK-NEXT: vfdiv.vv v8, v8, v16
147 %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
148 ret <vscale x 32 x half> %vc
151 define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b) strictfp {
152 ; CHECK-LABEL: vfdiv_vf_nxv32f16:
154 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
155 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
157 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
158 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
159 %vc = call <vscale x 32 x half> @llvm.experimental.constrained.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
160 ret <vscale x 32 x half> %vc
163 declare <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, metadata, metadata)
164 define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) strictfp {
165 ; CHECK-LABEL: vfdiv_vv_nxv1f32:
166 ; CHECK: # %bb.0: # %entry
167 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
168 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
171 %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
172 ret <vscale x 1 x float> %vc
175 define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b) strictfp {
176 ; CHECK-LABEL: vfdiv_vf_nxv1f32:
178 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
179 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
181 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
182 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
183 %vc = call <vscale x 1 x float> @llvm.experimental.constrained.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
184 ret <vscale x 1 x float> %vc
187 declare <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, metadata, metadata)
188 define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) strictfp {
189 ; CHECK-LABEL: vfdiv_vv_nxv2f32:
190 ; CHECK: # %bb.0: # %entry
191 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
192 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
195 %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
196 ret <vscale x 2 x float> %vc
199 define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b) strictfp {
200 ; CHECK-LABEL: vfdiv_vf_nxv2f32:
202 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
203 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
205 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
206 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
207 %vc = call <vscale x 2 x float> @llvm.experimental.constrained.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
208 ret <vscale x 2 x float> %vc
211 declare <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, metadata, metadata)
212 define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) strictfp {
213 ; CHECK-LABEL: vfdiv_vv_nxv4f32:
214 ; CHECK: # %bb.0: # %entry
215 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
216 ; CHECK-NEXT: vfdiv.vv v8, v8, v10
219 %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
220 ret <vscale x 4 x float> %vc
223 define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b) strictfp {
224 ; CHECK-LABEL: vfdiv_vf_nxv4f32:
226 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
227 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
229 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
230 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
231 %vc = call <vscale x 4 x float> @llvm.experimental.constrained.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
232 ret <vscale x 4 x float> %vc
235 declare <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, metadata, metadata)
236 define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) strictfp {
237 ; CHECK-LABEL: vfdiv_vv_nxv8f32:
238 ; CHECK: # %bb.0: # %entry
239 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
240 ; CHECK-NEXT: vfdiv.vv v8, v8, v12
243 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
244 ret <vscale x 8 x float> %vc
247 define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {
248 ; CHECK-LABEL: vfdiv_vf_nxv8f32:
250 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
251 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
253 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
254 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
255 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
256 ret <vscale x 8 x float> %vc
259 define <vscale x 8 x float> @vfdiv_fv_nxv8f32(<vscale x 8 x float> %va, float %b) strictfp {
260 ; CHECK-LABEL: vfdiv_fv_nxv8f32:
262 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
263 ; CHECK-NEXT: vfrdiv.vf v8, v8, fa0
265 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
266 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
267 %vc = call <vscale x 8 x float> @llvm.experimental.constrained.fdiv.nxv8f32(<vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")
268 ret <vscale x 8 x float> %vc
271 declare <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, metadata, metadata)
272 define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) strictfp {
273 ; CHECK-LABEL: vfdiv_vv_nxv16f32:
274 ; CHECK: # %bb.0: # %entry
275 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
276 ; CHECK-NEXT: vfdiv.vv v8, v8, v16
279 %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
280 ret <vscale x 16 x float> %vc
283 define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b) strictfp {
284 ; CHECK-LABEL: vfdiv_vf_nxv16f32:
286 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
287 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
289 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
290 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
291 %vc = call <vscale x 16 x float> @llvm.experimental.constrained.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
292 ret <vscale x 16 x float> %vc
295 declare <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, metadata, metadata)
296 define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) strictfp {
297 ; CHECK-LABEL: vfdiv_vv_nxv1f64:
298 ; CHECK: # %bb.0: # %entry
299 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
300 ; CHECK-NEXT: vfdiv.vv v8, v8, v9
303 %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
304 ret <vscale x 1 x double> %vc
307 define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b) strictfp {
308 ; CHECK-LABEL: vfdiv_vf_nxv1f64:
310 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
311 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
313 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
314 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
315 %vc = call <vscale x 1 x double> @llvm.experimental.constrained.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
316 ret <vscale x 1 x double> %vc
319 declare <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, metadata, metadata)
320 define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) strictfp {
321 ; CHECK-LABEL: vfdiv_vv_nxv2f64:
322 ; CHECK: # %bb.0: # %entry
323 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
324 ; CHECK-NEXT: vfdiv.vv v8, v8, v10
327 %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
328 ret <vscale x 2 x double> %vc
331 define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b) strictfp {
332 ; CHECK-LABEL: vfdiv_vf_nxv2f64:
334 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
335 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
337 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
338 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
339 %vc = call <vscale x 2 x double> @llvm.experimental.constrained.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
340 ret <vscale x 2 x double> %vc
343 declare <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, metadata, metadata)
344 define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) strictfp {
345 ; CHECK-LABEL: vfdiv_vv_nxv4f64:
346 ; CHECK: # %bb.0: # %entry
347 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
348 ; CHECK-NEXT: vfdiv.vv v8, v8, v12
351 %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
352 ret <vscale x 4 x double> %vc
355 define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b) strictfp {
356 ; CHECK-LABEL: vfdiv_vf_nxv4f64:
358 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
359 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
361 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
362 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
363 %vc = call <vscale x 4 x double> @llvm.experimental.constrained.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
364 ret <vscale x 4 x double> %vc
367 declare <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, metadata, metadata)
368 define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) strictfp {
369 ; CHECK-LABEL: vfdiv_vv_nxv8f64:
370 ; CHECK: # %bb.0: # %entry
371 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
372 ; CHECK-NEXT: vfdiv.vv v8, v8, v16
375 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")
376 ret <vscale x 8 x double> %vc
379 define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {
380 ; CHECK-LABEL: vfdiv_vf_nxv8f64:
382 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
383 ; CHECK-NEXT: vfdiv.vf v8, v8, fa0
385 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
386 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
387 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")
388 ret <vscale x 8 x double> %vc
391 define <vscale x 8 x double> @vfdiv_fv_nxv8f64(<vscale x 8 x double> %va, double %b) strictfp {
392 ; CHECK-LABEL: vfdiv_fv_nxv8f64:
394 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
395 ; CHECK-NEXT: vfrdiv.vf v8, v8, fa0
397 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
398 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
399 %vc = call <vscale x 8 x double> @llvm.experimental.constrained.fdiv.nxv8f64(<vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")
400 ret <vscale x 8 x double> %vc