Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfdiv-vp.ll
blob81d844d1950ab2a0fcdbf7cebdaad2de52a9d353
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 --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vfdiv_vv_nxv1f16:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
17 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16:
21 ; ZVFHMIN:       # %bb.0:
22 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
24 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
25 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
26 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10, v0.t
27 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
28 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
29 ; ZVFHMIN-NEXT:    ret
30   %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
31   ret <vscale x 1 x half> %v
34 define <vscale x 1 x half> @vfdiv_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, i32 zeroext %evl) {
35 ; ZVFH-LABEL: vfdiv_vv_nxv1f16_unmasked:
36 ; ZVFH:       # %bb.0:
37 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
38 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
39 ; ZVFH-NEXT:    ret
41 ; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16_unmasked:
42 ; ZVFHMIN:       # %bb.0:
43 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
44 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
45 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
46 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
47 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
48 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
49 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
50 ; ZVFHMIN-NEXT:    ret
51   %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
52   ret <vscale x 1 x half> %v
55 define <vscale x 1 x half> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
56 ; ZVFH-LABEL: vfdiv_vf_nxv1f16:
57 ; ZVFH:       # %bb.0:
58 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
59 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
60 ; ZVFH-NEXT:    ret
62 ; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16:
63 ; ZVFHMIN:       # %bb.0:
64 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
65 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
66 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
67 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
68 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
69 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
70 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
71 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
72 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v8, v0.t
73 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
74 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
75 ; ZVFHMIN-NEXT:    ret
76   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
77   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
78   %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
79   ret <vscale x 1 x half> %v
82 define <vscale x 1 x half> @vfdiv_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {
83 ; ZVFH-LABEL: vfdiv_vf_nxv1f16_unmasked:
84 ; ZVFH:       # %bb.0:
85 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
86 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
87 ; ZVFH-NEXT:    ret
89 ; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16_unmasked:
90 ; ZVFHMIN:       # %bb.0:
91 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
92 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
93 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
94 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
95 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
96 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
97 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
98 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
99 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v8
100 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
101 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
102 ; ZVFHMIN-NEXT:    ret
103   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
104   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
105   %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
106   ret <vscale x 1 x half> %v
109 declare <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
111 define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
112 ; ZVFH-LABEL: vfdiv_vv_nxv2f16:
113 ; ZVFH:       # %bb.0:
114 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
115 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
116 ; ZVFH-NEXT:    ret
118 ; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16:
119 ; ZVFHMIN:       # %bb.0:
120 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
121 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
122 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
123 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
124 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10, v0.t
125 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
126 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
127 ; ZVFHMIN-NEXT:    ret
128   %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
129   ret <vscale x 2 x half> %v
132 define <vscale x 2 x half> @vfdiv_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, i32 zeroext %evl) {
133 ; ZVFH-LABEL: vfdiv_vv_nxv2f16_unmasked:
134 ; ZVFH:       # %bb.0:
135 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
136 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
137 ; ZVFH-NEXT:    ret
139 ; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16_unmasked:
140 ; ZVFHMIN:       # %bb.0:
141 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
142 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
143 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
144 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
145 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
146 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
147 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
148 ; ZVFHMIN-NEXT:    ret
149   %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
150   ret <vscale x 2 x half> %v
153 define <vscale x 2 x half> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
154 ; ZVFH-LABEL: vfdiv_vf_nxv2f16:
155 ; ZVFH:       # %bb.0:
156 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
157 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
158 ; ZVFH-NEXT:    ret
160 ; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16:
161 ; ZVFHMIN:       # %bb.0:
162 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
163 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
164 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
165 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
166 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
167 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
168 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
169 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
170 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v8, v0.t
171 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
172 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
173 ; ZVFHMIN-NEXT:    ret
174   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
175   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
176   %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
177   ret <vscale x 2 x half> %v
180 define <vscale x 2 x half> @vfdiv_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {
181 ; ZVFH-LABEL: vfdiv_vf_nxv2f16_unmasked:
182 ; ZVFH:       # %bb.0:
183 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
184 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
185 ; ZVFH-NEXT:    ret
187 ; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16_unmasked:
188 ; ZVFHMIN:       # %bb.0:
189 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
190 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
191 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
192 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
193 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
194 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
195 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
196 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
197 ; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v8
198 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
199 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
200 ; ZVFHMIN-NEXT:    ret
201   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
202   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
203   %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
204   ret <vscale x 2 x half> %v
207 declare <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
209 define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
210 ; ZVFH-LABEL: vfdiv_vv_nxv4f16:
211 ; ZVFH:       # %bb.0:
212 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
213 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
214 ; ZVFH-NEXT:    ret
216 ; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16:
217 ; ZVFHMIN:       # %bb.0:
218 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
219 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
220 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
221 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
222 ; ZVFHMIN-NEXT:    vfdiv.vv v10, v12, v10, v0.t
223 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
224 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
225 ; ZVFHMIN-NEXT:    ret
226   %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
227   ret <vscale x 4 x half> %v
230 define <vscale x 4 x half> @vfdiv_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, i32 zeroext %evl) {
231 ; ZVFH-LABEL: vfdiv_vv_nxv4f16_unmasked:
232 ; ZVFH:       # %bb.0:
233 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
234 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
235 ; ZVFH-NEXT:    ret
237 ; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16_unmasked:
238 ; ZVFHMIN:       # %bb.0:
239 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
240 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
241 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
242 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
243 ; ZVFHMIN-NEXT:    vfdiv.vv v10, v12, v10
244 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
245 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
246 ; ZVFHMIN-NEXT:    ret
247   %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
248   ret <vscale x 4 x half> %v
251 define <vscale x 4 x half> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
252 ; ZVFH-LABEL: vfdiv_vf_nxv4f16:
253 ; ZVFH:       # %bb.0:
254 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
255 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
256 ; ZVFH-NEXT:    ret
258 ; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16:
259 ; ZVFHMIN:       # %bb.0:
260 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
261 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
262 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
263 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
264 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
265 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
266 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
267 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
268 ; ZVFHMIN-NEXT:    vfdiv.vv v10, v10, v12, v0.t
269 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
270 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
271 ; ZVFHMIN-NEXT:    ret
272   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
273   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
274   %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
275   ret <vscale x 4 x half> %v
278 define <vscale x 4 x half> @vfdiv_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {
279 ; ZVFH-LABEL: vfdiv_vf_nxv4f16_unmasked:
280 ; ZVFH:       # %bb.0:
281 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
282 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
283 ; ZVFH-NEXT:    ret
285 ; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16_unmasked:
286 ; ZVFHMIN:       # %bb.0:
287 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
288 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
289 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
290 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
291 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
292 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
293 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
294 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
295 ; ZVFHMIN-NEXT:    vfdiv.vv v10, v10, v12
296 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
297 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
298 ; ZVFHMIN-NEXT:    ret
299   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
300   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
301   %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
302   ret <vscale x 4 x half> %v
305 declare <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
307 define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
308 ; ZVFH-LABEL: vfdiv_vv_nxv8f16:
309 ; ZVFH:       # %bb.0:
310 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
311 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v10, v0.t
312 ; ZVFH-NEXT:    ret
314 ; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16:
315 ; ZVFHMIN:       # %bb.0:
316 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
317 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
318 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
319 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
320 ; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12, v0.t
321 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
322 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
323 ; ZVFHMIN-NEXT:    ret
324   %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
325   ret <vscale x 8 x half> %v
328 define <vscale x 8 x half> @vfdiv_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, i32 zeroext %evl) {
329 ; ZVFH-LABEL: vfdiv_vv_nxv8f16_unmasked:
330 ; ZVFH:       # %bb.0:
331 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
332 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v10
333 ; ZVFH-NEXT:    ret
335 ; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16_unmasked:
336 ; ZVFHMIN:       # %bb.0:
337 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
338 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
339 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
340 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
341 ; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12
342 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
343 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
344 ; ZVFHMIN-NEXT:    ret
345   %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
346   ret <vscale x 8 x half> %v
349 define <vscale x 8 x half> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
350 ; ZVFH-LABEL: vfdiv_vf_nxv8f16:
351 ; ZVFH:       # %bb.0:
352 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
353 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
354 ; ZVFH-NEXT:    ret
356 ; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16:
357 ; ZVFHMIN:       # %bb.0:
358 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
359 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
360 ; ZVFHMIN-NEXT:    vfmv.v.f v12, fa5
361 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
362 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v12
363 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
364 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
365 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
366 ; ZVFHMIN-NEXT:    vfdiv.vv v12, v12, v16, v0.t
367 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
368 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
369 ; ZVFHMIN-NEXT:    ret
370   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
371   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
372   %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
373   ret <vscale x 8 x half> %v
376 define <vscale x 8 x half> @vfdiv_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {
377 ; ZVFH-LABEL: vfdiv_vf_nxv8f16_unmasked:
378 ; ZVFH:       # %bb.0:
379 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
380 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
381 ; ZVFH-NEXT:    ret
383 ; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16_unmasked:
384 ; ZVFHMIN:       # %bb.0:
385 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
386 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
387 ; ZVFHMIN-NEXT:    vfmv.v.f v12, fa5
388 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
389 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v12
390 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
391 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
392 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
393 ; ZVFHMIN-NEXT:    vfdiv.vv v12, v12, v16
394 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
395 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
396 ; ZVFHMIN-NEXT:    ret
397   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
398   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
399   %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
400   ret <vscale x 8 x half> %v
403 declare <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
405 define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
406 ; ZVFH-LABEL: vfdiv_vv_nxv16f16:
407 ; ZVFH:       # %bb.0:
408 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
409 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v12, v0.t
410 ; ZVFH-NEXT:    ret
412 ; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16:
413 ; ZVFHMIN:       # %bb.0:
414 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
415 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
416 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
417 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
418 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16, v0.t
419 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
420 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
421 ; ZVFHMIN-NEXT:    ret
422   %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
423   ret <vscale x 16 x half> %v
426 define <vscale x 16 x half> @vfdiv_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, i32 zeroext %evl) {
427 ; ZVFH-LABEL: vfdiv_vv_nxv16f16_unmasked:
428 ; ZVFH:       # %bb.0:
429 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
430 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v12
431 ; ZVFH-NEXT:    ret
433 ; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16_unmasked:
434 ; ZVFHMIN:       # %bb.0:
435 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
436 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
437 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
438 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
439 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
440 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
441 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
442 ; ZVFHMIN-NEXT:    ret
443   %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
444   ret <vscale x 16 x half> %v
447 define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
448 ; ZVFH-LABEL: vfdiv_vf_nxv16f16:
449 ; ZVFH:       # %bb.0:
450 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
451 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
452 ; ZVFH-NEXT:    ret
454 ; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16:
455 ; ZVFHMIN:       # %bb.0:
456 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
457 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
458 ; ZVFHMIN-NEXT:    vfmv.v.f v16, fa5
459 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
460 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
461 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
462 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
463 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
464 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
465 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
466 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
467 ; ZVFHMIN-NEXT:    ret
468   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
469   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
470   %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
471   ret <vscale x 16 x half> %v
474 define <vscale x 16 x half> @vfdiv_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {
475 ; ZVFH-LABEL: vfdiv_vf_nxv16f16_unmasked:
476 ; ZVFH:       # %bb.0:
477 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
478 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
479 ; ZVFH-NEXT:    ret
481 ; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16_unmasked:
482 ; ZVFHMIN:       # %bb.0:
483 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
484 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
485 ; ZVFHMIN-NEXT:    vfmv.v.f v16, fa5
486 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
487 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
488 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
489 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
490 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
491 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24
492 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
493 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
494 ; ZVFHMIN-NEXT:    ret
495   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
496   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
497   %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
498   ret <vscale x 16 x half> %v
501 declare <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
503 define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
504 ; ZVFH-LABEL: vfdiv_vv_nxv32f16:
505 ; ZVFH:       # %bb.0:
506 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
507 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v16, v0.t
508 ; ZVFH-NEXT:    ret
510 ; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16:
511 ; ZVFHMIN:       # %bb.0:
512 ; ZVFHMIN-NEXT:    addi sp, sp, -16
513 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
514 ; ZVFHMIN-NEXT:    csrr a1, vlenb
515 ; ZVFHMIN-NEXT:    slli a1, a1, 3
516 ; ZVFHMIN-NEXT:    sub sp, sp, a1
517 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
518 ; ZVFHMIN-NEXT:    vmv1r.v v7, v0
519 ; ZVFHMIN-NEXT:    csrr a2, vlenb
520 ; ZVFHMIN-NEXT:    slli a1, a2, 1
521 ; ZVFHMIN-NEXT:    sub a3, a0, a1
522 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
523 ; ZVFHMIN-NEXT:    addi a4, a4, -1
524 ; ZVFHMIN-NEXT:    and a3, a4, a3
525 ; ZVFHMIN-NEXT:    srli a2, a2, 2
526 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
527 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
528 ; ZVFHMIN-NEXT:    addi a2, sp, 16
529 ; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
530 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
531 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20
532 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
533 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
534 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
535 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
536 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
537 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB20_2
538 ; ZVFHMIN-NEXT:  # %bb.1:
539 ; ZVFHMIN-NEXT:    mv a0, a1
540 ; ZVFHMIN-NEXT:  .LBB20_2:
541 ; ZVFHMIN-NEXT:    addi a1, sp, 16
542 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
543 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
544 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
545 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
546 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
547 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16, v0.t
548 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
549 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
550 ; ZVFHMIN-NEXT:    csrr a0, vlenb
551 ; ZVFHMIN-NEXT:    slli a0, a0, 3
552 ; ZVFHMIN-NEXT:    add sp, sp, a0
553 ; ZVFHMIN-NEXT:    addi sp, sp, 16
554 ; ZVFHMIN-NEXT:    ret
555   %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
556   ret <vscale x 32 x half> %v
559 define <vscale x 32 x half> @vfdiv_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, i32 zeroext %evl) {
560 ; ZVFH-LABEL: vfdiv_vv_nxv32f16_unmasked:
561 ; ZVFH:       # %bb.0:
562 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
563 ; ZVFH-NEXT:    vfdiv.vv v8, v8, v16
564 ; ZVFH-NEXT:    ret
566 ; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16_unmasked:
567 ; ZVFHMIN:       # %bb.0:
568 ; ZVFHMIN-NEXT:    addi sp, sp, -16
569 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
570 ; ZVFHMIN-NEXT:    csrr a1, vlenb
571 ; ZVFHMIN-NEXT:    slli a1, a1, 3
572 ; ZVFHMIN-NEXT:    sub sp, sp, a1
573 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
574 ; ZVFHMIN-NEXT:    csrr a2, vlenb
575 ; ZVFHMIN-NEXT:    slli a1, a2, 1
576 ; ZVFHMIN-NEXT:    sub a3, a0, a1
577 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
578 ; ZVFHMIN-NEXT:    addi a4, a4, -1
579 ; ZVFHMIN-NEXT:    and a3, a4, a3
580 ; ZVFHMIN-NEXT:    srli a2, a2, 2
581 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, m4, ta, ma
582 ; ZVFHMIN-NEXT:    vmset.m v24
583 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
584 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
585 ; ZVFHMIN-NEXT:    addi a2, sp, 16
586 ; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
587 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
588 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20
589 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
590 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
591 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
592 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
593 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
594 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB21_2
595 ; ZVFHMIN-NEXT:  # %bb.1:
596 ; ZVFHMIN-NEXT:    mv a0, a1
597 ; ZVFHMIN-NEXT:  .LBB21_2:
598 ; ZVFHMIN-NEXT:    addi a1, sp, 16
599 ; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
600 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
601 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
602 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
603 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
604 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
605 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
606 ; ZVFHMIN-NEXT:    csrr a0, vlenb
607 ; ZVFHMIN-NEXT:    slli a0, a0, 3
608 ; ZVFHMIN-NEXT:    add sp, sp, a0
609 ; ZVFHMIN-NEXT:    addi sp, sp, 16
610 ; ZVFHMIN-NEXT:    ret
611   %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
612   ret <vscale x 32 x half> %v
615 define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
616 ; ZVFH-LABEL: vfdiv_vf_nxv32f16:
617 ; ZVFH:       # %bb.0:
618 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
619 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
620 ; ZVFH-NEXT:    ret
622 ; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16:
623 ; ZVFHMIN:       # %bb.0:
624 ; ZVFHMIN-NEXT:    addi sp, sp, -16
625 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
626 ; ZVFHMIN-NEXT:    csrr a1, vlenb
627 ; ZVFHMIN-NEXT:    slli a1, a1, 2
628 ; ZVFHMIN-NEXT:    sub sp, sp, a1
629 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
630 ; ZVFHMIN-NEXT:    vmv1r.v v7, v0
631 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
632 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
633 ; ZVFHMIN-NEXT:    vfmv.v.f v24, fa5
634 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
635 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v24
636 ; ZVFHMIN-NEXT:    addi a1, sp, 16
637 ; ZVFHMIN-NEXT:    vs4r.v v16, (a1) # Unknown-size Folded Spill
638 ; ZVFHMIN-NEXT:    csrr a2, vlenb
639 ; ZVFHMIN-NEXT:    slli a1, a2, 1
640 ; ZVFHMIN-NEXT:    sub a3, a0, a1
641 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
642 ; ZVFHMIN-NEXT:    addi a4, a4, -1
643 ; ZVFHMIN-NEXT:    and a3, a4, a3
644 ; ZVFHMIN-NEXT:    srli a2, a2, 2
645 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
646 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
647 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
648 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
649 ; ZVFHMIN-NEXT:    addi a2, sp, 16
650 ; ZVFHMIN-NEXT:    vl4r.v v12, (a2) # Unknown-size Folded Reload
651 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
652 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
653 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
654 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
655 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
656 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB22_2
657 ; ZVFHMIN-NEXT:  # %bb.1:
658 ; ZVFHMIN-NEXT:    mv a0, a1
659 ; ZVFHMIN-NEXT:  .LBB22_2:
660 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
661 ; ZVFHMIN-NEXT:    vmv1r.v v0, v7
662 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
663 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
664 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
665 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
666 ; ZVFHMIN-NEXT:    csrr a0, vlenb
667 ; ZVFHMIN-NEXT:    slli a0, a0, 2
668 ; ZVFHMIN-NEXT:    add sp, sp, a0
669 ; ZVFHMIN-NEXT:    addi sp, sp, 16
670 ; ZVFHMIN-NEXT:    ret
671   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
672   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
673   %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
674   ret <vscale x 32 x half> %v
677 define <vscale x 32 x half> @vfdiv_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {
678 ; ZVFH-LABEL: vfdiv_vf_nxv32f16_unmasked:
679 ; ZVFH:       # %bb.0:
680 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
681 ; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
682 ; ZVFH-NEXT:    ret
684 ; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16_unmasked:
685 ; ZVFHMIN:       # %bb.0:
686 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
687 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
688 ; ZVFHMIN-NEXT:    vfmv.v.f v16, fa5
689 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
690 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v4, v16
691 ; ZVFHMIN-NEXT:    csrr a2, vlenb
692 ; ZVFHMIN-NEXT:    slli a1, a2, 1
693 ; ZVFHMIN-NEXT:    sub a3, a0, a1
694 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
695 ; ZVFHMIN-NEXT:    addi a4, a4, -1
696 ; ZVFHMIN-NEXT:    and a3, a4, a3
697 ; ZVFHMIN-NEXT:    srli a2, a2, 2
698 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, m4, ta, ma
699 ; ZVFHMIN-NEXT:    vmset.m v16
700 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
701 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v16, a2
702 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
703 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
704 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4
705 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
706 ; ZVFHMIN-NEXT:    vfdiv.vv v24, v24, v16, v0.t
707 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
708 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
709 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB23_2
710 ; ZVFHMIN-NEXT:  # %bb.1:
711 ; ZVFHMIN-NEXT:    mv a0, a1
712 ; ZVFHMIN-NEXT:  .LBB23_2:
713 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
714 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
715 ; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
716 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
717 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
718 ; ZVFHMIN-NEXT:    ret
719   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
720   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
721   %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
722   ret <vscale x 32 x half> %v
725 declare <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
727 define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
728 ; CHECK-LABEL: vfdiv_vv_nxv1f32:
729 ; CHECK:       # %bb.0:
730 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
731 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
732 ; CHECK-NEXT:    ret
733   %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
734   ret <vscale x 1 x float> %v
737 define <vscale x 1 x float> @vfdiv_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, i32 zeroext %evl) {
738 ; CHECK-LABEL: vfdiv_vv_nxv1f32_unmasked:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
741 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9
742 ; CHECK-NEXT:    ret
743   %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
744   ret <vscale x 1 x float> %v
747 define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
748 ; CHECK-LABEL: vfdiv_vf_nxv1f32:
749 ; CHECK:       # %bb.0:
750 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
751 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
752 ; CHECK-NEXT:    ret
753   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
754   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
755   %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
756   ret <vscale x 1 x float> %v
759 define <vscale x 1 x float> @vfdiv_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {
760 ; CHECK-LABEL: vfdiv_vf_nxv1f32_unmasked:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
763 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
764 ; CHECK-NEXT:    ret
765   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
766   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
767   %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
768   ret <vscale x 1 x float> %v
771 declare <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
773 define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
774 ; CHECK-LABEL: vfdiv_vv_nxv2f32:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
777 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
778 ; CHECK-NEXT:    ret
779   %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
780   ret <vscale x 2 x float> %v
783 define <vscale x 2 x float> @vfdiv_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, i32 zeroext %evl) {
784 ; CHECK-LABEL: vfdiv_vv_nxv2f32_unmasked:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
787 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9
788 ; CHECK-NEXT:    ret
789   %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
790   ret <vscale x 2 x float> %v
793 define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
794 ; CHECK-LABEL: vfdiv_vf_nxv2f32:
795 ; CHECK:       # %bb.0:
796 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
797 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
798 ; CHECK-NEXT:    ret
799   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
800   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
801   %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
802   ret <vscale x 2 x float> %v
805 define <vscale x 2 x float> @vfdiv_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {
806 ; CHECK-LABEL: vfdiv_vf_nxv2f32_unmasked:
807 ; CHECK:       # %bb.0:
808 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
809 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
810 ; CHECK-NEXT:    ret
811   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
812   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
813   %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
814   ret <vscale x 2 x float> %v
817 declare <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
819 define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
820 ; CHECK-LABEL: vfdiv_vv_nxv4f32:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
823 ; CHECK-NEXT:    vfdiv.vv v8, v8, v10, v0.t
824 ; CHECK-NEXT:    ret
825   %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
826   ret <vscale x 4 x float> %v
829 define <vscale x 4 x float> @vfdiv_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, i32 zeroext %evl) {
830 ; CHECK-LABEL: vfdiv_vv_nxv4f32_unmasked:
831 ; CHECK:       # %bb.0:
832 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
833 ; CHECK-NEXT:    vfdiv.vv v8, v8, v10
834 ; CHECK-NEXT:    ret
835   %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
836   ret <vscale x 4 x float> %v
839 define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
840 ; CHECK-LABEL: vfdiv_vf_nxv4f32:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
843 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
844 ; CHECK-NEXT:    ret
845   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
846   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
847   %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
848   ret <vscale x 4 x float> %v
851 define <vscale x 4 x float> @vfdiv_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {
852 ; CHECK-LABEL: vfdiv_vf_nxv4f32_unmasked:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
855 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
856 ; CHECK-NEXT:    ret
857   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
858   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
859   %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
860   ret <vscale x 4 x float> %v
863 declare <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
865 define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
866 ; CHECK-LABEL: vfdiv_vv_nxv8f32:
867 ; CHECK:       # %bb.0:
868 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
869 ; CHECK-NEXT:    vfdiv.vv v8, v8, v12, v0.t
870 ; CHECK-NEXT:    ret
871   %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
872   ret <vscale x 8 x float> %v
875 define <vscale x 8 x float> @vfdiv_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, i32 zeroext %evl) {
876 ; CHECK-LABEL: vfdiv_vv_nxv8f32_unmasked:
877 ; CHECK:       # %bb.0:
878 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
879 ; CHECK-NEXT:    vfdiv.vv v8, v8, v12
880 ; CHECK-NEXT:    ret
881   %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
882   ret <vscale x 8 x float> %v
885 define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
886 ; CHECK-LABEL: vfdiv_vf_nxv8f32:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
889 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
890 ; CHECK-NEXT:    ret
891   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
892   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
893   %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
894   ret <vscale x 8 x float> %v
897 define <vscale x 8 x float> @vfdiv_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {
898 ; CHECK-LABEL: vfdiv_vf_nxv8f32_unmasked:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
901 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
902 ; CHECK-NEXT:    ret
903   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
904   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
905   %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
906   ret <vscale x 8 x float> %v
909 declare <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
911 define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
912 ; CHECK-LABEL: vfdiv_vv_nxv16f32:
913 ; CHECK:       # %bb.0:
914 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
915 ; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
916 ; CHECK-NEXT:    ret
917   %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
918   ret <vscale x 16 x float> %v
921 define <vscale x 16 x float> @vfdiv_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, i32 zeroext %evl) {
922 ; CHECK-LABEL: vfdiv_vv_nxv16f32_unmasked:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
925 ; CHECK-NEXT:    vfdiv.vv v8, v8, v16
926 ; CHECK-NEXT:    ret
927   %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
928   ret <vscale x 16 x float> %v
931 define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
932 ; CHECK-LABEL: vfdiv_vf_nxv16f32:
933 ; CHECK:       # %bb.0:
934 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
935 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
936 ; CHECK-NEXT:    ret
937   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
938   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
939   %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
940   ret <vscale x 16 x float> %v
943 define <vscale x 16 x float> @vfdiv_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {
944 ; CHECK-LABEL: vfdiv_vf_nxv16f32_unmasked:
945 ; CHECK:       # %bb.0:
946 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
947 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
948 ; CHECK-NEXT:    ret
949   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
950   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
951   %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
952   ret <vscale x 16 x float> %v
955 declare <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
957 define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
958 ; CHECK-LABEL: vfdiv_vv_nxv1f64:
959 ; CHECK:       # %bb.0:
960 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
961 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
962 ; CHECK-NEXT:    ret
963   %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
964   ret <vscale x 1 x double> %v
967 define <vscale x 1 x double> @vfdiv_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, i32 zeroext %evl) {
968 ; CHECK-LABEL: vfdiv_vv_nxv1f64_unmasked:
969 ; CHECK:       # %bb.0:
970 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
971 ; CHECK-NEXT:    vfdiv.vv v8, v8, v9
972 ; CHECK-NEXT:    ret
973   %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
974   ret <vscale x 1 x double> %v
977 define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
978 ; CHECK-LABEL: vfdiv_vf_nxv1f64:
979 ; CHECK:       # %bb.0:
980 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
981 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
982 ; CHECK-NEXT:    ret
983   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
984   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
985   %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
986   ret <vscale x 1 x double> %v
989 define <vscale x 1 x double> @vfdiv_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {
990 ; CHECK-LABEL: vfdiv_vf_nxv1f64_unmasked:
991 ; CHECK:       # %bb.0:
992 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
993 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
994 ; CHECK-NEXT:    ret
995   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
996   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
997   %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
998   ret <vscale x 1 x double> %v
1001 declare <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
1003 define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1004 ; CHECK-LABEL: vfdiv_vv_nxv2f64:
1005 ; CHECK:       # %bb.0:
1006 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1007 ; CHECK-NEXT:    vfdiv.vv v8, v8, v10, v0.t
1008 ; CHECK-NEXT:    ret
1009   %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
1010   ret <vscale x 2 x double> %v
1013 define <vscale x 2 x double> @vfdiv_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, i32 zeroext %evl) {
1014 ; CHECK-LABEL: vfdiv_vv_nxv2f64_unmasked:
1015 ; CHECK:       # %bb.0:
1016 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1017 ; CHECK-NEXT:    vfdiv.vv v8, v8, v10
1018 ; CHECK-NEXT:    ret
1019   %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1020   ret <vscale x 2 x double> %v
1023 define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1024 ; CHECK-LABEL: vfdiv_vf_nxv2f64:
1025 ; CHECK:       # %bb.0:
1026 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1027 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1028 ; CHECK-NEXT:    ret
1029   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1030   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1031   %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
1032   ret <vscale x 2 x double> %v
1035 define <vscale x 2 x double> @vfdiv_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {
1036 ; CHECK-LABEL: vfdiv_vf_nxv2f64_unmasked:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1039 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1040 ; CHECK-NEXT:    ret
1041   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1042   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1043   %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1044   ret <vscale x 2 x double> %v
1047 declare <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
1049 define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1050 ; CHECK-LABEL: vfdiv_vv_nxv4f64:
1051 ; CHECK:       # %bb.0:
1052 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1053 ; CHECK-NEXT:    vfdiv.vv v8, v8, v12, v0.t
1054 ; CHECK-NEXT:    ret
1055   %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
1056   ret <vscale x 4 x double> %v
1059 define <vscale x 4 x double> @vfdiv_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, i32 zeroext %evl) {
1060 ; CHECK-LABEL: vfdiv_vv_nxv4f64_unmasked:
1061 ; CHECK:       # %bb.0:
1062 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1063 ; CHECK-NEXT:    vfdiv.vv v8, v8, v12
1064 ; CHECK-NEXT:    ret
1065   %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1066   ret <vscale x 4 x double> %v
1069 define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1070 ; CHECK-LABEL: vfdiv_vf_nxv4f64:
1071 ; CHECK:       # %bb.0:
1072 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1073 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1074 ; CHECK-NEXT:    ret
1075   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1076   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1077   %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
1078   ret <vscale x 4 x double> %v
1081 define <vscale x 4 x double> @vfdiv_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {
1082 ; CHECK-LABEL: vfdiv_vf_nxv4f64_unmasked:
1083 ; CHECK:       # %bb.0:
1084 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1085 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1086 ; CHECK-NEXT:    ret
1087   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1088   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1089   %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1090   ret <vscale x 4 x double> %v
1093 declare <vscale x 7 x double> @llvm.vp.fdiv.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32)
1095 define <vscale x 7 x double> @vfdiv_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {
1096 ; CHECK-LABEL: vfdiv_vv_nxv7f64:
1097 ; CHECK:       # %bb.0:
1098 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1099 ; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1100 ; CHECK-NEXT:    ret
1101   %v = call <vscale x 7 x double> @llvm.vp.fdiv.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 %evl)
1102   ret <vscale x 7 x double> %v
1105 declare <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
1107 define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1108 ; CHECK-LABEL: vfdiv_vv_nxv8f64:
1109 ; CHECK:       # %bb.0:
1110 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1111 ; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1112 ; CHECK-NEXT:    ret
1113   %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
1114   ret <vscale x 8 x double> %v
1117 define <vscale x 8 x double> @vfdiv_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, i32 zeroext %evl) {
1118 ; CHECK-LABEL: vfdiv_vv_nxv8f64_unmasked:
1119 ; CHECK:       # %bb.0:
1120 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1121 ; CHECK-NEXT:    vfdiv.vv v8, v8, v16
1122 ; CHECK-NEXT:    ret
1123   %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1124   ret <vscale x 8 x double> %v
1127 define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1128 ; CHECK-LABEL: vfdiv_vf_nxv8f64:
1129 ; CHECK:       # %bb.0:
1130 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1131 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1132 ; CHECK-NEXT:    ret
1133   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1134   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1135   %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
1136   ret <vscale x 8 x double> %v
1139 define <vscale x 8 x double> @vfdiv_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {
1140 ; CHECK-LABEL: vfdiv_vf_nxv8f64_unmasked:
1141 ; CHECK:       # %bb.0:
1142 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1143 ; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1144 ; CHECK-NEXT:    ret
1145   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1146   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1147   %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1148   ret <vscale x 8 x double> %v