Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfdiv-constrained-sdnode.ll
blobbd220d24113cf84154e5f615df6cf1c9c6f8eec4
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
13 ; CHECK-NEXT:    ret
14 entry:
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:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
23 ; CHECK-NEXT:    vfdiv.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.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
37 ; CHECK-NEXT:    ret
38 entry:
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:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
47 ; CHECK-NEXT:    vfdiv.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.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
61 ; CHECK-NEXT:    ret
62 entry:
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:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
71 ; CHECK-NEXT:    vfdiv.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.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
85 ; CHECK-NEXT:    ret
86 entry:
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:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
95 ; CHECK-NEXT:    vfdiv.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.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:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
107 ; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0
108 ; CHECK-NEXT:    ret
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
121 ; CHECK-NEXT:    ret
122 entry:
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:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
131 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
132 ; CHECK-NEXT:    ret
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
145 ; CHECK-NEXT:    ret
146 entry:
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:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
155 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
156 ; CHECK-NEXT:    ret
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
169 ; CHECK-NEXT:    ret
170 entry:
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:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
179 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
180 ; CHECK-NEXT:    ret
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
193 ; CHECK-NEXT:    ret
194 entry:
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:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
203 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
204 ; CHECK-NEXT:    ret
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
217 ; CHECK-NEXT:    ret
218 entry:
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:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
227 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
228 ; CHECK-NEXT:    ret
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
241 ; CHECK-NEXT:    ret
242 entry:
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:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
251 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
252 ; CHECK-NEXT:    ret
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:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
263 ; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0
264 ; CHECK-NEXT:    ret
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
277 ; CHECK-NEXT:    ret
278 entry:
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:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
287 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
288 ; CHECK-NEXT:    ret
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
301 ; CHECK-NEXT:    ret
302 entry:
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:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
311 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
312 ; CHECK-NEXT:    ret
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
325 ; CHECK-NEXT:    ret
326 entry:
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:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
335 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
336 ; CHECK-NEXT:    ret
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
349 ; CHECK-NEXT:    ret
350 entry:
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:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
359 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
360 ; CHECK-NEXT:    ret
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
373 ; CHECK-NEXT:    ret
374 entry:
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:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
383 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
384 ; CHECK-NEXT:    ret
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:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
395 ; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0
396 ; CHECK-NEXT:    ret
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