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