xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfdiv-sdnode.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v -target-abi=ilp32d \
7; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v -target-abi=lp64d \
9; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
10
11define <vscale x 1 x bfloat> @vfdiv_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb) {
12; CHECK-LABEL: vfdiv_vv_nxv1bf16:
13; CHECK:       # %bb.0:
14; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
15; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
16; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
17; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
18; CHECK-NEXT:    vfdiv.vv v9, v9, v10
19; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
20; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
21; CHECK-NEXT:    ret
22  %vc = fdiv <vscale x 1 x bfloat> %va, %vb
23  ret <vscale x 1 x bfloat> %vc
24}
25
26define <vscale x 1 x bfloat> @vfdiv_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b) {
27; CHECK-LABEL: vfdiv_vf_nxv1bf16:
28; CHECK:       # %bb.0:
29; CHECK-NEXT:    fmv.x.h a0, fa0
30; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
31; CHECK-NEXT:    vmv.v.x v9, a0
32; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
33; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9
34; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
35; CHECK-NEXT:    vfdiv.vv v9, v10, v8
36; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
37; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
38; CHECK-NEXT:    ret
39  %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
40  %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
41  %vc = fdiv <vscale x 1 x bfloat> %va, %splat
42  ret <vscale x 1 x bfloat> %vc
43}
44
45define <vscale x 2 x bfloat> @vfdiv_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb) {
46; CHECK-LABEL: vfdiv_vv_nxv2bf16:
47; CHECK:       # %bb.0:
48; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
49; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
50; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
51; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
52; CHECK-NEXT:    vfdiv.vv v9, v9, v10
53; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
54; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
55; CHECK-NEXT:    ret
56  %vc = fdiv <vscale x 2 x bfloat> %va, %vb
57  ret <vscale x 2 x bfloat> %vc
58}
59
60define <vscale x 2 x bfloat> @vfdiv_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b) {
61; CHECK-LABEL: vfdiv_vf_nxv2bf16:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    fmv.x.h a0, fa0
64; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
65; CHECK-NEXT:    vmv.v.x v9, a0
66; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
67; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9
68; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
69; CHECK-NEXT:    vfdiv.vv v9, v10, v8
70; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
71; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9
72; CHECK-NEXT:    ret
73  %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
74  %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
75  %vc = fdiv <vscale x 2 x bfloat> %va, %splat
76  ret <vscale x 2 x bfloat> %vc
77}
78
79define <vscale x 4 x bfloat> @vfdiv_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb) {
80; CHECK-LABEL: vfdiv_vv_nxv4bf16:
81; CHECK:       # %bb.0:
82; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
83; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
84; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
85; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
86; CHECK-NEXT:    vfdiv.vv v10, v12, v10
87; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
88; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
89; CHECK-NEXT:    ret
90  %vc = fdiv <vscale x 4 x bfloat> %va, %vb
91  ret <vscale x 4 x bfloat> %vc
92}
93
94define <vscale x 4 x bfloat> @vfdiv_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b) {
95; CHECK-LABEL: vfdiv_vf_nxv4bf16:
96; CHECK:       # %bb.0:
97; CHECK-NEXT:    fmv.x.h a0, fa0
98; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
99; CHECK-NEXT:    vmv.v.x v9, a0
100; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
101; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
102; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
103; CHECK-NEXT:    vfdiv.vv v10, v10, v12
104; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
105; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10
106; CHECK-NEXT:    ret
107  %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
108  %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
109  %vc = fdiv <vscale x 4 x bfloat> %va, %splat
110  ret <vscale x 4 x bfloat> %vc
111}
112
113define <vscale x 8 x bfloat> @vfdiv_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
114; CHECK-LABEL: vfdiv_vv_nxv8bf16:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
117; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
118; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
119; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
120; CHECK-NEXT:    vfdiv.vv v12, v16, v12
121; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
122; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
123; CHECK-NEXT:    ret
124  %vc = fdiv <vscale x 8 x bfloat> %va, %vb
125  ret <vscale x 8 x bfloat> %vc
126}
127
128define <vscale x 8 x bfloat> @vfdiv_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
129; CHECK-LABEL: vfdiv_vf_nxv8bf16:
130; CHECK:       # %bb.0:
131; CHECK-NEXT:    fmv.x.h a0, fa0
132; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
133; CHECK-NEXT:    vmv.v.x v10, a0
134; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
135; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
136; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
137; CHECK-NEXT:    vfdiv.vv v12, v12, v16
138; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
139; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
140; CHECK-NEXT:    ret
141  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
142  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
143  %vc = fdiv <vscale x 8 x bfloat> %va, %splat
144  ret <vscale x 8 x bfloat> %vc
145}
146
147define <vscale x 8 x bfloat> @vfdiv_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
148; CHECK-LABEL: vfdiv_fv_nxv8bf16:
149; CHECK:       # %bb.0:
150; CHECK-NEXT:    fmv.x.h a0, fa0
151; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
152; CHECK-NEXT:    vmv.v.x v10, a0
153; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
154; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
155; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
156; CHECK-NEXT:    vfdiv.vv v12, v16, v12
157; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
158; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
159; CHECK-NEXT:    ret
160  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
161  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
162  %vc = fdiv <vscale x 8 x bfloat> %splat, %va
163  ret <vscale x 8 x bfloat> %vc
164}
165
166define <vscale x 16 x bfloat> @vfdiv_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb) {
167; CHECK-LABEL: vfdiv_vv_nxv16bf16:
168; CHECK:       # %bb.0:
169; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
170; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
171; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
172; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
173; CHECK-NEXT:    vfdiv.vv v16, v24, v16
174; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
175; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
176; CHECK-NEXT:    ret
177  %vc = fdiv <vscale x 16 x bfloat> %va, %vb
178  ret <vscale x 16 x bfloat> %vc
179}
180
181define <vscale x 16 x bfloat> @vfdiv_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b) {
182; CHECK-LABEL: vfdiv_vf_nxv16bf16:
183; CHECK:       # %bb.0:
184; CHECK-NEXT:    fmv.x.h a0, fa0
185; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
186; CHECK-NEXT:    vmv.v.x v12, a0
187; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
188; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12
189; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
190; CHECK-NEXT:    vfdiv.vv v16, v16, v24
191; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
192; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16
193; CHECK-NEXT:    ret
194  %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
195  %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
196  %vc = fdiv <vscale x 16 x bfloat> %va, %splat
197  ret <vscale x 16 x bfloat> %vc
198}
199
200define <vscale x 32 x bfloat> @vfdiv_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb) {
201; CHECK-LABEL: vfdiv_vv_nxv32bf16:
202; CHECK:       # %bb.0:
203; CHECK-NEXT:    addi sp, sp, -16
204; CHECK-NEXT:    .cfi_def_cfa_offset 16
205; CHECK-NEXT:    csrr a0, vlenb
206; CHECK-NEXT:    slli a0, a0, 3
207; CHECK-NEXT:    sub sp, sp, a0
208; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
209; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
210; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16
211; CHECK-NEXT:    addi a0, sp, 16
212; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
213; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8
214; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20
215; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
216; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
217; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
218; CHECK-NEXT:    vfdiv.vv v0, v0, v8
219; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
220; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0
221; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
222; CHECK-NEXT:    vfdiv.vv v16, v16, v24
223; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
224; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
225; CHECK-NEXT:    csrr a0, vlenb
226; CHECK-NEXT:    slli a0, a0, 3
227; CHECK-NEXT:    add sp, sp, a0
228; CHECK-NEXT:    .cfi_def_cfa sp, 16
229; CHECK-NEXT:    addi sp, sp, 16
230; CHECK-NEXT:    .cfi_def_cfa_offset 0
231; CHECK-NEXT:    ret
232  %vc = fdiv <vscale x 32 x bfloat> %va, %vb
233  ret <vscale x 32 x bfloat> %vc
234}
235
236define <vscale x 32 x bfloat> @vfdiv_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b) {
237; CHECK-LABEL: vfdiv_vf_nxv32bf16:
238; CHECK:       # %bb.0:
239; CHECK-NEXT:    addi sp, sp, -16
240; CHECK-NEXT:    .cfi_def_cfa_offset 16
241; CHECK-NEXT:    csrr a0, vlenb
242; CHECK-NEXT:    slli a0, a0, 3
243; CHECK-NEXT:    sub sp, sp, a0
244; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
245; CHECK-NEXT:    fmv.x.h a0, fa0
246; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
247; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
248; CHECK-NEXT:    addi a1, sp, 16
249; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
250; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12
251; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
252; CHECK-NEXT:    vmv.v.x v8, a0
253; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
254; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8
255; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
256; CHECK-NEXT:    addi a0, sp, 16
257; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
258; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
259; CHECK-NEXT:    vfdiv.vv v0, v8, v0
260; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
261; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0
262; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
263; CHECK-NEXT:    vfdiv.vv v16, v24, v16
264; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
265; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16
266; CHECK-NEXT:    csrr a0, vlenb
267; CHECK-NEXT:    slli a0, a0, 3
268; CHECK-NEXT:    add sp, sp, a0
269; CHECK-NEXT:    .cfi_def_cfa sp, 16
270; CHECK-NEXT:    addi sp, sp, 16
271; CHECK-NEXT:    .cfi_def_cfa_offset 0
272; CHECK-NEXT:    ret
273  %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
274  %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
275  %vc = fdiv <vscale x 32 x bfloat> %va, %splat
276  ret <vscale x 32 x bfloat> %vc
277}
278
279define <vscale x 1 x half> @vfdiv_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) {
280; ZVFH-LABEL: vfdiv_vv_nxv1f16:
281; ZVFH:       # %bb.0:
282; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
283; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
284; ZVFH-NEXT:    ret
285;
286; ZVFHMIN-LABEL: vfdiv_vv_nxv1f16:
287; ZVFHMIN:       # %bb.0:
288; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
289; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
290; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
291; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
292; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
293; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
294; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
295; ZVFHMIN-NEXT:    ret
296  %vc = fdiv <vscale x 1 x half> %va, %vb
297  ret <vscale x 1 x half> %vc
298}
299
300define <vscale x 1 x half> @vfdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b) {
301; ZVFH-LABEL: vfdiv_vf_nxv1f16:
302; ZVFH:       # %bb.0:
303; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
304; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
305; ZVFH-NEXT:    ret
306;
307; ZVFHMIN-LABEL: vfdiv_vf_nxv1f16:
308; ZVFHMIN:       # %bb.0:
309; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
310; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
311; ZVFHMIN-NEXT:    vmv.v.x v9, a0
312; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
313; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
314; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
315; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8
316; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
317; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
318; ZVFHMIN-NEXT:    ret
319  %head = insertelement <vscale x 1 x half> poison, half %b, i32 0
320  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
321  %vc = fdiv <vscale x 1 x half> %va, %splat
322  ret <vscale x 1 x half> %vc
323}
324
325define <vscale x 2 x half> @vfdiv_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) {
326; ZVFH-LABEL: vfdiv_vv_nxv2f16:
327; ZVFH:       # %bb.0:
328; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
329; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
330; ZVFH-NEXT:    ret
331;
332; ZVFHMIN-LABEL: vfdiv_vv_nxv2f16:
333; ZVFHMIN:       # %bb.0:
334; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
335; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
336; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
337; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
338; ZVFHMIN-NEXT:    vfdiv.vv v9, v9, v10
339; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
340; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
341; ZVFHMIN-NEXT:    ret
342  %vc = fdiv <vscale x 2 x half> %va, %vb
343  ret <vscale x 2 x half> %vc
344}
345
346define <vscale x 2 x half> @vfdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b) {
347; ZVFH-LABEL: vfdiv_vf_nxv2f16:
348; ZVFH:       # %bb.0:
349; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
350; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
351; ZVFH-NEXT:    ret
352;
353; ZVFHMIN-LABEL: vfdiv_vf_nxv2f16:
354; ZVFHMIN:       # %bb.0:
355; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
356; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
357; ZVFHMIN-NEXT:    vmv.v.x v9, a0
358; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
359; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
360; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
361; ZVFHMIN-NEXT:    vfdiv.vv v9, v10, v8
362; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
363; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
364; ZVFHMIN-NEXT:    ret
365  %head = insertelement <vscale x 2 x half> poison, half %b, i32 0
366  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
367  %vc = fdiv <vscale x 2 x half> %va, %splat
368  ret <vscale x 2 x half> %vc
369}
370
371define <vscale x 4 x half> @vfdiv_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) {
372; ZVFH-LABEL: vfdiv_vv_nxv4f16:
373; ZVFH:       # %bb.0:
374; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
375; ZVFH-NEXT:    vfdiv.vv v8, v8, v9
376; ZVFH-NEXT:    ret
377;
378; ZVFHMIN-LABEL: vfdiv_vv_nxv4f16:
379; ZVFHMIN:       # %bb.0:
380; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
381; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
382; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
383; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
384; ZVFHMIN-NEXT:    vfdiv.vv v10, v12, v10
385; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
386; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
387; ZVFHMIN-NEXT:    ret
388  %vc = fdiv <vscale x 4 x half> %va, %vb
389  ret <vscale x 4 x half> %vc
390}
391
392define <vscale x 4 x half> @vfdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b) {
393; ZVFH-LABEL: vfdiv_vf_nxv4f16:
394; ZVFH:       # %bb.0:
395; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
396; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
397; ZVFH-NEXT:    ret
398;
399; ZVFHMIN-LABEL: vfdiv_vf_nxv4f16:
400; ZVFHMIN:       # %bb.0:
401; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
402; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
403; ZVFHMIN-NEXT:    vmv.v.x v9, a0
404; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
405; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
406; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
407; ZVFHMIN-NEXT:    vfdiv.vv v10, v10, v12
408; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
409; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
410; ZVFHMIN-NEXT:    ret
411  %head = insertelement <vscale x 4 x half> poison, half %b, i32 0
412  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
413  %vc = fdiv <vscale x 4 x half> %va, %splat
414  ret <vscale x 4 x half> %vc
415}
416
417define <vscale x 8 x half> @vfdiv_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
418; ZVFH-LABEL: vfdiv_vv_nxv8f16:
419; ZVFH:       # %bb.0:
420; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
421; ZVFH-NEXT:    vfdiv.vv v8, v8, v10
422; ZVFH-NEXT:    ret
423;
424; ZVFHMIN-LABEL: vfdiv_vv_nxv8f16:
425; ZVFHMIN:       # %bb.0:
426; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
427; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
428; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
429; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
430; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12
431; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
432; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
433; ZVFHMIN-NEXT:    ret
434  %vc = fdiv <vscale x 8 x half> %va, %vb
435  ret <vscale x 8 x half> %vc
436}
437
438define <vscale x 8 x half> @vfdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
439; ZVFH-LABEL: vfdiv_vf_nxv8f16:
440; ZVFH:       # %bb.0:
441; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
442; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
443; ZVFH-NEXT:    ret
444;
445; ZVFHMIN-LABEL: vfdiv_vf_nxv8f16:
446; ZVFHMIN:       # %bb.0:
447; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
448; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
449; ZVFHMIN-NEXT:    vmv.v.x v10, a0
450; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
451; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
452; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
453; ZVFHMIN-NEXT:    vfdiv.vv v12, v12, v16
454; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
455; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
456; ZVFHMIN-NEXT:    ret
457  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
458  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
459  %vc = fdiv <vscale x 8 x half> %va, %splat
460  ret <vscale x 8 x half> %vc
461}
462
463define <vscale x 8 x half> @vfdiv_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
464; ZVFH-LABEL: vfdiv_fv_nxv8f16:
465; ZVFH:       # %bb.0:
466; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
467; ZVFH-NEXT:    vfrdiv.vf v8, v8, fa0
468; ZVFH-NEXT:    ret
469;
470; ZVFHMIN-LABEL: vfdiv_fv_nxv8f16:
471; ZVFHMIN:       # %bb.0:
472; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
473; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
474; ZVFHMIN-NEXT:    vmv.v.x v10, a0
475; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
476; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
477; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
478; ZVFHMIN-NEXT:    vfdiv.vv v12, v16, v12
479; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
480; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
481; ZVFHMIN-NEXT:    ret
482  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
483  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
484  %vc = fdiv <vscale x 8 x half> %splat, %va
485  ret <vscale x 8 x half> %vc
486}
487
488define <vscale x 16 x half> @vfdiv_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) {
489; ZVFH-LABEL: vfdiv_vv_nxv16f16:
490; ZVFH:       # %bb.0:
491; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
492; ZVFH-NEXT:    vfdiv.vv v8, v8, v12
493; ZVFH-NEXT:    ret
494;
495; ZVFHMIN-LABEL: vfdiv_vv_nxv16f16:
496; ZVFHMIN:       # %bb.0:
497; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
498; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
499; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
500; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
501; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
502; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
503; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
504; ZVFHMIN-NEXT:    ret
505  %vc = fdiv <vscale x 16 x half> %va, %vb
506  ret <vscale x 16 x half> %vc
507}
508
509define <vscale x 16 x half> @vfdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b) {
510; ZVFH-LABEL: vfdiv_vf_nxv16f16:
511; ZVFH:       # %bb.0:
512; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
513; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
514; ZVFH-NEXT:    ret
515;
516; ZVFHMIN-LABEL: vfdiv_vf_nxv16f16:
517; ZVFHMIN:       # %bb.0:
518; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
519; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
520; ZVFHMIN-NEXT:    vmv.v.x v12, a0
521; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
522; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
523; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
524; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24
525; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
526; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
527; ZVFHMIN-NEXT:    ret
528  %head = insertelement <vscale x 16 x half> poison, half %b, i32 0
529  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
530  %vc = fdiv <vscale x 16 x half> %va, %splat
531  ret <vscale x 16 x half> %vc
532}
533
534define <vscale x 32 x half> @vfdiv_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) {
535; ZVFH-LABEL: vfdiv_vv_nxv32f16:
536; ZVFH:       # %bb.0:
537; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
538; ZVFH-NEXT:    vfdiv.vv v8, v8, v16
539; ZVFH-NEXT:    ret
540;
541; ZVFHMIN-LABEL: vfdiv_vv_nxv32f16:
542; ZVFHMIN:       # %bb.0:
543; ZVFHMIN-NEXT:    addi sp, sp, -16
544; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
545; ZVFHMIN-NEXT:    csrr a0, vlenb
546; ZVFHMIN-NEXT:    slli a0, a0, 3
547; ZVFHMIN-NEXT:    sub sp, sp, a0
548; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
549; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
550; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
551; ZVFHMIN-NEXT:    addi a0, sp, 16
552; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
553; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
554; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20
555; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
556; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
557; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
558; ZVFHMIN-NEXT:    vfdiv.vv v0, v0, v8
559; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
560; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
561; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
562; ZVFHMIN-NEXT:    vfdiv.vv v16, v16, v24
563; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
564; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
565; ZVFHMIN-NEXT:    csrr a0, vlenb
566; ZVFHMIN-NEXT:    slli a0, a0, 3
567; ZVFHMIN-NEXT:    add sp, sp, a0
568; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
569; ZVFHMIN-NEXT:    addi sp, sp, 16
570; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
571; ZVFHMIN-NEXT:    ret
572  %vc = fdiv <vscale x 32 x half> %va, %vb
573  ret <vscale x 32 x half> %vc
574}
575
576define <vscale x 32 x half> @vfdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b) {
577; ZVFH-LABEL: vfdiv_vf_nxv32f16:
578; ZVFH:       # %bb.0:
579; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
580; ZVFH-NEXT:    vfdiv.vf v8, v8, fa0
581; ZVFH-NEXT:    ret
582;
583; ZVFHMIN-LABEL: vfdiv_vf_nxv32f16:
584; ZVFHMIN:       # %bb.0:
585; ZVFHMIN-NEXT:    addi sp, sp, -16
586; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
587; ZVFHMIN-NEXT:    csrr a0, vlenb
588; ZVFHMIN-NEXT:    slli a0, a0, 3
589; ZVFHMIN-NEXT:    sub sp, sp, a0
590; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
591; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
592; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
593; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
594; ZVFHMIN-NEXT:    addi a1, sp, 16
595; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
596; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
597; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
598; ZVFHMIN-NEXT:    vmv.v.x v8, a0
599; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
600; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
601; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
602; ZVFHMIN-NEXT:    addi a0, sp, 16
603; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
604; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
605; ZVFHMIN-NEXT:    vfdiv.vv v0, v8, v0
606; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
607; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
608; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
609; ZVFHMIN-NEXT:    vfdiv.vv v16, v24, v16
610; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
611; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
612; ZVFHMIN-NEXT:    csrr a0, vlenb
613; ZVFHMIN-NEXT:    slli a0, a0, 3
614; ZVFHMIN-NEXT:    add sp, sp, a0
615; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
616; ZVFHMIN-NEXT:    addi sp, sp, 16
617; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
618; ZVFHMIN-NEXT:    ret
619  %head = insertelement <vscale x 32 x half> poison, half %b, i32 0
620  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
621  %vc = fdiv <vscale x 32 x half> %va, %splat
622  ret <vscale x 32 x half> %vc
623}
624
625define <vscale x 1 x float> @vfdiv_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) {
626; CHECK-LABEL: vfdiv_vv_nxv1f32:
627; CHECK:       # %bb.0:
628; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
629; CHECK-NEXT:    vfdiv.vv v8, v8, v9
630; CHECK-NEXT:    ret
631  %vc = fdiv <vscale x 1 x float> %va, %vb
632  ret <vscale x 1 x float> %vc
633}
634
635define <vscale x 1 x float> @vfdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b) {
636; CHECK-LABEL: vfdiv_vf_nxv1f32:
637; CHECK:       # %bb.0:
638; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
639; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
640; CHECK-NEXT:    ret
641  %head = insertelement <vscale x 1 x float> poison, float %b, i32 0
642  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
643  %vc = fdiv <vscale x 1 x float> %va, %splat
644  ret <vscale x 1 x float> %vc
645}
646
647define <vscale x 2 x float> @vfdiv_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) {
648; CHECK-LABEL: vfdiv_vv_nxv2f32:
649; CHECK:       # %bb.0:
650; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
651; CHECK-NEXT:    vfdiv.vv v8, v8, v9
652; CHECK-NEXT:    ret
653  %vc = fdiv <vscale x 2 x float> %va, %vb
654  ret <vscale x 2 x float> %vc
655}
656
657define <vscale x 2 x float> @vfdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b) {
658; CHECK-LABEL: vfdiv_vf_nxv2f32:
659; CHECK:       # %bb.0:
660; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
661; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
662; CHECK-NEXT:    ret
663  %head = insertelement <vscale x 2 x float> poison, float %b, i32 0
664  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
665  %vc = fdiv <vscale x 2 x float> %va, %splat
666  ret <vscale x 2 x float> %vc
667}
668
669define <vscale x 4 x float> @vfdiv_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) {
670; CHECK-LABEL: vfdiv_vv_nxv4f32:
671; CHECK:       # %bb.0:
672; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
673; CHECK-NEXT:    vfdiv.vv v8, v8, v10
674; CHECK-NEXT:    ret
675  %vc = fdiv <vscale x 4 x float> %va, %vb
676  ret <vscale x 4 x float> %vc
677}
678
679define <vscale x 4 x float> @vfdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b) {
680; CHECK-LABEL: vfdiv_vf_nxv4f32:
681; CHECK:       # %bb.0:
682; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
683; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
684; CHECK-NEXT:    ret
685  %head = insertelement <vscale x 4 x float> poison, float %b, i32 0
686  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
687  %vc = fdiv <vscale x 4 x float> %va, %splat
688  ret <vscale x 4 x float> %vc
689}
690
691define <vscale x 8 x float> @vfdiv_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
692; CHECK-LABEL: vfdiv_vv_nxv8f32:
693; CHECK:       # %bb.0:
694; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
695; CHECK-NEXT:    vfdiv.vv v8, v8, v12
696; CHECK-NEXT:    ret
697  %vc = fdiv <vscale x 8 x float> %va, %vb
698  ret <vscale x 8 x float> %vc
699}
700
701define <vscale x 8 x float> @vfdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
702; CHECK-LABEL: vfdiv_vf_nxv8f32:
703; CHECK:       # %bb.0:
704; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
705; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
706; CHECK-NEXT:    ret
707  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
708  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
709  %vc = fdiv <vscale x 8 x float> %va, %splat
710  ret <vscale x 8 x float> %vc
711}
712
713define <vscale x 8 x float> @vfdiv_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
714; CHECK-LABEL: vfdiv_fv_nxv8f32:
715; CHECK:       # %bb.0:
716; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
717; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0
718; CHECK-NEXT:    ret
719  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
720  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
721  %vc = fdiv <vscale x 8 x float> %splat, %va
722  ret <vscale x 8 x float> %vc
723}
724
725define <vscale x 16 x float> @vfdiv_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) {
726; CHECK-LABEL: vfdiv_vv_nxv16f32:
727; CHECK:       # %bb.0:
728; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
729; CHECK-NEXT:    vfdiv.vv v8, v8, v16
730; CHECK-NEXT:    ret
731  %vc = fdiv <vscale x 16 x float> %va, %vb
732  ret <vscale x 16 x float> %vc
733}
734
735define <vscale x 16 x float> @vfdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b) {
736; CHECK-LABEL: vfdiv_vf_nxv16f32:
737; CHECK:       # %bb.0:
738; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
739; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
740; CHECK-NEXT:    ret
741  %head = insertelement <vscale x 16 x float> poison, float %b, i32 0
742  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
743  %vc = fdiv <vscale x 16 x float> %va, %splat
744  ret <vscale x 16 x float> %vc
745}
746
747define <vscale x 1 x double> @vfdiv_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) {
748; CHECK-LABEL: vfdiv_vv_nxv1f64:
749; CHECK:       # %bb.0:
750; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
751; CHECK-NEXT:    vfdiv.vv v8, v8, v9
752; CHECK-NEXT:    ret
753  %vc = fdiv <vscale x 1 x double> %va, %vb
754  ret <vscale x 1 x double> %vc
755}
756
757define <vscale x 1 x double> @vfdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b) {
758; CHECK-LABEL: vfdiv_vf_nxv1f64:
759; CHECK:       # %bb.0:
760; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
761; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
762; CHECK-NEXT:    ret
763  %head = insertelement <vscale x 1 x double> poison, double %b, i32 0
764  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
765  %vc = fdiv <vscale x 1 x double> %va, %splat
766  ret <vscale x 1 x double> %vc
767}
768
769define <vscale x 2 x double> @vfdiv_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) {
770; CHECK-LABEL: vfdiv_vv_nxv2f64:
771; CHECK:       # %bb.0:
772; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
773; CHECK-NEXT:    vfdiv.vv v8, v8, v10
774; CHECK-NEXT:    ret
775  %vc = fdiv <vscale x 2 x double> %va, %vb
776  ret <vscale x 2 x double> %vc
777}
778
779define <vscale x 2 x double> @vfdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b) {
780; CHECK-LABEL: vfdiv_vf_nxv2f64:
781; CHECK:       # %bb.0:
782; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
783; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
784; CHECK-NEXT:    ret
785  %head = insertelement <vscale x 2 x double> poison, double %b, i32 0
786  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
787  %vc = fdiv <vscale x 2 x double> %va, %splat
788  ret <vscale x 2 x double> %vc
789}
790
791define <vscale x 4 x double> @vfdiv_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) {
792; CHECK-LABEL: vfdiv_vv_nxv4f64:
793; CHECK:       # %bb.0:
794; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
795; CHECK-NEXT:    vfdiv.vv v8, v8, v12
796; CHECK-NEXT:    ret
797  %vc = fdiv <vscale x 4 x double> %va, %vb
798  ret <vscale x 4 x double> %vc
799}
800
801define <vscale x 4 x double> @vfdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b) {
802; CHECK-LABEL: vfdiv_vf_nxv4f64:
803; CHECK:       # %bb.0:
804; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
805; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
806; CHECK-NEXT:    ret
807  %head = insertelement <vscale x 4 x double> poison, double %b, i32 0
808  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
809  %vc = fdiv <vscale x 4 x double> %va, %splat
810  ret <vscale x 4 x double> %vc
811}
812
813define <vscale x 8 x double> @vfdiv_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
814; CHECK-LABEL: vfdiv_vv_nxv8f64:
815; CHECK:       # %bb.0:
816; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
817; CHECK-NEXT:    vfdiv.vv v8, v8, v16
818; CHECK-NEXT:    ret
819  %vc = fdiv <vscale x 8 x double> %va, %vb
820  ret <vscale x 8 x double> %vc
821}
822
823define <vscale x 8 x double> @vfdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
824; CHECK-LABEL: vfdiv_vf_nxv8f64:
825; CHECK:       # %bb.0:
826; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
827; CHECK-NEXT:    vfdiv.vf v8, v8, fa0
828; CHECK-NEXT:    ret
829  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
830  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
831  %vc = fdiv <vscale x 8 x double> %va, %splat
832  ret <vscale x 8 x double> %vc
833}
834
835define <vscale x 8 x double> @vfdiv_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
836; CHECK-LABEL: vfdiv_fv_nxv8f64:
837; CHECK:       # %bb.0:
838; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
839; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0
840; CHECK-NEXT:    ret
841  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
842  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
843  %vc = fdiv <vscale x 8 x double> %splat, %va
844  ret <vscale x 8 x double> %vc
845}
846
847define <vscale x 8 x float> @vfdiv_vv_mask_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %mask) {
848; CHECK-LABEL: vfdiv_vv_mask_nxv8f32:
849; CHECK:       # %bb.0:
850; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
851; CHECK-NEXT:    vmv.v.i v16, 0
852; CHECK-NEXT:    vmerge.vvm v12, v16, v12, v0
853; CHECK-NEXT:    vfdiv.vv v8, v8, v12
854; CHECK-NEXT:    ret
855  %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %vb, <vscale x 8 x float> splat (float 0.0)
856  %vc = fdiv <vscale x 8 x float> %va, %vs
857  ret <vscale x 8 x float> %vc
858}
859
860define <vscale x 8 x float> @vfdiv_vf_mask_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %mask) {
861; CHECK-LABEL: vfdiv_vf_mask_nxv8f32:
862; CHECK:       # %bb.0:
863; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
864; CHECK-NEXT:    vmv.v.i v12, 0
865; CHECK-NEXT:    vfmerge.vfm v12, v12, fa0, v0
866; CHECK-NEXT:    vfdiv.vv v8, v8, v12
867; CHECK-NEXT:    ret
868  %head1 = insertelement <vscale x 8 x float> poison, float %b, i32 0
869  %splat1 = shufflevector <vscale x 8 x float> %head1, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
870  %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %splat1, <vscale x 8 x float> splat (float 0.0)
871  %vc = fdiv <vscale x 8 x float> %va, %vs
872  ret <vscale x 8 x float> %vc
873}
874