xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfdiv-vp.ll (revision 8ce81f17a16b8b689895c7c093d0401a75c09882)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \
3; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
4; RUN:     --check-prefixes=CHECK,ZVFH
5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \
6; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
7; RUN:     --check-prefixes=CHECK,ZVFH
8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
9; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
10; RUN:     --check-prefixes=CHECK,ZVFHMIN
11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
12; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
13; RUN:     --check-prefixes=CHECK,ZVFHMIN
14
15declare <vscale x 1 x bfloat> @llvm.vp.fdiv.nxv1bf16(<vscale x 1 x bfloat>, <vscale x 1 x bfloat>, <vscale x 1 x i1>, i32)
16
17define <vscale x 1 x bfloat> @vfdiv_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
18; CHECK-LABEL: vfdiv_vv_nxv1bf16:
19; CHECK:       # %bb.0:
20; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
21; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
22; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8, v0.t
23; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
24; CHECK-NEXT:    vfdiv.vv v9, v9, v10, v0.t
25; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
26; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9, v0.t
27; CHECK-NEXT:    ret
28  %v = call <vscale x 1 x bfloat> @llvm.vp.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x i1> %m, i32 %evl)
29  ret <vscale x 1 x bfloat> %v
30}
31
32define <vscale x 1 x bfloat> @vfdiv_vv_nxv1bf16_unmasked(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, i32 zeroext %evl) {
33; CHECK-LABEL: vfdiv_vv_nxv1bf16_unmasked:
34; CHECK:       # %bb.0:
35; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
36; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
37; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
38; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
39; CHECK-NEXT:    vfdiv.vv v9, v9, v10
40; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
41; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
42; CHECK-NEXT:    ret
43  %v = call <vscale x 1 x bfloat> @llvm.vp.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
44  ret <vscale x 1 x bfloat> %v
45}
46
47define <vscale x 1 x bfloat> @vfdiv_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
48; CHECK-LABEL: vfdiv_vf_nxv1bf16:
49; CHECK:       # %bb.0:
50; CHECK-NEXT:    fmv.x.h a1, fa0
51; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
52; CHECK-NEXT:    vmv.v.x v9, a1
53; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
54; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9, v0.t
55; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
56; CHECK-NEXT:    vfdiv.vv v9, v10, v8, v0.t
57; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
58; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9, v0.t
59; CHECK-NEXT:    ret
60  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
61  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
62  %v = call <vscale x 1 x bfloat> @llvm.vp.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> %m, i32 %evl)
63  ret <vscale x 1 x bfloat> %v
64}
65
66define <vscale x 1 x bfloat> @vfdiv_vf_nxv1bf16_unmasked(<vscale x 1 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
67; CHECK-LABEL: vfdiv_vf_nxv1bf16_unmasked:
68; CHECK:       # %bb.0:
69; CHECK-NEXT:    fmv.x.h a1, fa0
70; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
71; CHECK-NEXT:    vmv.v.x v9, a1
72; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
73; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9
74; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
75; CHECK-NEXT:    vfdiv.vv v9, v10, v8
76; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
77; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
78; CHECK-NEXT:    ret
79  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
80  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
81  %v = call <vscale x 1 x bfloat> @llvm.vp.fdiv.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
82  ret <vscale x 1 x bfloat> %v
83}
84
85declare <vscale x 2 x bfloat> @llvm.vp.fdiv.nxv2bf16(<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x i1>, i32)
86
87define <vscale x 2 x bfloat> @vfdiv_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
88; CHECK-LABEL: vfdiv_vv_nxv2bf16:
89; CHECK:       # %bb.0:
90; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
91; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
92; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8, v0.t
93; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
94; CHECK-NEXT:    vfdiv.vv v9, v9, v10, v0.t
95; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
96; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9, v0.t
97; CHECK-NEXT:    ret
98  %v = call <vscale x 2 x bfloat> @llvm.vp.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x i1> %m, i32 %evl)
99  ret <vscale x 2 x bfloat> %v
100}
101
102define <vscale x 2 x bfloat> @vfdiv_vv_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, i32 zeroext %evl) {
103; CHECK-LABEL: vfdiv_vv_nxv2bf16_unmasked:
104; CHECK:       # %bb.0:
105; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
106; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
107; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
108; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
109; CHECK-NEXT:    vfdiv.vv v9, v9, v10
110; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
111; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
112; CHECK-NEXT:    ret
113  %v = call <vscale x 2 x bfloat> @llvm.vp.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
114  ret <vscale x 2 x bfloat> %v
115}
116
117define <vscale x 2 x bfloat> @vfdiv_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
118; CHECK-LABEL: vfdiv_vf_nxv2bf16:
119; CHECK:       # %bb.0:
120; CHECK-NEXT:    fmv.x.h a1, fa0
121; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
122; CHECK-NEXT:    vmv.v.x v9, a1
123; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
124; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9, v0.t
125; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
126; CHECK-NEXT:    vfdiv.vv v9, v10, v8, v0.t
127; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
128; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9, v0.t
129; CHECK-NEXT:    ret
130  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
131  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
132  %v = call <vscale x 2 x bfloat> @llvm.vp.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, <vscale x 2 x i1> %m, i32 %evl)
133  ret <vscale x 2 x bfloat> %v
134}
135
136define <vscale x 2 x bfloat> @vfdiv_vf_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
137; CHECK-LABEL: vfdiv_vf_nxv2bf16_unmasked:
138; CHECK:       # %bb.0:
139; CHECK-NEXT:    fmv.x.h a1, fa0
140; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
141; CHECK-NEXT:    vmv.v.x v9, a1
142; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
143; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9
144; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
145; CHECK-NEXT:    vfdiv.vv v9, v10, v8
146; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
147; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
148; CHECK-NEXT:    ret
149  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
150  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
151  %v = call <vscale x 2 x bfloat> @llvm.vp.fdiv.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
152  ret <vscale x 2 x bfloat> %v
153}
154
155declare <vscale x 4 x bfloat> @llvm.vp.fdiv.nxv4bf16(<vscale x 4 x bfloat>, <vscale x 4 x bfloat>, <vscale x 4 x i1>, i32)
156
157define <vscale x 4 x bfloat> @vfdiv_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
158; CHECK-LABEL: vfdiv_vv_nxv4bf16:
159; CHECK:       # %bb.0:
160; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
161; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
162; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8, v0.t
163; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
164; CHECK-NEXT:    vfdiv.vv v10, v12, v10, v0.t
165; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
166; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10, v0.t
167; CHECK-NEXT:    ret
168  %v = call <vscale x 4 x bfloat> @llvm.vp.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x i1> %m, i32 %evl)
169  ret <vscale x 4 x bfloat> %v
170}
171
172define <vscale x 4 x bfloat> @vfdiv_vv_nxv4bf16_unmasked(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, i32 zeroext %evl) {
173; CHECK-LABEL: vfdiv_vv_nxv4bf16_unmasked:
174; CHECK:       # %bb.0:
175; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
176; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
177; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
178; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
179; CHECK-NEXT:    vfdiv.vv v10, v12, v10
180; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
181; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
182; CHECK-NEXT:    ret
183  %v = call <vscale x 4 x bfloat> @llvm.vp.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
184  ret <vscale x 4 x bfloat> %v
185}
186
187define <vscale x 4 x bfloat> @vfdiv_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
188; CHECK-LABEL: vfdiv_vf_nxv4bf16:
189; CHECK:       # %bb.0:
190; CHECK-NEXT:    fmv.x.h a1, fa0
191; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
192; CHECK-NEXT:    vmv.v.x v9, a1
193; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
194; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9, v0.t
195; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
196; CHECK-NEXT:    vfdiv.vv v10, v10, v12, v0.t
197; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
198; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10, v0.t
199; CHECK-NEXT:    ret
200  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
201  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
202  %v = call <vscale x 4 x bfloat> @llvm.vp.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, <vscale x 4 x i1> %m, i32 %evl)
203  ret <vscale x 4 x bfloat> %v
204}
205
206define <vscale x 4 x bfloat> @vfdiv_vf_nxv4bf16_unmasked(<vscale x 4 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
207; CHECK-LABEL: vfdiv_vf_nxv4bf16_unmasked:
208; CHECK:       # %bb.0:
209; CHECK-NEXT:    fmv.x.h a1, fa0
210; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
211; CHECK-NEXT:    vmv.v.x v9, a1
212; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
213; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
214; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
215; CHECK-NEXT:    vfdiv.vv v10, v10, v12
216; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
217; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
218; CHECK-NEXT:    ret
219  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
220  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
221  %v = call <vscale x 4 x bfloat> @llvm.vp.fdiv.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
222  ret <vscale x 4 x bfloat> %v
223}
224
225declare <vscale x 8 x bfloat> @llvm.vp.fdiv.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x i1>, i32)
226
227define <vscale x 8 x bfloat> @vfdiv_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
228; CHECK-LABEL: vfdiv_vv_nxv8bf16:
229; CHECK:       # %bb.0:
230; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
231; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10, v0.t
232; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
233; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
234; CHECK-NEXT:    vfdiv.vv v12, v16, v12, v0.t
235; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
236; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
237; CHECK-NEXT:    ret
238  %v = call <vscale x 8 x bfloat> @llvm.vp.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x i1> %m, i32 %evl)
239  ret <vscale x 8 x bfloat> %v
240}
241
242define <vscale x 8 x bfloat> @vfdiv_vv_nxv8bf16_unmasked(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, i32 zeroext %evl) {
243; CHECK-LABEL: vfdiv_vv_nxv8bf16_unmasked:
244; CHECK:       # %bb.0:
245; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
246; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
247; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
248; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
249; CHECK-NEXT:    vfdiv.vv v12, v16, v12
250; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
251; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
252; CHECK-NEXT:    ret
253  %v = call <vscale x 8 x bfloat> @llvm.vp.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
254  ret <vscale x 8 x bfloat> %v
255}
256
257define <vscale x 8 x bfloat> @vfdiv_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
258; CHECK-LABEL: vfdiv_vf_nxv8bf16:
259; CHECK:       # %bb.0:
260; CHECK-NEXT:    fmv.x.h a1, fa0
261; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
262; CHECK-NEXT:    vmv.v.x v10, a1
263; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8, v0.t
264; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10, v0.t
265; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
266; CHECK-NEXT:    vfdiv.vv v12, v12, v16, v0.t
267; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
268; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
269; CHECK-NEXT:    ret
270  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
271  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
272  %v = call <vscale x 8 x bfloat> @llvm.vp.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> %m, i32 %evl)
273  ret <vscale x 8 x bfloat> %v
274}
275
276define <vscale x 8 x bfloat> @vfdiv_vf_nxv8bf16_unmasked(<vscale x 8 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
277; CHECK-LABEL: vfdiv_vf_nxv8bf16_unmasked:
278; CHECK:       # %bb.0:
279; CHECK-NEXT:    fmv.x.h a1, fa0
280; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
281; CHECK-NEXT:    vmv.v.x v10, a1
282; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
283; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
284; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
285; CHECK-NEXT:    vfdiv.vv v12, v12, v16
286; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
287; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
288; CHECK-NEXT:    ret
289  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
290  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
291  %v = call <vscale x 8 x bfloat> @llvm.vp.fdiv.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
292  ret <vscale x 8 x bfloat> %v
293}
294
295declare <vscale x 16 x bfloat> @llvm.vp.fdiv.nxv16bf16(<vscale x 16 x bfloat>, <vscale x 16 x bfloat>, <vscale x 16 x i1>, i32)
296
297define <vscale x 16 x bfloat> @vfdiv_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
298; CHECK-LABEL: vfdiv_vv_nxv16bf16:
299; CHECK:       # %bb.0:
300; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
301; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
302; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8, v0.t
303; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
304; CHECK-NEXT:    vfdiv.vv v16, v24, v16, v0.t
305; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
306; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
307; CHECK-NEXT:    ret
308  %v = call <vscale x 16 x bfloat> @llvm.vp.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x i1> %m, i32 %evl)
309  ret <vscale x 16 x bfloat> %v
310}
311
312define <vscale x 16 x bfloat> @vfdiv_vv_nxv16bf16_unmasked(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, i32 zeroext %evl) {
313; CHECK-LABEL: vfdiv_vv_nxv16bf16_unmasked:
314; CHECK:       # %bb.0:
315; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
316; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
317; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
318; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
319; CHECK-NEXT:    vfdiv.vv v16, v24, v16
320; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
321; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
322; CHECK-NEXT:    ret
323  %v = call <vscale x 16 x bfloat> @llvm.vp.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
324  ret <vscale x 16 x bfloat> %v
325}
326
327define <vscale x 16 x bfloat> @vfdiv_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
328; CHECK-LABEL: vfdiv_vf_nxv16bf16:
329; CHECK:       # %bb.0:
330; CHECK-NEXT:    fmv.x.h a1, fa0
331; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
332; CHECK-NEXT:    vmv.v.x v12, a1
333; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
334; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
335; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
336; CHECK-NEXT:    vfdiv.vv v16, v16, v24, v0.t
337; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
338; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
339; CHECK-NEXT:    ret
340  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
341  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
342  %v = call <vscale x 16 x bfloat> @llvm.vp.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, <vscale x 16 x i1> %m, i32 %evl)
343  ret <vscale x 16 x bfloat> %v
344}
345
346define <vscale x 16 x bfloat> @vfdiv_vf_nxv16bf16_unmasked(<vscale x 16 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
347; CHECK-LABEL: vfdiv_vf_nxv16bf16_unmasked:
348; CHECK:       # %bb.0:
349; CHECK-NEXT:    fmv.x.h a1, fa0
350; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
351; CHECK-NEXT:    vmv.v.x v12, a1
352; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
353; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12
354; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
355; CHECK-NEXT:    vfdiv.vv v16, v16, v24
356; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
357; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
358; CHECK-NEXT:    ret
359  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
360  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
361  %v = call <vscale x 16 x bfloat> @llvm.vp.fdiv.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
362  ret <vscale x 16 x bfloat> %v
363}
364
365declare <vscale x 32 x bfloat> @llvm.vp.fdiv.nxv32bf16(<vscale x 32 x bfloat>, <vscale x 32 x bfloat>, <vscale x 32 x i1>, i32)
366
367define <vscale x 32 x bfloat> @vfdiv_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
368; CHECK-LABEL: vfdiv_vv_nxv32bf16:
369; CHECK:       # %bb.0:
370; CHECK-NEXT:    addi sp, sp, -16
371; CHECK-NEXT:    .cfi_def_cfa_offset 16
372; CHECK-NEXT:    csrr a1, vlenb
373; CHECK-NEXT:    slli a1, a1, 3
374; CHECK-NEXT:    mv a2, a1
375; CHECK-NEXT:    slli a1, a1, 1
376; CHECK-NEXT:    add a1, a1, a2
377; CHECK-NEXT:    sub sp, sp, a1
378; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
379; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
380; CHECK-NEXT:    vmv1r.v v7, v0
381; CHECK-NEXT:    csrr a1, vlenb
382; CHECK-NEXT:    slli a1, a1, 4
383; CHECK-NEXT:    add a1, sp, a1
384; CHECK-NEXT:    addi a1, a1, 16
385; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
386; CHECK-NEXT:    csrr a2, vlenb
387; CHECK-NEXT:    slli a1, a2, 1
388; CHECK-NEXT:    srli a2, a2, 2
389; CHECK-NEXT:    sub a3, a0, a1
390; CHECK-NEXT:    vslidedown.vx v0, v0, a2
391; CHECK-NEXT:    sltu a2, a0, a3
392; CHECK-NEXT:    addi a2, a2, -1
393; CHECK-NEXT:    and a2, a2, a3
394; CHECK-NEXT:    vmv4r.v v8, v16
395; CHECK-NEXT:    csrr a3, vlenb
396; CHECK-NEXT:    slli a3, a3, 3
397; CHECK-NEXT:    add a3, sp, a3
398; CHECK-NEXT:    addi a3, a3, 16
399; CHECK-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
400; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
401; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
402; CHECK-NEXT:    addi a2, sp, 16
403; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
404; CHECK-NEXT:    csrr a2, vlenb
405; CHECK-NEXT:    slli a2, a2, 4
406; CHECK-NEXT:    add a2, sp, a2
407; CHECK-NEXT:    addi a2, a2, 16
408; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
409; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
410; CHECK-NEXT:    addi a2, sp, 16
411; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
412; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
413; CHECK-NEXT:    vfdiv.vv v16, v8, v16, v0.t
414; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
415; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16, v0.t
416; CHECK-NEXT:    bltu a0, a1, .LBB20_2
417; CHECK-NEXT:  # %bb.1:
418; CHECK-NEXT:    mv a0, a1
419; CHECK-NEXT:  .LBB20_2:
420; CHECK-NEXT:    vmv1r.v v0, v7
421; CHECK-NEXT:    csrr a1, vlenb
422; CHECK-NEXT:    slli a1, a1, 3
423; CHECK-NEXT:    add a1, sp, a1
424; CHECK-NEXT:    addi a1, a1, 16
425; CHECK-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
426; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
427; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
428; CHECK-NEXT:    addi a0, sp, 16
429; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
430; CHECK-NEXT:    csrr a0, vlenb
431; CHECK-NEXT:    slli a0, a0, 4
432; CHECK-NEXT:    add a0, sp, a0
433; CHECK-NEXT:    addi a0, a0, 16
434; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
435; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
436; CHECK-NEXT:    addi a0, sp, 16
437; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
438; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
439; CHECK-NEXT:    vfdiv.vv v16, v24, v16, v0.t
440; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
441; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
442; CHECK-NEXT:    csrr a0, vlenb
443; CHECK-NEXT:    slli a0, a0, 3
444; CHECK-NEXT:    mv a1, a0
445; CHECK-NEXT:    slli a0, a0, 1
446; CHECK-NEXT:    add a0, a0, a1
447; CHECK-NEXT:    add sp, sp, a0
448; CHECK-NEXT:    .cfi_def_cfa sp, 16
449; CHECK-NEXT:    addi sp, sp, 16
450; CHECK-NEXT:    .cfi_def_cfa_offset 0
451; CHECK-NEXT:    ret
452  %v = call <vscale x 32 x bfloat> @llvm.vp.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x i1> %m, i32 %evl)
453  ret <vscale x 32 x bfloat> %v
454}
455
456define <vscale x 32 x bfloat> @vfdiv_vv_nxv32bf16_unmasked(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, i32 zeroext %evl) {
457; CHECK-LABEL: vfdiv_vv_nxv32bf16_unmasked:
458; CHECK:       # %bb.0:
459; CHECK-NEXT:    addi sp, sp, -16
460; CHECK-NEXT:    .cfi_def_cfa_offset 16
461; CHECK-NEXT:    csrr a1, vlenb
462; CHECK-NEXT:    slli a1, a1, 3
463; CHECK-NEXT:    sub sp, sp, a1
464; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
465; CHECK-NEXT:    csrr a2, vlenb
466; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
467; CHECK-NEXT:    vmset.m v24
468; CHECK-NEXT:    slli a1, a2, 1
469; CHECK-NEXT:    srli a2, a2, 2
470; CHECK-NEXT:    sub a3, a0, a1
471; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
472; CHECK-NEXT:    vslidedown.vx v0, v24, a2
473; CHECK-NEXT:    sltu a2, a0, a3
474; CHECK-NEXT:    addi a2, a2, -1
475; CHECK-NEXT:    and a2, a2, a3
476; CHECK-NEXT:    addi a3, sp, 16
477; CHECK-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
478; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
479; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
480; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
481; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
482; CHECK-NEXT:    vfdiv.vv v16, v16, v24, v0.t
483; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
484; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16, v0.t
485; CHECK-NEXT:    bltu a0, a1, .LBB21_2
486; CHECK-NEXT:  # %bb.1:
487; CHECK-NEXT:    mv a0, a1
488; CHECK-NEXT:  .LBB21_2:
489; CHECK-NEXT:    addi a1, sp, 16
490; CHECK-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
491; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
492; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v24
493; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
494; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
495; CHECK-NEXT:    vfdiv.vv v16, v24, v16
496; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
497; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
498; CHECK-NEXT:    csrr a0, vlenb
499; CHECK-NEXT:    slli a0, a0, 3
500; CHECK-NEXT:    add sp, sp, a0
501; CHECK-NEXT:    .cfi_def_cfa sp, 16
502; CHECK-NEXT:    addi sp, sp, 16
503; CHECK-NEXT:    .cfi_def_cfa_offset 0
504; CHECK-NEXT:    ret
505  %v = call <vscale x 32 x bfloat> @llvm.vp.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
506  ret <vscale x 32 x bfloat> %v
507}
508
509define <vscale x 32 x bfloat> @vfdiv_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
510; CHECK-LABEL: vfdiv_vf_nxv32bf16:
511; CHECK:       # %bb.0:
512; CHECK-NEXT:    addi sp, sp, -16
513; CHECK-NEXT:    .cfi_def_cfa_offset 16
514; CHECK-NEXT:    csrr a1, vlenb
515; CHECK-NEXT:    slli a1, a1, 3
516; CHECK-NEXT:    mv a2, a1
517; CHECK-NEXT:    slli a1, a1, 1
518; CHECK-NEXT:    add a1, a1, a2
519; CHECK-NEXT:    sub sp, sp, a1
520; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
521; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
522; CHECK-NEXT:    vmv1r.v v7, v0
523; CHECK-NEXT:    vmv8r.v v16, v8
524; CHECK-NEXT:    fmv.x.h a1, fa0
525; CHECK-NEXT:    csrr a2, vlenb
526; CHECK-NEXT:    vmv.v.x v8, a1
527; CHECK-NEXT:    slli a1, a2, 1
528; CHECK-NEXT:    srli a2, a2, 2
529; CHECK-NEXT:    sub a3, a0, a1
530; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
531; CHECK-NEXT:    vslidedown.vx v0, v0, a2
532; CHECK-NEXT:    sltu a2, a0, a3
533; CHECK-NEXT:    addi a2, a2, -1
534; CHECK-NEXT:    and a2, a2, a3
535; CHECK-NEXT:    csrr a3, vlenb
536; CHECK-NEXT:    slli a3, a3, 3
537; CHECK-NEXT:    add a3, sp, a3
538; CHECK-NEXT:    addi a3, a3, 16
539; CHECK-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
540; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
541; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
542; CHECK-NEXT:    vmv4r.v v8, v16
543; CHECK-NEXT:    csrr a2, vlenb
544; CHECK-NEXT:    slli a2, a2, 4
545; CHECK-NEXT:    add a2, sp, a2
546; CHECK-NEXT:    addi a2, a2, 16
547; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
548; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
549; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
550; CHECK-NEXT:    vfdiv.vv v24, v8, v24, v0.t
551; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
552; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24, v0.t
553; CHECK-NEXT:    bltu a0, a1, .LBB22_2
554; CHECK-NEXT:  # %bb.1:
555; CHECK-NEXT:    mv a0, a1
556; CHECK-NEXT:  .LBB22_2:
557; CHECK-NEXT:    vmv1r.v v0, v7
558; CHECK-NEXT:    csrr a1, vlenb
559; CHECK-NEXT:    slli a1, a1, 4
560; CHECK-NEXT:    add a1, sp, a1
561; CHECK-NEXT:    addi a1, a1, 16
562; CHECK-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
563; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
564; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v24, v0.t
565; CHECK-NEXT:    addi a0, sp, 16
566; CHECK-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
567; CHECK-NEXT:    csrr a0, vlenb
568; CHECK-NEXT:    slli a0, a0, 3
569; CHECK-NEXT:    add a0, sp, a0
570; CHECK-NEXT:    addi a0, a0, 16
571; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
572; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v24, v0.t
573; CHECK-NEXT:    vmv8r.v v24, v16
574; CHECK-NEXT:    addi a0, sp, 16
575; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
576; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
577; CHECK-NEXT:    vfdiv.vv v24, v16, v24, v0.t
578; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
579; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24, v0.t
580; CHECK-NEXT:    csrr a0, vlenb
581; CHECK-NEXT:    slli a0, a0, 3
582; CHECK-NEXT:    mv a1, a0
583; CHECK-NEXT:    slli a0, a0, 1
584; CHECK-NEXT:    add a0, a0, a1
585; CHECK-NEXT:    add sp, sp, a0
586; CHECK-NEXT:    .cfi_def_cfa sp, 16
587; CHECK-NEXT:    addi sp, sp, 16
588; CHECK-NEXT:    .cfi_def_cfa_offset 0
589; CHECK-NEXT:    ret
590  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
591  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
592  %v = call <vscale x 32 x bfloat> @llvm.vp.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, <vscale x 32 x i1> %m, i32 %evl)
593  ret <vscale x 32 x bfloat> %v
594}
595
596define <vscale x 32 x bfloat> @vfdiv_vf_nxv32bf16_unmasked(<vscale x 32 x bfloat> %va, bfloat %b, i32 zeroext %evl) {
597; CHECK-LABEL: vfdiv_vf_nxv32bf16_unmasked:
598; CHECK:       # %bb.0:
599; CHECK-NEXT:    addi sp, sp, -16
600; CHECK-NEXT:    .cfi_def_cfa_offset 16
601; CHECK-NEXT:    csrr a1, vlenb
602; CHECK-NEXT:    slli a1, a1, 3
603; CHECK-NEXT:    sub sp, sp, a1
604; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
605; CHECK-NEXT:    fmv.x.h a1, fa0
606; CHECK-NEXT:    csrr a2, vlenb
607; CHECK-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
608; CHECK-NEXT:    vmset.m v24
609; CHECK-NEXT:    vmv.v.x v16, a1
610; CHECK-NEXT:    slli a1, a2, 1
611; CHECK-NEXT:    srli a2, a2, 2
612; CHECK-NEXT:    sub a3, a0, a1
613; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
614; CHECK-NEXT:    vslidedown.vx v0, v24, a2
615; CHECK-NEXT:    sltu a2, a0, a3
616; CHECK-NEXT:    addi a2, a2, -1
617; CHECK-NEXT:    and a2, a2, a3
618; CHECK-NEXT:    addi a3, sp, 16
619; CHECK-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
620; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
621; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
622; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
623; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
624; CHECK-NEXT:    vfdiv.vv v16, v16, v24, v0.t
625; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
626; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16, v0.t
627; CHECK-NEXT:    bltu a0, a1, .LBB23_2
628; CHECK-NEXT:  # %bb.1:
629; CHECK-NEXT:    mv a0, a1
630; CHECK-NEXT:  .LBB23_2:
631; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
632; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
633; CHECK-NEXT:    addi a0, sp, 16
634; CHECK-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
635; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v0
636; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
637; CHECK-NEXT:    vfdiv.vv v16, v16, v24
638; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
639; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
640; CHECK-NEXT:    csrr a0, vlenb
641; CHECK-NEXT:    slli a0, a0, 3
642; CHECK-NEXT:    add sp, sp, a0
643; CHECK-NEXT:    .cfi_def_cfa sp, 16
644; CHECK-NEXT:    addi sp, sp, 16
645; CHECK-NEXT:    .cfi_def_cfa_offset 0
646; CHECK-NEXT:    ret
647  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
648  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
649  %v = call <vscale x 32 x bfloat> @llvm.vp.fdiv.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
650  ret <vscale x 32 x bfloat> %v
651}
652declare <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)
653
654define <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) {
655; ZVFH-LABEL: vfdiv_vv_nxv1f16:
656; ZVFH:       # %bb.0:
657; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
658; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
659; ZVFH-NEXT:    ret
660;
661; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16:
662; ZVFHMIN:       # %bb.0:
663; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
664; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
665; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
666; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
667; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10, v0.t
668; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
669; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
670; ZVFHMIN-NEXT:    ret
671  %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)
672  ret <vscale x 1 x half> %v
673}
674
675define <vscale x 1 x half> @vfdiv_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, i32 zeroext %evl) {
676; ZVFH-LABEL: vfdiv_vv_nxv1f16_unmasked:
677; ZVFH:       # %bb.0:
678; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
679; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
680; ZVFH-NEXT:    ret
681;
682; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16_unmasked:
683; ZVFHMIN:       # %bb.0:
684; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
685; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
686; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
687; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
688; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
689; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
690; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
691; ZVFHMIN-NEXT:    ret
692  %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)
693  ret <vscale x 1 x half> %v
694}
695
696define <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) {
697; ZVFH-LABEL: vfdiv_vf_nxv1f16:
698; ZVFH:       # %bb.0:
699; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
700; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
701; ZVFH-NEXT:    ret
702;
703; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16:
704; ZVFHMIN:       # %bb.0:
705; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
706; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
707; ZVFHMIN-NEXT:    vmv.v.x v9, a1
708; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
709; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
710; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
711; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8, v0.t
712; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
713; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
714; ZVFHMIN-NEXT:    ret
715  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
716  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
717  %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)
718  ret <vscale x 1 x half> %v
719}
720
721define <vscale x 1 x half> @vfdiv_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {
722; ZVFH-LABEL: vfdiv_vf_nxv1f16_unmasked:
723; ZVFH:       # %bb.0:
724; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
725; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
726; ZVFH-NEXT:    ret
727;
728; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16_unmasked:
729; ZVFHMIN:       # %bb.0:
730; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
731; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
732; ZVFHMIN-NEXT:    vmv.v.x v9, a1
733; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
734; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
735; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
736; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8
737; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
738; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
739; ZVFHMIN-NEXT:    ret
740  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
741  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
742  %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)
743  ret <vscale x 1 x half> %v
744}
745
746declare <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)
747
748define <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) {
749; ZVFH-LABEL: vfdiv_vv_nxv2f16:
750; ZVFH:       # %bb.0:
751; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
752; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
753; ZVFH-NEXT:    ret
754;
755; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16:
756; ZVFHMIN:       # %bb.0:
757; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
758; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
759; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
760; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
761; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10, v0.t
762; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
763; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
764; ZVFHMIN-NEXT:    ret
765  %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)
766  ret <vscale x 2 x half> %v
767}
768
769define <vscale x 2 x half> @vfdiv_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, i32 zeroext %evl) {
770; ZVFH-LABEL: vfdiv_vv_nxv2f16_unmasked:
771; ZVFH:       # %bb.0:
772; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
773; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
774; ZVFH-NEXT:    ret
775;
776; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16_unmasked:
777; ZVFHMIN:       # %bb.0:
778; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
779; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
780; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
781; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
782; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
783; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
784; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
785; ZVFHMIN-NEXT:    ret
786  %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)
787  ret <vscale x 2 x half> %v
788}
789
790define <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) {
791; ZVFH-LABEL: vfdiv_vf_nxv2f16:
792; ZVFH:       # %bb.0:
793; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
794; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
795; ZVFH-NEXT:    ret
796;
797; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16:
798; ZVFHMIN:       # %bb.0:
799; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
800; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
801; ZVFHMIN-NEXT:    vmv.v.x v9, a1
802; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
803; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
804; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
805; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8, v0.t
806; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
807; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
808; ZVFHMIN-NEXT:    ret
809  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
810  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
811  %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)
812  ret <vscale x 2 x half> %v
813}
814
815define <vscale x 2 x half> @vfdiv_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {
816; ZVFH-LABEL: vfdiv_vf_nxv2f16_unmasked:
817; ZVFH:       # %bb.0:
818; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
819; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
820; ZVFH-NEXT:    ret
821;
822; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16_unmasked:
823; ZVFHMIN:       # %bb.0:
824; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
825; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
826; ZVFHMIN-NEXT:    vmv.v.x v9, a1
827; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
828; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
829; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
830; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8
831; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
832; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
833; ZVFHMIN-NEXT:    ret
834  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
835  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
836  %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)
837  ret <vscale x 2 x half> %v
838}
839
840declare <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)
841
842define <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) {
843; ZVFH-LABEL: vfdiv_vv_nxv4f16:
844; ZVFH:       # %bb.0:
845; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
846; ZVFH-NEXT:    vfdiv.vv v8, v8, v9, v0.t
847; ZVFH-NEXT:    ret
848;
849; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16:
850; ZVFHMIN:       # %bb.0:
851; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
852; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
853; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
854; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
855; ZVFHMIN-NEXT:    vfdiv.vv v10, v12, v10, v0.t
856; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
857; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
858; ZVFHMIN-NEXT:    ret
859  %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)
860  ret <vscale x 4 x half> %v
861}
862
863define <vscale x 4 x half> @vfdiv_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, i32 zeroext %evl) {
864; ZVFH-LABEL: vfdiv_vv_nxv4f16_unmasked:
865; ZVFH:       # %bb.0:
866; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
867; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
868; ZVFH-NEXT:    ret
869;
870; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16_unmasked:
871; ZVFHMIN:       # %bb.0:
872; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
873; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
874; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
875; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
876; ZVFHMIN-NEXT:    vfdiv.vv v10, v12, v10
877; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
878; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
879; ZVFHMIN-NEXT:    ret
880  %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)
881  ret <vscale x 4 x half> %v
882}
883
884define <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) {
885; ZVFH-LABEL: vfdiv_vf_nxv4f16:
886; ZVFH:       # %bb.0:
887; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
888; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
889; ZVFH-NEXT:    ret
890;
891; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16:
892; ZVFHMIN:       # %bb.0:
893; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
894; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
895; ZVFHMIN-NEXT:    vmv.v.x v9, a1
896; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
897; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
898; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
899; ZVFHMIN-NEXT:    vfdiv.vv v10, v10, v12, v0.t
900; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
901; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
902; ZVFHMIN-NEXT:    ret
903  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
904  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
905  %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)
906  ret <vscale x 4 x half> %v
907}
908
909define <vscale x 4 x half> @vfdiv_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {
910; ZVFH-LABEL: vfdiv_vf_nxv4f16_unmasked:
911; ZVFH:       # %bb.0:
912; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
913; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
914; ZVFH-NEXT:    ret
915;
916; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16_unmasked:
917; ZVFHMIN:       # %bb.0:
918; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
919; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
920; ZVFHMIN-NEXT:    vmv.v.x v9, a1
921; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
922; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
923; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
924; ZVFHMIN-NEXT:    vfdiv.vv v10, v10, v12
925; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
926; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
927; ZVFHMIN-NEXT:    ret
928  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
929  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
930  %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)
931  ret <vscale x 4 x half> %v
932}
933
934declare <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)
935
936define <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) {
937; ZVFH-LABEL: vfdiv_vv_nxv8f16:
938; ZVFH:       # %bb.0:
939; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
940; ZVFH-NEXT:    vfdiv.vv v8, v8, v10, v0.t
941; ZVFH-NEXT:    ret
942;
943; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16:
944; ZVFHMIN:       # %bb.0:
945; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
946; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
947; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
948; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
949; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12, v0.t
950; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
951; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
952; ZVFHMIN-NEXT:    ret
953  %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)
954  ret <vscale x 8 x half> %v
955}
956
957define <vscale x 8 x half> @vfdiv_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, i32 zeroext %evl) {
958; ZVFH-LABEL: vfdiv_vv_nxv8f16_unmasked:
959; ZVFH:       # %bb.0:
960; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
961; ZVFH-NEXT:    vfdiv.vv v8, v8, v10
962; ZVFH-NEXT:    ret
963;
964; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16_unmasked:
965; ZVFHMIN:       # %bb.0:
966; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
967; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
968; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
969; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
970; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12
971; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
972; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
973; ZVFHMIN-NEXT:    ret
974  %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)
975  ret <vscale x 8 x half> %v
976}
977
978define <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) {
979; ZVFH-LABEL: vfdiv_vf_nxv8f16:
980; ZVFH:       # %bb.0:
981; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
982; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
983; ZVFH-NEXT:    ret
984;
985; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16:
986; ZVFHMIN:       # %bb.0:
987; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
988; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
989; ZVFHMIN-NEXT:    vmv.v.x v10, a1
990; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
991; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
992; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
993; ZVFHMIN-NEXT:    vfdiv.vv v12, v12, v16, v0.t
994; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
995; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
996; ZVFHMIN-NEXT:    ret
997  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
998  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
999  %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)
1000  ret <vscale x 8 x half> %v
1001}
1002
1003define <vscale x 8 x half> @vfdiv_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {
1004; ZVFH-LABEL: vfdiv_vf_nxv8f16_unmasked:
1005; ZVFH:       # %bb.0:
1006; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1007; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
1008; ZVFH-NEXT:    ret
1009;
1010; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16_unmasked:
1011; ZVFHMIN:       # %bb.0:
1012; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1013; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1014; ZVFHMIN-NEXT:    vmv.v.x v10, a1
1015; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1016; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1017; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1018; ZVFHMIN-NEXT:    vfdiv.vv v12, v12, v16
1019; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1020; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1021; ZVFHMIN-NEXT:    ret
1022  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1023  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1024  %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)
1025  ret <vscale x 8 x half> %v
1026}
1027
1028declare <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)
1029
1030define <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) {
1031; ZVFH-LABEL: vfdiv_vv_nxv16f16:
1032; ZVFH:       # %bb.0:
1033; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1034; ZVFH-NEXT:    vfdiv.vv v8, v8, v12, v0.t
1035; ZVFH-NEXT:    ret
1036;
1037; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16:
1038; ZVFHMIN:       # %bb.0:
1039; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1040; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
1041; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
1042; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1043; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16, v0.t
1044; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1045; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
1046; ZVFHMIN-NEXT:    ret
1047  %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)
1048  ret <vscale x 16 x half> %v
1049}
1050
1051define <vscale x 16 x half> @vfdiv_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, i32 zeroext %evl) {
1052; ZVFH-LABEL: vfdiv_vv_nxv16f16_unmasked:
1053; ZVFH:       # %bb.0:
1054; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1055; ZVFH-NEXT:    vfdiv.vv v8, v8, v12
1056; ZVFH-NEXT:    ret
1057;
1058; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16_unmasked:
1059; ZVFHMIN:       # %bb.0:
1060; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1061; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
1062; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
1063; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1064; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
1065; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1066; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1067; ZVFHMIN-NEXT:    ret
1068  %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)
1069  ret <vscale x 16 x half> %v
1070}
1071
1072define <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) {
1073; ZVFH-LABEL: vfdiv_vf_nxv16f16:
1074; ZVFH:       # %bb.0:
1075; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1076; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1077; ZVFH-NEXT:    ret
1078;
1079; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16:
1080; ZVFHMIN:       # %bb.0:
1081; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1082; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1083; ZVFHMIN-NEXT:    vmv.v.x v12, a1
1084; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
1085; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
1086; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1087; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
1088; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1089; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
1090; ZVFHMIN-NEXT:    ret
1091  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
1092  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
1093  %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)
1094  ret <vscale x 16 x half> %v
1095}
1096
1097define <vscale x 16 x half> @vfdiv_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {
1098; ZVFH-LABEL: vfdiv_vf_nxv16f16_unmasked:
1099; ZVFH:       # %bb.0:
1100; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1101; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
1102; ZVFH-NEXT:    ret
1103;
1104; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16_unmasked:
1105; ZVFHMIN:       # %bb.0:
1106; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1107; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1108; ZVFHMIN-NEXT:    vmv.v.x v12, a1
1109; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1110; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
1111; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1112; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24
1113; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1114; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1115; ZVFHMIN-NEXT:    ret
1116  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
1117  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
1118  %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)
1119  ret <vscale x 16 x half> %v
1120}
1121
1122declare <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)
1123
1124define <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) {
1125; ZVFH-LABEL: vfdiv_vv_nxv32f16:
1126; ZVFH:       # %bb.0:
1127; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1128; ZVFH-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1129; ZVFH-NEXT:    ret
1130;
1131; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16:
1132; ZVFHMIN:       # %bb.0:
1133; ZVFHMIN-NEXT:    addi sp, sp, -16
1134; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
1135; ZVFHMIN-NEXT:    csrr a1, vlenb
1136; ZVFHMIN-NEXT:    slli a1, a1, 3
1137; ZVFHMIN-NEXT:    mv a2, a1
1138; ZVFHMIN-NEXT:    slli a1, a1, 1
1139; ZVFHMIN-NEXT:    add a1, a1, a2
1140; ZVFHMIN-NEXT:    sub sp, sp, a1
1141; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1142; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
1143; ZVFHMIN-NEXT:    vmv1r.v v7, v0
1144; ZVFHMIN-NEXT:    csrr a1, vlenb
1145; ZVFHMIN-NEXT:    slli a1, a1, 4
1146; ZVFHMIN-NEXT:    add a1, sp, a1
1147; ZVFHMIN-NEXT:    addi a1, a1, 16
1148; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1149; ZVFHMIN-NEXT:    csrr a2, vlenb
1150; ZVFHMIN-NEXT:    slli a1, a2, 1
1151; ZVFHMIN-NEXT:    srli a2, a2, 2
1152; ZVFHMIN-NEXT:    sub a3, a0, a1
1153; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
1154; ZVFHMIN-NEXT:    sltu a2, a0, a3
1155; ZVFHMIN-NEXT:    addi a2, a2, -1
1156; ZVFHMIN-NEXT:    and a2, a2, a3
1157; ZVFHMIN-NEXT:    vmv4r.v v8, v16
1158; ZVFHMIN-NEXT:    csrr a3, vlenb
1159; ZVFHMIN-NEXT:    slli a3, a3, 3
1160; ZVFHMIN-NEXT:    add a3, sp, a3
1161; ZVFHMIN-NEXT:    addi a3, a3, 16
1162; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
1163; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1164; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
1165; ZVFHMIN-NEXT:    addi a2, sp, 16
1166; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1167; ZVFHMIN-NEXT:    csrr a2, vlenb
1168; ZVFHMIN-NEXT:    slli a2, a2, 4
1169; ZVFHMIN-NEXT:    add a2, sp, a2
1170; ZVFHMIN-NEXT:    addi a2, a2, 16
1171; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1172; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
1173; ZVFHMIN-NEXT:    addi a2, sp, 16
1174; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1175; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1176; ZVFHMIN-NEXT:    vfdiv.vv v16, v8, v16, v0.t
1177; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1178; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
1179; ZVFHMIN-NEXT:    bltu a0, a1, .LBB44_2
1180; ZVFHMIN-NEXT:  # %bb.1:
1181; ZVFHMIN-NEXT:    mv a0, a1
1182; ZVFHMIN-NEXT:  .LBB44_2:
1183; ZVFHMIN-NEXT:    vmv1r.v v0, v7
1184; ZVFHMIN-NEXT:    csrr a1, vlenb
1185; ZVFHMIN-NEXT:    slli a1, a1, 3
1186; ZVFHMIN-NEXT:    add a1, sp, a1
1187; ZVFHMIN-NEXT:    addi a1, a1, 16
1188; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
1189; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1190; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
1191; ZVFHMIN-NEXT:    addi a0, sp, 16
1192; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1193; ZVFHMIN-NEXT:    csrr a0, vlenb
1194; ZVFHMIN-NEXT:    slli a0, a0, 4
1195; ZVFHMIN-NEXT:    add a0, sp, a0
1196; ZVFHMIN-NEXT:    addi a0, a0, 16
1197; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1198; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
1199; ZVFHMIN-NEXT:    addi a0, sp, 16
1200; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1201; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1202; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16, v0.t
1203; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1204; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
1205; ZVFHMIN-NEXT:    csrr a0, vlenb
1206; ZVFHMIN-NEXT:    slli a0, a0, 3
1207; ZVFHMIN-NEXT:    mv a1, a0
1208; ZVFHMIN-NEXT:    slli a0, a0, 1
1209; ZVFHMIN-NEXT:    add a0, a0, a1
1210; ZVFHMIN-NEXT:    add sp, sp, a0
1211; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
1212; ZVFHMIN-NEXT:    addi sp, sp, 16
1213; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
1214; ZVFHMIN-NEXT:    ret
1215  %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)
1216  ret <vscale x 32 x half> %v
1217}
1218
1219define <vscale x 32 x half> @vfdiv_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, i32 zeroext %evl) {
1220; ZVFH-LABEL: vfdiv_vv_nxv32f16_unmasked:
1221; ZVFH:       # %bb.0:
1222; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1223; ZVFH-NEXT:    vfdiv.vv v8, v8, v16
1224; ZVFH-NEXT:    ret
1225;
1226; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16_unmasked:
1227; ZVFHMIN:       # %bb.0:
1228; ZVFHMIN-NEXT:    addi sp, sp, -16
1229; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
1230; ZVFHMIN-NEXT:    csrr a1, vlenb
1231; ZVFHMIN-NEXT:    slli a1, a1, 3
1232; ZVFHMIN-NEXT:    sub sp, sp, a1
1233; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1234; ZVFHMIN-NEXT:    csrr a2, vlenb
1235; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
1236; ZVFHMIN-NEXT:    vmset.m v24
1237; ZVFHMIN-NEXT:    slli a1, a2, 1
1238; ZVFHMIN-NEXT:    srli a2, a2, 2
1239; ZVFHMIN-NEXT:    sub a3, a0, a1
1240; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
1241; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
1242; ZVFHMIN-NEXT:    sltu a2, a0, a3
1243; ZVFHMIN-NEXT:    addi a2, a2, -1
1244; ZVFHMIN-NEXT:    and a2, a2, a3
1245; ZVFHMIN-NEXT:    addi a3, sp, 16
1246; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
1247; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1248; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
1249; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
1250; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1251; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
1252; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1253; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
1254; ZVFHMIN-NEXT:    bltu a0, a1, .LBB45_2
1255; ZVFHMIN-NEXT:  # %bb.1:
1256; ZVFHMIN-NEXT:    mv a0, a1
1257; ZVFHMIN-NEXT:  .LBB45_2:
1258; ZVFHMIN-NEXT:    addi a1, sp, 16
1259; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
1260; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1261; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
1262; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
1263; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1264; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
1265; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1266; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1267; ZVFHMIN-NEXT:    csrr a0, vlenb
1268; ZVFHMIN-NEXT:    slli a0, a0, 3
1269; ZVFHMIN-NEXT:    add sp, sp, a0
1270; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
1271; ZVFHMIN-NEXT:    addi sp, sp, 16
1272; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
1273; ZVFHMIN-NEXT:    ret
1274  %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)
1275  ret <vscale x 32 x half> %v
1276}
1277
1278define <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) {
1279; ZVFH-LABEL: vfdiv_vf_nxv32f16:
1280; ZVFH:       # %bb.0:
1281; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1282; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1283; ZVFH-NEXT:    ret
1284;
1285; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16:
1286; ZVFHMIN:       # %bb.0:
1287; ZVFHMIN-NEXT:    addi sp, sp, -16
1288; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
1289; ZVFHMIN-NEXT:    csrr a1, vlenb
1290; ZVFHMIN-NEXT:    slli a1, a1, 3
1291; ZVFHMIN-NEXT:    mv a2, a1
1292; ZVFHMIN-NEXT:    slli a1, a1, 1
1293; ZVFHMIN-NEXT:    add a1, a1, a2
1294; ZVFHMIN-NEXT:    sub sp, sp, a1
1295; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1296; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
1297; ZVFHMIN-NEXT:    vmv1r.v v7, v0
1298; ZVFHMIN-NEXT:    vmv8r.v v16, v8
1299; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1300; ZVFHMIN-NEXT:    csrr a2, vlenb
1301; ZVFHMIN-NEXT:    vmv.v.x v8, a1
1302; ZVFHMIN-NEXT:    slli a1, a2, 1
1303; ZVFHMIN-NEXT:    srli a2, a2, 2
1304; ZVFHMIN-NEXT:    sub a3, a0, a1
1305; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
1306; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
1307; ZVFHMIN-NEXT:    sltu a2, a0, a3
1308; ZVFHMIN-NEXT:    addi a2, a2, -1
1309; ZVFHMIN-NEXT:    and a2, a2, a3
1310; ZVFHMIN-NEXT:    csrr a3, vlenb
1311; ZVFHMIN-NEXT:    slli a3, a3, 3
1312; ZVFHMIN-NEXT:    add a3, sp, a3
1313; ZVFHMIN-NEXT:    addi a3, a3, 16
1314; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
1315; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1316; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
1317; ZVFHMIN-NEXT:    vmv4r.v v8, v16
1318; ZVFHMIN-NEXT:    csrr a2, vlenb
1319; ZVFHMIN-NEXT:    slli a2, a2, 4
1320; ZVFHMIN-NEXT:    add a2, sp, a2
1321; ZVFHMIN-NEXT:    addi a2, a2, 16
1322; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1323; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
1324; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1325; ZVFHMIN-NEXT:    vfdiv.vv v24, v8, v24, v0.t
1326; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1327; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
1328; ZVFHMIN-NEXT:    bltu a0, a1, .LBB46_2
1329; ZVFHMIN-NEXT:  # %bb.1:
1330; ZVFHMIN-NEXT:    mv a0, a1
1331; ZVFHMIN-NEXT:  .LBB46_2:
1332; ZVFHMIN-NEXT:    vmv1r.v v0, v7
1333; ZVFHMIN-NEXT:    csrr a1, vlenb
1334; ZVFHMIN-NEXT:    slli a1, a1, 4
1335; ZVFHMIN-NEXT:    add a1, sp, a1
1336; ZVFHMIN-NEXT:    addi a1, a1, 16
1337; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
1338; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1339; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
1340; ZVFHMIN-NEXT:    addi a0, sp, 16
1341; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1342; ZVFHMIN-NEXT:    csrr a0, vlenb
1343; ZVFHMIN-NEXT:    slli a0, a0, 3
1344; ZVFHMIN-NEXT:    add a0, sp, a0
1345; ZVFHMIN-NEXT:    addi a0, a0, 16
1346; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1347; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
1348; ZVFHMIN-NEXT:    vmv8r.v v24, v16
1349; ZVFHMIN-NEXT:    addi a0, sp, 16
1350; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1351; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1352; ZVFHMIN-NEXT:    vfdiv.vv v24, v16, v24, v0.t
1353; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1354; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
1355; ZVFHMIN-NEXT:    csrr a0, vlenb
1356; ZVFHMIN-NEXT:    slli a0, a0, 3
1357; ZVFHMIN-NEXT:    mv a1, a0
1358; ZVFHMIN-NEXT:    slli a0, a0, 1
1359; ZVFHMIN-NEXT:    add a0, a0, a1
1360; ZVFHMIN-NEXT:    add sp, sp, a0
1361; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
1362; ZVFHMIN-NEXT:    addi sp, sp, 16
1363; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
1364; ZVFHMIN-NEXT:    ret
1365  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
1366  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
1367  %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)
1368  ret <vscale x 32 x half> %v
1369}
1370
1371define <vscale x 32 x half> @vfdiv_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {
1372; ZVFH-LABEL: vfdiv_vf_nxv32f16_unmasked:
1373; ZVFH:       # %bb.0:
1374; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1375; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
1376; ZVFH-NEXT:    ret
1377;
1378; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16_unmasked:
1379; ZVFHMIN:       # %bb.0:
1380; ZVFHMIN-NEXT:    addi sp, sp, -16
1381; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
1382; ZVFHMIN-NEXT:    csrr a1, vlenb
1383; ZVFHMIN-NEXT:    slli a1, a1, 3
1384; ZVFHMIN-NEXT:    sub sp, sp, a1
1385; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1386; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1387; ZVFHMIN-NEXT:    csrr a2, vlenb
1388; ZVFHMIN-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
1389; ZVFHMIN-NEXT:    vmset.m v24
1390; ZVFHMIN-NEXT:    vmv.v.x v16, a1
1391; ZVFHMIN-NEXT:    slli a1, a2, 1
1392; ZVFHMIN-NEXT:    srli a2, a2, 2
1393; ZVFHMIN-NEXT:    sub a3, a0, a1
1394; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
1395; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
1396; ZVFHMIN-NEXT:    sltu a2, a0, a3
1397; ZVFHMIN-NEXT:    addi a2, a2, -1
1398; ZVFHMIN-NEXT:    and a2, a2, a3
1399; ZVFHMIN-NEXT:    addi a3, sp, 16
1400; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
1401; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1402; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
1403; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
1404; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1405; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24, v0.t
1406; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1407; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
1408; ZVFHMIN-NEXT:    bltu a0, a1, .LBB47_2
1409; ZVFHMIN-NEXT:  # %bb.1:
1410; ZVFHMIN-NEXT:    mv a0, a1
1411; ZVFHMIN-NEXT:  .LBB47_2:
1412; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1413; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1414; ZVFHMIN-NEXT:    addi a0, sp, 16
1415; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1416; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
1417; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1418; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24
1419; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1420; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
1421; ZVFHMIN-NEXT:    csrr a0, vlenb
1422; ZVFHMIN-NEXT:    slli a0, a0, 3
1423; ZVFHMIN-NEXT:    add sp, sp, a0
1424; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
1425; ZVFHMIN-NEXT:    addi sp, sp, 16
1426; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
1427; ZVFHMIN-NEXT:    ret
1428  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
1429  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
1430  %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)
1431  ret <vscale x 32 x half> %v
1432}
1433
1434declare <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)
1435
1436define <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) {
1437; CHECK-LABEL: vfdiv_vv_nxv1f32:
1438; CHECK:       # %bb.0:
1439; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1440; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
1441; CHECK-NEXT:    ret
1442  %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)
1443  ret <vscale x 1 x float> %v
1444}
1445
1446define <vscale x 1 x float> @vfdiv_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, i32 zeroext %evl) {
1447; CHECK-LABEL: vfdiv_vv_nxv1f32_unmasked:
1448; CHECK:       # %bb.0:
1449; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1450; CHECK-NEXT:    vfdiv.vv v8, v8, v9
1451; CHECK-NEXT:    ret
1452  %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)
1453  ret <vscale x 1 x float> %v
1454}
1455
1456define <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) {
1457; CHECK-LABEL: vfdiv_vf_nxv1f32:
1458; CHECK:       # %bb.0:
1459; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1460; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1461; CHECK-NEXT:    ret
1462  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
1463  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
1464  %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)
1465  ret <vscale x 1 x float> %v
1466}
1467
1468define <vscale x 1 x float> @vfdiv_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {
1469; CHECK-LABEL: vfdiv_vf_nxv1f32_unmasked:
1470; CHECK:       # %bb.0:
1471; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1472; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1473; CHECK-NEXT:    ret
1474  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
1475  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
1476  %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)
1477  ret <vscale x 1 x float> %v
1478}
1479
1480declare <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)
1481
1482define <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) {
1483; CHECK-LABEL: vfdiv_vv_nxv2f32:
1484; CHECK:       # %bb.0:
1485; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1486; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
1487; CHECK-NEXT:    ret
1488  %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)
1489  ret <vscale x 2 x float> %v
1490}
1491
1492define <vscale x 2 x float> @vfdiv_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, i32 zeroext %evl) {
1493; CHECK-LABEL: vfdiv_vv_nxv2f32_unmasked:
1494; CHECK:       # %bb.0:
1495; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1496; CHECK-NEXT:    vfdiv.vv v8, v8, v9
1497; CHECK-NEXT:    ret
1498  %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)
1499  ret <vscale x 2 x float> %v
1500}
1501
1502define <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) {
1503; CHECK-LABEL: vfdiv_vf_nxv2f32:
1504; CHECK:       # %bb.0:
1505; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1506; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1507; CHECK-NEXT:    ret
1508  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
1509  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
1510  %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)
1511  ret <vscale x 2 x float> %v
1512}
1513
1514define <vscale x 2 x float> @vfdiv_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {
1515; CHECK-LABEL: vfdiv_vf_nxv2f32_unmasked:
1516; CHECK:       # %bb.0:
1517; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1518; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1519; CHECK-NEXT:    ret
1520  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
1521  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
1522  %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)
1523  ret <vscale x 2 x float> %v
1524}
1525
1526declare <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)
1527
1528define <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) {
1529; CHECK-LABEL: vfdiv_vv_nxv4f32:
1530; CHECK:       # %bb.0:
1531; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1532; CHECK-NEXT:    vfdiv.vv v8, v8, v10, v0.t
1533; CHECK-NEXT:    ret
1534  %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)
1535  ret <vscale x 4 x float> %v
1536}
1537
1538define <vscale x 4 x float> @vfdiv_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, i32 zeroext %evl) {
1539; CHECK-LABEL: vfdiv_vv_nxv4f32_unmasked:
1540; CHECK:       # %bb.0:
1541; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1542; CHECK-NEXT:    vfdiv.vv v8, v8, v10
1543; CHECK-NEXT:    ret
1544  %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)
1545  ret <vscale x 4 x float> %v
1546}
1547
1548define <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) {
1549; CHECK-LABEL: vfdiv_vf_nxv4f32:
1550; CHECK:       # %bb.0:
1551; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1552; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1553; CHECK-NEXT:    ret
1554  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
1555  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1556  %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)
1557  ret <vscale x 4 x float> %v
1558}
1559
1560define <vscale x 4 x float> @vfdiv_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {
1561; CHECK-LABEL: vfdiv_vf_nxv4f32_unmasked:
1562; CHECK:       # %bb.0:
1563; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1564; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1565; CHECK-NEXT:    ret
1566  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
1567  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1568  %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)
1569  ret <vscale x 4 x float> %v
1570}
1571
1572declare <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)
1573
1574define <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) {
1575; CHECK-LABEL: vfdiv_vv_nxv8f32:
1576; CHECK:       # %bb.0:
1577; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1578; CHECK-NEXT:    vfdiv.vv v8, v8, v12, v0.t
1579; CHECK-NEXT:    ret
1580  %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)
1581  ret <vscale x 8 x float> %v
1582}
1583
1584define <vscale x 8 x float> @vfdiv_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, i32 zeroext %evl) {
1585; CHECK-LABEL: vfdiv_vv_nxv8f32_unmasked:
1586; CHECK:       # %bb.0:
1587; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1588; CHECK-NEXT:    vfdiv.vv v8, v8, v12
1589; CHECK-NEXT:    ret
1590  %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)
1591  ret <vscale x 8 x float> %v
1592}
1593
1594define <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) {
1595; CHECK-LABEL: vfdiv_vf_nxv8f32:
1596; CHECK:       # %bb.0:
1597; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1598; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1599; CHECK-NEXT:    ret
1600  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1601  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1602  %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)
1603  ret <vscale x 8 x float> %v
1604}
1605
1606define <vscale x 8 x float> @vfdiv_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {
1607; CHECK-LABEL: vfdiv_vf_nxv8f32_unmasked:
1608; CHECK:       # %bb.0:
1609; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1610; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1611; CHECK-NEXT:    ret
1612  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1613  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1614  %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)
1615  ret <vscale x 8 x float> %v
1616}
1617
1618declare <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)
1619
1620define <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) {
1621; CHECK-LABEL: vfdiv_vv_nxv16f32:
1622; CHECK:       # %bb.0:
1623; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1624; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1625; CHECK-NEXT:    ret
1626  %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)
1627  ret <vscale x 16 x float> %v
1628}
1629
1630define <vscale x 16 x float> @vfdiv_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, i32 zeroext %evl) {
1631; CHECK-LABEL: vfdiv_vv_nxv16f32_unmasked:
1632; CHECK:       # %bb.0:
1633; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1634; CHECK-NEXT:    vfdiv.vv v8, v8, v16
1635; CHECK-NEXT:    ret
1636  %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)
1637  ret <vscale x 16 x float> %v
1638}
1639
1640define <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) {
1641; CHECK-LABEL: vfdiv_vf_nxv16f32:
1642; CHECK:       # %bb.0:
1643; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1644; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1645; CHECK-NEXT:    ret
1646  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1647  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1648  %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)
1649  ret <vscale x 16 x float> %v
1650}
1651
1652define <vscale x 16 x float> @vfdiv_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {
1653; CHECK-LABEL: vfdiv_vf_nxv16f32_unmasked:
1654; CHECK:       # %bb.0:
1655; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1656; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1657; CHECK-NEXT:    ret
1658  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1659  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1660  %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)
1661  ret <vscale x 16 x float> %v
1662}
1663
1664declare <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)
1665
1666define <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) {
1667; CHECK-LABEL: vfdiv_vv_nxv1f64:
1668; CHECK:       # %bb.0:
1669; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1670; CHECK-NEXT:    vfdiv.vv v8, v8, v9, v0.t
1671; CHECK-NEXT:    ret
1672  %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)
1673  ret <vscale x 1 x double> %v
1674}
1675
1676define <vscale x 1 x double> @vfdiv_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, i32 zeroext %evl) {
1677; CHECK-LABEL: vfdiv_vv_nxv1f64_unmasked:
1678; CHECK:       # %bb.0:
1679; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1680; CHECK-NEXT:    vfdiv.vv v8, v8, v9
1681; CHECK-NEXT:    ret
1682  %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)
1683  ret <vscale x 1 x double> %v
1684}
1685
1686define <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) {
1687; CHECK-LABEL: vfdiv_vf_nxv1f64:
1688; CHECK:       # %bb.0:
1689; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1690; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1691; CHECK-NEXT:    ret
1692  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1693  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1694  %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)
1695  ret <vscale x 1 x double> %v
1696}
1697
1698define <vscale x 1 x double> @vfdiv_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {
1699; CHECK-LABEL: vfdiv_vf_nxv1f64_unmasked:
1700; CHECK:       # %bb.0:
1701; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1702; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1703; CHECK-NEXT:    ret
1704  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1705  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1706  %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)
1707  ret <vscale x 1 x double> %v
1708}
1709
1710declare <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)
1711
1712define <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) {
1713; CHECK-LABEL: vfdiv_vv_nxv2f64:
1714; CHECK:       # %bb.0:
1715; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1716; CHECK-NEXT:    vfdiv.vv v8, v8, v10, v0.t
1717; CHECK-NEXT:    ret
1718  %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)
1719  ret <vscale x 2 x double> %v
1720}
1721
1722define <vscale x 2 x double> @vfdiv_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, i32 zeroext %evl) {
1723; CHECK-LABEL: vfdiv_vv_nxv2f64_unmasked:
1724; CHECK:       # %bb.0:
1725; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1726; CHECK-NEXT:    vfdiv.vv v8, v8, v10
1727; CHECK-NEXT:    ret
1728  %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)
1729  ret <vscale x 2 x double> %v
1730}
1731
1732define <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) {
1733; CHECK-LABEL: vfdiv_vf_nxv2f64:
1734; CHECK:       # %bb.0:
1735; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1736; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1737; CHECK-NEXT:    ret
1738  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1739  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1740  %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)
1741  ret <vscale x 2 x double> %v
1742}
1743
1744define <vscale x 2 x double> @vfdiv_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {
1745; CHECK-LABEL: vfdiv_vf_nxv2f64_unmasked:
1746; CHECK:       # %bb.0:
1747; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1748; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1749; CHECK-NEXT:    ret
1750  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1751  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1752  %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)
1753  ret <vscale x 2 x double> %v
1754}
1755
1756declare <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)
1757
1758define <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) {
1759; CHECK-LABEL: vfdiv_vv_nxv4f64:
1760; CHECK:       # %bb.0:
1761; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1762; CHECK-NEXT:    vfdiv.vv v8, v8, v12, v0.t
1763; CHECK-NEXT:    ret
1764  %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)
1765  ret <vscale x 4 x double> %v
1766}
1767
1768define <vscale x 4 x double> @vfdiv_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, i32 zeroext %evl) {
1769; CHECK-LABEL: vfdiv_vv_nxv4f64_unmasked:
1770; CHECK:       # %bb.0:
1771; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1772; CHECK-NEXT:    vfdiv.vv v8, v8, v12
1773; CHECK-NEXT:    ret
1774  %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)
1775  ret <vscale x 4 x double> %v
1776}
1777
1778define <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) {
1779; CHECK-LABEL: vfdiv_vf_nxv4f64:
1780; CHECK:       # %bb.0:
1781; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1782; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1783; CHECK-NEXT:    ret
1784  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1785  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1786  %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)
1787  ret <vscale x 4 x double> %v
1788}
1789
1790define <vscale x 4 x double> @vfdiv_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {
1791; CHECK-LABEL: vfdiv_vf_nxv4f64_unmasked:
1792; CHECK:       # %bb.0:
1793; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1794; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1795; CHECK-NEXT:    ret
1796  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1797  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1798  %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)
1799  ret <vscale x 4 x double> %v
1800}
1801
1802declare <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)
1803
1804define <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) {
1805; CHECK-LABEL: vfdiv_vv_nxv7f64:
1806; CHECK:       # %bb.0:
1807; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1808; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1809; CHECK-NEXT:    ret
1810  %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)
1811  ret <vscale x 7 x double> %v
1812}
1813
1814declare <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)
1815
1816define <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) {
1817; CHECK-LABEL: vfdiv_vv_nxv8f64:
1818; CHECK:       # %bb.0:
1819; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1820; CHECK-NEXT:    vfdiv.vv v8, v8, v16, v0.t
1821; CHECK-NEXT:    ret
1822  %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)
1823  ret <vscale x 8 x double> %v
1824}
1825
1826define <vscale x 8 x double> @vfdiv_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, i32 zeroext %evl) {
1827; CHECK-LABEL: vfdiv_vv_nxv8f64_unmasked:
1828; CHECK:       # %bb.0:
1829; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1830; CHECK-NEXT:    vfdiv.vv v8, v8, v16
1831; CHECK-NEXT:    ret
1832  %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)
1833  ret <vscale x 8 x double> %v
1834}
1835
1836define <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) {
1837; CHECK-LABEL: vfdiv_vf_nxv8f64:
1838; CHECK:       # %bb.0:
1839; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1840; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t
1841; CHECK-NEXT:    ret
1842  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1843  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1844  %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)
1845  ret <vscale x 8 x double> %v
1846}
1847
1848define <vscale x 8 x double> @vfdiv_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {
1849; CHECK-LABEL: vfdiv_vf_nxv8f64_unmasked:
1850; CHECK:       # %bb.0:
1851; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1852; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
1853; CHECK-NEXT:    ret
1854  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1855  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1856  %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)
1857  ret <vscale x 8 x double> %v
1858}
1859